※Zabbix5.2を元に、丁寧に書いた更新版を投稿しました。Zabbix4.0でも設定出来ます。
やりたいこと
syslogを、対応が必要なログ(既知・未知)、対応が不要なログ(既知)の3種類に分けて管理、検知したい。
まとめ
Zabbixには、設定に正規表現という項目があります。
項目としては文字列のフィルタと捉えたほうが分かりやすいかもしれません。
管理 -> 一般設定 -> 正規表現
以下のように、正規表現に対応必要・対応不要なログを設定し、トリガーの条件式に組み込むことで実現できます。
アイテム
名前:syslog検知
タイプ:Zabbixエージェント(アクティブ)
キー:log[/var/log/testlog,[],UTF-8]
対応必要なログ
名 前:include_log01
条件式:いずれかの文字列が含まれる
値 :ROLLBACK,AUTH_FAILURE
名 前:include_log02
条件式:結果が真
値 :router0[12]
対応不要なログ
名 前:exclude_log
条件式:文字列が含まれない
値 :LOGIN_EVENT
条件式:文字列が含まれない
値 :LOGOUT_EVENT
条件式:結果が偽
値 :switch0[12]
トリガー
対応必要な既知のログを検知する
トリガー名:REQUIRED:{ITEM.VALUE}
条件式:{Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@include_log01)}=1 or
{Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@include_log02)}=1
未知のログを検知する
トリガー名:UNKOWN:{ITEM.VALUE}
条件式:{Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@exclude_log)}=1 and
{Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@include_log01)}=0 and
{Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@include_log02)}=0
※対応不要なログが含まれていないこと、かつ、対応必要な既知のログが含まれていないこと
検知結果
その他
1. 条件式の形式が「結果が真」または「結果が偽」のとき、正規表現が使用できます。
2. 条件式の形式が「いずれかの文字列が含まれる」のとき、255文字の文字数制限があります。
条件式の形式で255文字を超える場合は2つに分ける必要があります。
3. 正規表現は、トリガーの条件式同様、設定のテストが行えます。
環境
OS:CentOS 7.7
Version:Zabbix4.0
備考
複数の条件を持つ「文字列が含まれる」正規表現は、トリガーの判定で気を付ける必要があります。
トリガーの判定で「=1(文字列が見つかった)」とする場合、すべての条件に当てはまらないと「1(真)」にならないからです。
そのため、「文字列が含まれる」正規表現を分割するか、一つでも当てはまったら偽になる正規表現を作成し「=0(文字列が見つからなかった)」判定を無理やり文字列が見つかったという体のトリガーとして扱うかになると思います。紛らわしいですけどね。