Protocolos de verificação passiva e ativa
Esta seção fornece detalhes do protocolo sobre verificações passivas e ativas realizadas por Zabbix agent e Zabbix agent 2.
O Zabbix usa um protocolo de comunicação baseado em JSON para se comunicar com os agents.
Os protocolos do Zabbix agent e do Zabbix agent 2 foram unificados desde o Zabbix 7.0. A diferença entre as solicitações/respostas do Zabbix agent e do Zabbix agent 2 é expressa pelo valor da tag "variant".
Verificações passivas
Uma verificação passiva é uma solicitação simples de dados. O server ou proxy do Zabbix solicita alguns dados (por exemplo, carga de CPU) e o agent do Zabbix envia de volta o resultado para o server.
As verificações passivas são executadas de forma assíncrona - não é necessário receber a resposta de uma solicitação antes que outras verificações sejam iniciadas. A resolução de DNS também é assíncrona.
O poller do agent tentará se conectar a todos os endereços retornados pela consulta DNS. Isso garante que, se um endereço IP estiver inacessível, o poller tentará o próximo endereço disponível, aumentando a probabilidade de uma conexão bem-sucedida. Essa melhoria se aplica tanto ao server quanto ao proxy do Zabbix.
A concorrência máxima de verificações assíncronas é 1000 (definida por MaxConcurrentChecksPerPoller).
O número de pollers assíncronos do agent é definido pelo parâmetro StartAgentPollers.
Solicitação do server
Para a definição do cabeçalho e do comprimento dos dados, consulte os detalhes do protocolo.
{
"request": "passive checks",
"data": [
{
"key": "agent.version",
"timeout": 3
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| request | string | yes | "passive checks" |
|
| data | array of object | yes | Item de verificação passiva. | |
| key | string | yes | Chave do item com macros expandidas. | |
| timeout | number | yes | Tempo limite de comunicação. | |
Resposta do agent
{
"version": "8.0.0",
"variant": 2,
"data": [
{
"value": "8.0.0"
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| version | string | yes | O número da versão do agent. | |
| variant | number | yes | A variante do agent (1 - Zabbix agent, 2 - Zabbix agent 2). | |
| data | array of object | yes | Contém o resultado da verificação. | |
| value | string | no | O valor do item se a verificação foi bem-sucedida. | |
| error | string | no | A mensagem de erro se a verificação não foi bem-sucedida. | |
Por exemplo, para itens suportados:
- O server abre uma conexão TCP
- O server envia <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}
- O agent lê a solicitação e responde com <HEADER><DATALEN>{"version":"8.0.0","variant":2,"data":[{"value":1}]}
- O server processa os dados para obter o valor, '1' no nosso caso
- A conexão TCP é fechada
Para itens não suportados:
- O server abre uma conexão TCP
- O server envia <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
- O agent lê a solicitação e responde com <HEADER><DATALEN>{"version":"8.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
- O server processa os dados, altera o estado do item para não suportado com a mensagem de erro especificada
- A conexão TCP é fechada
Failover para o protocolo antigo
Para garantir que o Zabbix server ou proxy possa funcionar com agents de versões anteriores à 7.2, que usam o protocolo em texto simples, foi implementado um failover para o protocolo antigo.
As verificações passivas são realizadas usando o protocolo JSON (7.0 e posteriores) após a reinicialização ou quando a configuração da interface é alterada.
Se nenhuma resposta JSON válida for recebida (o agent enviou "ZBX_NOTSUPPORTED"), o Zabbix armazenará em cache a interface como protocolo antigo e tentará novamente a verificação enviando apenas a chave do item.
Observe que, a cada hora, o Zabbix server/proxy tentará novamente trabalhar com o novo protocolo em todas as interfaces, retornando ao protocolo antigo se necessário.
Verificações ativas
As verificações ativas exigem um processamento mais complexo. O agent deve primeiro recuperar do server/proxy uma lista de items e/ou comandos remotos para processamento independente.
Os servers/proxies dos quais obter as verificações ativas estão listados no parâmetro 'ServerActive' do arquivo de configuração do agent. A frequência de solicitação dessas verificações é definida pelo parâmetro 'RefreshActiveChecks' no mesmo arquivo de configuração. No entanto, se a atualização das verificações ativas falhar, a tentativa é repetida após 60 segundos fixos.
Desde o Zabbix 6.4, o agent (no modo ativo) não recebe mais do server/proxy uma cópia completa da configuração a cada dois minutos (padrão). Em vez disso, para reduzir o tráfego de rede e o uso de recursos, uma sincronização incremental da configuração é realizada a cada 5 segundos (padrão), na qual o server/proxy fornece uma cópia completa da configuração somente se o agent ainda não a tiver recebido, ou se algo tiver mudado na configuração do host, nas macros globais ou nas expressões regulares globais.
O agent então envia periodicamente os novos valores para o server(s). Se o agent recebeu algum remote commands para executar, o resultado da execução também será enviado. Observe que a execução de remote command em um agent ativo é suportada desde o Zabbix agent 7.0.
Se um agent estiver atrás do firewall, você pode considerar usar apenas Active checks, porque nesse caso você não precisaria modificar o firewall para permitir conexões de entrada iniciais.
Obtendo a lista de items
Solicitação do agent
A solicitação de active checks é usada para obter os active checks a serem processados pelo agent.
Essa solicitação é enviada pelo agent na inicialização e, depois, em intervalos de RefreshActiveChecks.
{
"request": "active checks",
"host": "Zabbix server",
"host_metadata": "mysql,nginx",
"interface": "zabbix.server.lan",
"ip": "159.168.1.1",
"port": 12050,
"version": "8.0.0",
"variant": 2,
"config_revision": 1,
"session": "e3dcbd9ace2c9694e1d7bbd030eeef6e"
}
| Field | Type | Mandatory | Value |
|---|---|---|---|
| request | string | yes | active checks |
| host | string | yes | Host name. |
| host_metadata | string | no | O parâmetro de configuração HostMetadata ou o valor da métrica HostMetadataItem. |
| interface | string | no | O parâmetro de configuração HostInterface ou o valor da métrica HostInterfaceItem. |
| ip | string | no | O primeiro IP do parâmetro de configuração ListenIP, se definido. |
| port | number | no | O valor do parâmetro de configuração ListenPort, se definido e se não for a porta padrão de escuta do agent. |
| version | string | yes | O número da versão do agent. |
| variant | number | yes | A variante do agent (1 - Zabbix agent, 2 - Zabbix agent 2). |
| config_revision | number | no | Identificador de configuração para sincronização incremental de configuração. |
| session | string | no | Identificador de sessão para sincronização incremental de configuração. |
Resposta do server
A resposta de active checks é enviada pelo server de volta ao agent após o processamento da solicitação de active checks.
{
"response": "success",
"config_revision": 2,
"data": [
{
"key": "system.uptime",
"itemid": 1234,
"delay": "10s",
"lastlogsize": 0,
"mtime": 0
},
{
"key": "agent.version",
"itemid": 5678,
"delay": "10m",
"lastlogsize": 0,
"mtime": 0,
"timeout": "30s"
}
],
"commands": [
{
"command": "df -h --output=source,size / | awk 'NR>1 {print $2}'",
"id": 1324,
"wait": 1
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| response | string | yes | success | failed |
|
| info | string | no | Informações de erro em caso de falha. | |
| data | array of objects | no | Items de active check. Omitido se a configuração do host não tiver sido alterada. | |
| key | string | no | Chave do item com macros expandidas. | |
| itemid | number | no | Identificador do item. | |
| delay | string | no | Intervalo de atualização do item. Intervalos flexíveis/de agendamento são suportados por Zabbix agent e Zabbix agent 2 desde o Zabbix 7.0. |
|
| lastlogsize | number | no | lastlogsize do item. | |
| mtime | number | no | mtime do item. | |
| timeout | string | no | Tempo limite do item. | |
| refresh_unsupported | number | no | Intervalo de atualização de item sem suporte. | |
| regexp | array of objects | no | Expressões regulares globais. | |
| name | string | no | Nome da expressão regular global. | |
| expression | string | no | Expressão regular global. | |
| expression_type | number | no | Tipo de expressão regular global. | |
| exp_delimiter | string | no | Delimitador da expressão regular global. | |
| case_sensitive | number | no | Configuração de sensibilidade a maiúsculas e minúsculas da expressão regular global. | |
| commands | array of objects | no | Comandos remotos a serem executados. Incluídos se a execução de comando remoto tiver sido acionada por uma operação de ação ou pela execução manual de um script. Observe que a execução de comando remoto em um agent ativo é suportada desde o Zabbix agent 7.0. Agents ativos mais antigos ignorarão quaisquer comandos remotos incluídos na resposta do server de active checks. | |
| command | string | no | Comando remoto. | |
| id | number | no | Identificador do comando remoto. | |
| wait | number | no | Modo de execução do comando remoto ("0" (nowait) para comandos de operações de ação; "1" (wait) para comandos da execução manual de script). | |
| timeout | number | no | Tempo limite de execução do comando remoto na configuração de server/proxy. | |
| config_revision | number | no | Identificador de configuração para sincronização incremental de configuração. Omitido se a configuração do host não tiver sido alterada. Incrementado se a configuração do host for alterada. | |
O server deve responder com sucesso.
Por exemplo:
- O agent abre uma conexão TCP
- O agent solicita a lista de checks
- O server responde com uma lista de items e comandos remotos a serem executados
- O agent interpreta a resposta
- A conexão TCP é encerrada
- O agent inicia a coleta periódica de dados e executa comandos remotos (suportado desde o Zabbix agent 7.0)
Observe que dados de configuração (sensíveis) podem ficar disponíveis para partes que tenham acesso à porta trapper do Zabbix server ao usar um active check. Isso é possível porque qualquer pessoa pode se passar por um agent ativo e solicitar dados de configuração de item; a autenticação não ocorre, a menos que você use opções de encryption.
Envio de dados coletados
Agent envia
A solicitação de dados do agent contém os valores dos items coletados e os valores dos comandos remotos executados (se houver).
{
"request": "agent data",
"data": [
{
"id": 1,
"itemid": 5678,
"value": "7.0.0",
"clock": 1712830783,
"ns": 76808644
},
{
"id": 2,
"itemid": 1234,
"value": "69672",
"clock": 1712830783,
"ns": 77053975
}
],
"commands": [
{
"id": 1324,
"value": "16G"
}
],
"session": "8495cd52070e6ca52b371f29c8574165",
"host": "Zabbix server",
"version": "8.0.0",
"variant": 2
}
| Campo | < | Tipo | Obrigatório | Valor | |
|---|---|---|---|---|---|
| request | < | string | yes | agent data |
|
| data | < | array of objects | yes | Valores dos items. | |
| id | < | number | yes | O identificador do valor (contador incremental usado para verificar valores duplicados em caso de problemas de rede). | |
| ^ | itemid | number | yes | O identificador do item. | |
| ^ | value | string | no | O valor do item. | |
| ^ | lastlogsize | number | no | O lastlogsize do item. | |
| ^ | mtime | number | no | O mtime do item. | |
| ^ | state | number | no | O estado do item. | |
| ^ | source | string | no | A origem do log de eventos do valor. | |
| ^ | eventid | number | no | O eventid do log de eventos do valor. | |
| ^ | severity | number | no | A severidade do log de eventos do valor. | |
| ^ | timestamp | number | no | O timestamp do log de eventos do valor. | |
| ^ | clock | number | yes | O timestamp do valor (segundos desde a Epoch). | |
| ^ | ns | number | yes | Os nanossegundos do timestamp do valor. | |
| commands | < | array of objects | no | Resultado da execução de comandos remotos. Observe que a execução de comandos remotos em um agent ativo é suportada desde o Zabbix agent 7.0. Agents ativos mais antigos ignorarão quaisquer comandos remotos incluídos na resposta do server para verificações ativas. | |
| id | number | no | Identificador do comando remoto. | ||
| ^ | value | string | no | Resultado da execução do comando remoto, se a execução tiver sido bem-sucedida. | |
| ^ | error | string | no | Mensagem de erro da execução do comando remoto, se a execução tiver falhado. | |
| session | < | string | yes | Identificador único de sessão gerado sempre que o agent é iniciado. | |
| host | < | string | yes | Nome do host. | |
| version | < | string | yes | O número da versão do agent. | |
| variant | < | number | yes | A variante do agent (1 - Zabbix agent, 2 - Zabbix agent 2). | |
Um ID virtual é atribuído a cada valor. O ID do valor é um contador simples crescente, exclusivo dentro de uma sessão de dados (identificada pelo token da sessão). Esse ID é usado para descartar valores duplicados que possam ser enviados em ambientes com conectividade ruim.
Resposta do server
A resposta de dados do agent é enviada pelo server de volta ao agent após o processamento da solicitação de dados do agent.
{
"response": "success",
"info": "processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
}
| Campo | Tipo | Obrigatório | Valor |
|---|---|---|---|
| response | string | yes | success | failed |
| info | string | yes | Resultados do processamento dos items. |
Se o envio de alguns valores falhar no server (por exemplo, porque o host ou o item foi desativado ou excluído), o agent não tentará reenviar esses valores.
Por exemplo:
- O agent abre uma conexão TCP
- O agent envia uma lista de valores
- O server processa os dados e envia o status de volta
- A conexão TCP é encerrada
A mensagem de erro será truncada para 2048 símbolos no lado do server.
Mensagem de heartbeat
Agent envia
A mensagem de heartbeat é enviada por um agent ativo para o server/proxy do Zabbix a cada HeartbeatFrequency segundos (configurado no arquivo de configuração do Zabbix agent/agent 2).
Ela é usada para monitorar a disponibilidade de verificações ativas.
{
"request": "active check heartbeat",
"host": "Zabbix server",
"heartbeat_freq": 60,
"version": "8.0.0",
"variant": 2
}
| Campo | Tipo | Obrigatório | Valor |
|---|---|---|---|
| request | string | yes | active check heartbeat |
| host | string | yes | O nome do host. |
| heartbeat_freq | number | yes | A frequência de heartbeat do agent (parâmetro de configuração HeartbeatFrequency). |
| version | string | yes | O número da versão do agent. |
| variant | number | yes | A variante do agent (1 - Zabbix agent, 2 - Zabbix agent 2). |
Resposta de redirecionamento
Quando um host é reassigned, o server pode instruir o agent a redirecionar seu heartbeat (e as verificações ativas subsequentes) para outra instância de proxy ou server.
{
"response": "failed",
"redirect": {
"revision": 2,
"address": "192.0.2.1:10055"
}
}
| Campo | Tipo | Obrigatório | Valor | |
|---|---|---|---|---|
| response | string | yes | success | failed |
|
| redirect | object | yes | Instruções de redirecionamento. | |
| revision | number | yes | Identificador da revisão de configuração. | |
| address | string | yes | Endereço de destino do server/proxy. | |
Protocolo XML antigo
O Zabbix aceitará até 16 MB de dados XML codificados em Base64, mas um único valor decodificado não deve ser maior que 64 KB; caso contrário, ele será truncado para 64 KB durante a decodificação.