複数台のsnmpトラップの設定について

はじめまして

現在、以下の構成にてZABBIXサーバーをたてて
複数台のH/Wからのsnmpトラップを受信しようとしています。

ZABBIXのバージョン:1.6.8
ZABBIXサーバーのOS:2.6.18-128.7AXS3(asianLinux)

snmptrapd.confは以下の記述を追記しております
===================================================
authCommunity log,execute,net <コミュニティー名>
traphandle default /bin/bash <snmptrap.shのフルパス>
===================================================

snmptrap.shの記述についてご教授ください。
================================================
ZABBIX_SERVER="<ZABBIXサーバーのIPアドレス>";
ZABBIX_PORT="10051";

ZABBIX_SENDER="/usr/sbin/zabbix_sender";

KEY=" snmptraps";
HOST="<??>"

# END OF CONFIGURATION

read hostname
read ip
read uptime
read oid
read address
read community
read enterprise

oid=`echo $oid|cut -f2 -d' '`
address=`echo $address|cut -f2 -d' '`
community=`echo $community|cut -f2 -d' '`
enterprise=`echo $enterprise|cut -f2 -d' '`

oid=`echo $oid|cut -f11 -d'.'`
community=`echo $community|cut -f2 -d'"'`

str="$hostname $address $community $enterprise $oid"

$ZABBIX_SENDER -z $ZABBIX_SERVER -p $ZABBIX_PORT -s $HOST -k $KEY -o "$str"

=======================================================

Q.設定ファイルの<HOST>には何を記述したらよろしいでしょうか。
 過去スレッドを見ると「監視対象機器名」とありましたが、
 複数台を監視したい場合にはどういう記述をしたらよろしいでしょうか

すみませんが、ご回答の程お願いいたします

コメント表示オプション

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

nosさん

Q.設定ファイルのには何を記述したらよろしいでしょうか。
 過去スレッドを見ると「監視対象機器名」とありましたが、
 複数台を監視したい場合にはどういう記述をしたらよろしいでしょうか

webフロントエンドで登録するホスト名です。

例えば、host01、host02と言う監視対象があったとします。
その時、host01上のsnmptrap.shは「HOST=host01」となり、webフロントエンドにはhost01と言うホスト名を登録します。
※:host02も同様

下記を参考にして見て下さい。
[url=http://www.zabbix.jp/modules/newbb/viewtopic.php?topic_id=388&forum=6&post_id=1829#forumpost1829]hostを作成時に、状態が不明になる原因について[/url]

ユーザー nos の写真

KAZさん、ご回答ありがとうございます。

ご回答および
いただいたリンク先を確認させていただいたのですが
host01、host02を監視したい場合以下のような記述をするとよいということになりますでしょうか。

======================================================
ZABBIX_SERVER="<ZABBIXサーバーのIPアドレス>";
ZABBIX_PORT="10051";

ZABBIX_SENDER="/usr/sbin/zabbix_sender";

KEY="snmptraps";
HOST01="host01" ←対象機器「host01」
HOST02="host02" ←対象機器「host02」

# END OF CONFIGURATION

read hostname
read ip
read uptime
read oid
read address
read community
read enterprise

oid=`echo $oid|cut -f2 -d' '`
address=`echo $address|cut -f2 -d' '`
community=`echo $community|cut -f2 -d' '`
enterprise=`echo $enterprise|cut -f2 -d' '`

oid=`echo $oid|cut -f11 -d'.'`
community=`echo $community|cut -f2 -d'"'`

str="$hostname $address $community $enterprise $oid"

$ZABBIX_SENDER -z $ZABBIX_SERVER -p $ZABBIX_PORT -s $HOST01 -k $KEY -o "$str" ←host01用のsender起動
$ZABBIX_SENDER -z $ZABBIX_SERVER -p $ZABBIX_PORT -s $HOST02 -k $KEY -o "$str" ←host02用のsender起動

=====================================================

こちらの理解であっていますでしょうか

ユーザー KAZ の写真

nosさん

えーと、考え違いされているかなと。A(^^;
例えば下記の様な環境があったとします。

・L2スイッチ
・L3スイッチ
・LB(ロードバランサ)
・host01(Linux等のインストールされているマシン)

監視対象はL2、L3、LBの3つで、L2やL3、LBはsnmptrapでhost01に情報を送信している。
上記環境ではsnmptrap.shは以下の様になるかと。

<code>
ZABBIX_SERVER=Zabbixサーバのアドレス;
ZABBIX_PORT="10051";

ZABBIX_SENDER="/usr/sbin/zabbix_sender";

KEY="snmptraps";
HOST="host01"

# END OF CONFIGURATION

read hostname
read ip
read uptime
read oid
read address
read community
read enterprise

oid=`echo $oid|cut -f2 -d' '`
address=`echo $address|cut -f2 -d' '`
community=`echo $community|cut -f2 -d' '`
enterprise=`echo $enterprise|cut -f2 -d' '`

oid=`echo $oid|cut -f11 -d'.'`
community=`echo $community|cut -f2 -d'"'`

str="$hostname $address $community $enterprise $oid"

$ZABBIX_SENDER -z $ZABBIX_SERVER -p $ZABBIX_PORT -s $HOST -k $KEY -o "$str"
</code>

ユーザー nos の写真

KAZさん

ご丁寧な回答誠にありがとうございます、完全に勘違いをしておりました。。。ZABBIX導入初心者なもので、お恥ずかしい限りです

「webフロントエンドで登録する名前」とは
「ZABBIXのwebUIで登録するZABBIXサーバーの名前」でしょうか、
「OS上のホスト名」になりますでしょうか

重ね重ねで申し訳ございませんがご教授いただけますようお願いいたします

ユーザー KAZ の写真

nosさん

私も勘違いは良くしてます。
非常にそそっかしい性格なんで…A(^^;

「webフロントエンドで登録する名前」とは
「ZABBIXのwebUIで登録するZABBIXサーバーの名前」でしょうか、
「OS上のホスト名」になりますでしょうか

「ZABBIXのwebUIで登録するZABBIXサーバーの名前」です。

ユーザー nos の写真

KAZさん

ご回答誠にありがとうございます。
「ZABBIXのwebUIで登録するZABBIXサーバーの名前」は
zabbix.conf.phpに記載されている「$ZBX_SERVER」の値でよろしいでしょうか(以下ファイルの抜粋になります)。
============================================
$DB["TYPE"] = "MYSQL";
$DB["SERVER"] = "localhost";
$DB["PORT"] = "0";
$DB["DATABASE"] = "zabbix";
$DB["USER"] = "zabbix";
$DB["PASSWORD"] = "zabbix";
$ZBX_SERVER = "localhost";
$ZBX_SERVER_PORT = "10051";
============================================
こちらの値をsnmptrap.shで設定しても監視対象の機器からはtrapが拾えない状態です。
勘違いしていた際の設定(監視対象機器名)ですとtrapをwebUIで拾えるのですが。。
着目する設定項目などありますでしょうか

ユーザー KAZ の写真

nosさん

「ZABBIXのwebUIで登録するZABBIXサーバーの名前」=「snmptrap.shのHOSTの名前」であれば何でもよいです。

登録した名前のIPアドレスはsnmptrap.shのサーバのIPアドレスになってますか?

すいませんが、拾えた時と拾えなかった時の登録情報をできるだけ細かく書いて頂けませんか?(情報が少なくて判断できなく…)
もちろん、公開できない個所は伏字に変換したりして下さい。

例えば…

■webフロントエンドの設定
<code>
名前 :host01
IPアドレス:192.168.xxx.103
</code>

■host01(192.168.xxx.103)のsnmptrap.sh
<code>
ZABBIX_SERVER="{ZABBIXサーバのIPアドレス}";
ZABBIX_PORT="{ZABBIXサーバの接続ポート(普通は10051)}";
ZABBIX_SENDER="{/zabbixのインストール先}/zabbix_sender";
HOST="host01";
KEY="{アイテム登録するkey名}";
</code>

■アイテムの設定
<code>
Description :アイテム名
Type :ZABBIX trapper
Key :snmptrap.shのKEY
Type of information :Character
</code>

これから本業でお客さん先に行かなきゃいけないので、これ以降は明日になっちゃいます。
すいません。m(__)m

ユーザー KAZ の写真

nosさん

追記として…

Zabbixサーバのアドレスはlocalhostや127.0.0.1のローカル・ループバック・アドレスになってませんか?

していたら、localhostや127.0.0.1はじゃないIPアドレスを指定して下さい。

ユーザー nos の写真

KAZさん

大変お忙しい中、ご教授いただき大変ありがとうございます。。

勘違いしていた際の設定は以下の通りです(見づらくてすみません)

============================================================
■構成
host00:ZABBIXサーバー、IP:192.168.XXX.XXX
host01:監視対象機器#1、IP:AAA.AAA.AAA.AAA
host02:監視対象機器#2、IP:BBB.BBB.BBB.BBB

■勘違いしていた際の設定
1.snmptrap.shの記述(抜粋)
ZABBIX_SERVER="192.168.XXX.XXX";
ZABBIX_PORT="10051";
ZABBIX_SENDER="/usr/sbin/zabbix_sender";

HOST01="host01"
HOST02="host02"

$ZABBIX_SENDER -z $ZABBIX_SERVER -p $ZABBIX_PORT -s $HOST01 -k $KEY -o "$str" ←host01用のsender起動
$ZABBIX_SENDER -z $ZABBIX_SERVER -p $ZABBIX_PORT -s $HOST02 -k $KEY -o "$str" ←host02用のsender起動

2.webUIでの監視対象の追加
・ホスト追加(host01およびhost02)
名前 : host01(host02)
IPアドレス : AAA.AAA.AAA.AAA(BBB.BBB.BBB.BBB)
接続方法 : IPアドレス
ポート : 161

・host01およびhost02に対してアイテム作成
名前 : snmptraps
タイプ : ZABBIXトラッパー
データ : 文字

・host01およびhost01に対してトリガー作成
サーバー上の/var/log/messagesに出力される文字を条件式に記載({<host01>:snmptraps.str(Config)}=1、など)

3.結果
イベントや監視データ⇒最新データではsnmpトラップを受信している模様(config以外のトリガーも出力。。。)

===========================================================
webフロントへのZABBIXサーバーの追加、とは
「設定⇒ホスト」で「ホスト名:host00、IP:192.168.XXX.XXX、ZABBIXエージェントのポート:10050」として追加しなければならいということになりますでしょうか。
アイテムやトリガーは監視対象機器毎に作成するという認識はあっておりますでしょうか。

大変お忙しい中、ご都合のよろしい時にご回答いただけると幸いでございます。

ユーザー TNK の写真

snmptrap.sh内で、
<code>
$ZABBIX_SENDER -z $ZABBIX_SERVER -p $ZABBIX_PORT -s $HOST01 -k $KEY -o "$str" ←host01用のsender起動
$ZABBIX_SENDER -z $ZABBIX_SERVER -p $ZABBIX_PORT -s $HOST02 -k $KEY -o "$str" ←host02用のsender起動
</code>
と2行書いた場合は、host01のみでトラップを発生させた時に、host02にも記録されてしまっていませんか?

また、snmptrap.sh内で、
<code>
HOST="host00"
<中略>
$ZABBIX_SENDER -z $ZABBIX_SERVER -p $ZABBIX_PORT -s $HOST -k $KEY -o "$str"
</code>
というように、zabbix_senderの-sオプションで指定するホストとしてhost00を指定し、host00のアイテムとしてsnmptrapsを登録すれば、host00にhost01とhost02の両方の情報が集約される形になります。

host01、host02を個別にハンドリングするのであれば、snmptrap.sh内の「read hostname」で取得したホスト名を、zabbix_senderの-sオプションの引数に指定されれば良いのではないでしょうか?
この場合、host01、host02の両方にsnmptrapsのアイテムを作成する必要があります。
# 両方同じテンプレートを利用していれば、テンプレートにアイテムやトリガーを追加

もう少し具体的に書くと、snmptrap.shのzabbix_senderの行を以下のように指定します。
<code>
$ZABBIX_SENDER -z $ZABBIX_SERVER -p $ZABBIX_PORT -s $hostname -k $KEY -o "$str"
</code>

ただし、「read hostname」で取得したホスト名と、Zabbix上に登録した「host01」や「host02」と文字列が合致していることが必要ですのでご注意下さい。

ユーザー nos の写真

TNKさん

ご丁寧な回答誠にありがとうございます。
現在情報を集約する形で作成して幸い実現できましたので、
今後個別にハンドリングする設定に変更してみて
どちらが実装しやすいか試してみたいと思います。

この度は誠にありがとうございます。

ユーザー KAZ の写真

nosさん

■質問その1
snmptrap.shはどのホストに置いてますか?
host00のZABBIXサーバーでしょうか?

■質問その2
監視対象機器のhost01、host02はhost00にsnmpを投げてますか?
※:host00にsnmptrapdが動いてるのですか?

上記が全部Yesだとすると…

snmptrap.shのHOSTはhost00になります。
※:監視したい機器はhost01とhost02かも知れませんが…

Zabbixはsnmptrap.shが動いている「機器」で収集したデータを監視してると解釈して下さい。

なので、webフロントエンドのホストもhost00になり、IPアドレスは192.168.XXX.XXXとなります。

追記

webフロントへのZABBIXサーバーの追加、とは
「設定⇒ホスト」で「ホスト名:host00、IP:192.168.XXX.XXX、ZABBIXエージェントのポート:10050」として追加しなければならいということになりますでしょうか。

上記の仮定が正しければ、それでOKです。

アイテムやトリガーは監視対象機器毎に作成するという認識はあっておりますでしょうか。

アイテムは監視対象になりますので、host00のsnmptrap.shのKEYに書いた項目1つになります。(それで、host01/host02の監視ができます。)

トリガーは検知条件なので検知したい項目数分書く必要あります。
例えば、「link down」と「ERROR」のキーワードを検知する場合は、2つ必要になります。

ユーザー nos の写真

KAZさん

ご回答いただき誠にありがとうございます。
KAZさんの仮定されている通りでございます。

ご丁寧な回答のおかげで無事にsnmpトラップを監視することができました

この度は私の理解不足で大変ご迷惑をおかけいたしました
また躓くことがありましたら(おそらく多々あるかもしれませんが・・・)何卒ご指導の程よろしくお願いいたします