Windowsの特定イベントID除外設定

監視環境を前任者より引継ぎ?管理しております。
要件に基づき設定したところ、意図した動作とならないため
認識に誤りがありましたらご指摘頂けますでしょうか。

■要件
対象Winサーバのイベントログ(system)にて
下記条件にHitするイベントを検知するトリガーを作成したい
・レベルが「エラー」 であること①
 かつ
・ソースが「TEST」ではなく②、イベントIDが「137」ではない③こと
 #①&(②&③)という意味です。今後①&((②&③)|(④&⑤))となることを想定。

■トリガー条件式(見やすく改行しています)
{ホスト名:eventlog[system].logseverity()}=4 &
(
{ホスト名:eventlog[system].logsource("TEST")}=0 &
^{ホスト名:eventlog[system].logeventid(137)}=0
)
※{}内がWeb表示されなくなってしまうため、上記の「^」はエスケープ文字がわりですので無視してください。

■結果
TestCase1(レベル:エラー/ソース:TEST/イベントID:137)→検知せず
TestCase2(レベル:エラー/ソース:TEST/イベントID:138)→検知せず ※検知させたい
TestCase3(レベル:エラー/ソース:cmdtest/イベントID:999)→検知
TestCase4(レベル:エラー/ソース:TEST/イベントID:999)→検知せず ※検知させたい
TestCase5(レベル:エラー/ソース:test/イベントID:999)→検知
TestCase6(レベル:警告/ソース:test/イベントID:999)→検知せず

■環境
(Server)
Red Hat Enterprise Linux Server release 6.5 (Santiago)
zabbix-2.2.11-1.el6.x86_64
(監視対象)
Windows Server 2012 R2 Std
Zabbix Agent 2.2.9

以上、よろしくお願い致します。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー karna の写真

論理演算としては、正常な結果ですね。

それぞれの条件式の結果をA,B,Cとすると

エラー         → A: 1
  それ以外     → A: 0
TEST が含まれる → B: 0
  含まれない    → B: 1
イベントID 137    → C: 0
  それ以外      → C: 1

したがって、各ケースの論理式 A&(B&C)の結果は以下のようになります。

TestCase1:1&(0&0) → 0
TestCase2:1&(0&1) → 0
TestCase3:1&(1&1) → 1
TestCase4:1&(0&1) → 0
TestCase5:1&(1&1) → 1
TestCase6:0&(1&1) → 0

仮に、カッコ内の演算子を論理和(|)にすれば、2、4の場合も検知するはずです。
その場合、下記のようなケースも検知します。

TestCaseX(レベル:エラー/ソース:cmdtest/イベントID:137):1&(1|0) →検知

2.2系であれば、条件式ビルダーと、テスト機能が使えるはずですので、要求に合う条件式を探ってみてください。

ユーザー kaeru の写真

>ishinow様
私も同様の質問をしておりました。
以下、mocha様にご回答を頂いたフォーラムになります。
チェックしてみて下さい。
http://www.zabbix.jp/node/3681

>karna様
解説頂きありがとうございます。よく理解することが出来ました。
論理演算について理解不足でした。

>kaeru様
質問前に拝見していたのですが自分のケースに当てはめて
考えることが出来ていませんでした。

今後、考えが煮詰まった際にはkama様の解説のように
返り値で一度整理し、テストすることにします。

本件はクローズとさせてください。
お二人ともご対応頂きありがとうございました。