Syslogdが何か、たとえばerr
の優先順位などをログに記録するたびにメール通知を受け取ることができるようにしたいと思います。これはBSD互換のsyslogデーモンであると想定します。
これが解決策です 名前付きパイプを使用します。 Debian用にセットアップされていますが、BSD用に変更できるはずです。
私のOpenBSDサーバーで、ファシリティlocal1を使用するWebアプリケーションからの重要なメッセージをログに記録して電子メールで送信します。これを実現するための私の/ etc/syslog.confは次のとおりです。
local1.err /var/log/example.com
local1.err |while read log; do echo "$log" | /usr/bin/mail -s SYSLOG [email protected]; done
Whileループがsyslogdから各行を無限に読み取り、エコーを介してそれをメールにパイプ処理することに注意してください。これは重要。エコーがその行を出力すると、パイプを終了し、メールにEOFを送信して、ログメッセージを電子メールで送信できるようにします。
つまり、次のようにsyslogdを介してメールに直接パイプすることはできません。
local1.err |/usr/bin/mail -s SYSLOG [email protected]
syslogdは、それ自体が終了するかHUPシグナルを送信するまでパイプへの書き込みを継続するため、メールは1つの大きな電子メールでログメッセージのセット全体を送信します。
Cronでnewsyslogをスケジュールすることは、メッセージを低速または一括で取得する別の方法です。
たとえば、ログメッセージの毎日のメールダイジェストが必要な場合は、[〜#〜] m [〜#〜]フラグを設定し、 / etc/newsyslog.confのメールアドレスを監視:
# logfile_name owner:group mode count size when flags monitor
/var/log/example.com root:wheel 640 7 * 24 M [email protected]
次に、crontabでnewsyslogをスケジュールします。
# minute hour mday month wday command
0 * * * * /usr/bin/newsyslog
1-59 * * * * /usr/bin/newsyslog -m
newsyslog(8)の-mオプションは次のようになります。
監視モード;フラグに「M」が付いたエントリのみが処理されます。監視されているログファイルごとに、-mフラグを指定してnewsyslogが最後に実行されてからのログ出力は、監視通知セクションにリストされているユーザーにメールで送信されます。
Logcheckまたはlogwatchを確認することをお勧めします。 Logcheckは、一連のパターンに一致しないログ行を1時間ごとにメールで送信します。きっともっと頻繁にできるようになると思います。ログファイルを監視してそれを行うツールは知りませんが、それを実行する何かがあると確信しています。
OSSECを使用します。ログをリアルタイムで監視し、特定のイベントが一致したときにメール(またはその他の手段)で簡単に警告することができます。使いやすく、スケーラブルでオープンソース。
リンク: http://www.ossec.net