Python でログファイルを解析する

Vaibhav Vaibhav 2022年1月22日
Python でログファイルを解析する

ログファイルには、ソフトウェアシステムまたはアプリケーションの実行中に発生したイベントに関する情報が含まれています。これらのイベントには、エラー、ユーザーからの要求、バグなどが含まれます。開発者は、システムの潜在的な問題を把握し、より新しくより良いソリューションを実装し、全体的な設計を改善するために、使用に関するこれらの詳細をさらにスキャンできます。ログファイルは、システムのセキュリティについて多くのことを明らかにすることができ、開発者がシステムまたはアプリケーションを改善するのに役立ちます。

通常、ログファイル内のエントリには形式またはパターンがあります。たとえば、ソフトウェアシステムは、タイムスタンプ、ログメッセージ、およびメッセージタイプの 3つを出力する形式を持つことができます。これらのフォーマットは、読みやすさと管理の目的で、適切にフォーマットされたテキストで構造化された任意の量の情報を持つことができます。

これらのログファイルの分析を実行するために、任意のプログラミング言語を検討できます。ただし、この記事では、Python を使用してこのようなログファイルを解析する方法について具体的に説明します。それにもかかわらず、プロセスの背後にある理論は、すべてのプログラミング言語で同じままです。Python コードを他のプログラミング言語に簡単に翻訳して、必要なタスクを実行できます。

Python でログファイルを解析する

上記のように、ログファイル内のエントリには特定の形式があります。これは、この形式を利用して、ログファイル内に書き込まれた情報を 1 行ずつ解析できることを意味します。例を使ってこれを理解してみましょう。

Web アプリケーションに使用されている次のログ形式について考えてみます。これには、日付と時刻またはタイムスタンプ(yyyy-mm-dd hh:mm:ss 形式)、アクセスされた URL、ログメッセージのタイプ(成功、エラーなど)の 4つの重要な詳細があります。、およびログメッセージ。

DateTime | URL | Log - Type | Log

ここで、上記の形式のログを含むファイル log.txt について考えてみます。log.txt ファイルは次のようになります。

2021-10-26 10:26:44 | https://website.com/home | SUCCESS | Message
2021-10-26 10:26:54 | https://website.com/about | SUCCESS | Message
2021-10-26 10:27:01 | https://website.com/page | ERROR | Message
2021-10-26 10:27:03 | https://website.com/user/me | SUCCESS | Message
2021-10-26 10:27:04 | https://website.com/settings/ | ERROR | Message
...

次の Python コードは、このログファイルを読み取り、辞書内に情報を保存します。変数 order は、すべての辞書キーを単一のログと同じ順序で格納します。ログフォーマルには|があるので、これを使用してログ文字列を要素に分割し、さらにそれらを好きなように保存できます。

import json

file_name = "log.txt"
file = open(file_name, "r")
data = []
order = ["date", "url", "type", "message"]

for line in file.readlines():
    details = line.split("|")
    details = [x.strip() for x in details]
    structure = {key: value for key, value in zip(order, details)}
    data.append(structure)

for entry in data:
    print(json.dumps(entry, indent=4))

出力

{
    "date": "2021-10-20 10:26:44",
    "url": "https://website.com/home",
    "type": "SUCCESS",
    "message": "Message",
}
{
    "date": "2021-10-20 10:26:54",
    "url": "https://website.com/about",
    "type": "SUCCESS",
    "message": "Message",
}
{
    "date": "2021-10-20 10:27:01",
    "url": "https://website.com/page",
    "type": "ERROR",
    "message": "Message",
}
{
    "date": "2021-10-20 10:27:03",
    "url": "https://website.com/user/me",
    "type": "SUCCESS",
    "message": "Message",
}
{
    "date": "2021-10-20 10:27:04",
    "url": "https://website.com/settings/",
    "type": "ERROR",
    "message": "Message",
}

情報が読み取られると、それ以上の操作を実行できます。将来の分析のためにデータベース内に保存し、NumPyMatplotlib をインポートし、いくつかのグラフをプロットして、情報をグラフィカルに理解することができます。ERROR タグを使用してログをフィルタリングし、ユーザーが直面するエラーをスキャンするか、スパムや不正アクセスなどの疑わしいアクティビティやセキュリティ違反に注意してください。機会は無限であり、それは開発者やデータサイエンティストが取得したデータから何を学ぼうとしているのかによって異なります。

著者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.