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回のSNMP 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])に対してトリガーが作成され、最新の値(温度または湿度)が75を超えると発生します。

6. 検出された各エンティティに対して依存アイテムを含めます。
グラフアイテムキーの例:

sensor.value[{#SNMPINDEX}]

{#SNMPINDEX} ごとに1つのグラフが作成され、温度と湿度の推移が時系列でプロットされます。

この設定では、検出されたアイテム数に関係なく、ポーリングサイクルごとに実行されるSNMP walkリクエストは1回だけです。
すべての依存アイテムは、前処理を使用してマスターSNMP walk結果から値を抽出するため、SNMPトラフィックと負荷を大幅に削減できます。

walk[] を使用した動的インデックス

動的インデックス(インターフェースインデックスなど)は、ハードウェアの再構成時に変更される可能性があります。 この動作に対応するために、マスターSNMPウォーク検出ルールは次のようなキーを使用して作成されます。

walk[1.3.6.1.2.1.2.2.1.10]

SNMPウォークからJSONへの前処理後、結果は次のようになります。

[
    {
        "{#SNMPINDEX}": "2",
        "{#VALUE}": "123456"
    },
    {
        "{#SNMPINDEX}": "3",
        "{#VALUE}": "654321"
    }
]

依存アイテムのプロトタイプは、{#SNMPINDEX}マクロを使用してキーを構築します。

net.if.in[{#SNMPINDEX}]

このプロトタイプの前処理には、"SNMPウォーク値"の名前とパラメータフィールドに"1.3.6.1.2.1.2.2.1.10.{#SNMPINDEX}" OIDを指定します。 フォーマット: "変更なし"。

実行時に、net.if.in[2]net.if.in[3] などの実際の項目が作成されます。 特定のインターフェースインデックスが変更された場合(例えば、SNMPテーブルでインデックス 25 に置き換えられた場合)、検出ルールの次回実行時に以下の処理が行われます。

  • 古い依存項目 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ウォークのみが必要で、依存する項目プロトタイプによって必要な値が抽出されます。

検出されたエンティティ

サーバーの実行時には、SNMPディスカバリルールが返す値に基づいて、実際の依存アイテム、トリガー、およびグラフが作成されます。