ZABBIX 7.0 LTSでYAMAHA RTXをSNMPトラップ監視する (Rocky Linux9.4+SNMPTT)

ZABBIXでSNMPトラップ監視する

Zabbix serverをインストールしただけではSNMPトラップは監視出来ません。
SNMPトラップを受信してログとして整形してZabbixに渡す仕組みが必要です。
以下3通りの方法が有ります。

・SNMPトラップフォーマッタ (Zabbixサポート契約者が入手可能)
・SNMPTT (オープンソースツール)
・zabbix_trap_receiver.pl (Zabbixのソースに含まれている)

本記事ではログフォーマットのカスタマイズ度が高く、MIBを使ってOIDからメッセージへの変換が可能なSNMPTT(SNMP Trap Translator)を使った方法について解説します。
ポーリングによる通常のSNMP監視についてはこちら↓

必要なパッケージインストール

.# dnf install net-snmp net-snmp-utils net-snmp-libs net-snmp-perl perl-Time-HiRes perl-Config-General perl-Text-Balanced perl-Config-IniFiles perl-Net-IP

perl-Config-General、perl-Config-IniFiles、perl-Net-IPがdnfで見つからない時はcpanを使ってインストールして下さい

SNMPTTインストール

SNMPTTはsourceforgeからダウンロードします。(2025/3現在 ver1.5)
https://sourceforge.net/projects/snmptt/files/

公式サイト:ドキュメントはこちら
https://www.snmptt.org/

ファイル配置

.# tar xvf snmptt_1.5.tgz
.# cd snmptt_1.5

配置して解凍します。

.# cp snmptt /usr/sbin/
.# chmod +x snmptt /usr/sbin/snmptt
.# cp snmptthandler /usr/sbin/
.# chmod +x /usr/sbin/snmptthandler
.# cp snmpttconvertmib /usr/sbin/
.# chmod +x /usr/sbin/snmpttconvertmib

snmptt、snmptthandler、snmpttcomvertmibを/usr/sbin/にコピーし、実行権限を付与します。

.# adduser -r snmptt
.# mkdir /etc/snmptt
.# chown -R snmptt.snmptt /etc/snmptt
.# chmod 750 /etc/snmptt
.# cp snmptt.ini /etc/snmptt/

ユーザを作成し、snmptt.iniをコピーします。

.# mkdir /var/log/snmptt
.# chown -R snmptt.snmptt /var/log/snmptt
.# chmod -R 755 /var/log/snmptt

ログディレクトリを作成します。

.# mkdir /var/spool/snmptt/
.# chown -R snmptt.snmptt /var/spool/snmptt
.# chmod -R 750 /var/spool/snmptt

spoolディレクトリを作成します。

.# cp snmptt.service /usr/lib/systemd/system/snmptt.service
.# chmod -x /usr/lib/systemd/system/snmptt.service
.# cp snmptt.logrotate /etc/logrotate.d/snmptt

systemdのservice起動ファイルとlogrotate.dファイルをコピーします。

設定

.# vi /etc/snmptt/snmptt.ini
net_snmp_perl_enable = 1
translate_log_trap_oid = 4
log_enable = 1
log_file = /var/log/snmptt/snmptt.log
date_time_format = %Y/%m/%d %H:%M:%S
syslog_enable = 0
mode=daemon
.# vi /etc/snmptt/snmptt.conf
EVENT general .* “General event” Normal
FORMAT ZBXTRAP $aA $N $*

後で出てくるMIBから変換したフォーマットで定義されていないトラップは、このsnmptt.confで定義されたフォーマットでログに出力されます。

SNMPTT起動

.# systemctl start snmptt
.# systemctl enable snmptt
.# systemctl status snmptt

snmptrapd 設定/起動

.# vi/etc/snmp/snmptrapd.conf
authCommunity   log,execute,net public
traphandle default /usr/sbin/snmptthandler
.# vi /etc/sysconfig/snmptrapd
OPTIONS="-On -Lsd -p /var/run/snmptrapd.pid -M /usr/share/snmp/mibs:/usr/share/snmp/venders -m all"

コミュニティはpublicとしています。

.# systemctl start snmptrapd
.# systemctl enable snmptrapd
.# systemctl status snmptrapd

snmptrapd snmptt 動作確認

snmptrap -v 2c -c public 127.0.0.1 "" 1.3.6.1.4.1.8072.9999 1.3.6.1.4.1.8072.9999 s TestTrap
.# tail /var/log/snmptt/snmptt.log
2025/03/08 03:23:53 NET-SNMP-MIB::.iso.org.dod.internet.private.enterprises.netSnmp.netSnmpExperimental Normal "General event" localhost - ZBXTRAP 127.0.0.1 general TestTrap

snmptrapコマンドで127.0.0.1宛にテストトラップを送信し、/var/log/snmptt/snmptt.logにログが出力される事を確認します。

MIB配置と変換

YAMAHA RTXのMIBファイルは以下URLで配布されています。
https://www.rtpro.yamaha.co.jp/RT/docs/mib/

今回はMIBファイルを/usr/share/snmp/venders/に配置します。

.# export MIBDIRS=/usr/share/snmp/mibs:/usr/share/snmp/venders
.# export MIBS=ALL
.# snmpttconvertmib --in=/usr/share/snmp/venders/YOUR-MIB.mib --out=/etc/snmptt/snmptt-convert.conf

MIBを配置したらsnmpttconvertmibコマンドを使ってMIBをSNMPTTが理解出来るフォーマットに変換します。

最初にexportでsnmpttconvertmibコマンドがMIB配置ディレクトリを見つけられるようにします。
snmpttconvertmibコマンドは配置したMIB全てに実行します。

トラップ情報が含まれないMIBの場合はその事が表示され、トラップが含まれるMIBの場合は変換処理の結果数が最後に出力されます。

トラップは標準MIBに含まれているものも有るので、/usr/share/snmp/mibs配下のMIBに対しても、snmpconvertmibコマンドを実行して下さい。

sed -i 's/FORMAT/FORMAT ZBXTRAP $aA $N/g' /etc/snmptt/snmptt-convert.conf

ZABBIXはトラップログとして/var/log/snmptt/snmptt.logを参照しますが、文字列にZBXTRAPが含まれている必要が有ります。
上記コマンドでフォーマットをその様に修正します。

.# vi /etc/snmptt/snmptt.ini
snmptt_conf_files = <<END
/etc/snmptt/snmptt.conf
/etc/snmptt/snmptt-convert.conf  ←※追記
END

SNMPTTが変換されたMIBファイルを参照出来る様に指定します。

.# systemctl restart snmptt

ZABBIX設定

Zabbix server設定

.# /etc/zabbix/zabbix_server.conf
StartSNMPTrapper=1
SNMPTrapperFile=/var/log/snmptt/snmptt.log
.# systemctl restart zabbix-server

SNMPトラップを受けるにはUDP162が開いている必要が有ります。
必要に応じてfirewalldを調整して下さい。今回は検証の為、firewalldを停止しています。

ホスト設定

RTX1200のホストを作成します。
Network Generic Device by SNMPテンプレートをアサインし、SNMPインターフェースを作成します。

トリガー作成

Network Generic Device by SNMPテンプレートにはSNMPトラップアイテム(snmp.fallback)は有るものの、障害を発生させるトリガーが有りません。
それでトリガーを作成します。

条件式:length(last(/Network Generic Device by SNMP/snmptrap.fallback))>=1
障害イベント生成モード:複数 (複数のトラップが同時に来た時の為)

今回の設定は障害の自動復旧は考慮していません。
ダッシュボードから手動クローズする必要が有ります。

RTX1200の設定

administrator
password
.# snmpv2c trap host 192.168.100.210 trap public
.# save

snmpv2cでトラップ送信先とコミュニティを指定します。

テスト

RTX1200にL2TP/IPsec接続してトラップを発生させます。
上記の様に2つトラップが来ました。
PP Anonymous interface is upとyrlTunnelLinkUpです。
ユーザ名部分は伏せています。
snmpttconvertmibで変換したファイルを使って、トラップの説明がログに出力されZABBIXに表示されている事が分かります。

RTXのLANポートのLinkUp/Downをトラップする方法はこちら↓

まとめ

SNMPTTを使った方法は工数が必要なのは事実ですが、MIBを使って詳細な説明をメッセージとして出力したりフォーマットの自由度が高い特徴が有ります。
最初に設定すれば運用に有用だと思いますのでトライして下さい。

TwitterFacebookLinkedInHatenaPocketCopy Link