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

개요

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

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

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

구성

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

1. Zabbix에서 데이터를 받을 원격 시스템을 설정합니다. 이 목적을 위해 다음 도구들을 사용할 수 있습니다:

  • 수신된 정보를 events.ndjsonhistory.ndjson 파일에 로그하는 간단한 receiver의 예시.
  • 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"입니다.
시도 간격 데이터 스트리밍 실패 후 커넥터가 대기해야 하는 시간을 지정합니다. 최대 10초까지 지정할 수 있으며, 기본값은 "5초"입니다.
이 필드는 시도 횟수가 "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/호스트 설정)에서는 호스트명이나 IP가 루프백 주소(예: 127.0.0.1/localhost)로 해결되거나 클라이언트에 의해 정규화될 수 있어, 이러한 경고가 오해를 불러일으킬 수 있습니다. 혼동을 줄이려면, 모든 Kafka.URL 주소가 동일한 Kafka 클러스터에 속하도록 하고, 커넥터 호스트에서의 DNS 해결과 브로커의 advertised.listeners를 확인하며, 브로커의 광고된 주소로 해결되는 주소를 선호하시기 바랍니다.

프로토콜

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