2021年8月28日土曜日

【Zabbix】SNMPTTを使ってMIBを変換・登録する

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 件のコメント:

コメントを投稿

人気の投稿