回答:
私の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 me@example.com; done
whileループはsyslogdから各行を無限に読み取り、それをエコー経由でメールにパイプすることに注意してください。これは重要。echoがその行を出力すると、パイプを終了し、ログメッセージを電子メールで送信できるようにEOFをメールで送信します。
つまり、次のようにsyslogd経由でメールに直接パイプすることはできません。
local1.err |/usr/bin/mail -s SYSLOG me@example.com
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 me@example.com
次に、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