Zabbixのディスカバリールールを使ってFortiGateのネットワークポートの監視設定

2020年8月30日

以前に載せた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
1wan1
2wan2
3dmz
4modem
5ssl.root
7a
8b
9internal2
10internal3
11internal4
12internal5
13internal1

と格納されることになります。マクロ名は複数定義することが可能で、その場合は
 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