ログ監視にシェルスクリプトを使用する

ログ監視にシェルスクリプトを使用する

ログファイルのエラーを監視したら、管理者に電子メールを送信したいと思います。

ログファイルには次のデータが含まれています。

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に実行されたら、05: Service135に再起動メールのみを送信する必要があります。 (02:35 再起動を含めないでください)

この要件を満たす方法はありますか?私は基本的にLinuxとシェルスクリプトに初めて触れました。

答え1

まず、5分のcrontabを作成します。

*/5 * * * * myscript.sh

myscript.shを実行します($HOMEディレクトリ内)。

 #!/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回の再起動がないことを意味します。

答え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、...に同じ電子メールを受信することです。

答え3

この試み:

予約されたこと

*/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

答え4

これを処理するより信頼性の高い方法は、念頭に置いている特定のシナリオに合わせて構築されたツールを使用することです(ログを監視し、新しく検出されたパターンに基づいて電子メールを送信するなど)。

このツールをダウンロードしてください

解凍して実行すると、模倣できる実際のケースをたくさんご覧いただけます。集中したい1つの例は、1つ以上の他のログで特定のパターンが検出されるたびに特定のEメールアドレスにEメール通知を送信することを解決するMODEL13です。

./logrobot localhost /var/tmp/logXray autonda /var/log 60m '.*error.*_P_.*fatal.*' '.'  1 1 errchk -ndshow [email protected]

上記のコマンドで必要に応じて変更する必要があるパラメータは次のとおりです。

  • '.*間違い。 *_P_.* 致命的です。 * '- ここで、/var/log ディレクトリ内のすべてのログは、2 つのパターンで検索されます。

  • /var/ログ- 監視するログがあるディレクトリ。特定のログファイルを監視するには、ログファイルの絶対パスで置き換えます。

  • 1 - ログにエントリが1つ見つかった場合は、警告通知を送信します。
  • 1 - ログにエントリが1つ見つかった場合は、重要な警告を送信します。
    • 警告とリスクが同じ場合、ログに監視されているパターンが見つかると、スキャンで危険警告が発生します。
  • errchk - この特定のログチェックのラベルです。適切な名前を指定してください...監視しているログの種類と一致する名前...つまりtomcatLogCheck
  • もちろんメール=。適切なメールアドレスに変更してください。

これは、監視対象のログに追加された新しい行のみを取得するために必要なロジックが含まれているため、より良いオプションです。また、はるかに効率的です。そして携帯性が必要です。

もちろん、メールを送信できるように、ホストコンピュータにpostfixがインストールされていることを確認してください。ここで何かを忘れてしまったかもしれませんが、これはこのツールがどのように機能するかという鍵です。

関連情報