しまねソフト研究開発センター(略称 ITOC)にいます、東です。
いくつか Zabbix 関連の記事を書いていますが、今回はネットワーク機器の監視について書きます。
目標
- SNMPを使ってネットワーク機器(L2スイッチなど)の監視を行う
- 通信量の監視では、わかりやすいラベルで表示する
この「わかりやすいラベルで表示」とは、たとえば、Interface Gi0/1(): Bits received
といった機器のポート番号表示などではなく、そのポートへ何が接続されているかを表す WAN-in
といった表示にしたいということです。
作業手順
機器の登録 CISCO C2960L
機器側の設定
最初に、CISCO の L2 Switch を登録してみます。
まず、コンフィグにて SNMP を許可するように設定変更します。SNMPはリードオンリとし、アクセスを許可するのは 172.16.6.0/24 としておきます。
snmp-server community public RO 10
access-list 10 permit 172.16.6.0 0.0.0.255
Zabbixへ登録
ウェブフロントエンドを使い、監視対象を登録します。
- 左ペインのメニューから 設定 > ホスト とクリックします
- 右ペイン上部の [ホストの作成] をクリックします
- 新しいホストの作成画面が表示されるので、以下の項目を入力します
ホスト名:機器名、今回は CISCO C2960L
テンプレート:Cisco IOS by SNMP
グループ:任意
インターフェース:(追加)をクリックし SNMP を選ぶ
IPアドレス:機器のIPアドレス
SNMPコミュニティー:public
Zabbix6には、CISCO IOS をSNMP監視するための設定テンプレートが用意されていましたので、それを使っています。
監視の開始
しばらく待つと監視が開始されます。
左ペインのメニューから、監視データ
> ホスト
> CISCO C2960L
> 最新データ
と選ぶと、各監視項目ごとの得られた最新データを確認できます。
おそらく最初は、ping や uptime の結果が表示されているだけでしょう。もうしばらく(30分程度?)待つと、テンプレートのディスカバリに設定された項目により、全ポートの通信量なども監視項目として自動追加されるようになります。以下の画面の Interface Gi0/1(): Bits received
行などがそうです。
機器の登録 Alaxala AX2130S
次に、専用テンプレートが用意されていない機器、「Alaxala AX2130S」を登録してみます。
機器側の設定
コンフィグにて SNMP を許可するように設定変更します。SNMPはリードオンリとし、アクセスを許可するのは 172.16.6.0/24 としておきます。
snmp-server community "public" ro "SNMPMNG"
ip access-list standard "SNMPMNG"
10 permit 172.16.6.0 0.0.0.255
Zabbixへ登録
ウェブフロントエンドを使い、監視対象を登録します。
- 左ペインのメニューから 設定 > ホスト とクリックします
- 右ペイン上部の [ホストの作成] をクリックします
- 新しいホストの作成画面が表示されるので、以下の項目を入力します
ホスト名:機器名、今回は Alaxla AX2130S
テンプレート:Network Generic Device by SNMP
グループ:任意
インターフェース:(追加)をクリックし SNMP を選ぶ
IPアドレス:機器のIPアドレス
SNMPコミュニティー:public
テンプレート名に注意してください。「Network Generic Device by SNMP」と「Generic by SNMP」があります。Network がついた方を選ぶようにします。
監視の開始
しばらく待つと監視が開始されます。
左ペインのメニューから、監視データ > ホスト > Alaxla AX2130S > 最新データ と選ぶと、各監視項目ごとの得られた最新データを確認できます。
CISCOと同様に、さらにしばらく待つと、ポート別の通信量なども監視項目としてあがってきます。
ラベルの変更
上記で追加した2種類の機器とも、ポート別の通信量は、テンプレートに設定されたディスカバリーによって自動追加されました。しかし、名前は単にポート番号などが表示されるだけです。これがたとえば、WAN-in
, WAN-out
などと表示されていれば、よりわかりやすくなります。
自動追加された項目のラベルは変更できないようですので、コピーを使って実現してみようと思います。
- 左ペインのメニューから 設定 > ホスト とクリックします
- CISCO C2960L 行の
アイテム
をクリックします - 表示された一覧から、対象のアイテム(今回は
Interface Gi0/24(): Bits received
)をクリックします - 編集できそうな画面が表示されますが、ここの画面はリードオンリなので、画面下部の
[複製]
をクリックします - 以下の項目を変更します
名前:WAN-in
キー:WAN-in
同様に、Interface Gi0/23(): Bits sent も、WAN-out として複製します。
しばらく待つと、複製したアイテム名で値が取得されます。
フルマニュアルでの機器登録
ディスカバリーを使用すると、自動的にネットワークインタフェースなどを検出して監視アイテム登録してくれるので手間がかからない一方、必要以上に監視項目が増えてしまって煩雑に感じることがあります。Zabbixではフルマニュアルでアイテム登録もできるので、その方法を説明します。
ここでは、フルノシステムズの無線LANアクセスポイント ACERA1150を対象にし、SNMPによる基本的な稼働監視と、SSIDごとの通信量の監視を行ってみます。
機器の登録
機器側の設定
この機器は、ウェブブラウザを使って設定をするタイプです。機器のマニュアルに従い、SNMPを有効化します。
Zabbixへ機器の登録
ウェブフロントエンドを使い、監視対象を登録します。
- 左ペインのメニューから 設定 > ホスト とクリックします
- 右ペイン上部の [ホストの作成] をクリックします
- 新しいホストの作成画面が表示されるので、以下の項目を入力します
ホスト名:機器名、今回は Furuno ACERA1150
テンプレート:Generic by SNMP
グループ:任意
インターフェース:(追加)をクリックし SNMP を選ぶ
IPアドレス:機器のIPアドレス
SNMPコミュニティー:public
テンプレート欄は前項の「Network Generic Device by SNMP」とは違い「Generic by SNMP」の方を選ぶようにします。こちらのテンプレートは、ディスカバリーの設定が登録されていないので、今回の用途には最適です。
アイテムの追加
次にSSIDごとの通信量の監視アイテムを登録します。
登録に先立ち、SNMP MIB の仕様を確認します。MIBの細かい仕様がマニュアルなどで公開されている例は、実際それほど多くありません。この ACERA1150 も例に漏れず、マニュアルをみても全く記載がありません。しかし MIB はある程度規格(RFC)化されているので、通信量の監視程度であればさほど難しくありません。
登録にあたり、snmpwalkコマンドを使って、SNMP MIB を表示してみます。
$ snmpwalk -v2c -c public <IPアドレス>
...
IF-MIB::ifDescr.18 = STRING: wlan0ss0
IF-MIB::ifDescr.19 = STRING: wlan0ss1
IF-MIB::ifDescr.20 = STRING: wlan0ss2
IF-MIB::ifDescr.21 = STRING: wlan0ss3
IF-MIB::ifDescr.22 = STRING: wlan1ss0
IF-MIB::ifDescr.23 = STRING: wlan1ss1
IF-MIB::ifDescr.24 = STRING: wlan1ss2
IF-MIB::ifDescr.25 = STRING: wlan1ss3
...
IF-MIB::ifInOctets.18 = Counter32: 2369181245
IF-MIB::ifInOctets.19 = Counter32: 3307289451
IF-MIB::ifInOctets.20 = Counter32: 4066993734
IF-MIB::ifInOctets.21 = Counter32: 4246557252
IF-MIB::ifInOctets.22 = Counter32: 0
IF-MIB::ifInOctets.23 = Counter32: 1606243191
IF-MIB::ifInOctets.24 = Counter32: 2816941778
IF-MIB::ifInOctets.25 = Counter32: 1128
...
IF-MIB::ifOutOctets.18 = Counter32: 1477329598
IF-MIB::ifOutOctets.19 = Counter32: 543325952
IF-MIB::ifOutOctets.20 = Counter32: 2402430042
IF-MIB::ifOutOctets.21 = Counter32: 1076037036
IF-MIB::ifOutOctets.22 = Counter32: 2918
IF-MIB::ifOutOctets.23 = Counter32: 918170542
IF-MIB::ifOutOctets.24 = Counter32: 1448908763
IF-MIB::ifOutOctets.25 = Counter32: 2342
必要なキーワードは、ifInOctets
と ifOutOctets
で、それぞれ入出力パケットの数を示しています。
この機器の仕様では、SSIDを 2.4G帯と5G帯ごとに設定を8個まで登録できるようになっており、ひとつの設定は、wlan0ss0等として表現されることがわかります。
現在8個の設定がされており、MIBツリー内では、wlan0ss0〜wlan1ss3まで現れるので、設定画面は1オリジンでMIBは0オリジンだということが想像できます。
対応するインデクス 18〜25までがそれぞれの設定の入出力パケットの数なので、そのまま ZabbixのSNMP OID欄に ifInOctents.18
等と登録すれば監視が可能です。
しかし今後、たとえば設定の増減をした場合、ifDescrの値が伴って増減するとともにインデクスの値もずれてしまう仕様のようで、それに伴って Zabbix側の設定も変更しないとならないのは不便です。
このような場合にそなえ、Zabbix にはダイナミックインデクスという機能が備わっています。
ベースOID["index","インデックスのベースOID","検索文字列"]
これを使って登録してみましょう。
- 左ペインのメニューから 設定 > ホスト とクリックします
- Furuno ACERA1150 行の
アイテム
リンクをクリックします - 右上の、
[アイテムの作成]
をクリックします - アイテムの入力画面が表示されるので以下の項目を入力します
名前:任意(ここではWLAN1_SSID1_inとした)
タイプ:SNMPエージェント
キー:名前と同じ
SNMP OID:ifInOctets["index", "ifDescr", "wlan0ss0"]
単位:bps
ifInOctetsで取得できるのはオクテット数(≒バイト数)なので、bps(bits per second) で表示するためには8倍する必要があります。
1: 1秒あたりの差分
2: 乗数 8
下段の[追加]
ボタンをクリックし、完了です。
同様に、wlan1ss3 まで8種類登録を行います。
グラフの追加
通信量のグラフを作成し、見える化します。
- 左ペインのメニューから 設定 > ホスト とクリックします
- Furuno ACERA1150 行の
グラフ
リンクをクリックします - 右上の、
[グラフの作成]
をクリックします - グラフの設定画面が表示されるので以下の項目を入力します
名前:任意(ここでは、WLAN1_SSID1とした)
アイテム:追加リンクをクリックし、表示されたアイテム一覧から WLAN1_SSID1_in と WLAN1_SSID1_out を選択
下段の、[追加]
ボタンをクリックし登録完了です。
データがある程度蓄積されると、以下のようなグラフが表示されます。
おわりに
今回は、Zabbix へネットワーク機器を追加し、監視対象としてみました。
Zabbix にデフォルトで備わっている SNMP テンプレートを使えば、ある程度自動的に項目が追加され、簡単に監視を行うことができました。しかしながら、自動追加されたものは名前が変えられないので、複製を使って同じアイテムを作ることで制限を回避しなければなりませんでした。
また、ダイナミックインデックスを使って、フルマニュアルでアイテム登録を登録する方法も試してみました。必要最小限の監視で良い場合は、こちらの方が好まれる場合もあるかもしれません。
ポートが多いものだと、ひとつひとつ画面を使って変更作業するのは、かなり面倒な作業です。こういう場合は、設定をエクスポートしてからエディタ等で編集し、インポートするほうが間違いないかもしれません。
参考文献
- マスタリングTCP/IP SNMP編 緒方 亮/鈴木 暢/矢野 ミチル【共著】 オーム社
- RFC1156 Management Information Base for Network Management of TCP/IP-based internets