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 の写真

こんにちは。

個人的な経験によるものですが、特に何かが悪いとかいうことではなく、「そういうもの」だと思います。標準出力から読めるアドレスの部分は、環境(相手の機器?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には書いてないんですよね。実際にあれこれ試してみるしか無いというのがなんとも・・・。