trap動作の不具合について
SAN SWの電源断を検出するため,SAN SWから電源断時に送出されるtrap文字列をキーにトリガー設定した。
上記で設定した文字列で異常検知するが,同時に発行される別のtrapに反応し障害復旧となってしまう。
異常検知時のtrap
20150907 15:03:45 .1.3.6.1.4.1.1588.2.1.1.1.0.5 Normal "General event" 192.168.81.17 - 3 3 envPS002 Env
Power Supply 2 0 15:03:45 on 09/07/2015 4 3 3
復旧時のtrap
20150907 15:03:45 .1.3.6.1.3.94.0.5 Normal "General event" 192.168.81.17 - 5
【前提条件】
○トリガー設定内容
トリガー条件式:{192.168.81.17:snmptrap[Normal "General event"].str(.1.3.6.1.4.1.1588.2.1.1.1.0.5)}=1
イベント生成:ノーマル + 障害イベントを継続して生成
○zabbix2.2 + CentOS6.5
電源『断』,『復旧』に対して,それぞれ下記のとおり複数のtrapが発生する
trapの内容については添付ファイルを参照ください
基本的な理解としては,トリガー条件式のstrのカッコ内の文字列がある場合にトリガーが発生するものと
理解しておりますが,何故かしら,文字列が含まれないtrapで復旧しております。
どこに問題があるのでしょうか?
上記のとおり,発生直後に意図しないtrapで復旧してしまい,障害が継続していることが検知できません。
ご教示願います。
- trap.txt (2.63 KB)
TNK - 投稿数: 4769
不具合ではありません。
設定されているトリガーで指定された文字列以外が受信されたら
トリガーの条件を満たさないので、トリガーは正常に戻ります。
電源断などと分けたいのであれば、snmpttの設定で、OID毎に処理
をきちんと分けて処理するように設定されたほうが良いでしょう。
しかし、トリガーの状態を障害のままにされたいようですが、そう
してしまうと、今後はそのトリガーの状態をどうやって正常にもど
されるのですか?
現時点のZabbixの仕様として、手動でトリガーの状態を変更するこ
とはできません。
障害が継続しているかどうかは、トラップ以外の方法でも監視され
ることをお勧めします。
ken.t - 投稿数: 16
TNKさん回答ありがとうございます。
仕様である旨,承知しました。
仕様であれば,挙動がすべて理解できます。
回答いただいた内容の以下の点が,知識不足でピンときませんので教えてい
ただけないでしょうか?
『電源断などと分けたいのであれば、snmpttの設定で、OID毎に処理
をきちんと分けて処理・・・』
私の理解ではsnmpttはOIDを人間が認識できる文字に変換するもの。の理解
ですが,これをどのように利用すると目的の監視が行うことができるのでし
ょうか?
また,
『障害が継続しているかどうかは、トラップ以外の方法でも監視され
ることをお勧めします。』
とありますが,具体的にはどのような方法があるのでしょうか?
よろしくお願いします。
TNK - 投稿数: 4769
ご理解頂けたと思いますが、一応簡単に補足しておくと、トリガー
の状態は、トリガーの条件式に合致したら「障害」とみなされ、ト
リガーの条件式に合致しなければ、「正常」とみなされます。
SNMPトラップの監視を行う場合、障害が発生したというトラップと
障害が復旧したというトラップが対応しているものがなかったりし
たと思います。
そうすると、SNMPトラップをトリガーで判定する場合に、特定の障
害に対して障害発生と障害回復をトリガーの条件式で表現すること
が困難です。
もし、将来的にきちんと対応付けできるようになれば、
・障害Aのトラップを受信したら障害とみなす
・障害時に障害A回復のトラップを受信したら正常とみなす
というような条件式を設定することで、特定の障害Aに対して、障
害が発生したら障害Aの回復のトラップを受信するまで障害Aが発生
しているとみなすということが実現できるかもしれません。
ただし、SNMPトラップは欠損することも十分考えられるので、対応
付けできるようなOIDが定義され実装されても、確実な方法ではな
いと思います。
現状では、トラップだけでは障害が発生したことを検知できても、
障害が継続しているかどうかを判別することはできませんので、運
用として、この障害が発生しているかどうかが重要なことであるな
らば、この障害を検知したら担当者が状態を確認するよう、担当者
にメールを送信するなどの対応をすることになるのではないでしょ
うか。
その通りです。
恐らく何らかの資料を参考に設定されたと思うのですが、現在の設
定では、どのようなOIDのSNMTPトラップを受信しても同じメッセー
ジで変換するようにしか設定されていないと思います。
きちんと設定を行えば、OID毎に何のトラップであるかを人間が認
識できる文章に変換することができますので、その文字列でトリガ
ーの条件式を設定することで、発生したOID毎に個別のトリガーや
アクションを設定することができるようになります。
かといって、その機器で利用しているMIB情報のファイルを元に、
手で作成するのは面倒なので、snmpttconvertmibというコマンドを
利用して生成させることができます。
生成したものに、自分がわかりやすいよう手を加えるようにすると
よいでしょう。
以下のURLにあるスライドのP.17あたり以降をご参照ください。
http://www.slideshare.net/qryuu/zabbix20snm-ptt
利用されている機器とどのような情報を取得できるのか、何を確認
されたいのかわかりませんので、ご自身でマニュアルやMIBの情報
を確認して、snmpgetコマンドなどで取得できるような値で障害か
どうかを判別できるかを確認してみてください。
ken.t - 投稿数: 16
TNKさん,回答ありがとうございます。
・現在のSNMP Trapについては,プライベートmibを登録しておりますので,
各OID毎に,何のtrapであるかを認識できるようにしております。
※上記の添付ファイル参照
・トリガーでstr内に,mib変換後の文字列で設定するか,OIDで設定するか
どちらでもよいのだろう。との認識で,簡単なOIDを設定しております。
アドバイスいただきました,urlを参照しましたが,いまいちピンときません。
これは,特定のOIDを個別にMIB登録し,わかり易いtrapを作成し,この
trapでトリガー設定すると,今回のように連続するtrapを受信せず,該当
trapのみ受信し,障害発生が継続状態になるということでしょうか?
よろしくお願いします。
TNK - 投稿数: 4769
アイテムとして、
snmptrap[Normal "General event"]
と設定されているようですから、「Normal "General event"」が含
まれるトラップすべてがそのアイテムの値として収集されているわ
けです。
ですから、
を受信して、トリガーの条件式にある関数str()で障害の条件とな
るOIDを見つけて障害と判定しても、すぐに、
の値が送られてきているので、これだとトリガーの条件式を満たさ
ないのでトリガーのステータスが正常になります。
異なる関係のないトラップと分けたいのであれば、そのようにアイ
テムを設定すれば良いと思います。
例えば、先の例であれば、
snmptrap[envPS002 Env Power Supply]
というようなアイテムにすれば、「envPS002 Env Power Supply」
を含まないトラップに関しては、そのアイテムの値として受信する
ことがなくなるはずです。
よって、
というトラップがZabbixサーバに届いても、そのアイテムの値とし
ては取り込まれないのでトリガーの状態も変更されません。
ken.t - 投稿数: 16
TNKさん,丁寧な回答ありがとうございます。
ようやく理解できました。
障害検知に利用するtrapを別なアイテムとして登録することで,意図せず障害復旧にならない
ようにすればよかったのですね。
個別検知するtrapは,snmptt.confに個別に記載しておけばいいのですね。
大変勉強になりました。ありがとうございました。