Pythonでテキストファイルのリアルタイムモニタリングとログ分析をする方法

この記事では、Pythonを使ったテキストファイルのリアルタイムモニタリングとログ分析について詳しく解説します。具体的なコード例とその解説、応用例を含めています。

目次

はじめに

システム管理やデータ解析でよく必要となるのが、テキストファイルやログファイルのモニタリングと分析です。Pythonを使えば、このような作業を効率よく、しかも柔軟に行うことができます。

基本的なリアルタイムモニタリングのコード

# テキストファイルをリアルタイムでモニタリングする基本的なPythonコード
import time

def tail_f(filename):
    with open(filename, 'r') as f:
        f.seek(0, 2)  # ファイルの末尾に移動
        while True:
            line = f.readline()  # 1行読み込む
            if not line:  # 行がない場合、待機
                time.sleep(1)
                continue
            print(line.strip())  # 行があれば出力

if __name__ == '__main__':
    tail_f('example.log')

このコードの解説

このコードでは、`tail -f`コマンドに似た動作をするPythonスクリプトを作成しています。特定のファイル(この例では`example.log`)をリアルタイムで監視し、新たな行が追加された際にその内容を出力します。

1. `time` モジュールをインポートしています。これは、後ほどの`sleep`関数で使用します。
2. `tail_f`という関数を定義しています。この関数がファイルのリアルタイムモニタリングを担当します。
3. `with open(filename, ‘r’) as f:` でファイルを読み込みモードで開きます。
4. `f.seek(0, 2)` でファイルポインタをファイルの末尾に移動します。これにより、新規に追加される行だけを読み込むようになります。

応用例

応用例1: キーワードによるフィルタリング

# キーワードでフィルタリングする
def tail_f_with_keyword(filename, keyword):
    with open(filename, 'r') as f:
        f.seek(0, 2)
        while True:
            line = f.readline()
            if not line:
                time.sleep(1)
                continue
            if keyword in line:
                print(line.strip())

このコードの解説

こちらの例では、特定のキーワードが含まれる行だけを出力します。基本的な構造は先ほどの例と同じですが、`if keyword in line:` という条件文を追加しています。

応用例2: ログレベルによるフィルタリング

# ログレベルでフィルタリングする
def tail_f_with_log_level(filename, log_level):
    log_levels = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']
    with open(filename, 'r') as f:
        f.seek(0, 2)
        while True:
            line = f.readline()
            if not line:
                time.sleep(1)
                continue
            if any(level in line for level in log_levels[log_levels.index(log_level):]):
                print(line.strip())

このコードの解説

この例では、ログレベル(DEBUG、INFO、WARNING、ERROR、CRITICAL)を指定して、そのレベル以上のログだけを出力します。

応用例3: ファイル出力

# モニタリング結果を別のテキストファイルに出力する
def tail_f_to_file(filename, output_filename):
    with open(filename, 'r') as f, open(output_filename, 'w') as outf:
        f.seek(0, 2)
        while True:
            line = f.readline()
            if not line:
                time.sleep(1)
                continue
            outf.write(line)

このコードの解説

この例では、モニタリングの結果を別のテキストファイルに出力します。`with open(filename, ‘r’) as f, open(output_filename, ‘w’) as outf:` というように、二つのファイルを同時に開いています。

まとめ

Pythonを使用してテキストファイルをリアルタイムでモニタリングし、さらにログを分析する方法について解

説しました。基本的なコードから、キーワードやログレベルでのフィルタリング、結果のファイル出力まで、多くの応用例を紹介しました。

コメント

コメントする

目次