Linuxでは、ログファイルを自動的に監視し、特定の文字列が表示された場合にメールで通知する簡単な方法は何ですか?特定の失敗をログファイルに記録するアプリケーションがありますが、失敗時にアラートを送信したりスクリプトを実行したりする組み込みの方法がありません。私はtail -fといくつかのシェルスクリプトで何かをリギングできると思いますが、既存の保守されたツールが存在する場合は、それを使用したいと思います。
tenshi と呼ばれるツールを見つけました。このツールは、自分が必要とすることを正確に実行しているようです。これはデフォルトのDebianリポジトリであるNiceに含まれていますが、残念ながらRHEL/CentOSのものには含まれていません(サーバーとして両方のOSが混在しています)。
このページに記載されているオプションのいくつかをチェックして、はるかに単純なものを使用することになりました: swatch 。
これらの他のシステムは、既存のシステムログを処理したり、出力を制御できないソフトウェアを処理したりするのに最適です。まだメール通知を行うためのコードをたくさん書きたくありませんでした。だから私はちょうどこのような見本ファイルを作成しました:
watchfor /./
mail addresses=me\@example.com:other\@example.com,subject=log_alert
そしてそれを始めた
swatch -c send-me-everything.swatch -t /my/app/urgentevents
これは大雑把ですが、ログファイルの出力を制御しているので、これ以上複雑なものは必要ありません。
最良の方法は、ログ分析プログラムを使用することです。
たとえば、OSSECは無料/オープンソースであり、必要な数のログファイルを監視し、特定のイベントの電子メールアラート(またはアクティブな応答)を生成できます。
リンク: http://www.ossec.net
シェルスクリプトをハッキングするのは楽しいことですが、何年にもわたって開発されている成熟したプログラムよりもはるかに安定していません。さらに、将来、スクリプトを拡張したり、トリガーを追加したりする必要がある場合は、さらに複雑になります。 OSSEC(およびその他のツール)は、このフレームワークを自動的に実行します。
回答がすでに受け入れられていることは知っていますが、rsyslogははるかに堅牢で、syslogを使用しないアプリケーション向けに、フィルタリング、SMTPアラート、および非syslogベースのファイル監視機能が組み込まれています。これは、Ubuntu10.xでの標準のsyslog実装になりました。