【ZABBIX】拡張MIB利用でSNMP Trap監視する
こんにちは〜インフラエンジニアのtamolabです!
今回はZBBIXとSNMPを利用したシステム監視について監視するまでの構築手順を書きたいと思います。Zabbixでネットワーク機器などZabbix agentがインストールできない機器、いわゆるエージェントレスな監視を行う際に、SNMP trapのOIDをmibファイルから解決してアラートと検知できるようにしたいというモチベーションです。今回は拡張MIB(ベンダーMIB、エンタープライズMIBとも言う)で監視する手順いついて書きたいと思います!
1.やりたいこと
前回までのお話(【ZABBIX】Zabbix4系とCentOS 7系でSNMP Trap監視する )で、SNMP trapを受けるようになりましたが、ここからはmibを使ってOIDをわかりやすい文字列に変換していきます。
09:52:54 2020/06/03 .1.3.6.1.4.1.9.9.41.2.0.1 Normal "General Events" localhost - ZBXTRAP 127.0.0.1 Unknown
を
09:52:54 2020/06/03 .1.3.6.1.4.1.9.9.41.2.0.1 Normal "Status Events" Switch1 - When a syslog message is generated by the device a SW_MATM warning MACFLAP_NOTIF Host XXXX.xxxx.XxXx in vlan YYY is flapping between port GigabitEthernet1/0/24 and port GigabitEthernet1/0/23
のように表示させていきます。OIDの数字羅列よりも変換させた方がメッセージが具体的にわかりやすいですね。
2. 前提条件
ZabbixでSNMP TRAPを利用した監視ができている状態からスタートします。まだできてないよって方は、まず【ZABBIX】Zabbix4系とCentOS 7系でSNMP Trap監視するをご確認ください!
3. MIBファイルの準備
未解決のOIDに関するMibファイルを準備してください。
Mibファイル取得は下記の方法があります。
・インターネット上で公開されている
・監視対象機器から直接ダウンロードする
・誰かにもらう(対象機器を管理している会社など)
一般的なOIDを検索すればMibファイルも出てくるのでそれをダウンロードして使うことが多いです。CiscoとかAristaなどの拡張Mib(エンタープライズMib)は人からもらう場合が多いです。取得したMibファイルは下記に保存します。
# ディレクトリを用意
$ sudo mkdir /usr/share/snmp/vendor-mibs/
# scpなり、wgetなりでサーバに転送します。
# データ本文を全コピーして貼り付けでもOKです。
$ ls -l /usr/share/snmp/vendor-mibs/<Mibファイル名>.my
-rwxr-xr-x 1 root root 11272 Jul 17 2019 /usr/share/snmp/vendor-mibs/<Mibファイル名>.my
4. MIBファイルのコンバート
Zabbixで扱えるようにMibファイルをコンバートします。
# コンバート後のデータ置き場作成
$ sudo mkdir /root/tmp/
# Mibファイルをコンバートして別の場所に保存する
$ sudo snmpttconvertmib --out=/root/tmp/<Mibファイル名>.conf.org --net_snmp_perl --in=/usr/share/snmp/vendor-mibs/<Mibファイル名>.my
...
Total translations: 114
Successful translations: 114
Failed translations: 0
コンバートが成功すれば、Successful translations:の値とTotal translations:の値は同じになります。
Failedするよくある例として「Mibの依存関係が解決できてない」が考えれれます。<Mibファイル名>.myを見てみると、先頭の方にIMPORTSがあるのですが、FromのMibファイルを同じディレクトリにおいていないと依存関係で怒られてFailedにカウントされます。下記の場合ですと、SNMPv2-SMIやSNMPv2-CONFなどのMibファイルが必要ということです。
IMPORTS
MODULE-IDENTITY, OBJECT-TYPE, Unsigned32, IpAddress, Gauge32
FROM SNMPv2-SMI
OBJECT-GROUP, MODULE-COMPLIANCE
FROM SNMPv2-CONF
DisplayString, DateAndTime, TruthValue
FROM SNMPv2-TC
TimeTicks
FROM SNMPv2-SMI
lumModules, lumMulticastMIB
FROM LUM-REG
MgmtNameString, CommandString, EnableDisable, PmReset
FROM LUM-TC;
5. 文言の整形とiniファイル編集
次に文言の整形と、/etc/snmp/snmptt.iniの編集を行います。
# 文言の整形
$ sudo sudo sed -e "s/^FORMAT\s/FORMAT ZBXTRAP \$aA /g" /root/tmp/<Mibファイル名>.conf.org > /etc/snmp/snmptt/vendor-mibs/<Mibファイル名>.conf$ sudo vim /etc/snmp/snmptt.ini
# 下記を記載
/etc/snmp/snmptt/vendor-mibs/<Mibファイル名1>.conf
/etc/snmp/snmptt/vendor-mibs/<Mibファイル名2>.conf
/etc/snmp/snmptt/vendor-mibs/<Mibファイル名3>.conf
...
# <追加したMibファイルを列挙>
...
# ファイルの最後は下記にする
/etc/snmp/snmptt.conf
OIDを受信した時に、リストの上から順番にMibファイルをチェックしていきます。
どれにもマッチしない場合は/etc/snmp/snmptt.confにマッチさせてGeneral Eventとして出すようにしています。
自分の/etc/snmp/snmptt.iniには60行くらいのMibファイルを記載してます。(Cisco系、Arista系、Fori系、OSPF系、JUNIPER系など)
最後に、/etc/snmp/snmptt.iniファイルを変更したので反映させるためにSNMPTTサービスを再起動します。
$ sudo systemctl restart snmptt
これで以降のOIDはMibファイルによって解決できるようになります。以降は、下記を繰り返すことになります。
Mibファイルで解決できないOIDを受信した
→ Mibファイルの取得
→ zabbix-serverでコンバート
→ SNMPTT再起動
6. キーワード
#CentOS #zabbix #snmp # snmptrap #監視ツール #IT #拡張mib
7. お問い合わせ
本投稿のコメントでも構いませんし、下記からお問い合わせいただいても大丈夫です。
note.tamolab@gmail.com