1つのデバイス/サーバーからUbuntuサーバーにsyslogを送信します。
Ubuntuサーバー(syslogを受信)で、特定のsyslogメッセージが到着したときにスクリプトをトリガーしたい。
これは可能ですか?
通知が送信されるのではなく、質問が少し変更され、スクリプトを対象にしているようです。この答えは後で削除するかもしれません。
Rsyslogに渡されたメッセージに基づいてシェルスクリプトのリアルタイムトリガーを設定するのは かなり簡単 のようです。 OPが彼の回答を書き直して、彼が目指していることのより良い絵を含むようにした場合(コメントに既に投稿されているように)、私はここで質の高い回答を提供したいと思っています。
要件が正確にわからないが、私がお勧めできる特定のソフトウェアは logcheck
です。これはあなたの状況でも役に立つかもしれません。
その目的は、特定の一致した(興味深い)行にメールダイジェストを送信することです。基本的なメール構成が既に機能している(たとえば、echo bla | mail -s testmail [email protected]
が機能している)と想定しています。ログのローテーションを処理し、ログがどこに残っているかを知っているので、スクリプトでもう心配する必要はありません。
このチュートリアル から重要なステップのいくつかを抽出しました:
/etc/logcheck/logcheck.conf
で基本的な設定を行います:
REPORTLEVEL="server" # default reportlevel with pre-configured filters
SENDMAILTO="[email protected]"
チェックインするログファイル/etc/logcheck/logcheck.logfiles
:
/var/log/syslog
/var/log/auth.log
/var/log/myapp.log
ここで、次のような特定の行でトリガーするように指示します
myapp: Error: Login failed for admin123
このmyappログの場合、これは/etc/logcheck/ignore.d.server/myapp
で正規表現を作成することで実現できます(以前に使用したserver
に対応するREPORTLEVEL
に注意してください)。
^myapp:.*
わかりました、これは最も具体的な正規表現ではありませんが、それがポイントではありません。
メールが届くのを待ちます。例:
Subject: webserver.domain.tld 2013-01-01 10:17 System Events
Jan 01 09:40:59 webserver myapp: IMAP Error: Login failed for gertvdijk