このセクションでは、ZabbixエージェントおよびZabbixエージェント2によって実行されるパッシブチェックとアクティブチェックの詳細について説明します。
Zabbixは、エージェントとの通信にJSONベースの通信プロトコルを使用しています。
ZabbixエージェントとZabbixエージェント2のプロトコルは、Zabbix 7.0以降で統一されました。ZabbixエージェントとZabbixエージェント2のリクエスト/レスポンスの違いは、"variant"タグの値で表されます。
パッシブチェックは単純なデータリクエストです。Zabbixサーバーまたはプロキシが何らかのデータ(例:CPU負荷)を要求し、Zabbixエージェントがその結果をサーバーに返します。
パッシブチェックは非同期で実行されます。1つのリクエストへの応答を受信する前に他のチェックを開始する必要はありません。DNS解決も非同期です。
エージェントポーラーは、DNSルックアップで返されたすべてのアドレスへの接続を試みます。これにより、1つのIPアドレスに到達できない場合でも、ポーラーは次に利用可能なアドレスを試み、接続成功の可能性が高まります。この機能強化は、Zabbixサーバーとプロキシの両方に適用されます。
非同期チェックの最大同時実行数は1000です(MaxConcurrentChecksPerPollerで定義)。
非同期エージェントポーラーの数は、StartAgentPollersパラメータで定義されます。
サーバーリクエスト
ヘッダーとデータ長の定義については、プロトコルの詳細を参照してください。
| フィールド | 型 | 必須 | 値 | |
|---|---|---|---|---|
| request | string | yes | "passive checks" |
|
| data | array of object | yes | パッシブチェックアイテム | |
| key | string | yes | 展開済みマクロを含むアイテムキー | |
| timeout | string | yes | アイテムのタイムアウト | |
エージェント応答
| フィールド | 型 | 必須 | 値 | |
|---|---|---|---|---|
| version | string | yes | エージェントのバージョン番号 | |
| variant | number | yes | エージェントのバリアント(1 - Zabbix agent、2 - Zabbix agent 2) | |
| data | array of object | yes | チェック結果を含む | |
| value | string | no | チェックが成功した場合のアイテム値 | |
| error | string | no | チェックが失敗した場合のエラーメッセージ | |
サポートされているアイテムの場合の例:
サポートされていないアイテムの場合:
Zabbixサーバーまたはプロキシが、プレーンテキストプロトコルを持つ7.2以前のバージョンのエージェントと連携できるように、古いプロトコルへのフェイルオーバーが実装されています。
パッシブチェックは、再起動後またはインターフェース構成が変更された場合に、JSONプロトコル(7.0以降)を使用して実行されます。 応答で有効なJSONが受信されなかった場合(エージェントが "ZBX_NOTSUPPORTED" を送信した場合)、Zabbixはインターフェースを古いプロトコルとしてキャッシュし、再試行としてアイテムキーのみを送信してチェックを行います。
Zabbixサーバー/プロキシは、すべてのインターフェースで毎時新しいプロトコルでの動作を再試行し、必要に応じて古いプロトコルにフォールバックすることに注意してください。
アクティブチェックは、より複雑な処理を必要とします。 エージェントは、独立した処理のために、最初にサーバー/プロキシからアイテムやリモートコマンドのリストを取得する必要があります。
アクティブチェックを取得するサーバー/プロキシは、エージェントの設定ファイルの「ServerActive」パラメータに記載されています。 これらのチェックを要求する頻度は、同じ設定ファイルの「RefreshActiveChecks」パラメータで設定します。 ただし、アクティブチェックの更新に失敗した場合は、ハードコードされた60秒後に再試行されます。
Zabbix 6.4以降、エージェント(アクティブモード)は、サーバー/プロキシから2分ごと(デフォルト)に設定の完全なコピーを受信しなくなりました。 代わりに、ネットワークトラフィックとリソース使用量を減らすために、5秒ごと(デフォルト)に増分設定同期が実行され、サーバー/プロキシは、エージェントがまだ受信していない場合、またはホスト設定、グローバルマクロ、グローバル正規表現に何か変更があった場合にのみ設定の完全なコピーを提供します。
エージェントは定期的に新しい値をサーバーに送信します。 エージェントが実行するリモートコマンドを受信した場合、実行結果も送信されます。 アクティブエージェントでのリモートコマンド実行のサポートは、Zabbix agent 7.0からです。
エージェントがファイアウォールの背後にある場合は、アクティブチェックのみを使用することを検討してください。この場合、初期の着信接続を許可するためにファイアウォールを変更する必要がありません。
エージェントリクエスト
アクティブチェックリクエストは、エージェントが処理するアクティブチェックを取得するために使用されます。 このリクエストは、エージェントの起動時およびRefreshActiveChecksの間隔でエージェントから送信されます。
{
"request": "active checks",
"host": "Zabbix server",
"host_metadata": "mysql,nginx",
"interface": "zabbix.server.lan",
"ip": "159.168.1.1",
"port": 12050,
"version": "8.0.0",
"variant": 2,
"config_revision": 1,
"session": "e3dcbd9ace2c9694e1d7bbd030eeef6e"
}| フィールド | 型 | 必須 | 値 |
|---|---|---|---|
| request | string | yes | active checks |
| host | string | yes | ホスト名 |
| host_metadata | string | no | 設定パラメータHostMetadataまたはHostMetadataItemのメトリック値 |
| interface | string | no | 設定パラメータHostInterfaceまたはHostInterfaceItemのメトリック値 |
| ip | string | no | 設定パラメータListenIPが設定されている場合の最初のIP |
| port | number | no | 設定パラメータListenPortが設定されており、デフォルトのエージェントリスニングポートでない場合の値 |
| version | string | yes | エージェントのバージョン番号 |
| variant | number | yes | エージェントのバリアント(1 - Zabbix agent、2 - Zabbix agent 2) |
| config_revision | number | no | 増分設定同期用の設定識別子 |
| session | string | no | 増分設定同期用のセッション識別子 |
サーバーレスポンス
アクティブチェックレスポンスは、アクティブチェックリクエストの処理後にサーバーからエージェントに返されます。
{
"response": "success",
"config_revision": 2,
"data": [
{
"key": "system.uptime",
"itemid": 1234,
"delay": "10s",
"lastlogsize": 0,
"mtime": 0
},
{
"key": "agent.version",
"itemid": 5678,
"delay": "10m",
"lastlogsize": 0,
"mtime": 0,
"timeout": "30s"
}
],
"commands": [
{
"command": "df -h --output=source,size / | awk 'NR>1 {print $2}'",
"id": 1324,
"wait": 1
}
]
}| フィールド | 型 | 必須 | 値 | |
|---|---|---|---|---|
| response | string | yes | success | failed |
|
| info | string | no | 失敗時のエラー情報 | |
| data | array of objects | no | アクティブチェックアイテム。ホスト設定が変更されていない場合は省略されます。 | |
| key | string | no | 展開されたマクロを含むアイテムキー | |
| itemid | number | no | アイテム識別子 | |
| delay | string | no | アイテムの更新間隔 柔軟/スケジューリング間隔は、Zabbix 7.0以降、Zabbix agentおよびZabbix agent 2の両方でサポートされています。 |
|
| lastlogsize | number | no | アイテムのlastlogsize | |
| mtime | number | no | アイテムのmtime | |
| timeout | string | no | アイテムのタイムアウト | |
| refresh_unsupported | number | no | サポートされていないアイテムのリフレッシュ間隔 | |
| regexp | array of objects | no | グローバル正規表現 | |
| name | string | no | グローバル正規表現名 | |
| expression | string | no | グローバル正規表現 | |
| expression_type | number | no | グローバル正規表現タイプ | |
| exp_delimiter | string | no | グローバル正規表現のデリミタ | |
| case_sensitive | number | no | グローバル正規表現の大文字小文字の区別設定 | |
| commands | array of objects | no | 実行するリモートコマンド。リモートコマンドの実行がアクションオペレーションまたは手動スクリプトの実行によってトリガーされた場合に含まれます。アクティブエージェントでのリモートコマンド実行はZabbix agent 7.0以降でサポートされています。古いアクティブエージェントは、アクティブチェックサーバーレスポンスに含まれるリモートコマンドを無視します。 | |
| command | string | no | リモートコマンド | |
| id | number | no | リモートコマンド識別子 | |
| wait | number | no | リモートコマンドの実行モード(アクションオペレーションからのコマンドの場合は"0"(nowait)、手動スクリプトの実行からのコマンドの場合は"1"(wait)) | |
| config_revision | number | no | 増分設定同期用の設定識別子。ホスト設定が変更されていない場合は省略されます。ホスト設定が変更された場合はインクリメントされます。 | |
サーバーは必ずsuccessで応答する必要があります。
例:
アクティブチェックを使用する場合、(機密性の高い)設定データがZabbixサーバートラッパーポートにアクセスできる第三者に 利用可能になる可能性があることに注意してください。これは、誰でもアクティブエージェントを装ってアイテム設定データを要求できるためです。 暗号化オプションを使用しない限り、認証は行われません。
エージェントが送信
エージェントデータリクエストには、収集されたアイテムの値と実行されたリモートコマンドの値(存在する場合)が含まれます。
{
"request": "agent data",
"data": [
{
"id": 1,
"itemid": 5678,
"value": "7.0.0",
"clock": 1712830783,
"ns": 76808644
},
{
"id": 2,
"itemid": 1234,
"value": "69672",
"clock": 1712830783,
"ns": 77053975
}
],
"commands": [
{
"id": 1324,
"value": "16G"
}
],
"session": "1234456akdsjhfoui",
"host": "Zabbix server",
"version": "8.0.0",
"variant": 2
}| フィールド | 型 | 必須 | 値 | |
|---|---|---|---|---|
| request | string | yes | agent data |
|
| data | array of objects | yes | アイテムの値。 | |
| id | number | yes | 値の識別子(ネットワークの問題で重複した値をチェックするために使用されるインクリメンタルカウンター)。 | |
| itemid | string | yes | アイテムの識別子。 | |
| value | string | no | アイテムの値。 | |
| lastlogsize | number | no | アイテムのlastlogsize。 | |
| mtime | number | no | アイテムのmtime。 | |
| state | number | no | アイテムの状態。 | |
| source | string | no | 値のイベントログソース。 | |
| eventid | number | no | 値のイベントログeventid。 | |
| severity | number | no | 値のイベントログseverity。 | |
| timestamp | number | no | 値のイベントログtimestamp。 | |
| clock | number | yes | 値のタイムスタンプ(Epochからの秒数)。 | |
| ns | number | yes | 値のタイムスタンプのナノ秒。 | |
| commands | array of objects | no | リモートコマンドの実行結果。アクティブエージェントでのリモートコマンド実行はZabbix agent 7.0以降でサポートされています。古いアクティブエージェントは、アクティブチェックサーバーの応答に含まれるリモートコマンドを無視します。 | |
| id | number | no | リモートコマンドの識別子。 | |
| value | string | no | 実行が成功した場合のリモートコマンドの実行結果。 | |
| error | string | no | 実行が失敗した場合のリモートコマンドの実行エラーメッセージ。 | |
| session | string | yes | エージェントが起動されるたびに生成される一意のセッション識別子。 | |
| host | string | yes | ホスト名。 | |
| version | string | yes | エージェントのバージョン番号。 | |
| variant | number | yes | エージェントのバリアント(1 - Zabbix agent、2 - Zabbix agent 2)。 | |
各値には仮想IDが割り当てられます。値IDは単純な昇順カウンターで、1つのデータセッション(セッショントークンで識別)内で一意です。このIDは、接続性が悪い環境で送信される可能性のある重複値を破棄するために使用されます。
サーバーの応答
エージェントデータの応答は、サーバーがエージェントデータリクエストを処理した後、エージェントに返されます。
| フィールド | 型 | 必須 | 値 |
|---|---|---|---|
| response | string | yes | success | failed |
| info | string | yes | アイテム処理結果。 |
サーバー側で一部の値の送信に失敗した場合(たとえば、ホストやアイテムが無効化または削除された場合)、エージェントはそれらの値の再送信を行いません。
例:
上記の例では、vfs.fs.size[/nono]のnot supportedステータスが、"state"値が1であり、"value"プロパティにエラーメッセージが含まれていることで示されていることに注意してください。
エラーメッセージはサーバー側で2048文字に切り詰められます。
エージェントが送信
ハートビートメッセージは、アクティブエージェントからZabbixサーバー/プロキシに対して、Zabbix agent/agent 2の設定ファイルで設定されたHeartbeatFrequency秒ごとに送信されます。
これはアクティブチェックの可用性を監視するために使用されます。
{
"request": "active check heartbeat",
"host": "Zabbix server",
"heartbeat_freq": 60,
"version": "8.0.0",
"variant": 2
}| フィールド | 型 | 必須 | 値 |
|---|---|---|---|
| request | string | yes | active check heartbeat |
| host | string | yes | ホスト名 |
| heartbeat_freq | number | yes | エージェントのハートビート間隔(HeartbeatFrequency設定パラメータ) |
| version | string | yes | エージェントのバージョン番号 |
| variant | number | yes | エージェントのバリアント(1 - Zabbix agent、2 - Zabbix agent 2) |
リダイレクト応答
ホストが再割り当てされた場合、サーバーはエージェントに対してハートビート(およびその後のアクティブチェック)を別のプロキシまたはサーバーインスタンスにリダイレクトするよう指示することがあります。
| フィールド | 型 | 必須 | 値 | |
|---|---|---|---|---|
| response | string | yes | success | failed |
|
| redirect | object | yes | リダイレクト指示 | |
| revision | number | yes | 設定リビジョン識別子 | |
| address | string | yes | 転送先サーバー/プロキシのアドレス | |
Zabbixは、 Base64にエンコードされたXMLのデータを16MBまで取得しますが、デコードされる値は1つが64KB以下でなければなりません。そうでないと、デコード中にそれが64KBに切り捨てられます。