複数zabbixサーバのアラートの監視

複数のzabbixサーバを運用しています。

各zabbixサーバで上がっているアラートを深刻度毎に習得して、

別のzabbixサーバで監視できないかと考えていますが
そういった機能・APIなどはありますか?

皆さん、複数のzabbixサーバを監視する場合、どうされているのでしょうか?

コメント表示オプション

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

各 zabbix サーバのバージョン等をお教え願えますか?
API 等の仕様がバージョン毎に若干異なることもあるので、バージョン等解るほうが回答しやすいです

あと、サーバ間の通信要件・制約等ありますでしょうか?

ユーザー fripper の写真

かなり昔の話になりますが‥1.6.9 を利用していた頃の話です。

proxy 構成での分散監視では、中央集約のサーバにデータが集約された場合に、データ量が大きくなりすぎること
分散拠点毎にWebUIを用意できず、中央集約サーバのUIへアクセスする必要があったこと
の2点から、miurakatsu 様と同じような形で、拠点毎にサーバを構築し、設定はそちらで管理
中央に置いたサーバで拠点毎の状況を監視‥という構成をやっていたことがあります

当時はAPI機能がなかったので、拠点側の エージェント上に、userparameter にて
「自サーバ上での、障害深刻度 n に対する発動中トリガー数」を集約するような
SQL を投げて、カウント数を整数型で返すようなアイテムを定義し、
そのアイテムのみを、中央側のサーバへ登録し、監視していました

障害の発生数が1以上になったら検知して、検知した場合には、その拠点側のサーバUIを参照する、というような運用です

この方法は、現行 2.2 や 次期 2.4、前版 1.8/2.0 でも同じアプローチは可能かと思います
DB のスキーマを解析して、適切なSQLでカウントする必要はありますが‥(汗)

また、API利用ベースだと、event.get API あたりが使えそうな気がします
◆selectTriggers パラメータを指定して、戻される情報にトリガー情報を含めるように指定
      extend を指定するか、もしくは、フィールドリストを指定して、その中に severity カラムを含めて指定する
◆filter オプションで、source を 0 - trigger に指定しておいて、トリガー起点のイベント情報のみをフィルタする
◆filter オプションで、value を 1 - probrem に指定して、障害として判定されているイベントのみにフィルタする

このようにすることで、現在発生中の全障害リストは取得できるかと思います

あとは、APIを呼び出す側のプログラム (java? ruby? perl?) 等で、
戻ってきたリストを、trigger 項目内の severity にて分類・カウントして
その値を戻せば良いかと思います

手元のサーバ (2.0.12) で試しに摂ってみましたが‥相当重いクエリになるようです
他の api でリストが取れればいいんですけど‥思いつきません

た状態で、全ての深刻度に対する

ユーザー miurakatsu の写真

レスありがとうございます。

各サーバのバージョン、ちょっとづつ違うのですが、基本的には、2.0系です。

・SQLにクエリ投げる
・event.get API投げる

といったところという理解でよろしいでしょうか。
ちょっとAPIでチャレンジしてみます。

ユーザー miurakatsu の写真

event.getのAPI投げてみたのですが、
ダッシュボードに表示されている(現在ステータスがOKになってないもの?)件数より
だいぶ多く返ってきてしまいます。
投げているjsonは以下のような形です。

json_str = {
'jsonrpc':'2.0',
'method':'event.get',
'params':{
'output':'extend',
'selectTriggers':'extend',
'filter':{
'value':1,
'source':0
}
},
'auth':zbx_auth, 'id':1}

filterの条件にTriggerのstatusとかも入れられるんでしょうか?

ユーザー fripper の写真

返信遅くなりました

私自身の環境で少し見てみたのですが、前記の条件に加え、
value_changed=1
のものを抽出することで「異常なし」から「異常あり」へ変化した時点のイベントのみを
切り出すことができそうです

おそらく、これでもまだ、ダッシュボードのリストとは一致しないと思います
event.get からでは、これ以上の絞込は無理だと思います
得られた結果リストを自己処理して、不要なものを切って行くしかないかと思います

結果リストに含まれるそれぞれの event 内、trigger オブジェクトの値などから、
さらに絞り込むしかないのだと思います