You are viewing documentation for the development version, it may be incomplete.
Join our translation project and help translate Zabbix documentation into your native language.

2 パッシブおよびアクティブエージェントチェック

概要

このセクションでは、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": "passive checks",
         "data": [
           {
             "key": "agent.version",
             "timeout": 3
           }
         ]
       }
フィールド 必須
request string yes "passive checks"
data array of object yes パッシブチェックアイテム
key string yes 展開済みマクロを含むアイテムキー
timeout string yes アイテムのタイムアウト

エージェント応答

{
         "version": "8.0.0",
         "variant": 2,
         "data": [
           {
             "value": "8.0.0"
           }
         ]
       }
フィールド 必須
version string yes エージェントのバージョン番号
variant number yes エージェントのバリアント(1 - Zabbix agent、2 - Zabbix agent 2)
data array of object yes チェック結果を含む
value string no チェックが成功した場合のアイテム値
error string no チェックが失敗した場合のエラーメッセージ

サポートされているアイテムの場合の例:

  1. サーバーがTCP接続を開く
  2. サーバーが<HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}を送信
  3. エージェントがリクエストを読み取り、<HEADER><DATALEN>{"version":"8.0.0","variant":2,"data":[{"value":1}]}で応答
  4. サーバーがデータを処理し、値(この場合は'1')を取得
  5. TCP接続を閉じる

サポートされていないアイテムの場合:

  1. サーバーがTCP接続を開く
  2. サーバーが<HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}を送信
  3. エージェントがリクエストを読み取り、<HEADER><DATALEN>{"version":"8.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}で応答
  4. サーバーがデータを処理し、指定されたエラーメッセージでアイテムの状態をサポートされていないに変更
  5. TCP接続を閉じる
古いプロトコルへのフェイルオーバー

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で応答する必要があります。

例:

  1. エージェントがTCP接続を開く
  2. エージェントがチェックのリストを要求する
  3. サーバーがアイテムと実行するリモートコマンドのリストで応答する
  4. エージェントがレスポンスを解析する
  5. TCP接続が閉じられる
  6. エージェントが定期的なデータ収集とリモートコマンドの実行を開始する(Zabbix agent 7.0以降でサポート)

アクティブチェックを使用する場合、(機密性の高い)設定データが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": "success",
         "info": "processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
       }
フィールド 必須
response string yes success | failed
info string yes アイテム処理結果。

サーバー側で一部の値の送信に失敗した場合(たとえば、ホストやアイテムが無効化または削除された場合)、エージェントはそれらの値の再送信を行いません。

例:

  1. エージェントがTCP接続を開く
  2. エージェントが値のリストを送信する
  3. サーバーがデータを処理し、ステータスを返す
  4. TCP接続が閉じられる

上記の例では、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": "failed",
           "redirect": {
             "revision": 2,
             "address": "192.0.2.0:10055"
           }
         }
フィールド 必須
response string yes success | failed
redirect object yes リダイレクト指示
revision number yes 設定リビジョン識別子
address string yes 転送先サーバー/プロキシのアドレス

古い XML プロトコル

Zabbixは、 Base64にエンコードされたXMLのデータを16MBまで取得しますが、デコードされる値は1つが64KB以下でなければなりません。そうでないと、デコード中にそれが64KBに切り捨てられます。