2 Transmitindo para sistemas externos

Visão geral

É possível transmitir valores de item e eventos do Zabbix para sistemas externos via HTTP (consulte os detalhes do protocolo).

O filtro de tags pode ser usado para transmitir subconjuntos de valores de item ou eventos.

Dois tipos de processos do Zabbix server são responsáveis pela transmissão de dados: connector manager e connector worker. Um item interno do Zabbix, zabbix[connector_queue], permite monitorar a quantidade de valores enfileirados na fila do conector.

Configuração

As etapas a seguir são necessárias para configurar o streaming de dados para um sistema externo:

1. Ter um sistema remoto configurado para receber dados do Zabbix. Para esse fim, as seguintes ferramentas estão disponíveis:

  • Um exemplo de um receiver simples que registra as informações recebidas nos arquivos events.ndjson e history.ndjson.
  • Kafka connector for Zabbix server - um server leve escrito em Go, projetado para encaminhar valores de item e eventos de um Zabbix server para um broker Kafka.

2. Defina o número necessário de workers de connector no Zabbix ajustando o parâmetro StartConnectors em zabbix_server.conf. O número de workers de connector deve corresponder (ou exceder, se as sessões simultâneas forem mais de 1) à contagem de connectors configurada no Zabbix frontend. Em seguida, reinicie o Zabbix server.

3. Configure um novo connector no Zabbix frontend (Administration > General > Connectors) e recarregue o cache do server com o comando zabbix_server -R config_cache_reload.

Os campos obrigatórios são marcados com um asterisco.

Parameter Description
Name Insira o nome do connector.
Data type Selecione o tipo de dado para streaming:
Item values - transmite valores de item do Zabbix para sistemas externos;
Events - transmite eventos do Zabbix para sistemas externos.
URL Insira a URL do receiver. Macros de usuário são suportadas.
Tag filter Exporte apenas valores de item ou eventos que correspondam ao filtro de tags. Se não for definido, tudo será exportado.
É possível incluir, bem como excluir, tags e valores de tag específicos. Várias condições podem ser definidas. A correspondência do nome da tag sempre diferencia maiúsculas de minúsculas.

Há vários operadores disponíveis para cada condição:
Exists - inclui os nomes de tag especificados;
Equals - inclui os nomes e valores de tag especificados (diferencia maiúsculas de minúsculas);
Contains - inclui os nomes de tag especificados em que os valores da tag contêm a string informada (correspondência por substring, sem diferenciar maiúsculas de minúsculas);
Does not exist - exclui os nomes de tag especificados;
Does not equal - exclui os nomes e valores de tag especificados (diferencia maiúsculas de minúsculas);
Does not contain - exclui os nomes de tag especificados em que os valores da tag contêm a string informada (correspondência por substring, sem diferenciar maiúsculas de minúsculas).

Há dois tipos de cálculo para as condições:
And/Or - todas as condições devem ser atendidas; condições com o mesmo nome de tag serão agrupadas pela condição Or;
Or - basta que uma condição seja atendida.
Type of information Selecione o tipo de informação (numérico (sem sinal), numérico (float), caractere etc.) pelo qual filtrar os valores de item que o connector deve transmitir.
Este campo está disponível se Data type estiver definido como "Item values".
HTTP authentication Selecione a opção de autenticação:
None - nenhuma autenticação é usada;
Basic - autenticação básica é usada;
NTLM - autenticação NTLM (Windows NT LAN Manager) é usada;
Kerberos - autenticação Kerberos é usada (veja também: Configuring Kerberos with Zabbix);
Digest - autenticação Digest é usada;
Bearer - autenticação Bearer é usada.
Username Insira o nome de usuário (até 255 caracteres). Macros de usuário são suportadas.
Este campo está disponível se HTTP authentication estiver definido como "Basic", "NTLM", "Kerberos" ou "Digest".
Password Insira a senha do usuário (até 255 caracteres). Macros de usuário são suportadas.
Este campo está disponível se HTTP authentication estiver definido como "Basic", "NTLM", "Kerberos" ou "Digest".
Bearer token Insira o token Bearer. Macros de usuário são suportadas.
Este campo está disponível e é obrigatório se HTTP authentication estiver definido como "Bearer".
Advanced configuration Clique no rótulo Advanced configuration para exibir as opções de configuração avançada (veja abaixo).
Max records per message Especifique o número máximo de valores ou eventos que podem ser transmitidos em uma única mensagem.
Concurrent sessions Selecione o número de processos de envio a serem executados para este connector. É possível especificar até 100 sessões; o valor padrão é "1".
Attempts Número de tentativas para transmitir dados. É possível especificar até 5 tentativas; o valor padrão é "1".
Attempt interval Especifique quanto tempo o connector deve aguardar após uma tentativa malsucedida de transmitir dados. É possível especificar até 10s; o valor padrão é "5s".
Este campo está disponível se Attempts estiver definido como "2" ou mais.
Tentativas malsucedidas são aquelas em que o estabelecimento de uma conexão falhou ou em que o código de resposta HTTP não é 200, 201, 202, 203, 204. Novas tentativas são acionadas em caso de erros de comunicação ou quando o código de resposta HTTP não é 200, 201, 202, 203, 204, 400, 401, 403, 404, 405, 415, 422. Redirecionamentos são seguidos, portanto 302 -> 200 é uma resposta positiva; enquanto 302 -> 503 acionará uma nova tentativa.
Timeout Especifique o tempo limite da mensagem (1-60 segundos, padrão - 5 segundos).
Sufixos de tempo são suportados, por exemplo, 30s, 1m. Macros de usuário são suportadas.
HTTP proxy Você pode especificar um HTTP proxy a ser usado no seguinte formato:
[protocol://][username[:password]@]proxy.example.com[:port]
Macros de usuário são suportadas.

O prefixo opcional protocol:// pode ser usado para especificar protocolos alternativos de proxy (o suporte ao prefixo de protocolo foi adicionado no cURL 7.21.7). Se nenhum protocolo for especificado, o proxy será tratado como um HTTP proxy. Por padrão, a porta 1080 será usada.

Se HTTP proxy for especificado, o proxy substituirá variáveis de ambiente relacionadas a proxy, como http_proxy, HTTPS_PROXY. Se não for especificado, o proxy não substituirá variáveis de ambiente relacionadas a proxy. O valor informado é passado como está, sem qualquer verificação de consistência.
Você também pode inserir um endereço de proxy SOCKS. Se você especificar o protocolo errado, o connector não conseguirá transmitir valores de item ou eventos do Zabbix.

Observe que apenas autenticação simples é suportada com HTTP proxy.
SSL verify peer Marque a caixa de seleção para verificar o certificado SSL do servidor web.
O certificado do server será obtido automaticamente do local de autoridade certificadora (CA) do sistema. Você pode substituir o local dos arquivos de CA usando o parâmetro de configuração do Zabbix server ou proxy SSLCALocation.
SSL verify host Marque a caixa de seleção para verificar se o campo Common Name ou o campo Subject Alternate Name do certificado do servidor web corresponde.
Isso define a opção cURL CURLOPT_SSL_VERIFYHOST.
SSL certificate file Nome do arquivo de certificado SSL usado para autenticação do cliente. O arquivo de certificado deve estar no formato PEM1. Macros de usuário são suportadas.
Se o arquivo de certificado também contiver a chave privada, deixe o campo SSL key file vazio. Se a chave estiver criptografada, especifique a senha no campo SSL key password. O diretório que contém este arquivo é especificado pelo parâmetro de configuração do Zabbix server ou proxy SSLCertLocation.
SSL key file Nome do arquivo de chave privada SSL usado para autenticação do cliente. O arquivo de chave privada deve estar no formato PEM1. Macros de usuário são suportadas.
O diretório que contém este arquivo é especificado pelo parâmetro de configuração do Zabbix server ou proxy SSLKeyLocation.
SSL key password Senha do arquivo de chave privada SSL. Macros de usuário são suportadas.
Description Insira a descrição do connector.
Enabled Marque a caixa de seleção para habilitar o connector.

Quando o Kafka connector é configurado com uma lista de endereços de brokers bootstrap separados por vírgula (por exemplo, Kafka.URL=kafka1.example.com:9093,kafka2.example.com:9093), o cliente Kafka se conecta ao(s) broker(s) que respondem primeiro e usa seus metadados de cluster. Se a lista contiver endereços de diferentes clusters Kafka, apenas o cluster com resposta mais rápida será usado, e os outros endereços serão registrados como indisponíveis; como resultado, avisos na inicialização como o seguinte podem aparecer mesmo que o connector esteja conectado:

kafka cluster connected, but broker(s) "kafka1.example.com:9093, kafka2.example.com:9093" unavailable; will retry on message send if active brokers fail 

Em alguns ambientes (redes privadas, redes de contêineres ou configurações não padrão de DNS/hosts), nomes de host ou IPs podem ser resolvidos para endereços de loopback (por exemplo, 127.0.0.1/localhost) ou ser normalizados pelo cliente, o que pode tornar esses avisos enganosos. Para reduzir a confusão, certifique-se de que todos os endereços Kafka.URL pertençam ao mesmo cluster Kafka, verifique a resolução DNS a partir do host do connector e os advertised.listeners dos brokers, e prefira endereços que sejam resolvidos para o endereço anunciado do broker.

Protocolo

A comunicação entre o server e o receptor é feita via HTTP usando REST API, NDJSON, "Content-Type: application/x-ndjson".

Para mais detalhes, consulte Protocolo de exportação JSON delimitado por nova linha.

Solicitação do servidor

Exemplo de transmissão de valores de item:

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}

Exemplo de transmissão de eventos:

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}
Resposta do receiver

A resposta consiste no código de status da resposta HTTP e na carga JSON. O código de status da resposta HTTP deve ser "200", "201", "202", "203" ou "204" para requisições processadas com sucesso; qualquer outro indica falha na requisição.

Exemplo de sucesso:

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

Exemplo com erros:

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