2 Verificações passivas e ativas do agent

Visão geral

Esta seção fornece detalhes sobre as verificações passivas e ativas realizadas pelo Zabbix agent e pelo 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 Zabbix server ou proxy solicita alguns dados (por exemplo, a carga da CPU), e o Zabbix agent envia o resultado de volta ao server.

As verificações passivas são executadas de forma assíncrona - não é necessário receber a resposta a uma solicitação antes que outras verificações sejam iniciadas. A resolução de DNS também é assíncrona.

O agent poller 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 Zabbix server quanto ao proxy.

A simultaneidade máxima de verificações assíncronas é 1000 (definida por MaxConcurrentChecksPerPoller).

O número de agent pollers assíncronos é definido pelo parâmetro StartAgentPollers.

Solicitação do server

Para obter a definição do cabeçalho e do tamanho dos dados, consulte detalhes do protocolo.

{
  "request": "passive checks",
  "data": [
    {
      "key": "agent.version",
      "timeout": 3
    }
  ]
}
Campo Tipo Obrigatório Valor
request string sim "passive checks"
data array of object sim item de verificação passiva.
key string sim Chave do item com macros expandidas.
timeout number sim Tempo limite de comunicação.

Resposta do agent

{
  "version": "7.4.0",
  "variant": 2,
  "data": [
    {
      "value": "7.4.0"
    }
  ]
}
Campo Tipo Obrigatório Valor
version string sim O número da versão do agent.
variant number sim A variante do agent (1 - Zabbix agent, 2 - Zabbix agent 2).
data array of object sim Contém o resultado da verificação.
value string não O valor do item se a verificação tiver sido bem-sucedida.
error string não A mensagem de erro se a verificação não tiver sido bem-sucedida.

Por exemplo, para itens compatíveis:

  1. O server abre uma conexão TCP
  2. O server envia <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}
  3. O agent lê a solicitação e responde com <HEADER><DATALEN>{"version":"7.4.0","variant":2,"data":[{"value":1}]}
  4. O server processa os dados para obter o valor, '1' neste caso
  5. A conexão TCP é fechada

Para itens não compatíveis:

  1. O server abre uma conexão TCP
  2. O server envia <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
  3. O agent lê a solicitação e responde com <HEADER><DATALEN>{"version":"7.4.0","variant":2,"data":[{"error":"Unsupported item key."}]}
  4. O server processa os dados e altera o estado do item para não compatível com a mensagem de erro especificada
  5. A conexão TCP é fechada
Failover para o protocolo antigo

Para garantir que o Zabbix server ou o proxy possam trabalhar com agents de versões anteriores à 7.2, que usam o protocolo de 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 uma 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 usando o 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 obter do server/proxy uma lista de itens e/ou comandos remotos para processamento independente.

Os servers/proxies dos quais as verificações ativas são obtidas sã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, ela será repetida após 60 segundos, valor definido no código.

Desde o Zabbix 6.4, o agent (em 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 diminuir 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 apenas se o agent ainda não a recebeu, ou se algo mudou na configuração do host, macros globais ou expressões regulares globais.

O agent então envia periodicamente os novos valores para o(s) server(s). Se o agent tiver recebido algum comando remoto para executar, o resultado da execução também será enviado. Observe que a execução de comandos remotos em um agent ativo é compatível desde o Zabbix agent 7.0.

Se um agent estiver atrás de um firewall, considere usar apenas verificações ativas, pois, nesse caso, não será necessário modificar o firewall para permitir conexões de entrada iniciais.

Obtendo a lista de itens

Solicitação do agent

A solicitação de verificações ativas é usada para obter as verificações ativas que serão processadas pelo agent. Essa solicitação é enviada pelo agent ao ser iniciado e, posteriormente, nos 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": "7.4.0",
  "variant": 2,
  "config_revision": 1,
  "session": "e3dcbd9ace2c9694e1d7bbd030eeef6e"
}
Campo Tipo Obrigatório Valor
request string sim active checks
host string sim Nome do host.
host_metadata string não Valor do parâmetro de configuração HostMetadata ou da métrica HostMetadataItem.
interface string não Valor do parâmetro de configuração HostInterface ou da métrica HostInterfaceItem.
ip string não Primeiro IP do parâmetro de configuração ListenIP, se definido.
port number não Valor do parâmetro de configuração ListenPort, se definido e diferente da porta de escuta padrão do agent.
version string sim Número da versão do agent.
variant number sim Variante do agent (1 - Zabbix agent, 2 - Zabbix agent 2).
config_revision number não Identificador da configuração para a sincronização incremental da configuração.
session string não Identificador da sessão para a sincronização incremental da configuração.

Resposta do server

A resposta de verificações ativas é enviada pelo server de volta ao agent após o processamento da solicitação de verificações ativas.

{
  "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
    }
  ]
}
Campo Tipo Obrigatório Valor
response string sim success | failed
info string não Informações sobre o erro em caso de falha.
data array of objects não Itens de verificação ativa. Omitido se a configuração do host não tiver sido alterada.
key string não Chave do item com macros expandidas.
itemid number não Identificador do item.
delay string não Intervalo de atualização do item.
Intervalos flexíveis/de agendamento são compatíveis com o Zabbix agent e o Zabbix agent 2 desde o Zabbix 7.0.
lastlogsize number não lastlogsize do item.
mtime number não mtime do item.
timeout string não Timeout do item.
refresh_unsupported number não Intervalo de atualização de itens não suportados.
regexp array of objects não Expressões regulares globais.
name string não Nome da expressão regular global.
expression string não Expressão regular global.
expression_type number não Tipo da expressão regular global.
exp_delimiter string não Delimitador da expressão regular global.
case_sensitive number não Configuração de diferenciação entre maiúsculas e minúsculas da expressão regular global.
commands array of objects não Comandos remotos a serem executados. Incluído se a execução de um 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 comandos remotos em um agent ativo é compatível desde o Zabbix agent 7.0. Agents ativos mais antigos ignorarão todos os comandos remotos incluídos na resposta do server às verificações ativas.
command string não Comando remoto.
id number não Identificador do comando remoto.
wait number não Modo de execução do comando remoto ("0" (nowait) para comandos de operações de ação; "1" (wait) para comandos executados a partir da execução manual de scripts).
timeout number não Timeout de execução do comando remoto na configuração do server/proxy.
config_revision number não Identificador da configuração para a sincronização incremental da 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:

  1. O agent abre uma conexão TCP
  2. O agent solicita a lista de verificações
  3. O server responde com uma lista de itens e comandos remotos a serem executados
  4. O agent analisa a resposta
  5. A conexão TCP é fechada
  6. O agent inicia a coleta periódica de dados e executa os comandos remotos (compatível desde o Zabbix agent 7.0)

Observe que os dados de configuração (confidenciais) podem ficar disponíveis para partes que tenham acesso à porta trapper do server do Zabbix ao usar uma verificação ativa. Isso é possível porque qualquer pessoa pode se passar por um agent ativo e solicitar dados de configuração de itens; a autenticação não ocorre, a menos que você use opções de criptografia.

Envio dos dados coletados

O agent envia

A solicitação de dados do agent contém os valores coletados dos item 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": "7.4.0",
  "variant": 2
}
Campo Tipo Obrigatório Valor
request string sim agent data
data array of objects sim Valores dos item.
id number sim O identificador do valor (contador incremental usado para verificar valores duplicados em caso de problemas de rede).
itemid number sim O identificador do item.
value string não O valor do item.
lastlogsize number não O lastlogsize do item.
mtime number não O mtime do item.
state number não O estado do item.
source string não A origem do log de eventos do valor.
eventid number não O eventid do log de eventos do valor.
severity number não A severidade do log de eventos do valor.
timestamp number não O timestamp do log de eventos do valor.
clock number sim O timestamp do valor (segundos desde Epoch).
ns number sim Os nanossegundos do timestamp do valor.
commands array of objects não Resultado da execução de comandos remotos. Observe que a execução de comandos remotos em um agent ativo é compatível desde o Zabbix agent 7.0. Agents ativos mais antigos ignorarão todos os comandos remotos incluídos na resposta do server às verificações ativas.
id number não Identificador do comando remoto.
value string não Resultado da execução do comando remoto se a execução tiver sido bem-sucedida.
error string não Mensagem de erro da execução do comando remoto se a execução tiver falhado.
session string sim Identificador exclusivo da sessão, gerado sempre que o agent é iniciado (com 32 dígitos hexadecimais).
host string sim Nome do host.
version string sim Número da versão do agent.
variant number sim 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 em 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 instável.

Resposta do server

A resposta aos 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 sim success | failed
info string sim Resultados do processamento dos item.

Se o envio de alguns valores falhar no server (por exemplo, porque o host ou o item foi desabilitado ou excluído), o agent não tentará reenviar esses valores.

Por exemplo:

  1. O agent abre uma conexão TCP
  2. O agent envia uma lista de valores
  3. O server processa os dados e envia o status de volta
  4. A conexão TCP é fechada

A mensagem de erro será truncada para 2048 caracteres no server.

Mensagem de heartbeat

O agent envia

A mensagem de heartbeat é enviada por um agent ativo ao Zabbix server/proxy a cada HeartbeatFrequency segundos (configurado no arquivo de configuração do Zabbix agent/agent 2).

Ela é usada para monitorar a disponibilidade das verificações ativas.

{
  "request": "active check heartbeat",
  "host": "Zabbix server",
  "heartbeat_freq": 60,
  "version": "7.4.0",
  "variant": 2
}
Campo Tipo Obrigatório Valor
request string sim active check heartbeat
host string sim O nome do host.
heartbeat_freq number sim A frequência de heartbeat do agent (parâmetro de configuração HeartbeatFrequency).
version string sim O número da versão do agent.
variant number sim A variante do agent (1 - Zabbix agent, 2 - Zabbix agent 2).

Resposta de redirecionamento

Quando um host é reatribuído, o server pode instruir o agent a redirecionar seu heartbeat (e as verificações ativas subsequentes) para outro proxy ou instância do server.

  {
    "response": "failed",
    "redirect": {
      "revision": 2,
      "address": "192.0.2.1:10055"
    }
  }
Campo Tipo Obrigatório Valor
response string sim success | failed
redirect object sim Instruções de redirecionamento.
revision number sim Identificador da revisão da configuração.
address string sim Endereço do server/proxy de destino.

Protocolo XML antigo

O Zabbix aceitará até 16 MB de dados XML codificados em Base64, mas um único valor decodificado não deve ter mais de 64 KB; caso contrário, ele será truncado para 64 KB durante a decodificação.