FortiGateディスクログを成形するParserをPythonで組む

公開

ネットワーク管理者より、FortiGateが吐き出すファイアウォールのディスクログファイルを解析するに当たり、そのままではエクセルなどへインポートできないとの相談を受け、ログに含まれる膨大なフィールドの中から必要最小限の情報を抜き出し、タブ区切りのテキストファイルを生成するスクリプトをPythonで自作しました。

FortiGateファイアウォールのログの中身

膨大なログファイルの一部をサンプルとして受け取り、その中身を確認。その1行分を抜き出したのがこちら。

図1.ForiGateログ1行分

図1.ForiGateログ1行分

各項目毎に改行を入れて見やすくするとこんな感じ。これはそのままCSVとしてエクセルなどへインポートできないのも納得。

図2.ログ1行分を見やすく整形

図2.ログ1行分を見やすく整形

ログフォーマットは、 フィールド名=値 が半角スペース区切りで数珠つなぎになっており、値はString型の時にダブルクォーテーションで囲まれ、その中身には半角スペースが含まれることがあり、といったところ。また、FortiGateの高速ログはナノ秒単位で記録されている模様( eventtime )。

 

巷のLog Parserたち

当初はもうてっきり誰かが作っているだろうと検索してみるも意外と少なく、そんな中から見つけたこちらのLog Parserは、カンマ区切りされたログを想定しているようで、残念ながら受け付けてもらえず。

そんなわけで、FortiGateのファイアウォールログから必要な項目を抜き出し、CSV形式に整形するスクリプトの製作へ入ります。

 

項目毎に正確に区切る正規表現

このスクリプトの肝はなんと言っても、決められた区切り文字の無いログエントリの各項目を正確に切り分けること。空白区切りで表計算ソフトへインポートしようとすると罠に陥ります。

図3.空白区切りインポート不具合

図3.空白区切りインポート不具合

こちらの正規表現チェッカーのページで苦手な正規表現を駆使すること数時間、ようやく正規表現を確定。

図4.正規表現チェッカーでトライ

図4.正規表現チェッカーでトライ

実際にテストデータを入れて結果を確認したり、その結果をURLで残しておけるのがとても便利でした(鳴謝!)。

 

ナノ秒換算

ログエントリにはナノ秒単位のUNIXタイプスタンプが含まれているので、これをヒューマンフレンドリな形式へ変換する関数を作りました。

 

出来上がったLog Parser

以上を経て、Log Parserは完成しました。突貫工事なので、抜き出す項目名はスクリプト内に決め打ちです。

実行結果は以下の通り。抜き出すフィールドを絞り込んだので、単純にテキストファイルを表示させただけでも、分かりやすくなったと思います。

図5.Log Parser実行結果

図5.Log Parser実行結果

こちら、恥ずかしながらGitHubに公開しておいたので、優しくそっと見守ってください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA