mito’s blog

IT技術メインの雑記。思い立ったが吉日。

Zabbixで正規表現を使ったトリガーによるsyslog監視を行う(更新版)

この記事は、Zabbix Advent Calendar 2020 - Qiitaの23日目のエントリです。

目的

今年の4月ごろに書いた、正規表現を使ったsyslog監視のトリガーの記事のアクセスが多かったので、丁寧に書きおなしてみました。 Zabbixのバージョンは5.2ですが、4.0でも設定方法は変わりません。

  • syslogの監視について、対応が必要なログ、調査したことのないログのみアラートを上げる設定にします。

ERRORやFATALレベルのログは既知も未知も全て検知する、INFOMATIONは既知も未知も全て検知しないといった設定は簡単ですが、対応が不要なログを検知したり、調査したほうが良いログを見逃してしまう可能性もあります。そのため、初めはその設定で対応要不要のログを切り分けていき、対応するべきログのみアラートを上げるよう、より運用に適した設定にしていきます。



正規表現の設定

Zabbixの設定に、項目「正規表現」があります。これを使って、まずは以下のように分けて登録します。

  • アラートを上げたい
    • 対応が必要な既知のログ
    • 調査したことのない未知のログ
  • アラートを上げない
    • 調査した結果、対応が不要な既知のログ
      • 調査したことのない未知のログの判定に使用


設定個所です。

管理 -> 一般設定 -> 正規表現

f:id:mst-it:20201223230859j:plain

正規表現を登録します。

f:id:mst-it:20201223232644j:plain


アラートを上げたいログをまとめた設定が「Alert1」「Alert2」です。
「Alert1」「Alert2」は、登録した文字列を引っ掛けた場合、結果が真となるようにします。条件式のAnd/Or設定は出来ないため(Andのみ)、条件式は「いずれかの文字列が含まれる」形式を1つのみとし、文字列の上限数(半角256文字)を超える場合は「Alert2」のように増やします。

f:id:mst-it:20201223233408j:plain


アラートを上げないログをまとめた設定が「NO_Alert」です。
「NO_Alert」は、登録した文字列を引っ掛けた場合、結果が偽となるようにします。1つでも引っ掛けると偽になれば良いため、条件式は「文字列が含まれない」形式を必要分作成し、対応不要なログを登録していきます。

f:id:mst-it:20201223233852j:plain



トリガーの設定

既知の対応必要なログのトリガーを設定します。
正規表現の「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設定が出来たら、もっと見やすく設定できそう。