SNMPトラップを受信して Zabbix から監視をするための設定メモです。Zabbix の公式マニュアルでも推奨している SNMPTT(snmptthandler-embedded)を使って設定してみました。トラップを受信する snmptrapd 、トラップの書式を整える SNMPTT など登場人物が多いため設定がやや複雑ではありますが、できるだけ分かりやすくを心がけてまとめてみました。
サーバ構成
Zabbixサーバのバージョンは 2.4 、SNMPエージェントは CentOS6.6 です。IPアドレスはご自分の環境に読み替えてください。
Zabbix 2.4 SNMPトラップ受信の流れ
上のスライドは、かなりはしょった説明です(^^;) 詳細は公式マニュアル SNMPトラップ | Zabbix Documentation 2.2 をご参照ください。
iptables の設定
SNMPトラップはUDP162番ポートで受信します。iptables などでパケットフィルタリングをしている場合は、ポートを開けておきましょう。
vi /etc/sysconfig/iptables
---(下記を追加)--------------------------- -A INPUT -p udp --dport 162 -j ACCEPT
・iptablesを再起動します
service iptables restart
インストール
NET-SNMP のインストール
yum -y install net-snmp net-snmp-perl
SNMPTT のインストール
・EPELリポジトリの追加(SNMPTTのインストールに必用です)
rpm -ivh rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
・SNMPTTのインストール(1.4-0.9.beta2)※バージョンは2015年3月11日時点のものです。
yum -y install snmptt
・EPELリポジトリの無効化
vi /etc/yum.repos.d/epel.repo
---(下記を変更)---------------------------
[epel]
name=Extra Packages for Enterprise Linux 6 – $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
↓
enabled=0
------------------------------
snmptrapd の設定
vi /etc/snmp/snmptrapd.conf
---(下記を追加)--------------------------- authCommunity log,execute,net s79bjf1q perl do "/usr/share/snmptt/snmptthandler-embedded";
authCommunity の「s79bjf1q」がSNMPのコミュニティ名です。コミュニティ名はSNMPのパスワードに該当するものですので、 ある程度複雑なものを設定することをオススメします。
・起動
service snmptrapd start
・自動起動設定
chkconfig snmptrapd on
SNMPTT の設定
日時の書式をZabbix用に設定します。また SNMPTT の syslog 出力はOFFにしておきます。(syslog には snmptrapd が出力します)
vi /etc/snmp/snmptt.ini
---(下記を変更)--------------------------- #date_time_format = ↓ date_time_format = %H:%M:%S %Y/%m/%d syslog_enable = 1 ↓ syslog_enable = 0
・オリジナルのトラップ書式をバックアップします。
mv -i /etc/snmp/snmptt.conf /etc/snmp/snmptt.conf.org
・トラップの書式をZabbix用に設定します。
vi /etc/snmp/snmptt.conf
---(下記を追加)--------------------------- # # Zabbixテスト用 # EVENT general .* "General event" Normal FORMAT ZBXTRAP $aA $ar $1
・起動
service snmptt start
・自動起動設定
chkconfig snmptt on
snmptrapd 起動オプションの変更
SNMPTTのドキュメントによると、snmptrapd 起動オプションを -On に変更することが推奨されています。 これは UCD-SNMP / NET-SNMPのバージョンによっては、MIBのオブジェクトIDとシンボル名が正しく変換されない場合があるためのようです。
vi /etc/rc.d/init.d/snmptrapd
---(下記を変更)--------------------------- OPTIONS="-Lsd -p /var/run/snmptrapd.pid" ↓ OPTIONS="-On -Lsd -p /var/run/snmptrapd.pid"
「-Lsd」は syslog(-Ls) に LOG_DAEMON(-d)ファシリィティで出力するためのオプションです。
・snmptrapd を再起動
service snmptrapd restart
動作確認
以上で snmptrapd と SNMPTT の設定が完了しました。Zabbix の設定をする前に SNMPトラップを受信して、正しくトラップファイルに書き込まれていることを確認します。
SNMPエージェント側
SNMPトラップを送信するため、SNMPエージェントとなるサーバに snmptrap コマンドをインストールします。
yum -y install net-snmp-utils
SNMPトラップを送信します。(root権限で実行してください)
sudo snmptrap -v 2c -c s79bjf1q 172.16.1.10 '' .1.3.6.1.4.1.8072.9999 .1.3.6.1.4.1.8072.9999 s 'TEST'
・snmptrapコマンドの書式
snmptrap -v <SNMPバージョン> -c <コミュニティ名> <ZabbixサーバのIPアドレス> '' <OID> <OID> s '<値>'
Zabbixサーバ側
Zabbixサーバの snmptrapd がトラップを正常に受信しているかを確認します。
tail -f /var/log/messages
Mar 11 05:39:21 zabbix snmptrapd[27606]: 2015-03-11 05:39:21 example.com [UDP: [172.16.1.20]:47705->[172.16.1.10]]:#012.1.3.6.1.2.1.1.3.0 = Timeticks: (21334325) 2 days, 11:15:43.25#011.1.3.6.1.6.3.1.1.4.1.0 = OID: .1.3.6.1.4.1.8072.9999#011.1.3.6.1.4.1.8072.9999 = STRING: "TEST"
SNMPTT がトラップの書式を整えてトラップファイル(SNMPTTのログファイル)へ書込んでいるか確認します。
tail -f /var/log/snmptt/snmptt.log
05:40:32 2015/03/11 .1.3.6.1.4.1.8072.9999 Normal "General event" 172.16.1.20 - ZBXTRAP 172.16.1.20 172.16.1.20 TEST
上記のようなログが出力されていればOKです。
Zabbixサーバの設定
SNMPトラッパーを有効にします。
vi /etc/zabbix/zabbix_server.conf
---(下記を変更)--------------------------- # StartSNMPTrapper=0 ↓ StartSNMPTrapper=1
トラップファイルへのパスの設定が、下記になっていることを確認(もし違ったら変更してください)
SNMPTrapperFile=/var/log/snmptt/snmptt.log
Zabbix3.0では「/var/log/snmptrap/snmptrap.log」になっているので注意です。
・再起動
service zabbix-server restart
SNMPトラップ監視テンプレートの作成
[設定]→[テンプレート]→[テンプレートの作成]をクリックします。
[テンプレート]タブを選択 下記を入力し「追加」をクリックすればテンプレートが作成されます。
テンプレート名:A_Template_SNMP_Trap グループ:A_Templates グループを作成する
SNMPトラップ監視アイテムの作成
[設定]→[テンプレート] 「A_Template_SNMP_Trap」行の「アイテム」をクリックします。
下記を入力/選択し「追加」をクリックすれば SNMPトラップ監視アイテムの作成完成です。
---(設定箇所)---------------------------
名前:SNMPトラップ(テスト用)
タイプ:SNMPトラップ
キー:snmptrap["General"]
データ型:文字列
アプリケーションの作成:snmp
------------------------------
※キー snmptrap の引数は必ずダブルクオート「"」で括ってください。シングルクオート「'」で括ると正しく動作しません。
ホストの設定
[設定]→[ホスト] SNMPエージェントのホストをクリックします。
「ホスト」タブを選択して、SNMPインターフェースの「追加」をクリック、IPアドレスを入力します。
作成したトラップ監視テンプレートにチェックを入れて[選択]をクリックします。
「テンプレートとのリンク」にトラップ監視テンプレートが表示されていることを確認し「更新」ボタンをクリックすればホストの設定完了です。
動作確認
SNMPエージェントからSNMPトラップを送信します。
[監視データ]→[概要] タイプをデータにして「SNMPトラップ(テスト用)」の値をクリック→「最新の値」を選択します。
トラップの内容がZabbixに記録されていることが確認できます。
終わりに
SNMP はネットワーク監視プロトコルとして広く普及していますので、ほとんどのルータやスイッチ、複合機などが SNMP に対応しています。これらの Zabbixエージェントがインストールできない機器でも SNMP を使えば Zabbix で監視することが出来るので便利ですね。
コメント
“zabbixサーバの設定”にトラップファイルパスの指定がないのでは?
デフォルトだと/tmp/zabbix_traps.tmpを見に行くようなのでsnmpttが書き込むファイルパスに合わせる必要があるかと
>とおりすがりさん
コメントありがとうございます。
Zabbix2.4をyum(RPM)からインストールすると、初めから設定ファイルに
「SNMPTrapperFile=/var/log/snmptt/snmptt.log」の記述があるため省略していましたが
念のため、手順に追加させて頂きました。
Zabbix3.0では「SNMPTrapperFile=/var/log/snmptrap/snmptrap.log」に変わっているようですね。