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つのアイテムが作成されます。