Zabbixサーバのsnmptrapの受信設定について

お世話になります。
snmptrapについてのフォーラムを参考にさせて頂き、Zabbixの設定を行ったのですが、
うまくアイテムに登録されません。
初歩的な問題かもしれないのですが、考えられる原因を教えていただけないでしょうか?

現状の環境や、動作は以下のようになっています。
不足している情報がありましたら、再度提示致しますので、教えて下さい。

【実行環境】
Zabbixバージョン:1.8.16
OS:RHEL5
Hostname:SVPX11
IP:10.200.3.10
192.168.100.105

【最終目的】
ネットワーク機器より、Trapを受信し、受信した際にアラートを発生する

【現状動作】
/var/log/message内に、機器からのトラップは表示されているが、アイテムの最新データを
確認しても表示されない

【設定情報】
*******************************************************************************************************************************
『/etc/snmp/snmptrapd.conf』
authCommunity log,execute acr0-net
traphandle default /etc/zabbix/snmptrap.sh >> /tmp/snmptrap.log

『vi /etc/zabbix/snmptrap.sh』
 #!/bin/sh
 ZABBIX_SENDER="/usr/sbin/zabbix_sender"
 str=""
 HOST="snmptrap"
 KEY="snmptrap"

 while read line; do
 str="$str\n$line"
 done
 
 str=`echo -e $str`

 $ZABBIX_SENDER -c /etc/zabbix/zabbix_agentd.conf -s $HOST -k $KEY -o "$str"

# Debug
echo $str >> /tmp/snmptrap.log

『/etc/zabbix/zabbix_agentd.conf』
 Server=127.0.0.1
 Hostname=SVPX11
 ListenIP=127.0.0.1

 『/etc/zabbix/zabbix_server.conf』
 PidFile=/var/run/zabbix/zabbix_server.pid
 DBName=zabbix
 DBUser=zabbix
 # ListenIP=0.0.0.0

 『/etc/zabbix/zabbix_agent.conf』
 Server=127.0.0.1
 ListenIP=127.0.0.1
 ListenPort=10050
 Hostname=SVPX11

 『/etc/zabbix/zabbix.conf.php』
 $DB["TYPE"] = 'MYSQL';
$DB["SERVER"] = 'localhost';
$DB["PORT"] = '0';
$DB["DATABASE"] = 'zabbix';
$DB["USER"] = 'zabbix';
$DB["PASSWORD"] = '******';
// SCHEMA is relevant only for IBM_DB2 database
$DB["SCHEMA"] = '';

$ZBX_SERVER = 'localhost';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = 'SVPX11';

$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
?>
~
『ホスト』
 名前=snmptrap
 IP=0.0.0.0

 『アイテム』
 説明=snmptrap
 タイプ=zabbixトラッパー
 キー=snmptrap
 データ型=テキスト

*******************************************************************************************************************************

コメント表示オプション

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

wimpさん

下記を実行してみてください。
/usr/sbin/zabbix_sender -z 127.0.0.1 -p 10051 -s snmptrap -k snmptraps -o "TEST"

これでエラーが出るなら環境とか設定に問題があるかと…

ちなみにホストはsnmptrapではなくてSVPX11ではだめなのですか?A(^^;

下記マニュアルです。
英語ですが…A(^^;
https://www.zabbix.com/documentation/1.8/manpages/zabbix_sender

ユーザー wimp の写真

KAZさん

返事ありがとうございます。

教えていただいたコマンドを環境に合わせて以下のように実行したところ、
最新データにテストトラップが表示されました。

実行結果は以下のようになりました。
/usr/bin/zabbix_sender -z 127.0.0.1 -p 10051 -s snmptrap -k snmptrap -o "TEST"
Info from server: "Processed 1 Failed 0 Total 1 Seconds spent 0.000083"
sent: 1; skipped: 0; total: 1

また、ホスト名については参照させていただいた設定例のホストの値が、どれも「snmptrap」や「snmptraps」だったため、
現状ホスト名を「snmptrap」にしていただけでしたので、「snmptrap.sh」のHOSTを「SVPX11」に変更し、教えていただいた
コマンドを少々変更し、実行したところ問題なくひょうじされました。

実行結果は以下のようになりました
/usr/bin/zabbix_sender -z 127.0.0.1 -p 10051 -s SVPX11 -k snmptrap -o "TEST"
Info from server: "Processed 1 Failed 0 Total 1 Seconds spent 0.000107"
sent: 1; skipped: 0; total: 1

ただし、ネットワーク機器からのトラップはまだ取得できていません。
テストの方法としては、検証用のスイッチを再起動し、「Cold Start Trap」を取得し、Zabbixの最新データ上に
「Cold Start Trap」が表示されることを確認しようとしています。

また、ネットワーク機器の再起動を行った際は、/var/log/message内に以下のように表示されています。
snmptrapd[2589]: 2013-08-01 17:33:01 192.168.100.254(via UDP: [192.168.100.254]:162) TRAP, SNMP v1, community acr0-net SNMPv2-SMI::enterprises.207.1.14.36 Cold Start Trap (0) Uptime: 0:00:00.30

以上の状況から何かわかりますでしょうか?
他に確認事項等ありましたら教えていただけないでしょうか?

ご確認よろしくお願いします

ユーザー KAZ の写真

wimpさん

zabbix_sender ~zabbix_server間の設定は問題ないようですね。

ちなみにsnmpは動いてますか?
psコマンドで確認するとこんな感じで表示されます。

# ps -ef|grep snmp
root 1542 1 0 Mar26 ? 00:02:43 /usr/sbin/snmptrapd -Ls1 -p /var/run/snmptrapd.pid
root 4788 4739 0 09:52 pts/1 00:00:00 grep snmp
root 13530 1 0 00:02 ? 00:00:00 /usr/sbin/snmpd -Lf /var/log/snmpd.log -p /var/run/snmpd.pid -a

ユーザー wimp の写真

KAZさん

お返事ありがとうございます

psコマンドを実行したところ以下のようになりました。
ps -ef | grep snmp
root 2579 1 0 17:22 ? 00:00:00 /usr/sbin/snmpd -Lsd -Lf /dev/null -p /var/run/snmpd.pid -a
root 2589 1 0 17:22 ? 00:00:00 /usr/sbin/snmptrapd -Lsd -p /var/run/snmptrapd.pid
root 3519 3166 0 18:03 pts/1 00:00:00 grep snmp

また、念のため「chkconfig --list | grep snmp」と「service --status-all | grep snmp」も実行してみましたので
実行結果を記載します。

【chkconfig --list | grep snmp】
chkconfig --list | grep snmp
snmpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
snmptrapd 0:off 1:off 2:off 3:on 4:on 5:on 6:off

【service --status-all | grep snmp】
service --status-all | grep snmp
rndc: connect failed: 127.0.0.1#953: connection refused
snmpd (pid 2579) is running...
snmptrapd (pid 2589) is running...

他に確認事項等ありましたら、再度採取致します。

ご確認よろしくお願いします

ユーザー heya の写真

こんにちは。

snmptrapd.confを書き換えた後にsnmptrapdを再起動しましたか?
初歩的なことですが私もたまに忘れることがあるので、一応。

ユーザー KAZ の写真

wimpさん

heyaさんの指摘のサービス再起動をした後上手くいかない場合は、
snmptrap.shを以下のように修正してログ出力してみるトラップできているかわかります。


read hostname
read ip
read uptime
read oid
read address
read community
read enterprise
#ログ出力 ↓ここから
echo `date` >> /var/log/zabbix/zabbix_snmptrap.log
echo " Hostname: $hostname" >> /var/log/zabbix/zabbix_snmptrap.log
echo " IP: $ip" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Uptime: $uptime" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Oid: $oid" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Address: $address" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Community: $community" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Enterprise: $enterprise" >> /var/log/zabbix/zabbix_snmptrap.log
echo "" >> /var/log/zabbix/zabbix_snmptrap.log
#ログ出力 ↑ここまで
oid=`echo $oid|cut -f2 -d' '`
address=`echo $address|cut -f2 -d' '`
community=`echo $community|cut -f2 -d' '`
enterprise=`echo $enterprise|cut -f2 -d' '`

ユーザー wimp の写真

heyaさん

お返事ありがとうございます

サービスですが、以下のコマンドで再起動はしております。
念のため、何回かサーバの再起動も行っております。

【再起動コマンド】
service snmp restart
service snmptrapd restart
service zabbix-server restart
service zabbix-agent restart

他に確認事項等ありましたら、再度採取致します。

ご確認よろしくお願いします

ユーザー wimp の写真

KAZさん

お返事ありがとうございます。

「snmptrapd.sh」を以下のように修正しました

cat /etc/zabbix/snmptrap.sh

read hostname
read ip
read uptime
read oid
read address
read community
read enterprise
#ログ出力 ↓ここから
echo `date` >> /var/log/zabbix/zabbix_snmptrap.log
echo " Hostname: $hostname" >> /var/log/zabbix/zabbix_snmptrap.log
echo " IP: $ip" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Uptime: $uptime" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Oid: $oid" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Address: $address" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Community: $community" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Enterprise: $enterprise" >> /var/log/zabbix/zabbix_snmptrap.log
echo "" >> /var/log/zabbix/zabbix_snmptrap.log
#ログ出力 ↑ここまで
oid=`echo $oid|cut -f2 -d' '`
address=`echo $address|cut -f2 -d' '`
community=`echo $community|cut -f2 -d' '`
enterprise=`echo $enterprise|cut -f2 -d' '`

確認なのですが、「#!/bin/sh」はファイル頭にいらなかったでしょうか?
念のため、「#!/bin/sh」ありとなしで、検証用ネットワーク機器の再起動を行い、
トラップを受信してみたのですが、ログは採取出来ていませんでした。

ファイルの権限を取得しましたので、念のため実行結果を記載します。
-rwxrwxrwx 1 root root 856 Aug 1 18:47 snmptrap.sh
-rw-r--r-- 1 root root 99 Jul 31 21:56 snmptrapd.conf
※snmptrapd.cpnfは一度以下の権限でもテストを行っております
-rwxr-xr-x 1 root root 187 Jul 31 21:52 snmptrapd

ログが採取できていないことから、「snmptrapd.conf」が読み込めていないのか、それとも
正常に「snmptrapd.sh」が呼び出せていないのかとおもうのですが、
上記の結果から何か考えられるでしょか?

他に確認事項等ありましたら、再度採取致します。

ご確認よろしくお願いします

ユーザー KAZ の写真

wimpさん

ごめんなさい!
言葉足らずでした!
途中の部分を修正してという意味で…

こんな感じに修正してください。
↓↓↓↓↓↓↓snmptrap.sh↓↓↓↓↓↓↓
#!/bin/bash

# CONFIGURATION
ZABBIX_SERVER="127.0.0.1";
ZABBIX_PORT="10051";
ZABBIX_SENDER="/usr/bin/zabbix_sender";
KEY="snmptrap";
HOST="SVPX11";

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

#ログ出力 ↓ここから
echo `date` >> /var/log/zabbix/zabbix_snmptrap.log
echo " Hostname: $hostname" >> /var/log/zabbix/zabbix_snmptrap.log
echo " IP: $ip" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Uptime: $uptime" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Oid: $oid" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Address: $address" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Community: $community" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Enterprise: $enterprise" >> /var/log/zabbix/zabbix_snmptrap.log
echo "" >> /var/log/zabbix/zabbix_snmptrap.log
#ログ出力 ↑ここまで

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"

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

ユーザー wimp の写真

KAZさん

お返事ありがとうございます

snmptrap.shを以下のように修正しました。

【snmptrap.sh】
cat /etc/zabbix/snmptrap.sh
#!/bin/bash

# CONFIGURATION
ZABBIX_SERVER="127.0.0.1";
ZABBIX_PORT="10051";
ZABBIX_SENDER="/usr/bin/zabbix_sender";
KEY="snmptrap";
HOST="SVPX11";

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

#ログ出力 ↓ここから
echo `date` >> /var/log/zabbix/zabbix_snmptrap.log
echo " Hostname: $hostname" >> /var/log/zabbix/zabbix_snmptrap.log
echo " IP: $ip" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Uptime: $uptime" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Oid: $oid" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Address: $address" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Community: $community" >> /var/log/zabbix/zabbix_snmptrap.log
echo " Enterprise: $enterprise" >> /var/log/zabbix/zabbix_snmptrap.log
echo "" >> /var/log/zabbix/zabbix_snmptrap.log
#ログ出力 ↑ここまで

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"

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

修正後、実行ファイルの修正なので、サービスの再起動はいらないと思うのですが、念のためサービスの再起動を行い
ネットワーク機器の再起動を行いトラップを受信し、「/var/log/zabbix」配下を確認したのですが、ログは作成されていませんでした。

これは、「snmptrapd.conf」から「snmptrap.sh」を呼び出すことに失敗しているのでしょうか?

他に確認事項等ありましたら、再度採取致します。

ご確認よろしくお願いします

ユーザー heya の写真

こんにちは。

SELinuxはどうでしょうか?有効になっている場合、設定を入れないとsnmptrapdがスクリプト(今の場合snmptrap.sh)を起動することはできなかったような気がします。

ユーザー TNK の写真

違うかもしれませんが、snmptrapd.confの

traphandle default /etc/zabbix/snmptrap.sh >> /tmp/snmptrap.log

traphandle default /bin/bash /etc/zabbix/snmptrap.sh >> /tmp/snmptrap.log

と、明示的にbash実行にしてみても変わらないでしょうか?

ユーザー wimp の写真

heyaさん

お返事ありがとうざいます

以下のコマンドを実行しSELinuxの起動状態を確認しました
【起動確認】
/usr/sbin/getenforce
Enforcing

実行結果より、起動していることが分かったため、以下のコマンドを実行し、無効化しました
【無効化コマンド】
setenforce 0

【起動確認】
/usr/sbin/getenforce
Permissive

SELinuxを無効化し、再度ネットワーク機器の再起動を行ったところ、正常にZabbixの最新データに表示されました。

ただ、SELinuxは無効化していいものなのでしょうか?
.shを実行するための設定がわかりましたら教えていただけないでしょうか?

ご確認よろしくお願いします。

ユーザー wimp の写真

TNKさん

お返事ありがとうございます

以下のコマンドでSELinuxを再度有効化し、snmptrapd.confの修正を行いました。

【SELinux有効化】
setenforce 1

【起動確認】
/usr/sbin/getenforce
Enforcing

【snmotrapd.conf】
cat /etc/snmp/snmptrapd.conf
authCommunity log,execute acr0-net
traphandle default /bin/bash /etc/zabbix/snmptrap.sh >> /tmp/snmptrap.log

サービスの再起動を行い、ネットワーク機器の再起動を行い、トラップを受信したのですが、
アイテムに表示されませんでした。

やはり、SELinxの設定が必要なのでしょうか?

他に確認事項等ありましたら、再度採取致します。

ご確認よろしくお願いします

ユーザー KAZ の写真

wimpさん


ただ、SELinuxは無効化していいものなのでしょうか?

SELinuxを有効にしたsnmptrapdの監視は下記の5番以降を参考にされると良いかと…
http://blog.livedoor.jp/tani_masaru/archives/51766630.html


.shを実行するための設定がわかりましたら教えていただけないでしょうか?

実行するファイルにchmodで実行権を与えてください。

ユーザー TNK の写真

KAZさんも書かれていますが、SELinuxを有効にしたままでsnmptrapd
を利用するためには、SELinuxのポリシーの設定追加が必要です。

とりあえずの動作確認であれば、SELinuxを無効にしてしまうのが
簡単ですが、セキュリティを考慮されるのであれば、適切に設定し
てシステムを保護した方が良いでしょう。

ユーザー wimp の写真

KAZさん
TNKさん

お返事ありがとうございます

教えていただいた、下記URLの設定を参考にし、行ったところ、SELinuxを有効化している状態で
アイテムに登録されました。
http://blog.livedoor.jp/tani_masaru/archives/51766630.html

念のため実行内容を記載しておきます。

【モジュール作成】
grep ":snmpd_t" /var/log/audit/audit.log | audit2allow -M snmpd

******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i snmpd.pp

【作成モジュール追加】
/usr/sbin/semodule -i snmpd.pp

以上の操作で問題なくトラップを受信できました。

初歩的な内容だったかもしれませんが、最後までお付き合いありがとうございました。