この記事は、Zabbix Advent Calendar 2020 - Qiitaの23日目のエントリです。
目的
今年の4月ごろに書いた、正規表現を使ったsyslog監視のトリガーの記事のアクセスが多かったので、丁寧に書きおなしてみました。
Zabbixのバージョンは5.2ですが、4.0でも設定方法は変わりません。
- syslogの監視について、対応が必要なログ、調査したことのないログのみアラートを上げる設定にします。
ERRORやFATALレベルのログは既知も未知も全て検知する、INFOMATIONは既知も未知も全て検知しないといった設定は簡単ですが、対応が不要なログを検知したり、調査したほうが良いログを見逃してしまう可能性もあります。そのため、初めはその設定で対応要不要のログを切り分けていき、対応するべきログのみアラートを上げるよう、より運用に適した設定にしていきます。
正規表現の設定
Zabbixの設定に、項目「正規表現」があります。これを使って、まずは以下のように分けて登録します。
- アラートを上げたい
- 対応が必要な既知のログ
- 調査したことのない未知のログ
- アラートを上げない
- 調査した結果、対応が不要な既知のログ
- 調査したことのない未知のログの判定に使用
- 調査した結果、対応が不要な既知のログ
設定個所です。
管理 -> 一般設定 -> 正規表現
正規表現を登録します。
アラートを上げたいログをまとめた設定が「Alert1」「Alert2」です。
「Alert1」「Alert2」は、登録した文字列を引っ掛けた場合、結果が真となるようにします。条件式のAnd/Or設定は出来ないため(Andのみ)、条件式は「いずれかの文字列が含まれる」形式を1つのみとし、文字列の上限数(半角256文字)を超える場合は「Alert2」のように増やします。
アラートを上げないログをまとめた設定が「NO_Alert」です。
「NO_Alert」は、登録した文字列を引っ掛けた場合、結果が偽となるようにします。1つでも引っ掛けると偽になれば良いため、条件式は「文字列が含まれない」形式を必要分作成し、対応不要なログを登録していきます。
トリガーの設定
既知の対応必要なログのトリガーを設定します。
正規表現の「Alert1」または「Alert2」の結果が真(1)の場合=対応必要なログを検知した場合、アラートを上げます。
トリガー名:REQUIRED:{ITEM.VALUE}
条件式:{Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@Alert1)}=1 or
{Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@Alert2)}=1
対応が必要か不要か分からない、未知のログのトリガーを設定します。
正規表現の「NO_Alert」の結果が真(1)の場合=対応不要と判断されていないログ、かつ、
「Alert1」と「Alert2」の結果が偽(0)の場合=対応が必要ではないログの場合、未知のログと判断しアラートを上げます。
トリガー名:UNKNOWN:{ITEM.VALUE}
条件式:{Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@NO_Alert)}=1 and
{Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@Alert1)}=0 and
{Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@Alert2)}=0
備考
もっと良いやり方がありましたら、教えてください。条件式のAnd/Or設定が出来たら、もっと見やすく設定できそう。