2 ネットワークインターフェースの検出

ネットワークインターフェースとそのプロパティを検出できます。

  • インターフェース名
  • インターフェースのエイリアス
  • インターフェースのMACアドレス
  • インターフェースの種類
  • リンク速度
  • インターフェースの最新または現在のデュプレックス値
  • 設定済みのRFC2863運用状態
  • 物理リンクの有無
  • リンクが up または down になった回数、およびリンク状態が変化した総回数
  • 受信および送信トラフィック

そのためには、次の組み合わせを使用できます。

  • net.if.get エージェントアイテムをマスターアイテムとして使用
  • 依存する低レベルディスカバリルール
  • 依存するアイテムプロトタイプ

設定

マスターアイテム

次のキーを使用して Zabbix エージェントアイテムを作成します。

net.if.get[enp.*]

Type of information は、サイズが大きくなる可能性のある JSON データに対しては Text に設定します。

History は、マスターアイテムとしてのみ使用されるため、Do not store に設定できます。 1m のような比較的短い更新間隔を設定して、頻繁にデータを取得するようにできます。

このアイテムは、名前が enp.* に一致するネットワークインターフェースを検出し、それらの設定と統計情報を返します。

このアイテムが返すデータには、ネットワークインターフェースについて次のような情報が含まれます。

{
  "config": [
    {
      "name": "enp0s3",
      "mac": "08:00:27:9a:8f:bb",
      "type": "physical",
      "speed": 1000,
      "duplex": "full",
      "administrative_state": "up",
      "operational_state": "up",
      "carrier": 1
    }
  ],
"values": [
    {
      "name": "enp0s3",
      "mac": "08:00:27:9a:8f:bb",
      "carrier": 1,
      "carrier_changes": 2,
      "carrier_up_count": 1,
      "carrier_down_count": 1,
      "in": {
        "bytes": 98241651,
        "packets": 72754,
        "errors": 0,
        "dropped": 0,
        "overruns": 0,
        "frame": 0,
        "compressed": 0,
        "multicast": 17
      },
    "out": {
        "bytes": 1299650,
        "packets": 11380,
        "errors": 0,
        "dropped": 0,
        "overruns": 0,
        "collisions": 0,
        "carrier": 0,
        "compressed": 0
      }
    }
  ]
}
依存LLDルール

Dependent item タイプの低レベルディスカバリルールを作成します。

マスターアイテムとして、作成した net.if.get アイテムを選択します。

Preprocessing タブで、次を追加します。

  • $.config パラメータを指定した JSONPath ステップ。
  • 不要なLLD実行を避けるため、十分に長いハートビート、たとえば 1h を指定した Discard unchanged with heartbeat ステップ。

これにより、マスターアイテムは高頻度で取得しつつ、低レベルディスカバリは config が変更されたとき、またはハートビート期間が終了したときのみ実行されます。

LLD macros タブで、対応するJSONPath式を持つカスタムマクロを定義します。

たとえば、net.if.get[enp.*] を使用する場合、次のJSONPath式を使用できます。

{#IFNAME} - $.name

依存アイテムプロトタイプ

LLDルールで 依存アイテム タイプのアイテムプロトタイプを作成します。
このプロトタイプのマスターアイテムとして、作成した net.if.get アイテムを選択します。

アイテムプロトタイプの名前とキーでカスタムマクロを使用していることに注意してください。
この例では、キーはカスタムでユーザー定義です。

  • 名前: インターフェース {#IFNAME}: 動作状態
  • キー: net.if.oper.state[{#IFNAME}]

情報の種類として、テキスト を使用します。

アイテムプロトタイプの 前処理 タブで JSONPath を選択し、パラメータとして次のJSONPath式を使用します。

$.config[?(@.name=='{#IFNAME}')].operational_state.first()

追加のアイテムプロトタイプも同様に作成できます。例:

  • 名前: インターフェース {#IFNAME}: carrier changes
  • キー: net.if.carrier.changes[{#IFNAME}]
  • 前処理: JSONPath - $.values[?(@.name=='{#IFNAME}')].carrier_changes.first()
  • 名前: インターフェース {#IFNAME}: speed
  • キー: net.if.speed[{#IFNAME}]
  • 前処理: JSONPath - $.config[?(@.name=='{#IFNAME}')].speed.first()

ディスカバリが開始されると、ネットワークインターフェースごとに1つのアイテムが作成されます。