4 SNMP OIDsの検出
概要
このセクションでは、SNMPデバイスに対してローレベルディスカバリを実行します。
このSNMP OIDのディスカバリ方法は、Zabbix サーバー/プロキシ 6.4 以降でサポートされています。
設定例
1. 次のようなキーを持つSNMPエージェントアイテムを作成します。
walk[.1.3.6.1.4.1.9999.1.1.1.1]

このアイテムは、SNMPテーブル全体に対して1回のwalkを実行し、すべてのテーブルエントリを1回のリクエストで返します。返される形式は、snmpwalkユーティリティの書式オプション -Oe -Ot -On を指定した出力に対応しています。
このアイテムは、次のような複数行のテキスト値を返します。
.1.3.6.1.4.1.9999.1.1.1.1.1.1 = STRING: "Temperature Sensor"
.1.3.6.1.4.1.9999.1.1.1.1.2.1 = STRING: "temp"
.1.3.6.1.4.1.9999.1.1.1.1.3.1 = 100
.1.3.6.1.4.1.9999.1.1.1.1.1.2 = STRING: "Humidity Sensor"
.1.3.6.1.4.1.9999.1.1.1.1.2.2 = STRING: "humidity"
.1.3.6.1.4.1.9999.1.1.1.1.3.2 = 200
2. ディスカバリルールを作成します。
- Name フィールドに、わかりやすいディスカバリルール名を入力します(例: "Discover sensors")。
- Type フィールドで、"Dependent item" を選択します。
- Key フィールドに、説明的なキーを入力します(例: "net.if.discovery")。
- Master item フィールドで、"SNMP walk item" を選択します。

3. Preprocessing タブで、Name ドロップダウンから "SNMP walk to JSON" を選択した前処理ステップを追加し、3つのパラメータを設定します。
- Field name: "{#SENSORNAME}"; OID prefix: ".1.3.6.1.4.1.9999.1.1.1.1.1"; Format: "Unchanged"。
- Field name: "{#SENSORTYPE}"; OID prefix: ".1.3.6.1.4.1.9999.1.1.1.1.2"; Format: "Unchanged"。
- Field name: "{#SENSORVALUE}"; OID prefix: ".1.3.6.1.4.1.9999.1.1.1.1.3"; Format: "Unchanged"。
前処理後、ディスカバリルールはマクロセットのJSON配列を返します。
例:
[
{
"{#SNMPINDEX}": "1",
"{#SENSORNAME}": "Temperature Sensor",
"{#SENSORTYPE}": "temp",
"{#SENSORVALUE}": "100"
},
{
"{#SNMPINDEX}": "2",
"{#SENSORNAME}": "Humidity Sensor",
"{#SENSORTYPE}": "humidity",
"{#SENSORVALUE}": "200"
}
]
各オブジェクトは1つの検出されたセンサーを表し、{#SNMPINDEX}、{#SENSORNAME}、{#SENSORTYPE}、{#SENSORVALUE} などのマクロを提供します。
これらはSNMPインデックスごとにグループ化されます。SNMPインデックスは各OIDの末尾にある数値サフィックス(例: .1、.2)で、SNMPテーブル内の各行を一意に識別します。このインデックスは自動的に {#SNMPINDEX} として抽出されます。
4. ディスカバリルールの配下に、1つ以上のアイテムプロトタイプを作成します(ディスカバリルールをマスターアイテムとして使用)。
例として、センサー値の依存アイテム:
- Name フィールドに、"Sensor {#SNMPINDEX}: {#SENSORNAME}" を入力します。
- Type フィールドで、"Dependent item" を選択します。
- Key フィールドに、"sensor.value[{#SNMPINDEX}]" を入力します。
- Master item フィールドで、"SNMP walk item" を選択します。

Preprocessing タブで、Name に "SNMP walk value" を指定した前処理ステップを追加し、Parameter フィールドに OID ".1.3.6.1.4.1.9999.1.1.1.1.3.{#SNMPINDEX}" を設定します。
Format: "Unchanged"。
次のアイテムが検出されます。
| Name | Key | 値の抽出元OID | アイテム値 |
|---|---|---|---|
| Sensor 1: Temperature Sensor | sensor.value[1] | .1.3.6.1.4.1.9999.1.1.1.1.3.1 | 100 |
| Sensor 2: Humidity Sensor | sensor.value[2] | .1.3.6.1.4.1.9999.1.1.1.1.3.2 | 200 |
ディスカバリルールが実行されると、sensor.value[1]、sensor.value[2] のようなアイテムが作成されます。
各依存アイテムは、個別にSNMPリクエストを実行することなく、前処理を使用してマスターアイテムのSNMP walk結果から値を抽出します。
5. ディスカバリルールと同じマクロを使用して、トリガープロトタイプ内で依存アイテムプロトタイプを参照します。
例:
{Template_Sensor:sensor.value[{#SNMPINDEX}].last()} > 75
これにより、検出された各センサー(たとえば sensor.value[1]、sensor.value[2])に対して1つのトリガーが作成され、最新の値(温度または湿度)が75を超えると発火します。
6. 検出された各エンティティに対して依存アイテムを含めます。
グラフアイテムキーの例:
sensor.value[{#SNMPINDEX}]
{#SNMPINDEX} ごとに1つのグラフが作成され、温度と湿度の推移が時系列でプロットされます。
この設定では、検出されたアイテム数に関係なく、ポーリングサイクルごとに実行されるSNMP walkリクエストは1回だけです。
すべての依存アイテムは、前処理を使用してマスターSNMP walk結果から値を抽出するため、SNMPトラフィックと負荷を大幅に削減できます。
walk[] を使用した動的インデックス
動的インデックス(たとえば、インターフェースのインデックス)は、ハードウェアの再構成時に変化することがあります。 この動作に対応するため、次のようなキーを持つマスターSNMP walkディスカバリルールを作成します。
walk[1.3.6.1.2.1.2.2.1.10]
SNMP walk to JSON の前処理後、結果は次のようになります。
[
{
"{#SNMPINDEX}": "2",
"{#VALUE}": "123456"
},
{
"{#SNMPINDEX}": "3",
"{#VALUE}": "654321"
}
]
依存アイテムのプロトタイプでは、{#SNMPINDEX} マクロを使用してキーを構築します。
net.if.in[{#SNMPINDEX}]
このプロトタイプの前処理には、Parameter フィールドに OID 1.3.6.1.2.1.2.2.1.10.{#SNMPINDEX} を指定した「SNMP walk value」という名前が含まれます。
Format: 「Unchanged」。
実行時には、net.if.in[2] や net.if.in[3] のような実際のアイテムが作成されます。
特定のインターフェースインデックスが変更された場合(たとえば、SNMPテーブル内でインデックス 2 が 5 に置き換えられた場合)、次回のディスカバリルール実行時に次のようになります。
- 古い依存アイテム net.if.in[2] は「lost」としてマークされるか削除され、そのアイテムでは新しいデータは収集されなくなります。
- 新しい依存アイテム net.if.in[5] が作成され、空の履歴から開始されます。
- net.if.in[2] の履歴データは、自動的に net.if.in[5] へ移動されません。
トリガーのプロトタイプの例:
{Template_Interface:net.if.in[{#SNMPINDEX}].last()} > 1000000000
グラフのプロトタイプの例には、次のアイテムが含まれます。
net.if.in[{#SNMPINDEX}]
net.if.out[{#SNMPINDEX}]
この設定により、動的インデックスを持つテーブルを確実に監視しつつ、SNMPトラフィックを最小限に抑えることができます。ポーリングサイクルごとに必要な SNMP walk は 1 回だけで、必要な値は依存アイテムのプロトタイプによって抽出されます。
検出されたエンティティ
サーバーの実行時に、SNMPディスカバリルールが返す値に基づいて、実際の依存アイテム、トリガー、およびグラフが作成されます。