SNMPで死活監視は可能か

タイトルの通りですが、SNMPでNW機器の死活監視はできるのでしょうか。

SNMPで値を引いた際にタイムアウトしたことをトリガーに書けばよいとは思いますが、どういったトリガーを書けばよいでしょうか。

どなたかご存知でしたらお教えください。

コメント表示オプション

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

利用されているZabbixのバージョンを記載頂けていませんが、どの
バージョンを利用されているのですか?

新しいバージョンであれば、SNMPだけでの死活監視もできなくはな
いのですが、設定が複雑になります。

というのも、Zabbixの標準で用意されているSNMPを利用したアイテ
ムを取得時にタイムアウトが発生した場合、そのアイテムは「取得
不可」という状態になってしまいます。
古いバージョンのZabbixでは、その「取得不可」になったタイミン
グでトリガーを仕掛けることができません。

新しいバージョンのZabbixであれば、アクションの実行の契機(イ
ベントソース)に、これまでのトリガーやディスカバリなどとは別
に「内部イベント」という定義が追加されているので、これを利用
して取得不可になったこと通知することができます。

以下のURLもご参照ください。

ご参考:3 取得不可のアイテムに関する通知の受信
  https://www.zabbix.com/documentation/2.2/jp/manual/config/notifications/...

他の視点で、ネットワーク的に到達できないこと、pingの応答が無
いことを持って機器の障害と判断するのであれば、アイテムとして
シンプルチェックのicmppingを利用する方法もあると思います。

こちらであれば、応答が無ければその時点でトリガーを発生させる
ことが可能です。

ユーザー miso の写真

ご回答ありがとうございます。
Zabbixのバージョンは2.4です。

参考URLを拝見しました。

結論としては、
トリガーでの死活監視(イベント通知)→不可能
アクションでの死活監視(メール通知)→可能
ということでしょうか。

ユーザー TNK の写真

結論としては、
トリガーでの死活監視(イベント通知)→不可能
アクションでの死活監視(メール通知)→可能
ということでしょうか。

いいえ、違います。

まずは、Zabbixの用語をご理解頂くことから進めて頂ければと思います。

アイテム、トリガー、アクションの関係は、アイテムで値を取得し、その値が
トリガーの条件式で判断され、障害もしくは障害回復のどちらかの条件であれ
ば、イベントが発生してアクションが実行されます。

別のルートで、トリガーとは別に発生した内部イベントを契機にアクションを
実行することもできます。

トリガーでNG、アクションでOKということではありません。

ユーザー heya の写真

こんにちは。

アイテムでは SNMP で必ず取れる値を取ってくる設定にし、トリガーで nodata を使ったらなんとかなりませんかね?(agent.ping みたいな感じで)

ユーザー TNK の写真

残念ながら、アイテムの状態が取得不可になってしまった場合には、
nodata()が有効に機能しません。

例えば、

 {ホスト名:アイテム名.nodata(3m)}=1

とかトリガーに設定したとしても、値が取得できなくなってしまっ
てアイテムの状態が「取得不可」のままですと、3分経過してもト
リガーは発生しません。

zabbix_senderなどでサーバに値を送り込むようなアイテムで、前
回の値取得から指定した時間内にデータが送られてこないような場
合にはnodata()を活用できると思います。

ユーザー heya の写真

TNKさん

そうだったんですか、知らなかった・・・。ありがとうございました。

ユーザー zinten の写真

TNKさん

もしかしたら最新のバージョンだと挙動が違うかもしれませんが
SNMPの監視ってTimeout = NetworkError だからアイテムは取得不可にならないのでは?
ホストのSNMPのステータスが赤色になるだけで。

急にOIDが変わったり、コミュニティ名が変わったり、変な応答が返ってきたりしたときは取得不可になりそうですが。。。

ユーザー TNK の写真

申し訳ありませんでした。2.2.6の環境を作成して確認してみました。

確かに、SNMPの場合はアイテムが取得不可ではなく、ホストが利用
不可(ホスト一覧内のエージェントの状態のSNMPの部分が赤くなる)
になるようです。

そうであるならばと、nodata()を使ってトリガーを作成できるかと
思って試してみたら、トリガーでイベントを発生させることができ
ました。

ということで、

 ・SNMPを利用している場合は、アイテムの値を取得するのにタイ
  ムアウトが発生した場合、アイテム単位で取得不可となるので
  はなくホストが利用不可となる。
  アイテム自体は「取得不可」の状態にならないので、トリガー
  の条件式にnodata()を利用することで、値が取得できていない
  ことを検知可。
  コミュニティ名が変更された場合も同様にネットワークエラー
  となるため、同様の動作となる。

 ・Zabbixエージェントを利用している場合は、そのアイテムの値
  を取得するのにタイムアウトが発生してもアイテムが「取得不
  可」の状態になるだけで、そのアイテムに対してnodata()の条
  件式のトリガーを作成しても検知できない。
  検知するには、内部イベントの発生に対してアクションを設定
  するなどの対処が必要。

でした。

アイテムの種類によって違いがありますのでご注意ください。

追記:
Zabbix 2.4.1でも同様でした。

ユーザー miso の写真

ご検証ありがとうございました。

トリガーのnodata()でSNMPの死活監視を試してみたいと思います。
検証次第結果を書き込みます。

■検証結果追記
以下で出来ました。

・アイテム
タイプ:SNMPv2エージェント
OID:SNMPv2-MIB::sysName.0
・トリガー
{snmp-test-template:sysName.nodata(60)}=1

疑問1:
snmpwalkコマンドではOIDを"sysName"や".1.3.6.1.2.1.1.5"と指定してホスト名が引けるのに対し、zabbixのSNMPでは引けないのはなぜでしょうか。
tcpdumpで引けないときのダンプをみたところ、リクエストに対して GetResponse(27) .1.3.6.1.2.1.1.5=[noSuchInstance] とレスポンスがありました。

疑問2:
SNMPのポーリング間隔とトリガー関数(nodata)の判定間隔は同時なのでしょうか。

どなたかご存知でしたらご教示ください。

ユーザー TNK の写真

疑問1:
snmpwalkコマンドではOIDを"sysName"や".1.3.6.1.2.1.1.5"と指定してホスト名が引けるのに対し、zabbixのSNMPでは引けないのはなぜでしょうか。
tcpdumpで引けないときのダンプをみたところ、リクエストに対して GetResponse(27) .1.3.6.1.2.1.1.5=[noSuchInstance] とレスポンスがありました。

直前にアイテムの設定として「sysName.0」と指定されている通り、後ろの「.0」が
指定されていないからだと思われます。

snmpwalkコマンドであれば、指定したMIB以下のものはすべて表示するかもしれません
が、Zabbixのアイテムとしては、1つの値を取得するように指定してください。

疑問2:
SNMPのポーリング間隔とトリガー関数(nodata)の判定間隔は同時なのでしょうか。

SNMPのアイテムの更新間隔は、そのアイテムの更新間隔で指定できます。

nodata()は、それとは全く別に30秒間隔でチェックが行われます。

ユーザー miso の写真

丁寧な回答ありがとうございました。

おかげさまで活路が見出せました。