ログ監視での検知対象絞り込み
現在、下記のような設定をし、ERRORが含まれる全メッセージを検知対象としている。
※他のログ監視のアイテム/トリガも同じ<トリガアクション>を使用している。
---------------------------------
<トリガアクション>
■アクションの実行条件(①and(②or③or④or⑤))
①トリガーの値:障害
②トリガーの深刻度:致命的な障害
③トリガーの深刻度:重度の障害
④トリガーの深刻度:軽度の障害
⑤トリガーの深刻度:警告
■アクションの実行内容
メール送信
<トリガ>
({OpenStack_Compute:log[/var/log/nova/nova-compute.log,ERROR].nodata(600)}=0)
and ({OpenStack_Compute:log[/var/log/nova/nova-compute.log,ERROR].iregexp(ERROR)}<>0)
---------------------------------
パイロット運用し始めて、実際に通知されるERRORメッセージの中に障害として扱う必要がない
ものがあり、除外したいと思ってます。
除外したい文字列「ABCD」が含まれるERRORを検知対象外としたい場合、
どのような条件式とすればよいのでしょうか?
(「ABCD」用の条件式をand条件で追加するのかな。。?)
同様の運用をされている方がいらっしゃいましたら、
ご教示願います。
kaeru - 投稿数: 264
>>Didier0802様
おっしゃられている通り、以下の式をandで追加すればよいと思います。
({OpenStack_Compute:log[/var/log/nova/nova-compute.log,ERROR].iregexp(ABCD)}=0)
→ABCDが含まれている場合iregexpの値は1となり、1=0で障害条件に当てはまらなくなります。
ABCD以外にも除外したい文字列があれば正規表現での対応も可能です。
以下でkodai様が回答して頂いているフォーラムがありましたのでご参考にしてください。
http://www.zabbix.jp/node/1010
※追記
アイテムでERRORを含む文字列に絞っているため、
以下の式はあってもなくても良いかと思います。
({OpenStack_Compute:log[/var/log/nova/nova-compute.log,ERROR].iregexp(ERROR)}<>0)
heya - 投稿数: 319
and でつなぐのもいいですが、トリガーの式が長くなってしまいがちなので、カスタム正規表現を使った方が見やすいと思います。管理→一般設定→正規表現
そこで「文字列が含まれない」や「結果が偽」を使った設定をしておきます。
この正規表現の名前を仮に xxx として、トリガーの iregexp(ERROR) の部分を iregexp(@xxx) のように変えます(名前の前に @ がつきます)。
バージョンは 2.4 か 3.0 ですかね。どちらにしても日本語マニュアルは無いみたいなので、2.2 の日本語マニュアルと 3.0 の英語マニュアルの URL を貼っておきます。
https://www.zabbix.com/documentation/2.2/jp/manual/regular_expressions
https://www.zabbix.com/documentation/3.0/manual/regular_expressions
※追記
書いているうちに kaeru さんが回答されていたようですね。kaeru さんのご指摘の通り、除外が一つならどちらでもあまり変わりませんが除外が増えるならカスタム正規表現を使った方がいいと思います。
Didier0802 - 投稿数: 37
kaeruさん、heyaさん
回答ありがとうございます。
貼付のURLを見てみます。
仰られている通り、「対象外メッセージ」は今後増えていくと想定しているので、
回答を見る限り、カスタム正規表現を使用した方が良いと思ってます。
結果については、また報告できたらと思います。
Didier0802 - 投稿数: 37
kaeruさん、heyaさん
回答ありがとうございます。
貼付のURLを見てみます。
仰られている通り、「対象外メッセージ」は今後増えていくと想定しているので、
回答を見る限り、カスタム正規表現を使用した方が良いと思ってます。
結果については、また報告できたらと思います。
Didier0802 - 投稿数: 37
正規表現にて対象外文字列を登録した結果、該当文字列が含まれるエラーメッセージについては検知しなくなりました。
<正規表現>
No action found for demote in redis 文字列を含む
⇒①「xxxx No action found for demote in redis」入力
テスト条件式結果:真
②検知対象外につき、ログ出力されてもメール通知なし
ただ、正規表現にて複数の文字列を指定した場合に上記の該当文字列が含まれるエラーメッセージも再び検知されてしまいます。
<正規表現>
・No action found for demote in redis 文字列を含む
・Ignoring 文字列を含む
⇒①「xxxx No action found for demote in redis」入力
テスト条件式結果:偽(No action...は、真。Ignoringは偽。)
②共にメール通知される
トリガの条件式は、
({template_A:log[/var/log/messages,error].nodata(300)}=0) and ({template_A:log[/var/log/messages,error].iregexp(@MessageWithoutCheck_messages)}=0) and ({template_A:log[/var/log/messages,error].iregexp(error)}<>0)
としており、テスト条件式の結果に関係なく「0」になると思っているのですが、
やはり、heyaさんの仰る通り、「文字列を含まない」「偽」を使用しなければならないのでしょうか?
※「文字列を含まない」を指定する場合は、
({template_A:log[/var/log/messages,error].iregexp(@MessageWithoutCheck_messages)}<>0)
のような記述になるのかな???
お教え頂けると助かります。
heya - 投稿数: 319
上に書かれた設定の場合、 @MessageWithoutCheck_messages は
(No action ~を含む) and (Ignoring を含む)
という条件です。
iregexp(@MessageWithoutCheck_messages) は、その条件を満たすなら 1、満たさないなら 0 となります。逆にいうと、iregexp(@MessageWithoutCheck_messages) が 0 となるのは
not ((No action ~を含む) and (Ignoring を含む))
のとき、つまり
(No action ~を含まない) or (Ignoring を含まない)
ということなので、両方含むとき以外は 0 となります。
こういう混乱を避けるには、やはり @MessageWithoutCheck_messages では各条件を「文字列が含まれない」や「結果が偽」で指定しておいて、トリガーで {~.iregexp(@MessageWithoutCheck_messages)}=1 のように書くのがいいでしょう。
#=1 は <>0 でもいいですが、個人的には =1 の方が好きです。
Didier0802 - 投稿数: 37
heyaさん
ご回答ありがとうございます。
回答内容、なるほどです。
よくよく整理できていなかったので、助かりました。
---------------------------------------
<正規表現>
・No action found for demote in redis 文字列を含まない
・Ignoring 文字列を含まない
<トリガ条件式>
({template_A:log[/var/log/messages,error].nodata(300)}=0) and ({template_A:log[/var/log/messages,error].iregexp(@MessageWithoutCheck_messages)}=1)
---------------------------------------
という形にしたいと思います。