SNMPトラップを監視対象毎(ホスト毎)に受信したい

お世話になっております。
いつもフォーラムの内容を参考にさせていただいております。

さて早速ですが、SNMP-Trapの処理について質問です。

■目的
SNMP-Trapの受信データを監視対象毎(ホスト毎)にZabbix側へ受け渡したい。

■やろうとしていること
TrapデータからソースIPを抜き出して、
ZabbixのデータベースよりIPをキーにしてホスト名を取得。
そのホスト名とTrapデータをZabbix_senderに引数として渡す。

■質問事項
・ホスト名を取得するテーブルとしては「hosts」が妥当でしょうか?

・「こういった方法のほうがよい」「やめたほうがよい」などのアドバイスがあればご教示ください。
 あるいは、実績などありましたらご教示いただきたく。
 (Perlを利用するつもりです)

■環境
 CentOS6.0
 Zabbix1.8.10-1(Zabbix-JPのRPM版)
 MySQL5.1

以上になります。
すこし大雑把な質問で恐縮ですが、アドバイスをいただけましたら幸いです。

よろしくお願いいたします。

コメント表示オプション

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

IPアドレスとホスト名の対応をDBから取得されるのであれば、1.8系ではhostsテーブルに情報が保存されています。また、Zabbixの設定情報はDB以外にもAPIから取得することもできます。

ホストの数やトラップの数にもよりますが、毎回DBから読み出すと場合によってはI/O負荷がかかるかもしれません。hostsテーブルのデータがすべてDBのreadキャッシュ上に乗っていれば良いのかもしれませんが、制御が難しいところなので、作成されるPerlのプログラム側でhost-IPの情報のキャッシュを持たせるなどの対応を取られた方が良いと思います。

ちなみに、Zabbix 2.0では1ホストに対して複数IPが指定できるようになっているので、IPアドレスの情報はinterfaceテーブルに分離されています。

システムの環境にもよると思いますので一概に「これがベスト」とは言えないのですが、個人的にはZabbixのDBから情報を取得するよりはAPIを利用した方が良いと思いますし、IPとホスト名の対応をDNSに任せられるようであれば、Zabbixの監視設定の設計側を見直される方がより良いと思います。

ユーザー gaius の写真

kodai 様

お世話になります。
早速のご回答ありがとうございます。

確かに負荷は気になっていました。
APIについて現時点で知識を持ちあわせていませんので、まずはDB参照にて実現し、APIについて学習した後に実行方法を変更したいと思います。

本来であればDNSに頼るのが理想なのですが、全てをカバーできない環境にあるため、このような検討にいたりました。

また、2.0の情報もいただきありがとうございます。参考になります。

取り急ぎお礼申し上げます。