2017年9月14日木曜日

ZabbixでSNMPを使ってネットワーク機器のトラフィック量を取得する

ZabbixではSNMPを使って機器を監視する機能があり、特にネットワーク機器ではトラフィック量などを取得する場合に便利な機能となる。

今回は仮想ネットワークOSであるVyOSに対して、SNMPによる監視設定を行い、発生しているトラフィック量をZabbixのグラフで表示させる方法を記載する。

情報取得対象機器のSNMP設定確認

取得対象スイッチ側で、SNMPを使って情報取得ができることを事前に確認しておく。ZabbixのサーバOSにログインし、snmpwalkコマンドで確認すればよい。snmpwalkの使い方は以下の通り。

 snmpwalk  -v 2c -c <SNMP community名> <対象機器のIPアドレス>

snmpwalkを実行すると大量の情報が表示されるはずである。もし表示されないようであれば、情報取得対象の設定やコミュニティ名が誤っているなどが考えられるため、設定を確認しよう。

試しに私の環境でsnmpwalkすると以下のような表示結果となる。

# snmpwalk  -v 2c -c public 192.168.33.31
------------------------------
SNMPv2-MIB::sysDescr.0 = STRING: Vyatta VyOS 1.1.7
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.30803
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (503576852) 58 days, 6:49:28.52

~(中略)~

IF-MIB::ifNumber.0 = INTEGER: 3
IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.2 = INTEGER: 2
IF-MIB::ifIndex.3 = INTEGER: 3
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: VMware VMXNET3 Ethernet Controller
IF-MIB::ifDescr.3 = STRING: VMware VMXNET3 Ethernet Controller

~(中略)~

SCTP-MIB::sctpMaxAssocs.0 = INTEGER: 0
SCTP-MIB::sctpValCookieLife.0 = Gauge32: 0 milliseconds
SCTP-MIB::sctpMaxInitRetr.0 = Gauge32: 0
------------------------------

参考となるが、VyOS側のSNMPの設定は以下の通りになる。community名「public」をread-onlyで設定している。

# show service snmp
------------------------------
 community public {
     authorization ro
 }
 trap-source 192.168.33.31
 trap-target 192.168.33.22 {
 }
------------------------------


Zabbixにホストを登録

SNMPの情報が問題なく取得できることを確認したら、次にZabbix側の設定を行う。ZabbixにはSNMPで情報取得を行うためのテンプレートが存在するのでそれを利用する。

まず、監視対象ホストを登録する。「ホスト」タブの「SNMPインターフェース」の箇所に、IPアドレスとポート番号(通常は161)を設定する。


次に「テンプレート」タブにて「Template SNMP Device」を追加する。


最後に、「マクロ」タブにて、以下設定を実施する。

 {$SNMP_COMMUNITY} ⇒ <コミュニティ名>


以上でホストの登録は完了となる。

「Template SNMP Device」は自動的に対象機器のインターフェース情報をSNMPにて取得し、「アイテム」や「グラフ」を自動登録してくれる。これはディスカバリルールで設定されているのだが、このディスカバリルールは1時間(3600秒)間隔で動くので、しばらく待つ必要がある。

ifDescが重複した場合のエラーへの対処

VyOSの場合、ディスカバリルールにて、以下エラーメッセージが表示される場合がある。

------------------------------
Cannot create item: item with the same key "ifAdminStatus[VMware VMXNET3 Ethernet Controller]" already exists.
------------------------------


これは、SNMPのifDescrの値が重複している場合に発生する事象となる。エラーとなった場合は、インターフェースの情報が正しく取得できないので、修正対応を行う。

まず、「テンプレート」から「Template SNMP Interfaces」を選択する(SNMP DeviceではなくSNMP Interfacesを選択)。「ディスカバリルール」の「Network interfaces」を選択する。


下部に「複製」ボタンがあるので、ボタンを押して複製する。複製したものに対して、以下変更を加える。要はifDescrが同じ名前で重複してしまいエラーとなるので、ifIndexに変更することで回避するという対処となる。

 ・名前 : Network interfaces ifIndex
 ・キー : ifIndex
 ・SNMP OID : IF-MIB::ifIndex


なお、普通のスイッチであればifDescrが重複することなどはないと思われる。例えばCiscoスイッチであれば、”GigabitEthernet 0/0”といった値で表示される。

「Network Interfaces ifIndex」のディスカバリルールが作成後、重複して情報を取得しないように「Network Interfaces」のディスカバリルールは無効にしておく。


ホストの設定に戻り、「Template SNMP Device」のテンプレートについて、「リンクと保存データを削除」をしゴミデータの削除を行う。その後、再度「Template SNMP Device」の追加を行う。


1時間ほど待つと、特にエラーもなくSNMP情報の取得に成功するはず。インターフェース名は数字の連番で表示されるので、ややわかりづらくなるのが難点。


トラフィック量のグラフ

取得されたインターフェースのトラフィック量は、グラフにて確認できる。MRTGなどと同じように、Incoming traffic (ポートから見て入力方向)とOutgoing traffic (ポートから見て出力方向)が一つのグラフで表示されるという一般的なものであり、他の監視ソフトを使っている人であっても違和感はないだろう。


以上で設定は完了となる。

VyOSの仕様によりテンプレートの修正対応が必要だったが、普通のスイッチであれば、ホストを登録し「Template SNMP Device」のテンプレートをリンクするだけで設定が完了する。このようにZabbixでは、非常に簡単にネットワーク機器の監視が実現できる。

0 件のコメント:

コメントを投稿

人気の投稿