継続的な監査ログ循環で新しく閉じたファイルを確認するには?

継続的な監査ログ循環で新しく閉じたファイルを確認するには?

2番目のファイルが作成されるタイミング(一致基準)を決定する最良の方法を見つけようとしています。コンテキストは監査ログの回転です。

毎時間監査ログを生成するディレクトリがある場合は、閉じた監査awkログに対して解析スクリプトを実行する必要があります。つまり、毎時間新しい監査ログが生成され、最大1時間分の情報を含む古い監査ログが閉じられます。新しいログファイルはそのファイルも閉じられ、新しいログファイルが生成されるまで保持されます。

bashシェルスクリプトを作成して使用した後、エントリを使用してfind /home/tomcat/openam/openam/log -name amAuthentication.* -mmin -6010crontab分ごとに実行できますが、残りはどのように作成するのかわかりません。

スクリプトがその検索内容を一時ファイルに保存し、実行されるたびにcrontab新しい検索コマンドの内容を比較して変更すると、一時ファイルをawkスクリプトへの入力として使用することから始めることができると思います。スクリプトが完了したら、awk新しい検索をファイルに保存します。


ある同僚は、処理されたファイルを表示するために古い「固定ビット」を使用することを提案しました。おそらくこれが続く道です。

答え1

これを試してみてくださいinotifywait

inotifywait -e close_write /home/tomcat/openam/openam/log/CURRENT_OPENED_LOG_FILE

答え2

最後に使用するスクリプトの先頭は次のとおりです。強力にしてロギングするにはもっと作業が必要ですが、一般的なアイデアを得る必要があります。

#!/bin/sh

# This script should be executed from a crontab that executes every 5 or 10 minutes
# the find below looks for all log files that do NOT have the sticky bit set. 
# You can see the sticky bit with a "T" from a "ls -l". 
for x in `find /home/tomcat/openam/openam/log/ -name "log-*" -type f ! -perm -1000 -print`
do
    # Look for open files. For safety, log that we are skipping them
    if lsof | grep $x > /dev/null; then
        # create a log entry on why I'm not processing this file...
        echo $x " is open"
    else 
        # $x "is closed and not sticky"
        # run the awk scripts to process the file!
        echo $x " processing with awk..." 
        # Set the sticky bit to indicate we have processed this file
        chmod +t $x
    fi
done

関連情報