ログファイルのエラーを監視し、管理者にメールを送信したいと思います。
ログファイルには以下のようなデータが含まれています
11 Aug 02:30 Service1 restarted
11 Aug 05:35 Service1 restarted
11 Aug 08:43 Service2 restarted
11 Aug 11:20 Service1 restarted
11 Aug 14:53 Service2 restarted
5分ごとに実行され、最後に発生したサービスの再起動を確認してメールを送信するスクリプトを作成したいと思います。
たとえば、スクリプトが02:35に実行された場合、Service1
が再起動したことがわかり、Service1 restarted at 02:30
のような電子メールが送信されます。スクリプトが5:45に実行されると、Service1
が05:35にのみ再起動したことを示すメールが送信されます(02:35の再起動は含めないでください)。
この要件を達成する方法はありますか?私は基本的にLinuxとシェルスクリプトが初めてです
5分のcrontabを作成することから始めます。
*/5 * * * * myscript.sh
Myscript.shを実行します($HOME
dir)
#!/bin/bash
tail -1 /path/to/file.log > /some/dir/after
if cmp -s /some/dir/after /some/dire/before
then
cat /some/dir/after | mail -s "restart" [email protected]
cp /some/dir/after /some/dir/before
fi
正しい値を使用します(もちろん)。
これは、5分以内に2回の再起動がないことを意味することに注意してください。
02:35にファイルの最後の行が02:30の再起動になると想定しているため、必要なのは次のようなcronエントリだけです。
*/5 * * * * tail -1 /path/to/file.log | mailx -s "Last restart" [email protected]
このアプローチの欠点は、管理者が同じメールを02:35、02:40、02:45などに受信することです。
これを試して:
crontab
*/5 * * * * /path/to/checklog.bash
スクリプト
#!/bin/bash
service=$(tail -1 /path/to/logfile | awk '{print $4}')
logdate=$(tail -1 /path/to/logfile | awk '{print $1,$2,$3}')
if test 'find "/path/to/logfile" -mmin -5'
then
echo "$service was restarted on $logdate" | mail -s "Restart notification" [email protected]
fi
@ glenn-jackmanが提供する回答 の改善点の1つは、mailxの-Eオプションを使用することです。 mailxのmanページから:
-E
本文が空のメッセージは送信しないでください。これは、cron(8)スクリプトからのエラーをパイプするのに役立ちます。
これに対処するためのより信頼性の高い方法は、念頭に置いている正確なシナリオ用に構築されたツールを使用することです(これは、ログを監視し、新しく検出されたパターンでメールを送信することです)。
解凍して実行すると、模倣できる実際の例が多数表示されます。注目する1つの例はMODEL13です。これは、1つまたは複数の異なるログでパターンが検出されたときに、特定の電子メールアドレスに電子メール通知を送信するタスクに対処します。
./logrobot localhost /var/tmp/logXray autonda /var/log 60m '.*error.*_P_.*fatal.*' '.' 1 1 errchk -ndshow [email protected]
上記のコマンドで、以下のパラメーターは、必要に応じて変更する必要があります。
'。* error。* _ P _。* fatal。*'-ここでは、/ var/logディレクトリのすべてのログで2つのパターンが検索されています
/ var/log-これは、ログを監視するディレクトリです。特定のログファイルを監視する場合は、これをログファイルへの絶対パスに置き換えます。
監視対象のログに追加された新しい行のみがスキャンされることを保証する必要なロジックが含まれているため、これはより良いオプションです。また、はるかに効率的です。そしてそれはまた携帯可能であるべきです。
もちろん、Postfixがホストにインストールされていることを確認して、電子メールを送信できるようにします。ここで何かを忘れているかもしれませんが、それがツールの動作の要点です。