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

概要

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

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

データストリーミングを担当するZabbixサーバーのプロセスタイプは、connector managerconnector worker の2つです。 Zabbix内部アイテム zabbix[connector_queue] を使用すると、コネクターキューに追加された値の件数を監視できます。

設定

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

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

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

2. zabbix_server.confStartConnectors パラメータを調整して、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秒)。
時間のサフィックスに対応しています(例:30s1m)。ユーザーマクロに対応しています。
HTTPプロキシ 次の形式で使用するHTTPプロキシを指定できます。
[protocol://][username[:password]@]proxy.example.com[:port]
ユーザーマクロに対応しています。

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

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

HTTPプロキシでサポートされるのは、単純な認証のみです。
SSLピアの検証 WebサーバーのSSL証明書を検証するには、チェックボックスを選択します。
サーバー証明書は、システム全体の認証局(CA)の場所から自動的に取得されます。CAファイルの場所は、Zabbixサーバーまたはプロキシの設定パラメータ SSLCALocationで上書きできます。
SSLホストの検証 Webサーバー証明書のCommon NameフィールドまたはSubject Alternate Nameフィールドが一致することを検証するには、チェックボックスを選択します。
これにより、cURLオプション CURLOPT_SSL_VERIFYHOST が設定されます。
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クライアントは最初に応答したブローカーに接続し、そのクラスターメタデータを使用します。 リストに異なる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クラスターに属していることを確認し、コネクターホストからのDNS解決とブローカーの advertised.listeners を確認してください。また、ブローカーの広告アドレスに解決されるアドレスを使用することを推奨します。

プロトコル

サーバーと受信側の間の通信は、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"}