ZabbixにてSNMP Trap監視を実装する際に利用される「SNMPTT (SNMP Trap Translator) 」では、あらかじめsnmpttconvertmib
コマンドを使用してMIBファイルの変換を行い、SNMPTTが解釈できるフォーマットに変換したうえで登録する必要がある。
本記事では、snmpttconvertmib
によるMIBの変換を行う手順と、変換したファイルを登録する手順を記載する。
環境
- OS : CentOS 8.1
- Zabbix : 5.0.8
- SNMPTT : v1.4.2
単体ファイルの変換手順
単体ファイルの変換例として、QNAPのMIBであるNAS.mib
を使って変換作業を説明する。
1. 作業用ディレクトリの確認
MIBファイルは、MIBファイルの中で他のMIBファイルを参照する場合がある。snmpttconvertmib
では、他MIBファイルを参照するような場合でも変換することができるが、その際に参照するMIBファイルを所定のディレクトリ (MIB search path) に配置しておく必要がある。
MIB search path: /root/.snmp/mibs:/usr/share/snmp/mibs
参照するファイルが見つからない場合はCannot find module
というエラーで変換に失敗する。こちらのエラー内容は、本記事の最後に参考情報として記載した。
今回はMIB search pathとなっている/root/.snmp/mibs
にMIBファイルを配置する。このディレクトリはMIB変換作業用のディレクトリとしても使用する。
上記をふまえ、今回MIBの変換に使用するディレクトリ構成を整理すると以下のようになる。
パス | 説明 |
---|---|
/root/.snmp/mibs |
オリジナルのMIBファイル配置先 |
/root/.snmp/mibs/snmpttconf |
SNMPTT用変換ファイル出力先 |
2. 作業用ディレクトリにMIBファイルを配置
作業用ディレクトリを作成し、変換対象のMIBファイルをコピーして配置する。
# mkdir -p /root/.snmp/mibs/snmpttconf
# cd /root/.snmp/mibs
# cp ~/NAS.mib .
3. snmpttconvertmib
にて変換
snmpttconvertmib
のコマンド構文は以下の通り。[SNMPTT用変換ファイル]
はsnmptt.conf.製品名
といった名前で統一して作成するとMIBファイルが増えたとしても管理しやすくてよいだろう。
# snmpttconvertmib --in=[MIBファイル] --out=[SNMPTT用変換ファイル]
今回はQNAP用のMIBとなるので、snmptt.conf.QNAP
という名前で変換ファイルを作成することにする。
snmpttconvertmib
を実行すると最後に変換結果が表示される。Failed translations
が0となっており、MIBの変換がすべて成功していることを確認しておこう。
# snmpttconvertmib --in=NAS.mib --out=snmpttconf/snmptt.conf.QNAP
***** Processing MIB file *****
snmptranslate version: NET-SNMP version: 5.8
severity: Normal
File to load is: ./NAS.mib
File to APPEND TO: snmpttconf/snmptt.conf.QNAP
MIBS environment var: ./NAS.mib
mib name: QTS-MIB
~(中略)~
Total translations: 6
Successful translations: 6
Failed translations: 0 ★
4. Zabbix検知用の文字列を追加
ZabbixにてSNMP Trapを受信する場合、ZBXTRAP [Trap送信元IPアドレス]
を付与する必要があるので、sed
を使って一括置換を行う。なお、SNMP Trapのイベント名も表示させたいため、以下コマンドでは$N
も付与している。
# cd snmpttconf/
# sed -i 's/FORMAT/FORMAT ZBXTRAP $aA $N/g' snmptt.conf.QNAP
5. 変換ファイルを反映
変換したファイルは/etc/snmp/
にコピーする。
# cp snmptt.conf.QNAP /etc/snmp/
SNMPTTに先ほどコピーした変換ファイルを読み込ませるよう、[TrapFiles]
の★箇所に変換ファイルの追記を行う。
# vi /etc/snmp/snmptt.ini
~(中略)~
[TrapFiles]
# A list of snmptt.conf files (this is NOT the snmptrapd.conf file). The COMPLETE path
# and filename. Ex: '/etc/snmp/snmptt.conf'
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf.QNAP ★
/etc/snmp/snmptt.conf
END
SNMPTT設定反映のため、SNMPTTのサービス再起動を行い完了となる。
# systemctl restart snmptt
複数ファイルの変換手順
複数ファイルの変換例として、VMware製品のMIBを使って変換作業を説明する。VMwareのMIBは以下URLからダウンロードできる。
※ダウンロードにはVMwareアカウント登録が必要。
複数のMIBファイルが含まれたzipファイルをダウンロードでき、本記事ではVMware-mibs-7.0.0-15924762.zip
というファイル名でダウンロードした。
1. 作業用ディレクトリの確認
ディレクトリ構成は単体ファイルの場合と特に変わらず、MIBの変換に使用するディレクトリ構成は以下とする。
パス | 説明 |
---|---|
/root/.snmp/mibs |
オリジナルのMIBファイル配置先 |
/root/.snmp/mibs/snmpttconf |
SNMPTT用変換ファイル出力先 |
2. 作業用ディレクトリにMIBファイルを配置
VMware製品のMIBを解凍すると、vmw
というディレクトリにMIBファイルが展開される。
# unzip VMware-mibs-7.0.0-15924762.zip
# ls -ld vmw/
drwxr-xr-x 3 root root 4096 3月 28 2020 vmw/
作業用ディレクトリを作成し、先ほど解凍した変換対象のMIBファイルをすべてコピーして配置する。
# mkdir -p /root/.snmp/mibs/snmpttconf
# cd /root/.snmp/mibs
# cp ~/vmw/*.mib .
3. snmpttconvertmib
にて変換
for
文を使って、複数のMIBファイルを一度に変換する。変換結果はresult.txt
に出力させる。
# cat /dev/null > result.txt
# for i in `ls *.mib`; do snmpttconvertmib --in=$i --out=snmpttconf/$i.conf >> result.txt 2>&1; done
変換結果のファイルから、MIBファイルの変換に失敗したものがないか確認する。今回は2箇所で失敗していることが確認できる。
# cat result.txt | egrep 'Failed translations.*[1-9]'
Failed translations: 1
Failed translations: 1
ログからもう少し詳細を追うと、Unknown object identifier
のエラーで失敗している (★箇所) ことがわかるが、これはSNMPTTの変換ロジックとMIBの構文のミスマッチに起因する問題のようである。MIBファイルを修正することで対処できそうだが、今回は本題と関係がないので割愛をする。
Processing MIB: LLDP-V2-MIB
#
Split line TRAP-TYPE / NOTIFICATION-TYPE found (Counter32,).
Line: 7
NOTIFICATION-TYPE: Counter32
Enterprise: ieee802dot1mibs
Looking up via snmptranslate: LLDP-V2-MIB::Counter32
Unknown object identifier: LLDP-V2-MIB::Counter32 ★
~(中略)~
Total translations: 2
Successful translations: 1
Failed translations: 1
4. Zabbix検知用の文字列を追加
MIBファイルの数だけ変換ファイルが作成されるため、cat
コマンドを使って1つのファイルに結合する。
# cd snmpttconf/
# cat *.conf > snmptt.conf.VMWARE
ZabbixにてSNMP Trapを受信する場合、ZBXTRAP [Trap送信元IPアドレス]
を付与する必要があるので、sed
を使って一括置換を行う。なお、SNMP Trapのイベント名も表示させたいため、以下コマンドでは$N
も付与している。
# sed -i 's/FORMAT/FORMAT ZBXTRAP $aA $N/g' snmptt.conf.VMWARE
5. 変換ファイルを反映
変換したファイルは/etc/snmp/
にコピーする。
# cp snmptt.conf.VMWARE /etc/snmp/
SNMPTTに先ほどコピーした変換ファイルを読み込ませるよう、[TrapFiles]
の★箇所に変換ファイルの追記を行う。
# vi /etc/snmp/snmptt.ini
~(中略)~
[TrapFiles]
# A list of snmptt.conf files (this is NOT the snmptrapd.conf file). The COMPLETE path
# and filename. Ex: '/etc/snmp/snmptt.conf'
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf.VMWARE ★
/etc/snmp/snmptt.conf.QNAP
/etc/snmp/snmptt.conf
END
SNMPTT設定反映のため、SNMPTTのサービス再起動を行い完了となる。
# systemctl restart snmptt
(参考) Cannot find module
でMIBの変換に失敗する
参考情報として、Cannot find module
でMIBの変換に失敗した場合のsnmpttconvertmib
の出力結果を記載する。参照先のMIBファイルが見つからないことによるエラーとなるため、所定のディレクトリ (MIB search path) に参照するMIBファイルを配置することでエラーが解消される。
# snmpttconvertmib --in=VMWARE-VROPS-MIB.mib --out=VMWARE-VROPS-MIB.mib.conf
***** Processing MIB file *****
snmptranslate version: NET-SNMP version: 5.8
severity: Normal
File to load is: ./VMWARE-VROPS-MIB.mib
File to APPEND TO: ./VMWARE-VROPS-MIB.mib.conf
MIBS environment var: ./VMWARE-VROPS-MIB.mib
mib name: VMWARE-VROPS-MIB
Processing MIB: VMWARE-VROPS-MIB
#
skipping a TRAP-TYPE / NOTIFICATION-TYPE line - probably an import line.
#
Line: 232
NOTIFICATION-TYPE: vmwTrapProblemActive
Variables: vmwAlertAliveServerName vmwAlertEntityName vmwAlertEntityType vmwAlertTimestamp vmwAlertCriticality vmwAlertRootCause vmwAlertURL vmwAlertID vmwAlertMessage vmwAlertType vmwAlertSubtype vmwAlertHealth vmwAlertRisk vmwAlertEfficiency vmwAlertMetricName vmwAlertResourceKind vmwAlertDefinitionName vmwAlertDefinitionDesc vmwAlertImpact vmwAlertNotificationRules
Enterprise: vmwAlertTrap
Looking up via snmptranslate: VMWARE-VROPS-MIB::vmwTrapProblemActive
MIB search path: /root/.snmp/mibs:/usr/share/snmp/mibs
Cannot find module (VMWARE-TC-MIB): At line 15 in ./VMWARE-VROPS-MIB.mib ★
Cannot find module (VMWARE-PRODUCTS-MIB): At line 17 in ./VMWARE-VROPS-MIB.mib ★
Did not find 'VmwLongDisplayString' in module #-1 (./VMWARE-VROPS-MIB.mib)
Did not find 'vmwVrops' in module #-1 (./VMWARE-VROPS-MIB.mib)
Unlinked OID in VMWARE-VROPS-MIB: vmwVropsMIB ::= { vmwVrops 1 }
Undefined identifier: vmwVrops near line 19 of ./VMWARE-VROPS-MIB.mib
Cannot adopt OID in VMWARE-VROPS-MIB: vmwVropsMIB ::= { vmwVrops 1 }
Cannot adopt OID in VMWARE-VROPS-MIB: vmwTrapTest ::= { vmwAlertTrap 200 }
~(以下略)~
0 件のコメント:
コメントを投稿