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

概要

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 を検証してください。また、ブローカーのadvertisedアドレスに解決されるアドレスを使用することを推奨します。

プロトコル

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

詳細については、改行区切りJSONエクスポートプロトコルを参照してください。

サーバーリクエスト

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

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"}