ZABBIX: NWのI/F情報をローレベルディスカバリ機能でうまい具合に料理する


問題

Zabbixのローレベルディスカバリ(LLD)は便利ですよね。

けど、ネットワーク機器に対してテンプレートをそのまま利用すると、

上記のように、アイテム数が多くなって(1つのインターフェース毎に8アイテム)大変です。
本当にモニタリングしたいI/Fは、数ポートしかないのに…
かと言って、DiscoveryのFilterでいちいち、I/F情報を羅列するのも面倒。

そんな悩みありませんか?

やりたいこと

モニタリングしたいI/Fって、通常であればコンフィグでDescriptionの記載をしているでしょう(下記のように)。だったら、Description記載=(イコール)モニタリング対象にすれば良い!!

つまり、MIBの"ifAlias"の情報に、特定の文字"##"が含まれていれば、モニタリング対象のI/Fであると決めることで、アイテム数を最小限に抑えることができます。

これで、もし数十台のNW機器を監視することになっても、1秒あたりの"1秒あたりの監視項目数"を抑えることができます(やらなかったら50ぐらいすぐ超えちゃいます)。
パケット転送量・NW機器の負荷、なによりZabbixサーバの負荷軽減となります。

実現方法

簡単です。
ネットワーク機器用にテンプレート「Template SNMP Interfaces」を使用しているとします。
このテンプレートのディスカバリ部分を2点変更するのみで実現できます。

テンプレート内のディスカバリルールを修正

項目”SNMP OID”の内容を以下の通り変更します。
これにより、ディスカバリ内でマクロ{#IFALIAS}が使用可能となります。

  • discovery[{#SNMPVALUE},IF-MIB::ifDescr,{#IFALIAS},IF-MIB::ifAlias]

テンプレート内のディスカバリルールのフィルタを修正

今まで、{#SNMPVALUE}(つまりifDescr)を正規表現対象としていましたが、ifAliasを正規表現対象とすることで、ディスクリプションに"##"が含まれるi/fのみを対象として抽出できます。

どーでもいい疑問

みなさんも思われたかもしれませんが、
NW機器のI/Fコメント部分はDescriptionコマンドで記載しますが、
MIBのOID名では、ifAliasに登録されています。
下に例があるように、ifDescrは、I/F名(FastEthernet0等)が登録されています。
なんでだろ

[root@sv ~]# snmpwalk -v 1 -c public 192.168.10.2 ifDescr
IF-MIB::ifDescr.1 = STRING: FastEthernet0
IF-MIB::ifDescr.2 = STRING: FastEthernet1
IF-MIB::ifDescr.3 = STRING: BRI0
...
[root@sv ~]# snmpwalk -v 1 -c public 192.168.10.2 ifAlias
IF-MIB::ifAlias.1 = STRING: ## To SV#1
IF-MIB::ifAlias.2 = STRING: ## To SV#2
IF-MIB::ifAlias.3 = STRING: 
...

本番適用の際の考慮点

  • テンプレート「Template SNMP Interfaces」はサーバ等と共用しているので、別テンプレートに複製してから修正する等の工夫が必要
  • ディスカバリの{#SNMPVALUE}は名前変更したり、削除したりする際は気をつけましょう
  • 今回作成した{#IFALIAS}を活用して、表示名を判り易くさせたりするのもよいかも