EC2でファイル監査を設定する(fluentd exec_filter設定編)


大柳です。

前回記事では、auditログをfluentd経由でCloudWatch Logsに連携できることが確認できました。
前回記事:EC2でファイル監査を設定する(fluentd+CloudWatch Logs設定編)

今回はexec_filter Output Pluginを使ってログを加工してCloudWatch Logsに連携してみます。
全体構成は以下の通りです。

Pythonスクリプトの作成

今回はPythonでログを加工するスクリプトを作成しました。(fluent.py)
スクリプトは http://qiita.com/hagino3000/items/de66d04c7d71d7d8fcad を参考に作成しました。
デバッグ用にロギングの設定(logger.conf)もしています。

ログ加工用スクリプト(fluent.py)

ロギング設定(logger.conf)

fluentd設定

次にfluentdの設定です。
sourceブロックでaudit.logを読み込み、audit_log_filterブロックでPythonスクリプトで加工、audit_log_filter_outputブロックでCloudWatch Logsに連携しています。

稼働確認

ログ加工用のPythonスクリプトの配置、設定ファイル更新が完了したら、fluentdを再起動します。

psコマンドを打つとPythonスクリプトが稼働しているのが確認できます。

Pythonスクリプトに問題があってスクリプトが異常終了した場合は以下のようなメッセージが出力されます。loggingログを利用してデバッグして問題を修正してください。

CloudWatch Logsのコンソールを確認すると、メッセージの先頭に時刻とユーザIDが表示できているのが確認できます。

まとめ

監査ログをfluentdのexec_filter Output Pluginを使って加工、CloudWatch Logsに出力できることが確認できました。
一点注意すべきなのは、ログ加工のオーバーヘッドがあるということです。本番システムで利用する場合には、負荷テストを行って、システムの稼働に悪影響を及ぼさないか、確認することをおすすめします。
こういった注意点はあるものの、CloudWatch Logsではログの加工や条件判断などはあまり柔軟に対応できないため、事前にfluentdで加工することで、監視運用の幅を広げることができるため、うまく活用していきたいです。

最後までお読みいただきありがとうございました。