BLOG
2017 年 04 月 27 日
ZabbixでSNMPTTを利用してSNMPトラップを監視する
MIRACLE ZBX や Zabbix では、SNMPTT を利用して SNMP トラップを監視することができますが、構成が複雑であり、理解しにくい部分です。今回は MIRACLE ZBX や Zabbix による SNMP トラップ監視の概要と、SNMPTT のインストールから設定、動作確認までを説明します。
Zabbix で SNMPTT を利用して SNMP トラップを監視する
※本記事は、2015 年 08 月 24 日と 2015 年 09 月 29 日に、みらくるブログ「MIRACLE ZBX サポート Tips」上にて掲載したブログ記事を基に、一部編集を加えたものです。
Zabbix / MIRACLE ZBX による SNMP トラップ監視の概要
監視対象から送信された SNMP トラップのデータが、Zabbix(あるいは MIRACLE ZBX) の DB に保存されるまで処理は大まかに以下の流れで行われます。
- 監視対象機器が SNMP トラップを送信する
- 送信されたトラップを snmptrapd(Net-SNMP) で受信する
- snmptrapd が受信したトラップのデータを SNMPTT に渡す
- SNMPTT がデータの書式などを整形して SNMPTrapperFile に出力する
- Zabbix Server の snmp trapper プロセスが SNMPTrapperFile を読み込む
- snmp trapper プロセスがデータを解析して DB に保存する
Zabbix SNMPTT Structure
SNMP トラップの受信は Net-SNMP の snmptrapd で行います。受け取ったデータの変換や整形は SNMPTT で行います。SNMPTT が変換や整形したデータはテキストファイル (SNMPTrapperFile) に出力され、そのファイルを Zabbix Server がログ監視と同じような方法で監視を行います。
環境
本記事では下記の環境を想定しています。
- OS
Asianux Server 4 (Hiranya SP3)※全てのパッケージをインストールしている状態。
kernel-2.6.32-358.14.1.el6.x86_64 - MIRACLE ZBX
zabbix-2.2.9-1.ML6.x86_64 - snmptrapd(Net-SNMP)
net-snmp-5.5-44.AXS4.3.x86_64 - SNMPTT
snmptt-1.4-0.9.beta2.el6.noarch
SNMPTT のインストール
yum を使用して SNMPTT のインストールを行います。レポジトリは EPEL を使用します。
Asianux Server4 (AXS4 SP4) の環境では、事前に perl-IO-stringy パッケージを手動でインストールしてから yum を実行する必要があります。
1. perl-IO-stringy パッケージを手動でインストールする
# wget http://ftp.miraclelinux.com/pub/Asianux/Server/4/Unsupported/extra/SP4/x86_64/perl-IO-stringy-2.110-10.1.AXS4.noarch.rpm
# rpm -ivh perl-IO-stringy-2.110-10.1.AXS4.noarch.rpm
2. EPEL のレポジトリを追加する
# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rp
# rpm -ivh epel-release-6-8.noarch.rpm
3. yum で snmpptt パッケージをインストールする
# yum install snmptt
※net-snmp-perl パッケージがインストールされていない環境では、別途インストールする必要があります。
# yum install net-snmp-perl
snmptrapd の設定と起動
snmptrapd の設定ファイルである snmptrapd.conf を編集します。
snmptrapd.conf では、traphandle ディレクティブで、snmptrapd が受け取った SNMP トラップを SNMPTT の snmptthandler に渡すように設定を行います。OID を指定して渡すプログラムを分けることもできます。ここでは簡易に全てのトラップを snmptthandler で処理するように指定しています。
authCommunity で許可するコミュニティを指定するか disableAuthorization yes と設定することで認証を無効にします。ここでは、コミュニティ名による認証を無効にしています。
設定ファイル :/etc/snmp/snmptrapd.conf
traphandle default /usr/sbin/snmptthandler
disableAuthorization yes
次に snmptrapd の起動オプションを変更します。
SNMP トラップの OID をメッセージに変換する処理は SNMPTT が行います。
そのため、snmptrapd では OID のまま処理をするように snmptrapd の設定ファイルを下記のように変更します。
設定ファイル :/etc/sysconfig/snmptrapd
OPTIONS="-m +ALL -Lsd -On -p /var/run/snmptrapd.pid"
設定ができたら、反映するために snmptrapd サービスを再起動します。
# service snmptrapd restart
※snmptrapd を OS 起動時に自動的に起動する場合には下記を実行します。
# chkconfig snmptrapd on
snmptt の設定と起動
snmptt の動作を設定するファイルは snmptt.ini です。Zabbix との連携のために、各パラメータを以下のように変更します。
設定ファイル :/etc/snmp/snmptt.ini
#snmptt をスタンドアローンではなくデーモンモードで起動する
mode = daemon #NET-SNMP の Perl モジュールを使用するための設定
net_snmp_perl_enable = 1
net_snmp_perl_best_guess = 2 #
日付と時間のフォーマット
date_time_format = %Y/%m/%d %H:%M:%S
#zabbix が参照するログファイルの場所
log_file = /var/log/snmptt/snmptt.log
# 処理の間隔 ( 秒 ) デフォルトでは 5 秒
sleep = 1 # 基本的なデバッグメッセージを出力する
DEBUGGING = 1
DEBUGGING_FILE = /var/log/snmptt/snmptt.debug
DEBUGGING_FILE_HANDLER = /var/log/snmptt/snmptthandler.debug
※参照
http://snmptt.sourceforge.net/docs/snmptt.shtml
SNMPTT が snmp トラップのデータをどのように整形するかのルールを記載します。
設定ファイルはデフォルトの設定では snmptt.conf です。
Zabbix(MIRACLE ZBX)との連携で必要となるのは、EVENT と FORMAT の 2 行です。
書式は下記となります。
設定ファイル :/etc/snmp/snmptt.conf
EVENT event_name event_OID "category" severity
FORMAT format_string
EVENT の event_OID に合致した SNMP トラップに、指定した FORMAT が追加されて SNMPTrapperFile に出力されます。
Zabbix(MIRACLE ZBX)との連携のため、FORMAT の行で ZBXTRAP というキーワード記述して、そのあとに送信元の IP アドレスを記述します。
Zabbix(MIRACLE ZBX)はこの IP アドレスに合致したホストにデータを割り当て、そのホストに設定されている snmptrap[] アイテムの正規表現や snmptrap.failback に合致しているかをチェックを行い合致していればデータを格納します。
以降は下記の例を使用して説明します。
設定ファイル :/etc/snmp/snmptt.conf
EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Test pattern" Red
FORMAT ZBXTRAP $aA A linkDown trap signifies
EVENT linkUp .1.3.6.1.6.3.1.1.5.4 "Test pattern" Blue
FORMAT ZBXTRAP $aA A linkUp trap signifies
EVENT general .* "LOGONLY" Normal
FORMAT ZBXTRAP $aA received unexpected trap
この例では、OID が ".1.3.6.1.6.3.1.1.5.3" か、".1.3.6.1.6.3.1.1.5.4" の SNMP トラップを受信した場合下記のログが記録されます。$aA は送信元の IP アドレスとして展開されます。
SNMPTrapperFile(/var/log/snmptt/snmptt.log)
2015/07/30 07:05:40 .1.3.6.1.6.3.1.1.5.3 Red "Test pattern" localhost - ZBXTRAP 127.0.0.1 A linkDown trap signifies
また、OID が ".1.3.6.1.6.3.1.1.5.3" か、".1.3.6.1.6.3.1.1.5.4" ではない OID の SNMP トラップを受信した場合は、" .*" の設定により下記のログが記録されます。
SNMPTrapperFile(/var/log/snmptt/snmptt.log)
2015/07/30 07:22:59 .1.3.6.1.6.3.1.1.5.6 Normal "LOGONLY" 192.168.0.100 - ZBXTRAP 192.168.0.100 received unexpected trap
※snmptt.conf の設定の詳細については、下記の Web ページを参照してください。
http://snmptt.sourceforge.net/docs/snmptt.shtml
snmptt サービスを起動する前に SNMPTrapperFile を作成し、オーナーとグループを snmptt に変更します。
# cd /var/log/snmptt/
# touch snmptt.log
# chown snmptt.snmptt snmptt.log
snmptt サービスを起動します。
# service snmptt start
OS 起動時に snmptt を自動でに起動する場合は下記を実行します。
# chkconfig snmptt on
Zabbix(MIRACLE ZBX)Server の設定
Zabbix Server の設定ファイルでで SNMP トラップ監視を有効にします。
Zabbix の SNMP Trapper プロセスを起動することと、zabbix server が参照する SNMP トラップが記録されていくファイルを指定します。
/etc/zabbix/zabbix_server.conf
SNMPTrapperFile=/var/log/snmptt/snmptt.log
StartSNMPTrapper=1
※設定の変更を反映するためにはサービスの再起動が必要です。
Zabbix(MIRACLE ZBX)で SNMP トラップ監視するためのアイテムの登録
SNMP トラップを監視するアイテムを使用するためには、ホストに SNMP インターフェイスを追加する必要があります。
ホストに SNMP インターフェイスを追加します。
例 )IP アドレス 192.168.0.100 のホストに SNMP インターフェイスを追加する場合
[ 設定 ]->[ ホスト ]-> 該当のホスト
SNMP インターフェイス : 192.168.0.100
ポート :161
ホストにアイテムを追加します。
タイプには "SNMP トラップ " データ型を " ログ " に設定します。
SNMP トラップを監視するアイテムは下記の 2 種類があります。
snmptrap[regexp]
snmptrap.fallback
snmptrap[regexp] では正規表現にマッチした SNMP トラップを収集します。
snmptrap.fallback では、snmptrap[regexp] にはマッチしない SNMP トラップを収集します。
例 )snmptrap[] を使用し、regexp に "linkDown" を設定する場合
アイテム
名前 :SNMP Trap regexp
タイプ :SNMP トラップ
キー : snmptrap[linkDown]
ホストインターフェイス :192.168.0.100:161
データ型 : ログ
例 )snmptrap[] を使用し、regexp に "linkDown" を設定する場合
アイテム
名前 :SNMP Trap fallback
タイプ :SNMP トラップ
キー : snmptrap.fallback
ホストインターフェイス :192.168.0.100:161
データ型 : ログ
動作確認
設定したアイテムで SNMP トラップが取得できるかの動作確認を行います。
下記の条件で、Linux サーバから SNMP トラップを送信します。
トラップ送信元サーバ : 192.168.0.100
トラップ送信先サーバ : 192.168.0.22
コミュニティ名 :public
バージョン :SNMPv2c
snmptrap コマンドを使用して Zabbix server に SNMP トラップを送信します。
# snmptrap -v 2c -c public 192.168.0.22 '' .1.3.6.1.6.3.1.1.5.3
# snmptrap -v 2c -c public 192.168.0.22 '' .1.3.6.1.6.3.1.1.5.4
# snmptrap -v 2c -c public 192.168.0.22 '' .1.3.6.1.6.3.1.1.5.5
SNMPTrapFile には下記のログが記録されます。
/var/log/snmptt/smmptt.log
2015/07/31 05:33:04 .1.3.6.1.6.3.1.1.5.3 Red "Test pattern" 192.168.0.100 - ZBXTRAP 192.168.0.100 A linkDown trap signifies
2015/07/31 05:34:24 .1.3.6.1.6.3.1.1.5.4 Blue "Test pattern" 192.168.0.100 - ZBXTRAP 192.168.0.100 A linkUp trap signifies
2015/07/31 05:34:26 .1.3.6.1.6.3.1.1.5.5 Normal "LOGONLY" 192.168.0.100 - ZBXTRAP 192.168.0.100 received unexpected trap
アイテムのヒストリには下記のようにデータが記録されます。
SNMPTrapperFile のローテーション
最後に、SNMPTrapperFile は SNMP トラップを受信するたびに増加していきますので、下記のように logrotate を設定するなどの対処を行います。
/etc/logrotate.d/snmptt
/var/log/snmptt/snmptt*.log /var/log/snmptt/snmptthandler.debug {
weekly
notifempty
missingok
}
/var/log/snmptt/snmptt.debug {
weekly
notifempty
missingok
postrotate
/etc/init.d/snmptt reload >/dev/null 2>/dev/null || true
endscript
}
以上、簡単ですが、Zabbix や MIRACLE ZBX で SNMPTT を利用して SNMP トラップを監視する方法を解説しました。
注意事項
- 本ドキュメントの内容は、予告なしに変更される場合があります。
- 本ドキュメントは、限られた評価環境における検証結果をもとに作成しており、全ての環境での動作を保証するものではありません。
- 本ドキュメントの内容に基づき、導入、設定、運用を行なったことにより損害が生じた場合でも、当社はその損害についての責任を負いません。あくまでお客さまのご判断にてご使用ください。