2 외부 시스템으로 스트리밍

개요

Zabbix에서 HTTP를 통해 외부 시스템으로 아이템 값과 이벤트를 스트리밍하는 것이 가능합니다 (프로토콜 세부사항 참조).

태그 필터를 사용하여 아이템 값 또는 이벤트의 하위 집합을 스트리밍할 수 있습니다.

두 가지 Zabbix 서버 프로세스 유형이 데이터 스트리밍을 담당합니다: connector managerconnector worker. Zabbix 내부 아이템 zabbix[connector_queue]를 통해 커넥터 큐에 대기 중인 값의 수를 모니터링할 수 있습니다.

구성

외부 시스템으로 데이터 스트리밍을 구성하려면 다음 단계가 필요합니다:

1. Zabbix로부터 데이터를 수신할 원격 시스템을 설정합니다. 이를 위해 다음 도구들을 사용할 수 있습니다:

  • 수신된 정보를 events.ndjsonhistory.ndjson 파일에 기록하는 간단한 수신기 예제입니다.
  • Zabbix server용 Kafka 커넥터 - Go로 작성된 경량 서버로, Zabbix 서버에서 Kafka 브로커로 아이템 값과 이벤트를 전달하도록 설계되었습니다.

2. zabbix_server.conf에서 StartConnectors 파라미터를 조정하여 Zabbix에서 필요한 커넥터 워커 수를 설정합니다. 커넥터 워커 수는 Zabbix 프론트엔드에서 구성된 커넥터 개수와 일치해야 합니다(동시 세션이 1개보다 많은 경우 초과해도 됩니다). 그 다음, Zabbix 서버를 재시작합니다.

3. Zabbix 프론트엔드(관리 > 일반 > 커넥터)에서 새 커넥터를 구성하고 zabbix_server -R config_cache_reload 명령으로 서버 캐시를 다시 로드합니다.

필수 필드는 별표로 표시됩니다.

파라미터 설명
이름 커넥터 이름을 입력합니다.
데이터 타입 스트리밍할 데이터 타입을 선택합니다:
아이템 값 - Zabbix에서 외부 시스템으로 아이템 값을 스트리밍;
이벤트 - Zabbix에서 외부 시스템으로 이벤트를 스트리밍.
URL 수신기 URL을 입력합니다. 사용자 매크로가 지원됩니다.
태그 필터 태그 필터와 일치하는 아이템 값 또는 이벤트만 내보냅니다. 설정하지 않으면 모든 것을 내보냅니다.
특정 태그와 태그 값을 포함하거나 제외할 수 있습니다. 여러 조건을 설정할 수 있습니다. 태그 이름 매칭은 항상 대소문자를 구분합니다.

각 조건에 사용할 수 있는 여러 연산자가 있습니다:
존재 - 지정된 태그 이름을 포함;
같음 - 지정된 태그 이름과 값을 포함 (대소문자 구분);
포함 - 태그 값에 입력된 문자열이 포함된 지정된 태그 이름을 포함 (부분 문자열 매치, 대소문자 무시);
존재하지 않음 - 지정된 태그 이름을 제외;
같지 않음 - 지정된 태그 이름과 값을 제외 (대소문자 구분);
포함하지 않음 - 태그 값에 입력된 문자열이 포함된 지정된 태그 이름을 제외 (부분 문자열 매치, 대소문자 무시).

조건에는 두 가지 계산 타입이 있습니다:
And/Or - 모든 조건이 충족되어야 하며, 동일한 태그 이름을 가진 조건들은 Or 조건으로 그룹화됩니다;
Or - 하나의 조건만 충족되면 충분합니다.
정보 타입 커넥터가 스트리밍할 아이템 값을 필터링할 정보 타입(숫자(양수), 숫자(실수), 문자 등)을 선택합니다.
이 필드는 데이터 타입이 "아이템 값"으로 설정된 경우 사용할 수 있습니다.
HTTP 인증 인증 옵션을 선택합니다:
없음 - 인증을 사용하지 않음;
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"로 설정된 경우 사용할 수 있으며 필수입니다.
고급 구성 고급 구성 옵션을 표시하려면 고급 구성 헤더를 클릭합니다(아래 참조).
메시지당 최대 레코드 수 하나의 메시지 내에서 스트리밍할 수 있는 값 또는 이벤트의 최대 개수를 지정합니다.
동시 세션 이 커넥터에 대해 실행할 송신자 프로세스의 수를 선택합니다. 최대 100개 세션까지 지정할 수 있으며, 기본값은 "1"입니다.
시도 횟수 데이터 스트리밍을 위한 시도 횟수입니다. 최대 5회까지 지정할 수 있으며, 기본값은 "1"입니다.
시도 간격 데이터 스트리밍 실패 후 커넥터가 대기할 시간을 지정합니다. 최대 10s까지 지정할 수 있으며, 기본값은 "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 피어 검증 웹 서버의 SSL 인증서를 검증하려면 체크박스를 선택합니다.
서버 인증서는 시스템 전체 인증기관(CA) 위치에서 자동으로 가져옵니다. Zabbix 서버 또는 프록시 구성 파라미터 SSLCALocation를 사용하여 CA 파일의 위치를 재정의할 수 있습니다.
SSL 호스트 검증 웹 서버 인증서의 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 클라이언트는 먼저 응답하는 브로커에 연결하고 해당 클러스터 메타데이터를 사용합니다. 목록에 서로 다른 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 해상도를 확인하며, 브로커의 알려진 주소로 해석되는 주소를 선호하십시오.

프로토콜

서버와 수신자 간의 통신은 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"}