|
||||||||||||||
|
rsyslogで特定ログに対してメールを送信する※これは古いコンテンツです。新しくログサーバを構築するなら 「シスログに特定文字列が出力されるとメール送信する」を参照してください。 ここではrsyslogで特定の文字列を発見したらメールを送信してします。 条件判断については別項「rsyslogで条件式を設定する」を参照してください。 rsyslog.confの例 syslogメッセージの内容に対して、メールを送信する rsyslog.confの例(デフォルトのコメントアウト部は省いてあります)#$ModLoad immark # provides --MARK-- message capability$ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imklog # kernel logging (formerly provided by rklogd) $template customformat,"%timegenerated% %HOSTNAME% %syslogtag%%msg%\n" $template logFileName,"/var/log/syslog/%fromhost%/messages_%fromhost%_%$year%%$month%%$day%.log" $template mailFileName,"/var/log/syslog/%fromhost%/mail_%fromhost%_%$year%%$month%%$day%.log" # Log anything (except mail) of level info or higher. # Don't log private authentication messages! #*.info;mail.none;authpriv.none;cron.none -/var/log/messages *.info;mail.none;authpriv.none;cron.none -?logFileName;customformat *.info;mail.none;authpriv.none;cron.none @remoteserver # The authpriv file has restricted access. authpriv.* /var/log/secure # Log all the mail messages in one place. #mail.* -/var/log/maillog mail.* -?mailFileName;customformat $ModLoad ommail $ActionMailSMTPServer mailserver.address $ActionMailFrom admin@example.local $template mailsubject,"Syslog Warning" $template mailbody,"%fromhost%\r\n%msg%" $ActionMailSubject mailsubject $ActionExecOnlyOnceEveryInterval -1 $ActionMailTo admin-ml@example.local #アドレスの定義1 if $fromhost-ip == '192.168.1.100' and $msg contains 'System Warning' then :ommail:;mailbody $ActionMailTo admin-ml@example.local #アドレスの定義2 if $fromhost-ip != '127.0.0.1' and $msg contains 'authenticated failure' and $syslogfacility-text == 'daemon' then :ommail:;mailbody $ActionMailTo administrator@example.local #アドレスの定義3 if $fromhost-ip =='192.168.1.254' and $syslogfacility-text == 'syslog' and $syslogseverity-text == 'crit' then :ommail:;mailbody # Log cron stuff cron.* -/var/log/cron # Everybody gets emergency messages *.emerg * # Save news errors of level crit and higher in a special file. uucp,news.crit -/var/log/spooler # Save boot messages also to boot.log local7.* /var/log/boot.log # UDP Syslog Server: $ModLoad imudp.so # provides UDP syslog reception $UDPServerRun 514 # start a UDP syslog server at standard port 514 syslogメッセージの内容に対して、メールを送信する全ての機器のsyslogをrsyslogで解析し、特定キーワードを見つけたら警告メールを送信できます。 これはommailというモジュールを使用します。 解析も構文が複雑になるものの、ちゃんと細かく指定できるので、特定のIPアドレスのログ、特定のファシリティの特定キーワードが含まれている場合はこのメールアドレスへ送信するなど造作もないです。 なおメール送信には件名や本文に日本語を用いないほうが無難です。 まずはrsyslog.confの中でommailをロードし、メール送信に関する定義を行います。これは共通です。 rsyslog.conf $ModLoad ommail #メールモジュールのロード #使用するメールサーバ $ActionMailSMTPServer mailserver.address #送信元アドレス $ActionMailFrom admin@example.local #送信先アドレス $ActionMailTo admin-ml@example.local #メールタイトル $template mail_subject,"Syslog Warning" #メールの本文。ここではログ送信元(%fromhost%)と改行(\r\n)と該当ログ(%msg%) $template mail_body,"%fromhost%\r\n%msg%" #メールタイトルの読み込み $ActionMailSubject mail_subject #メール送信抑制は120秒。メールを送信したら120秒間は他のメールも送信しません。 $ActionExecOnlyOnceEveryInterval 120 条件によって送信先アドレスが変化するなら、条件式の手前でその都度メールアドレスを定義しなおします。 判断にはプロパティ式と条件式の2種類があります。 プロパティ式は簡単に記述でき、条件式は複雑な条件を記述するのに向きます。 プロパティ式の文字列はダブルクォートで囲みます。 条件式はどちらでも動作しますが、シングルクォートを指定することが多いようです。 送信元アドレスの変数などを、プロパティ値と呼びます。 例えば「fromhost-ip」は、ログ送信元のIPアドレスの変数です。 本家にて、プロパティ値の解説があります。 また条件判断に使用するパラメータもありますが、数は多くありません。 本家のドキュメントにもあります。
特定キーワードを含むログが出力されたらメール送信 プロパティ式 :msg, contains, "System warning":ommail:;mail_body 条件式 if $msg contains 'Failed password' then :ommal:;mail_body ログに文字が含まれていたら、メールを送信します。 特定ホストからログが出力されたらメール送信 プロパティ式 :fromhost-ip, isequal, "192.168.1.100" :ommail::;mail_body 条件式 if $fromhost-ip == '192.168.1.100' then :ommail:;mail_body これだけでは送信元からどんなログが来てもメールを連発するので、通常は他の条件を加えたりして絞り込みます。 特定ホストから特定キーワードを含むログが出力されたらメール送信 条件式 if $fromhost-ip == '192.168.1.100' and $msg contains 'System Warning' then :ommail:;mail_body リモートホストから特定ファシリティの特定キーワードを含むログが出力されたらメール送信 条件式 if $fromhost-ip != '127.0.0.1' and $msg contains 'System Warning' and $syslogfacility-text == 'daemon' then :ommail:;mailbody 一般的単語だと、他のファシリティから送信されても検知してしまいます。より条件を絞りましょう。 一度メールを送ったら1時間はメールを再送信しない 定義式 $ActionExecOnlyOnceEveryInterval 3600 # infinite retries if host is down 3600秒の間は、メール送信を抑制します。さもないと、鬼のような連発でメールが飛んできます。 しかし他の条件のメールも全て抑えてしまうため、使いどころが難しい機能です。 なお「-1」を指定するとメール送信抑制はありません。 複数のメール送信条件を行う 条件式 $ActionMailTo admin-ml@example.local if $fromhost-ip == '192.168.1.100' and $msg contains 'System Warning' then :ommail:;mail_body & ~ $ActionMailTo admin-ml@example.local if $fromhost-ip == '192.168.1.101' and $msg contains 'System Warning' then :ommail:;mail_body & ~ $ActionMailTo administratorl@example.local if $fromhost-ip == '127.0.0.1' and $syslogfacility-text == "daemon" and $syslogseverity-text == 'crit' and $msg contains 'System Warning' then :ommail:;mail_body メールアドレスは条件式のたびに与える必要があります。 同じメールアドレスであっても、その都度与えておかないと二つ目以降のメール条件でエラーログを出力し、送信できません。 条件式が複雑になると、動作は確認は必須です。 コンフィグファイルのチェック、そして確実にメール送信ができるかをコマンドにて確認します。 #syslogd -N 1 -c5 #logger -p daemon.crit "System Warning" |
|
||||||||||||