trap を受信するために必要な snmptrapd の設定について
いつもお世話になります。
snmptrap 使った処理を考えております。
一旦、snmptrapd で受けた後に zabbix_sender に送るべく
スクリプトを作成しております。
snmptrapd の引数は、
OPTIONS="-Ls0 -a -On -p /var/run/snmptrapd.pid"
としています。
スクリプトはまず、
#!/bin/bash
read hostname
read ip
read uptime
として、状態を確認している段階ですが、
trap 受信後 hostname は、
となってしまいます。
/etc/hosts ファイルに登録してやると、ホスト名は表示するようになります。
ip のフィールドには、
UDP: [10.000.0.0]:162->[10.111.1.1]
と入っており、これでは処理がし辛いです。
このままだと、sender に引き渡せません。
snmptrapd の設定に問題があるのか、
zabbix_sender の引き渡し方に問題があるのか
判断がついておりません。
どこに問題があるか教えていただけませんでしょうか。
よろしくお願いします。
heya - 投稿数: 319
こんにちは。
個人的な経験によるものですが、特に何かが悪いとかいうことではなく、「そういうもの」だと思います。標準出力から読めるアドレスの部分は、環境(相手の機器?net-snmpのバージョン?OS?)によって、微妙に形式が違ってくるようです。
私は、perlですが、こんな感じで処理しています($addressがbashスクリプトのipに当たる)。
chomp(my $address = <STDIN>);
$address =~ s/.*?\[//;
$address =~ s/\].*//;
要は、最初の[以前を全て捨てて、最初の]以降も全て捨てるということです。
シェルスクリプトだとこんな感じでしょうか(sedだと最短マッチが使えないのでperlとは正規表現が少し違います)。
ip=`echo $ip | sed -e 's/[^[]*\[//' -e 's/\].*//'`
と、ここまで書いて気づいたんですが、そもそもzabbix_senderにIPアドレスって必要でしたっけ?
Zabbix上のホスト名、アイテムのキー、値さえ指定できればよかったような。
ついでに、ホスト名についてはもう解決していらっしゃるようですが、おまけということで。
ホスト名は、IPアドレスが受信側で名前解決できればそれ(ドメイン部分があってもそのまま)、できなければ<UNKNOWN>になるようです。なので/etc/hostsに書くかDNSに登録するかが必要なんでしょう。
でもこの辺の詳細って、man snmptrapd.confには書いてないんですよね。実際にあれこれ試してみるしか無いというのがなんとも・・・。