外部システムへのストリーミング

概要

Zabbixから外部システムへ、HTTP経由でアイテムの値やイベントをストリーミングできます(プロトコルの詳細を参照)。

タグフィルターを使用すると、アイテムの値やイベントのサブセットをストリーミングできます。

データストリーミングは、2種類のZabbixサーバープロセスタイプ(connector managerとconnector worker)によって処理されます。 Zabbix内部アイテムzabbix[connector_queue]を使用すると、コネクターキューに登録された値の数を監視できます。

設定

外部システムへのデータストリーミングを設定するには、次の手順が必要です。

1. Zabbix からデータを受信するリモートシステムをセットアップします。 この目的のために、次のツールを利用できます。

  • 受信した情報を events.ndjson および history.ndjson ファイルに記録する、シンプルな receiver の例。
  • Kafka connector for Zabbix server - Zabbix サーバーから Kafka ブローカーへアイテムの値とイベントを転送するよう設計された、Go で記述された軽量サーバー。

2. zabbix_server.conf の StartConnectors パラメータを調整して、Zabbix で必要な数のコネクターのワーカーを設定します。 コネクターのワーカー数は、Zabbix Webインターフェースで設定したコネクター数と一致させる必要があります(同時セッション数が 1 より多い場合は、それ以上にします)。 その後、Zabbix サーバーを再起動します。

3. Zabbix Webインターフェースで新しいコネクターを設定し(管理 > 一般設定 > コネクター)、zabbix_server -R config_cache_reload コマンドでサーバーキャッシュを再読み込みします。

必須フィールドにはアスタリスクが付いています。

パラメータ 説明
名前 コネクター名を入力します。
データ型 ストリーミングするデータ型を選択します。
アイテムの値 - Zabbix から外部システムへアイテムの値をストリーミングします。
イベント - Zabbix から外部システムへイベントをストリーミングします。
URL 受信側の URL を入力します。ユーザーマクロを使用できます。
タグフィルター タグフィルターに一致するアイテムの値またはイベントのみをエクスポートします。設定しない場合は、すべてをエクスポートします。
特定のタグおよびタグの値を含めたり除外したりできます。複数の条件を設定できます。タグ名の照合では常に大文字と小文字が区別されます。

各条件では、次の演算子を使用できます。
存在する - 指定したタグ名を含めます。
等しい - 指定したタグ名と値を含めます(大文字と小文字を区別)。
含む - タグの値に入力した文字列が含まれる、指定したタグ名を含めます(部分文字列の照合、大文字と小文字を区別しない)。
存在しない - 指定したタグ名を除外します。
等しくない - 指定したタグ名と値を除外します(大文字と小文字を区別)。
含まない - タグの値に入力した文字列が含まれる、指定したタグ名を除外します(部分文字列の照合、大文字と小文字を区別しない)。

条件には次の 2 種類の計算タイプがあります。
And/Or - すべての条件を満たす必要があります。同じタグ名を持つ条件は Or 条件でグループ化されます。
Or - 1 つの条件を満たせば十分です。
情報のタイプ コネクターがストリーミングするアイテムの値をフィルタリングする情報のタイプ(数値(整数)、数値(浮動小数)、文字など)を選択します。
データ型 が「アイテムの値」に設定されている場合に使用できます。
HTTP 認証 認証オプションを選択します。
なし - 認証を使用しません。
Basic - Basic 認証を使用します。
NTLM - NTLM(Windows NT LAN Manager)認証を使用します。
Kerberos - Kerberos 認証を使用します(Zabbix での Kerberos の設定も参照)。
Digest - Digest 認証を使用します。
Bearer - Bearer 認証を使用します。
ユーザー名 ユーザー名を入力します(最大 255 文字)。ユーザーマクロを使用できます。
HTTP 認証 が「Basic」、「NTLM」、「Kerberos」、または「Digest」に設定されている場合に使用できます。
パスワード ユーザーパスワードを入力します(最大 255 文字)。ユーザーマクロを使用できます。
HTTP 認証 が「Basic」、「NTLM」、「Kerberos」、または「Digest」に設定されている場合に使用できます。
Bearer トークン Bearer トークンを入力します。ユーザーマクロを使用できます。
HTTP 認証 が「Bearer」に設定されている場合に使用でき、必須です。
詳細設定 詳細設定 ヘッダーをクリックすると、詳細設定オプションが表示されます(以下を参照)。
メッセージあたりの最大レコード数 1 つのメッセージ内でストリーミングできる値またはイベントの最大数を指定します。
同時セッション数 このコネクターで実行する送信プロセスの数を選択します。最大 100 セッションまで指定できます。デフォルト値は「1」です。
試行回数 データストリーミングを試行する回数です。最大 5 回まで指定できます。デフォルト値は「1」です。
試行間隔 データストリーミングに失敗した後、コネクターが待機する時間を指定します。最大 10 秒まで指定できます。デフォルト値は「5s」です。
試行回数 が「2」以上に設定されている場合に使用できます。
接続の確立に失敗した場合、または HTTP レスポンスコードが 200、201、202、203、204 以外の場合は、試行に失敗したとみなされます。通信エラーが発生した場合、または HTTP レスポンスコードが 200、201、202、203、204、400、401、403、404、405、415、422 以外の場合、再試行がトリガーされます。リダイレクトは追従されるため、302 -> 200 は成功レスポンスですが、302 -> 503 の場合は再試行がトリガーされます。
タイムアウト メッセージのタイムアウトを指定します(1~60 秒、デフォルトは 5 秒)。
時間のサフィックスを使用できます(例:30s、1m)。ユーザーマクロを使用できます。
HTTP プロキシ 次の形式で使用する HTTP プロキシを指定できます。
[protocol://][username[:password]@]proxy.example.com[:port]
ユーザーマクロを使用できます。

オプションの protocol:// プレフィックスを使用して、代替プロキシプロトコルを指定できます(プロトコルプレフィックスのサポートは cURL 7.21.7 で追加されました)。プロトコルを指定しない場合、プロキシは HTTP プロキシとして扱われます。デフォルトでは、ポート 1080 が使用されます。

HTTP プロキシ を指定すると、http_proxy や HTTPS_PROXY などのプロキシ関連の環境変数がプロキシによって上書きされます。指定しない場合、プロキシ関連の環境変数は上書きされません。入力した値はそのまま渡され、妥当性の確認は行われません。
SOCKS プロキシのアドレスも入力できます。誤ったプロトコルを指定すると、コネクターは Zabbix からアイテムの値またはイベントをストリーミングできません。

HTTP プロキシでサポートされるのは、単純な認証のみです。
SSL ピアの検証 Web サーバーの SSL 証明書を検証するには、チェックボックスを選択します。
サーバー証明書は、システム全体の CA の場所にある信頼された認証局(CA)証明書に対して検証されます。CA ファイルの場所は、Zabbix サーバーまたはプロキシの設定パラメータ SSLCALocation で上書きできます。
SSL ホストの検証 Web サーバー証明書の Common Name フィールドまたは Subject Alternate Name フィールドが一致することを検証するには、チェックボックスを選択します。
これにより、CURLOPT_SSL_VERIFYHOST cURL オプションが設定されます。
SSL 証明書ファイル クライアント認証に使用する SSL 証明書ファイルの名前です。証明書ファイルは PEM1 形式である必要があります。ユーザーマクロを使用できます。
証明書ファイルに秘密鍵も含まれている場合は、SSL キーファイル フィールドを空のままにします。鍵が暗号化されている場合は、SSL キーパスワード フィールドにパスワードを指定します。このファイルを含むディレクトリは、Zabbix サーバーまたはプロキシの設定パラメータ SSLCertLocation で指定します。
SSL キーファイル クライアント認証に使用する SSL 秘密鍵ファイルの名前です。秘密鍵ファイルは PEM1 形式である必要があります。ユーザーマクロを使用できます。
このファイルを含むディレクトリは、Zabbix サーバーまたはプロキシの設定パラメータ SSLKeyLocation で指定します。
SSL キーパスワード SSL 秘密鍵ファイルのパスワードです。ユーザーマクロを使用できます。
説明 コネクターの説明を入力します。
有効 コネクターを有効にするには、チェックボックスを選択します。

Kafka コネクターを、ブートストラップブローカーのアドレスをカンマ区切りで指定して設定した場合(例:Kafka.URL=kafka1.example.com:9093,kafka2.example.com:9093)、Kafka クライアントは最初に応答したブローカーに接続し、そのブローカーのクラスター metadata を使用します。 リストに異なる Kafka クラスターのアドレスが含まれている場合、最も速く応答したクラスターのみが使用され、その他のアドレスは利用不可としてログに記録されます。その結果、コネクターが接続されている場合でも、次のような起動時の警告が表示されることがあります。

kafka cluster connected, but broker(s) "kafka1.example.com:9093, kafka2.example.com:9093" unavailable; will retry on message send if active brokers fail 

一部の環境(プライベートネットワーク、コンテナネットワーク、または標準以外の DNS/hosts 設定)では、ホスト名または IP がループバックアドレス(例:127.0.0.1/localhost)に解決されたり、クライアントによって正規化されたりすることがあります。そのため、このような警告が誤解を招く場合があります。 混乱を避けるには、すべての Kafka.URL アドレスが同じ Kafka クラスターに属していることを確認し、コネクターのホストおよびブローカーの advertised.listeners から DNS 解決を検証し、ブローカーの advertised アドレスに解決されるアドレスを使用してください。

プロトコル

サーバーと受信側の間の通信は、REST API、NDJSON、"Content-Type: application/x-ndjson" を使用して HTTP 経由で行われます。

詳細については、Newline-delimited JSON export protocol を参照してください。

サーバーリクエスト

ストリーミングアイテム値の例:

POST /v1/history HTTP/1.1
Host: localhost:8080
Accept: */*
Accept-Encoding: deflate, gzip, br, zstd
Content-Length: 628
Content-Type: application/x-ndjson

{"host":{"host":"Zabbix server","name":"Zabbix server"},"groups":["Zabbix servers"],"item_tags":[{"tag":"foo","value":"test"}],"itemid":44457,"name":"foo","clock":1673454303,"ns":800155804,"value":0,"type":3}
{"host":{"host":"Zabbix server","name":"Zabbix server"},"groups":["Zabbix servers"],"item_tags":[{"tag":"foo","value":"test"}],"itemid":44457,"name":"foo","clock":1673454303,"ns":832290669,"value":1,"type":3}
{"host":{"host":"Zabbix server","name":"Zabbix server"},"groups":["Zabbix servers"],"item_tags":[{"tag":"bar","value":"test"}],"itemid":44458,"name":"bar","clock":1673454303,"ns":867770366,"value":123,"type":3}

ストリーミングイベントの例:

POST /v1/events HTTP/1.1
Host: localhost:8080
Accept: */*
Accept-Encoding: deflate, gzip, br, zstd
Content-Length: 333
Content-Type: application/x-ndjson

{"clock":1673454303,"ns":800155804,"value":1,"eventid":5,"name":"trigger for foo being 0","severity":0,"hosts":[{"host":"Zabbix server","name":"Zabbix server"}],"groups":["Zabbix servers"],"tags":[{"tag":"foo_trig","value":"test"},{"tag":"foo","value":"test"}]}
{"clock":1673454303,"ns":832290669,"value":0,"eventid":6,"p_eventid":5}
レシーバーのレスポンス

レスポンスは、HTTPレスポンスのステータスコードとJSONペイロードで構成されます。 正常に処理されたリクエストでは、HTTPレスポンスのステータスコードは "200"、"201"、"202"、"203"、または "204" である必要があります。失敗したリクエストでは、それ以外のコードになります。

成功時の例:

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
Date: Tue, 21 Apr 2026 10:13:04 GMT
Content-Length: 23

{"response":"success"}

エラー時の例:

HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
X-Content-Type-Options: nosniff
Date: Tue, 21 Apr 2026 12:15:01 GMT
Content-Length: 55

{"error":"invalid character '{' after top-level value"}