Zabbixのディスカバリールールを使ってFortiGateのネットワークポートの監視設定
以前に載せたFortiGate用のテンプレートの時点では、FortiGateのネットワークポートの状況についての監視がまだできていませんでしたが、ディスカバリールールを用いて監視できるようにしてみたので、その手順と作成したテンプレートを備忘録として載せておきます。
取得したいインターフェースの一覧はFortiGateのWEB画面で確認すると下記の状態

このインターフェースの名称は、SNMPで
IF-MIB::ifName | .1.3.6.1.2.1.31.1.1.1.1 |
IF-MIB::ifAlias | .1.3.6.1.2.1.31.1.1.1.18 |
から取得できました。試しにsnmpwalk で取得してみると
r# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.2.1.31.1.1.1.1 IF-MIB::ifName.1 = STRING: wan1 IF-MIB::ifName.2 = STRING: wan2 IF-MIB::ifName.3 = STRING: dmz IF-MIB::ifName.4 = STRING: modem IF-MIB::ifName.5 = STRING: ssl.root IF-MIB::ifName.7 = STRING: a IF-MIB::ifName.8 = STRING: b IF-MIB::ifName.9 = STRING: internal2 IF-MIB::ifName.10 = STRING: internal3 IF-MIB::ifName.11 = STRING: internal4 IF-MIB::ifName.12 = STRING: internal5 IF-MIB::ifName.13 = STRING: internal1 [root@watchdog ~]# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.2.1.31.1.1.1.18 IF-MIB::ifAlias.1 = STRING: internet IF-MIB::ifAlias.2 = STRING: IF-MIB::ifAlias.3 = STRING: IF-MIB::ifAlias.4 = STRING: IF-MIB::ifAlias.5 = STRING: SSL VPN interface IF-MIB::ifAlias.7 = STRING: heartbeat1 IF-MIB::ifAlias.8 = STRING: heartbeat2 IF-MIB::ifAlias.9 = STRING: IF-MIB::ifAlias.10 = STRING: IF-MIB::ifAlias.11 = STRING: IF-MIB::ifAlias.12 = STRING: management IF-MIB::ifAlias.13 = STRING:
の様に取得できます。また、無効に設定しているかどうかは、
RFC1213-MIB::ifAdminStatus
から取得ができました。
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.2.1.2.2.1.7 RFC1213-MIB::ifAdminStatus.1 = INTEGER: up(1) RFC1213-MIB::ifAdminStatus.2 = INTEGER: down(2) RFC1213-MIB::ifAdminStatus.3 = INTEGER: down(2) RFC1213-MIB::ifAdminStatus.4 = INTEGER: down(2) RFC1213-MIB::ifAdminStatus.5 = INTEGER: up(1) RFC1213-MIB::ifAdminStatus.7 = INTEGER: up(1) RFC1213-MIB::ifAdminStatus.8 = INTEGER: up(1) RFC1213-MIB::ifAdminStatus.9 = INTEGER: down(2) RFC1213-MIB::ifAdminStatus.10 = INTEGER: down(2) RFC1213-MIB::ifAdminStatus.11 = INTEGER: down(2) RFC1213-MIB::ifAdminStatus.12 = INTEGER: up(1) RFC1213-MIB::ifAdminStatus.13 = INTEGER: up(1)
これらの情報を使いたいため、以下の様にディスカバリールールを定義してみました。

肝心なのは、SNMP OIDの欄の記述で
discovery[{#マクロ名},OID]
の形式で記載します。
この「マクロ名」とはZabbix用語で、一般的には「配列」のようなものでしょうか。
ディスカバリールールのSNMP OIDの欄にこの形式で記載すると、指定したOIDで取得される複数のSNMPVALUEがSNMPINDEXと対になって格納されます。
今回の場合で、discovery[{#IFNAME},1.3.6.1.2.1.31.1.1.1.1] と指定した場合だと
#SNMPINDEX | #IFNAME |
1 | wan1 |
2 | wan2 |
3 | dmz |
4 | modem |
5 | ssl.root |
7 | a |
8 | b |
9 | internal2 |
10 | internal3 |
11 | internal4 |
12 | internal5 |
13 | internal1 |
と格納されることになります。マクロ名は複数定義することが可能で、その場合は
discovery[{$マクロ名1},OID1,{$マクロ名2},OID2,・・・]
の様に記載していきます。今回は、
discovery[{#IFADMINSTATUS},1.3.6.1.2.1.2.2.1.7,{#IFALIAS},1.3.6.1.2.1.31.1.1.1.18,{#IFNAME},1.3.6.1.2.1.31.1.1.1.1]
と設定しました。
そして、フィルターのタブには、展開対象としたい条件を正規表現を使って定義可能で、今回は無効に設定しているインターフェースを除外するために、
#IFADMINSTATUS = 2
を除外したかったので、このように設定しました。

今度は、「アイテムのプロトタイプ」を定義していきます。ディスカバリールールにより展開されて、「アイテム」になる基の定義です。通常の「アイテムの定義」と異なるのは
- 名前にディスカバリールールて定義したマクロを使用することで、何についてのデータなのかを識別できるようにする
- キー、およびSNMP OIDにはSNMPINDEXを含めて定義する
という2点です。具体的な設定例を載せておきます。

このアイテムのプロトタイプを用いて、「トリガーのプロトタイプ」および「グラフのプロトタイプ」を定義することができます。
ディスカバリールールを定義した後は、しばらく待てばルールに則ってアイテム等が作成されますが、早く確認したい場合は、対象のホストの設定画面でディスカバリールールを選択し、手動で監視データの取得を実行します。

その後、少し待つと、設定に問題がなければ以下の様にアプリケーション、トリガー、そしてグラフが作成されます。

今回作成したテンプレートを参考までに載せておきます。
zbx_fortigate60f_templates
