외부 시스템 스트리밍

Zabbix v7.4번역일: 2026-09-09원본 보기

개요

Zabbix에서 아이템 값과 이벤트를 HTTP를 통해 외부 시스템으로 스트리밍할 수 있습니다(프로토콜 상세 참고).

태그 필터를 사용하여 아이템 값이나 이벤트의 일부만 스트리밍할 수 있습니다.

데이터 스트리밍은 두 가지 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 프론트엔드에서 설정한 커넥터 개수와 일치해야 하며(동시 세션이 1개보다 많은 경우 그 이상이어야 함), 설정 후 Zabbix 서버를 재시작합니다.

3. Zabbix 프론트엔드(Administration > General > Connectors)에서 새 커넥터를 설정하고 zabbix_server -R config_cache_reload 명령으로 서버 캐시를 리로드합니다.

필수 항목은 별표로 표시되어 있습니다.

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

각 조건에 사용할 수 있는 연산자는 다음과 같습니다:
Exists - 지정한 태그 이름을 포함;
Equals - 지정한 태그 이름과 값을 포함(대소문자 구분);
Contains - 태그 값에 입력한 문자열이 포함된 지정 태그 이름을 포함(부분 문자열 일치, 대소문자 구분 안 함);
Does not exist - 지정한 태그 이름을 제외;
Does not equal - 지정한 태그 이름과 값을 제외(대소문자 구분);
Does not contain - 태그 값에 입력한 문자열이 포함된 지정 태그 이름을 제외(부분 문자열 일치, 대소문자 구분 안 함).

조건에는 두 가지 계산 타입이 있습니다:
And/Or - 모든 조건이 충족되어야 하며, 같은 태그 이름을 가진 조건들은 Or 조건으로 그룹화됩니다;
Or - 조건 중 하나만 충족되면 됩니다.
Type of information 커넥터가 스트리밍할 아이템 값을 필터링할 정보 타입(숫자(부호 없음), 숫자(실수), 문자 등)을 선택합니다.
이 필드는 Data type이 "Item values"로 설정된 경우에 사용할 수 있습니다.
HTTP authentication 인증 옵션을 선택합니다:
None - 인증을 사용하지 않음;
Basic - Basic 인증 사용;
NTLM - NTLM(Windows NT LAN Manager) 인증 사용;
Kerberos - Kerberos 인증 사용(참고: Configuring Kerberos with Zabbix);
Digest - Digest 인증 사용;
Bearer - Bearer 인증 사용.
Username 사용자 이름을 입력합니다(최대 255자). 사용자 매크로를 지원합니다.
이 필드는 HTTP authentication이 "Basic", "NTLM", "Kerberos", "Digest" 중 하나로 설정된 경우에 사용할 수 있습니다.
Password 사용자 비밀번호를 입력합니다(최대 255자). 사용자 매크로를 지원합니다.
이 필드는 HTTP authentication이 "Basic", "NTLM", "Kerberos", "Digest" 중 하나로 설정된 경우에 사용할 수 있습니다.
Bearer token Bearer 토큰을 입력합니다. 사용자 매크로를 지원합니다.
이 필드는 HTTP authentication이 "Bearer"로 설정된 경우에 표시되며 필수입니다.
Advanced configuration Advanced configuration 헤더를 클릭하면 고급 설정 옵션이 표시됩니다(아래 참고).
Max records per message 하나의 메시지 내에서 스트리밍할 수 있는 값 또는 이벤트의 최대 개수를 지정합니다.
Concurrent sessions 이 커넥터에 사용할 발신자 프로세스 수를 선택합니다. 최대 100개 세션까지 지정할 수 있으며 기본값은 "1"입니다.
Attempts 데이터 스트리밍 시도 횟수입니다. 최대 5회까지 지정할 수 있으며 기본값은 "1"입니다.
Attempt interval 시도가 실패한 후 커넥터가 대기할 시간을 지정합니다. 최대 10초까지 지정할 수 있으며 기본값은 "5s"입니다.
이 필드는 Attempts가 "2" 이상으로 설정된 경우에 사용할 수 있습니다.
연결 수립에 실패하거나 HTTP 응답 코드가 200, 201, 202, 203, 204가 아닌 경우를 실패한 시도로 간주합니다. 통신 오류가 발생하거나 HTTP 응답 코드가 200, 201, 202, 203, 204, 400, 401, 403, 404, 405, 415, 422가 아닌 경우 재시도가 실행됩니다. 리다이렉트는 따라가므로 302 -> 200은 정상 응답으로 처리되지만, 302 -> 503은 재시도를 유발합니다.
Timeout 메시지 타임아웃을 지정합니다(1-60초, 기본값 - 5초).
시간 접미사를 지원합니다(예: 30s, 1m). 사용자 매크로를 지원합니다.
HTTP proxy 다음 형식으로 사용할 HTTP 프록시를 지정할 수 있습니다:
[protocol://][username[:password]@]proxy.example.com[:port]
사용자 매크로를 지원합니다.

선택적인 protocol:// 접두사를 사용하여 다른 프록시 프로토콜을 지정할 수 있습니다(프로토콜 접두사 지원은 cURL 7.21.7에서 추가되었습니다). 프로토콜을 지정하지 않으면 프록시는 HTTP 프록시로 처리됩니다. 기본적으로 1080 포트가 사용됩니다.

HTTP proxy를 지정하면 http_proxy, HTTPS_PROXY와 같은 프록시 관련 환경 변수를 덮어씁니다. 지정하지 않으면 프록시 관련 환경 변수를 덮어쓰지 않습니다. 입력한 값은 그대로 전달되며 별도의 유효성 검사는 이루어지지 않습니다.
SOCKS 프록시 주소를 입력할 수도 있습니다. 잘못된 프로토콜을 지정하면 커넥터가 Zabbix로부터 아이템 값이나 이벤트를 스트리밍하는 데 실패합니다.

HTTP 프록시에서는 단순 인증만 지원됨을 참고하세요.
SSL verify peer 웹 서버의 SSL 인증서를 검증하려면 체크박스를 선택합니다.
서버 인증서는 시스템 전체의 인증 기관(CA) 위치에서 자동으로 가져옵니다. Zabbix 서버 또는 프록시 설정 파라미터 SSLCALocation을 사용하여 CA 파일 위치를 재정의할 수 있습니다.
SSL verify host 웹 서버 인증서의 Common Name 필드 또는 Subject Alternate Name 필드가 일치하는지 확인하려면 체크박스를 선택합니다.
이 옵션은 CURLOPT_SSL_VERIFYHOST cURL 옵션을 설정합니다.
SSL certificate file 클라이언트 인증에 사용할 SSL 인증서 파일 이름입니다. 인증서 파일은 PEM^1^ 형식이어야 합니다. 사용자 매크로를 지원합니다.
인증서 파일에 개인 키가 포함되어 있다면 SSL key file 필드는 비워 둡니다. 키가 암호화되어 있다면 SSL key password 필드에 비밀번호를 지정합니다. 이 파일이 위치한 디렉터리는 Zabbix 서버 또는 프록시 설정 파라미터 SSLCertLocation으로 지정합니다.
SSL key file 클라이언트 인증에 사용할 SSL 개인 키 파일 이름입니다. 개인 키 파일은 PEM^1^ 형식이어야 합니다. 사용자 매크로를 지원합니다.
이 파일이 위치한 디렉터리는 Zabbix 서버 또는 프록시 설정 파라미터 SSLKeyLocation으로 지정합니다.
SSL key password SSL 개인 키 파일 비밀번호입니다. 사용자 매크로를 지원합니다.
Description 커넥터 설명을 입력합니다.
Enabled 커넥터를 활성화하려면 체크박스를 선택합니다.

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 확인을 검증하며, 브로커의 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"}