Status of ZABBIXの値取得について

いつもお世話になっております。
Monitoring - Dashboard に表示される
Status of ZABBIXの値についてご質問させて頂きます。

【質問内容】
現在、下記に記載した内容で画面から値を確認する事が出来るのですが、この値をDBサーバから直接SQL文を実行し取得する方法をご教示頂けないでしょうか。
自分でも試した見たのですが、上手く取得できなかった為今回フォーラムへ投稿させて頂きました。

この値を取得したい理由として、自動で取得するようにスクリプトを作成し、それをcronに登録しメールで送信する様な仕組みを作りたい為です。

お忙しい所、恐れ入りますが宜しくお願いいたします。

【環境】
CentOS 5.4
ZABBIX 1.6.5
MySQL 5.0.45

【現在のステータス】
-----------------------------------------------------------
Status of ZABBIX

Parameter Value Details
ZABBIX server is running No -
Number of hosts (monitored/not monitored/templates) 168 7 / 114 / 47
Number of items (monitored/disabled/not supported) 325 325 / 0 / 0
Number of triggers (enabled/disabled)[true/unknown/false] 338 338 / 0 [2 / 332 / 4]
Number of users (online) 2 1
Required server performance, new values per second 3.8639 -
-----------------------------------------------------------

コメント表示オプション

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

どのように上手く取得できなかったのでしょうか?

「include/config.inc.php」内のget_status()という関数は確認されましたか?
中で利用している定数は、「include/defines.inc.php」で定義されていると思います。

一部だけそれらを参照してSQL文に展開すれば以下のようになります。

総トリガー数:
<code>
SELECT COUNT(DISTINCT t.triggerid) as cnt FROM triggers t, functions f, items i, hosts h
WHERE t.triggerid=f.triggerid AND f.itemid=i.itemid AND i.status=0 AND i.hostid=h.hostid AND h.status=0;
</code>
有効トリガー数:
<code>
SELECT COUNT(DISTINCT t.triggerid) as cnt FROM triggers t, functions f, items i, hosts h
WHERE t.triggerid=f.triggerid AND f.itemid=i.itemid AND i.status=0 AND i.hostid=h.hostid AND h.status=0 and t.status=0;
</code>
無効トリガー数:
<code>
SELECT COUNT(DISTINCT t.triggerid) as cnt FROM triggers t, functions f, items i, hosts h
WHERE t.triggerid=f.triggerid AND f.itemid=i.itemid AND i.status=0 AND i.hostid=h.hostid AND h.status=0 and t.status=1;
</code>
障害トリガー数:
<code>
SELECT COUNT(DISTINCT t.triggerid) as cnt FROM triggers t, functions f, items i, hosts h
WHERE t.triggerid=f.triggerid AND f.itemid=i.itemid AND i.status=0 AND i.hostid=h.hostid AND h.status=0 and t.status=0 and t.value=1;
</code>
不明トリガー数:
<code>
SELECT COUNT(DISTINCT t.triggerid) as cnt FROM triggers t, functions f, items i, hosts h
WHERE t.triggerid=f.triggerid AND f.itemid=i.itemid AND i.status=0 AND i.hostid=h.hostid AND h.status=0 and t.status=0 and t.value=2;
</code>
正常トリガー数:
<code>
SELECT COUNT(DISTINCT t.triggerid) as cnt FROM triggers t, functions f, items i, hosts h
WHERE t.triggerid=f.triggerid AND f.itemid=i.itemid AND i.status=0 AND i.hostid=h.hostid AND h.status=0 and t.status=0 and t.value=0;
</code>

アイテムやホストに関しても同様にできると思いますので、再度確認されてみてはいかがでしょうか。

ただし、Zabbixサーバの起動状態に関しては、DB上にあるデータを確認するのではなくソケットで接続可能かをチェックしているようです。

ユーザー hiro_poo の写真

TNK様 

ご回答頂き有難う御座います。

上手く行かなかった部分に関し、言葉足らずで申し訳座いません。
上記関数は確認していたのですが、SQL文の作成にミスがあり表示結果と異なる値が取得されたため、
「上手く取得できなかった」と記載させていただきました。

ご教示頂いたSQL文ですがとても助かりました、ありがとうございます。
アイテムやホストに関しても再度関数を確認してみます。

お忙しい所、ご回答頂きありがとうございました。