English

お問い合わせ

BLOG

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 に保存されるまで処理は大まかに以下の流れで行われます。

  1. 監視対象機器が SNMP トラップを送信する
  2. 送信されたトラップを snmptrapd(Net-SNMP) で受信する
  3. snmptrapd が受信したトラップのデータを SNMPTT に渡す
  4. SNMPTT がデータの書式などを整形して SNMPTrapperFile に出力する
  5. Zabbix Server の snmp trapper プロセスが SNMPTrapperFile を読み込む
  6. snmp trapper プロセスがデータを解析して DB に保存する

zbx-tl-001-01.fw.png

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
データ型 : ログ

 アイテムの設定 1

例 )snmptrap[] を使用し、regexp に "linkDown" を設定する場合

アイテム
名前 :SNMP Trap fallback
タイプ :SNMP トラップ
キー : snmptrap.fallback
ホストインターフェイス :192.168.0.100:161
データ型 : ログ

 アイテムの設定 2

動作確認

設定したアイテムで 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 トラップを監視する方法を解説しました。

注意事項

  • 本ドキュメントの内容は、予告なしに変更される場合があります。
  • 本ドキュメントは、限られた評価環境における検証結果をもとに作成しており、全ての環境での動作を保証するものではありません。
  • 本ドキュメントの内容に基づき、導入、設定、運用を行なったことにより損害が生じた場合でも、当社はその損害についての責任を負いません。あくまでお客さまのご判断にてご使用ください。
サイバートラストのテレワークソリューション
採用情報ページ リニューアル
組込み Linux にプラスして 長期間の製品ライフサイクルをサポート EM+PLS