Unix/Linux のシンプルなログ パーサー (以降、以降)

Unix/Linux のシンプルなログ パーサー (以降、以降)

次のようなログを解析できるシンプルな Unix/Linux ログ パーサーを使用したり、作成したことがある人はいますか。

timestamp log_message \n

メッセージを順序付けし、タイムスタンプを解析して返します。

  • すべてのメッセージ
  • 特定の日付以降のメッセージ (--since)
  • 特定の日付以前のメッセージ (--until)
  • --since、--until の組み合わせ

このようなものを書くこともできますが、定型文があるかどうかはわかりません。これは、私が計画している自動レポート作成にうまく適合すると思います。

答え1

を見てみましょう私が書いたこのPythonプログラムそれがあなたが探しているものに近いか、またはあなたのニーズに適応できるかを確認します。

答え2

たとえ見つかったとしても、それを信頼できるかどうかはわかりません。たとえば、タイムスタンプは事前にわからないため、DD-MM-YYYY と MM-DD-YYYY を区別できる唯一の方法は、xx または zz と xx-zz-YYYY のいずれかが 12 より大きくなるまで先読みすることです。他にも問題があることは確かです。

言語の標準文字列から datetime ライブラリを使用して日付形式指定子を明示的に指定できるため、独自のコードを書く方がはるかに簡単で信頼性が高くなると思います。

たとえば Python の場合:

    import re
    from datetime import datetime
    line_regex = re.compile(
        r'''
        \[
        (?P<day> \d{1,2} )
        /
        (?P<month> \w{3} )
        / 
        (?P<year> \d{4} )
        :
        (?P<hour> \d{2} )
        : 
        (?P<minute> \d{2} )
        : 
        (?P<second> \d{2} )
        \s
        (?P<timezone> -?\d{4} )
        \]
        ''', re.VERBOSE)


   new_entry['time'] = datetime.strptime(
        parsed_line['day'] +
        parsed_line['month'] +
        parsed_line['year'] +
        parsed_line['hour'] +
        parsed_line['minute'] +
        parsed_line['second']
        , "%d%b%Y%H%M%S"
   )

存在するフォーマットを判別しようとするモジュール/ライブラリが必要な場合は、Perlの1つのオプションは次のとおりです。日付::解析

答え3

私がこれまでに見つけた、まともな解決策はsyslog-ngデータベースへのログ記録 (この時点では単純な SQL クエリに縮小されます) - すべてを集中的にログ記録していると仮定すると、これによってそれほど大きな負担がかかることはありません。

(ここに明らかな利点と明らかな注意点を挿入してください)

関連情報