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回のリクエストで返します。フォーマットは、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. ディスカバリルールを作成します:
- 名前フィールドに、説明的なディスカバリルール名(例: "Discover sensors")を入力します。
- タイプフィールドで「従属アイテム」を選択します。
- キーフィールドに説明的なキー(例: "net.if.discovery")を入力します。
- マスターアイテムフィールドで「SNMP walk item」を選択します。

3. 前処理タブで、名前ドロップダウンで「SNMP walk to JSON」を選択し、3つのパラメータで前処理ステップを追加します:
- フィールド名: "{#SENSORNAME}"; OIDプレフィックス: ".1.3.6.1.4.1.9999.1.1.1.1.1": フォーマット: "変更なし"
- フィールド名: "{#SENSORTYPE}"; OIDプレフィックス: ".1.3.6.1.4.1.9999.1.1.1.1.2": フォーマット: "変更なし"
- フィールド名: "{#SENSORVALUE}"; OIDプレフィックス: ".1.3.6.1.4.1.9999.1.1.1.1.3": フォーマット: "変更なし"
前処理後、ディスカバリルールはマクロセットの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インデックスごとにグループ化されます。これは各OIDの末尾にある数値サフィックス(例: .1, .2)であり、このインデックスはSNMPテーブル内の各行を一意に識別し、自動的に{#SNMPINDEX}として抽出されます。
4. ディスカバリルールの下に、1つ以上のアイテムプロトタイプ(ディスカバリルールをマスターアイテムとして)を作成します。
例: センサー値の従属アイテム
- 名前フィールドに「Sensor {#SNMPINDEX}: {#SENSORNAME}」と入力します。
- タイプフィールドで「従属アイテム」を選択します。
- キーフィールドに「sensor.value[{#SNMPINDEX}]」と入力します。
- マスターアイテムフィールドで「SNMP walk item」を選択します。

前処理タブで、パラメータフィールドに".1.3.6.1.4.1.9999.1.1.1.1.3.{#SNMPINDEX}" OIDを指定し、「SNMP walk value」名の前処理ステップを追加します。 フォーマット: "変更なし"
次のアイテムが検出されます:
| 名前 | キー | 値を抽出する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 walk結果から値を抽出し、個別のSNMPリクエストは実行しません。
5. ディスカバリルールの同じマクロを使用して、トリガープロトタイプで従属アイテムプロトタイプを参照します。 例:
{Template_Sensor:sensor.value[{#SNMPINDEX}].last()} > 75
これにより、検出された各センサー(例: sensor.value[1]、sensor.value[2])にトリガーが作成され、最新値(温度または湿度)が75を超えた場合に発火します。
6. 検出された各エンティティに対して従属アイテムを含めます。 グラフアイテムキーの例:
sensor.value[{#SNMPINDEX}]
{#SNMPINDEX}ごとに1つのグラフが作成され、温度と湿度の経時変化がプロットされます。
この設定では、検出されたアイテム数に関係なく、ポーリングサイクルごとに1回だけSNMP walkリクエストが実行されます。 すべての従属アイテムは、前処理を使用してマスター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}]
このプロトタイプのプリプロセスには、「SNMP walk value」名と「1.3.6.1.2.1.2.2.1.10.{#SNMPINDEX}」OIDをパラメータフィールドに指定します。 フォーマット:「変更しない」。
実行時には、net.if.in[2]やnet.if.in[3]などの実際のアイテムが作成されます。
特定のインターフェースインデックスが変更された場合(たとえば、SNMPテーブル内のインデックス2が5に置き換えられた場合)、次回のディスカバリールール実行時に以下の動作となります。
- 古い従属アイテムnet.if.in[2]は「失われた」とマークされるか削除され、そのアイテムの新しいデータは収集されません。
- 新しい従属アイテム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トラフィックも最小限に抑えられます。ポーリングサイクルごとに1回のSNMP walkだけが必要で、従属アイテムプロトタイプが必要な値を抽出します。
検出されたエンティティ
サーバーが実行されると、SNMPディスカバリルールが返す値に基づいて、実際の従属アイテム、トリガー、グラフが作成されます。