[comment]: # ({03437da9-5508ac64})
# 4 SNMP OIDsの検出

[comment]: # ({/03437da9-5508ac64})

[comment]: # ({b8212a1d-3680a9fa})
#### 概要

このセクションでは、SNMPデバイスで[ローレベルディスカバリ](/manual/discovery/low_level_discovery)を実行します。

SNMP OIDのこのディスカバリ方法は、Zabbixサーバー/プロキシ6.4からサポートされています。

[comment]: # ({/b8212a1d-3680a9fa})

[comment]: # ({3e67054c-bff9418f})
#### サンプル設定

1\. 次のようなキーでSNMPエージェントアイテムを作成します:

```bash
walk[.1.3.6.1.4.1.9999.1.1.1.1]
```

![](../../../../../assets/ja/manual/discovery/low_level_discovery/snmp_walk_item.png)

このアイテムは、単一のSNMPテーブルウォークを実行し、すべてのテーブルエントリを1回のリクエストで返します。フォーマットは、`snmpwalk`ユーティリティのフォーマットオプション`-Oe -Ot -On`の出力に対応しています。

次のような複数行のテキスト値が返されます:

```ini
.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」を選択します。

![](../../../../../assets/ja/manual/discovery/low_level_discovery/snmp_discovery_dep_item.png)

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配列を返します。

例:

```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」を選択します。

![](../../../../../assets/ja/manual/discovery/low_level_discovery/snmp_item_prototype.png)

*前処理*タブで、*パラメータ*フィールドに".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\. ディスカバリルールの同じマクロを使用して、トリガープロトタイプで従属アイテムプロトタイプを参照します。
例:

```default
{Template_Sensor:sensor.value[{#SNMPINDEX}].last()} > 75
```

これにより、検出された各センサー（例: sensor.value[1]、sensor.value[2]）にトリガーが作成され、最新値（温度または湿度）が75を超えた場合に発火します。

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

```default
sensor.value[{#SNMPINDEX}]
```

`{#SNMPINDEX}`ごとに1つのグラフが作成され、温度と湿度の経時変化がプロットされます。

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

[comment]: # ({/3e67054c-bff9418f})

[comment]: # ({1f7ddedc-indexes})
#### walk[]による動的インデックス

動的インデックス（たとえば、インターフェースインデックス）は、ハードウェアの再構成時に変更されることがあります。
この動作に対応するために、次のようなキーを持つマスターSNMP walkディスカバリールールが作成されます。

```bash
walk[1.3.6.1.2.1.2.2.1.10]
```

SNMP walk to JSONのプリプロセス後、結果は次のようになります。

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

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

```default
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]に移動されません。

トリガープロトタイプの例:

```default
{Template_Interface:net.if.in[{#SNMPINDEX}].last()} > 1000000000
```

グラフプロトタイプの例（アイテムを含む）:

```default
net.if.in[{#SNMPINDEX}]
net.if.out[{#SNMPINDEX}]
```

この構成により、動的インデックスを持つテーブルの信頼性の高い監視が保証され、SNMPトラフィックも最小限に抑えられます。ポーリングサイクルごとに1回のSNMP walkだけが必要で、従属アイテムプロトタイプが必要な値を抽出します。

[comment]: # ({/1f7ddedc-indexes})

[comment]: # ({1815f72a-2be94533})
#### 検出されたエンティティ

サーバーが実行されると、SNMPディスカバリルールが返す値に基づいて、実際の従属アイテム、トリガー、グラフが作成されます。

[comment]: # ({/1815f72a-2be94533})
