web-dev-qa-db-ja.com

syslogdに特定のログメッセージを電子メールで送信するにはどうすればよいですか?

Syslogdが何か、たとえばerrの優先順位などをログに記録するたびにメール通知を受け取ることができるようにしたいと思います。これはBSD互換のsyslogデーモンであると想定します。

  • これは達成できますか?
  • シェルスクリプトに名前付きパイプを使用する必要がありますか?
  • 他にどのような解決策がありますか?
13
jason

これが解決策です 名前付きパイプを使用します。 Debian用にセットアップされていますが、BSD用に変更できるはずです。

Syslogd(8)による通知

私の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つの大きな電子メールでログメッセージのセット全体を送信します。

Newsyslog(8)による通知

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が最後に実行されてからのログ出力は、監視通知セクションにリストされているユーザーにメールで送信されます。

6
Clint Pachl

Logcheckまたはlogwatchを確認することをお勧めします。 Logcheckは、一連のパターンに一致しないログ行を1時間ごとにメールで送信します。きっともっと頻繁にできるようになると思います。ログファイルを監視してそれを行うツールは知りませんが、それを実行する何かがあると確信しています。

3
David Pashley

OSSECを使用します。ログをリアルタイムで監視し、特定のイベントが一致したときにメール(またはその他の手段)で簡単に警告することができます。使いやすく、スケーラブルでオープンソース。

リンク: http://www.ossec.net

1
sucuri