ZABBIXでSNMPトラップ監視する
Zabbix serverをインストールしただけではSNMPトラップは監視出来ません。
SNMPトラップを受信してログとして整形してZabbixに渡す仕組みが必要です。
以下3通りの方法が有ります。
・SNMPトラップフォーマッタ (Zabbixサポート契約者が入手可能)
・SNMPTT (オープンソースツール)
・zabbix_trap_receiver.pl (Zabbixのソースに含まれている)
本記事ではログフォーマットのカスタマイズ度が高く、MIBを使ってOIDからメッセージへの変換が可能なSNMPTT(SNMP Trap Translator)を使った方法について解説します。
ポーリングによる通常のSNMP監視についてはこちら↓
必要なパッケージインストール
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/
ファイル配置
配置して解凍します。
snmptt、snmptthandler、snmpttcomvertmibを/usr/sbin/にコピーし、実行権限を付与します。
ユーザを作成し、snmptt.iniをコピーします。
ログディレクトリを作成します。
spoolディレクトリを作成します。
systemdのservice起動ファイルとlogrotate.dファイルをコピーします。
設定
後で出てくるMIBから変換したフォーマットで定義されていないトラップは、このsnmptt.confで定義されたフォーマットでログに出力されます。
SNMPTT起動
snmptrapd 設定/起動
コミュニティはpublicとしています。
snmptrapd snmptt 動作確認
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/に配置します。
MIBを配置したらsnmpttconvertmibコマンドを使ってMIBをSNMPTTが理解出来るフォーマットに変換します。
最初にexportでsnmpttconvertmibコマンドがMIB配置ディレクトリを見つけられるようにします。
snmpttconvertmibコマンドは配置したMIB全てに実行します。
トラップ情報が含まれないMIBの場合はその事が表示され、トラップが含まれるMIBの場合は変換処理の結果数が最後に出力されます。
トラップは標準MIBに含まれているものも有るので、/usr/share/snmp/mibs配下のMIBに対しても、snmpconvertmibコマンドを実行して下さい。
ZABBIXはトラップログとして/var/log/snmptt/snmptt.logを参照しますが、文字列にZBXTRAPが含まれている必要が有ります。
上記コマンドでフォーマットをその様に修正します。
SNMPTTが変換されたMIBファイルを参照出来る様に指定します。
ZABBIX設定
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の設定
snmpv2cでトラップ送信先とコミュニティを指定します。
テスト

RTX1200にL2TP/IPsec接続してトラップを発生させます。
上記の様に2つトラップが来ました。
PP Anonymous interface is upとyrlTunnelLinkUpです。
ユーザ名部分は伏せています。
snmpttconvertmibで変換したファイルを使って、トラップの説明がログに出力されZABBIXに表示されている事が分かります。
RTXのLANポートのLinkUp/Downをトラップする方法はこちら↓
まとめ
SNMPTTを使った方法は工数が必要なのは事実ですが、MIBを使って詳細な説明をメッセージとして出力したりフォーマットの自由度が高い特徴が有ります。
最初に設定すれば運用に有用だと思いますのでトライして下さい。