私はそれとの相互作用の広範なログを記録するハニーポットソフトウェアを書いています。平文でログインする予定です.log
ファイル。
サーバーのログ記録方法にあまり詳しくない人からの質問が2つあります。
まず、ログファイルをどのように分割しますか。これを1か月実行した後、1つの大きな.log
ファイル、これを日、月、年ごとに行いますか?それに標準はありますか?
各行の形式は、*、-、+、何でも、1つの標準区切り文字がありますか?どこにも標準はありますか(私のグーグルはあまり育っていません)?
ログファイルのこの形式が好きです。
$ python simple_logging_module.py
2005-03-19 15:10:26,618 - simple_example - DEBUG - debug message
2005-03-19 15:10:26,620 - simple_example - INFO - info message
2005-03-19 15:10:26,695 - simple_example - WARNING - warn message
2005-03-19 15:10:26,697 - simple_example - ERROR - error message
2005-03-19 15:10:26,773 - simple_example - CRITICAL - critical message
これは、Pythonの ロギングモジュール からのものです。私は通常、1日に1ファイル、1か月に1つのフォルダー、1年に1つのフォルダーを持っています。それ以外の場合は適切に編集できない巨大なログファイルを取得します。
logs/
2009/
January/
01012009.log
02012009.log
...
February/
...
2008/
...
そのようなロギングの標準はありません。そして、ローリング、ファイルのレイアウト、それはすべて必要なものに依存します。一般的に、3つの主要なシナリオに直面しました。
log4anything
パッケージ。YYYYMMDD
の形式で名前が付けられた独自のディレクトリを取得します。ログをステージングしない場合は、他の回答に示されているYYYY\MM\YYYYMMDDのようなディレクトリレイアウトを検討してください。logfile_yyyymmdd_ccc.log
ここで、ccc
は数字を増やしています。ファイル名に時間を追加することもお勧めです(たとえば、1分間に生成するログの数を簡単に判断するため)UNIX
テキストツールを使用してすばやくアクセスできます。このカスタムはこのように見えました
logs / 20090101 / logfile_20090101_001.Zip logfile_20090101_002.Zip ... 20090102 / logfile_20090102_001.Zip logfile_20090102_002.Zip logfile_20090101_001.log logfile_20090101_002.log logfile_20090102_001.log logfile_20090102_002.log
優れたロギングのためのいくつかの優れたプラクティスもあります。
Excel
にインポートしてみてください。 30秒以上かかる場合は、ロギングが間違っていることを意味します。これも:Unix
テキストツールとExcel
でうまく動作するため、スペースが制限されているのが好きです。ログファイルを分割するには、 logrotate のような外部アプリケーションを使用して、ダーティな作業を処理します。
各行の形式については、標準はないため、最適なものを使用する必要があります。後でログファイルを自動的に解析する場合は、ログ出力をフォーマットする際にそのことを覚えておくとよいでしょう。
有名なロギングライブラリを使用することをお勧めします。ほとんどのロギングライブラリは、ロールオーバーをサポートしています。 Log4Net(.net)/ Log4J(Java)は、使用するのに特に優れたロギングライブラリであり、便利なオプションがたくさんあります。最適なロールオーバー間隔を使用してください。ハニーポットアプリケーションの場合、1時間ごとまたは1日ごとの売上が最もよく機能すると思います。また、256MBなどの固定制限を使用して、ログの努力が利用可能な空きディスク容量を超えないようにすることもできます。 Log4Net/Log4Jもこれをサポートしています。
Log4J @ Apache.Org
Log4Net @ Apache.Org
ログファイルの形式は、ニーズに応じて設定する必要があります。ログ入力に表示されそうにない区切り文字を使用することが非常に望ましいです。アプリケーションでは、これが不可能な場合があります。通常の状況では、一部の関係者はスペース(NCSAログ)を使用し、一部の関係者はコンマを使用して(CSVファイルを作成)、一部の関係者はタブを使用します(タブ区切りファイルを作成)。これらにはそれぞれ独自の利点と欠点があります。
私の意見では、最も重要なのは:
提案:
ハニーポットシステム用です(そして悪役が実際にアプリケーション/サイトを強打しているのでない限り)代わりにデータベースへのログインに余分な時間をかけることを考慮してください。
これにより、ログの分析と使用が簡単になり、リアルタイムになります(つまり、ログを分析/参照する前にETLプロセスを実行する必要はありません)。
これは、DBテーブルまたはファイルにあると言いましたが、これはフォーマットの定義の必要性を排除するものではありません。暫定的に、いくつかの一般的な属性(ID、IPアドレス、タイムスタンプ、Cookie/ID、「重要度/緊急度」のレベル)を持つ「polymorphic」形式を使用できます特定のイベントタイプを定義する短いニーモニックコード( "LIA" =ログイン試行、 "GURL" =推測URL、 "SQLI" SQLインジェクション試行など)に続いて、いくつかの数値フィールドといくつかの文字列フィールドが続きますどのセマンティクスはニーモニックによって異なります。要約する:
-Id -TimeStamp(日付と時刻に分割される場合があります) -IP_Address -UserID_of_sorts -//その他の汎用/共通フィールド -EventCode(LIA、GURL、SQLI ...) -メッセージテキストメッセージ(特定のイベントインスタンスによって異なります) -Int1 //数字... -Int2 -Str1 // ...そして、EventCode によって意味が異なるテキスト-Str2 -// ...?
さて...これがフラットファイルまたはSQLデータベース(特にDBに行く場合)に関係なく、標準のロギングライブラリを使用するが可能/すべきです。たぶんlog4j他の応答で示唆されているように(Pythonに簡単にバインドできるかどうかはわかりませんが、とにかく、Pythonの標準のロギングモジュールは+/-同じです...)または Pythonの標準ライブラリのロギングモジュール は、おそらくニーズに合わせて調整できます。