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 agent Zabbix e agent Zabbix 2.

O Zabbix usa um protocolo de comunicação baseado em JSON para se comunicar com os agents.

Os protocolos do agent Zabbix e do agent Zabbix 2 foram unificados a partir do Zabbix 7.0. A diferença entre as solicitações/respostas do agent Zabbix e do agent Zabbix 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, uso de CPU) e o Zabbix agent 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 Zabbix server quanto ao proxy.

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 for bem-sucedida.
error string no A mensagem de erro se a verificação não for bem-sucedida.

Por exemplo, para items suportados:

  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":"8.0.0","variant":2,"data":[{"value":1}]}
  4. O server processa os dados para obter o valor, '1' no nosso caso
  5. A conexão TCP é encerrada

Para items não suportados:

  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":"8.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
  4. O server processa os dados, altera o estado do item para não suportado com a mensagem de erro especificada
  5. A conexão TCP é encerrada
Failover para o protocolo antigo

Para garantir que o Zabbix server ou proxy possa trabalhar com agents de versões anteriores à 7.2, que utilizam 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 posterior) 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 irá 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 (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 periodicamente envia os novos valores para o(s) server(s). Se o agent recebeu 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 é suportada desde o Zabbix agent 7.0.

Se um agent estiver atrás do firewall, você pode considerar usar apenas verificações ativas porque, nesse caso, não seria necessário 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 Nome do host.
host_metadata string no O parâmetro de configuração HostMetadata ou o valor do item de métrica HostMetadataItem.
interface string no O parâmetro de configuração HostInterface ou o valor do item de 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 tanto pelo Zabbix agent quanto pelo 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 não suportado.
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 da 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:

  1. O agent abre uma conexão TCP
  2. O agent solicita a lista de checks
  3. O server responde com uma lista de items e comandos remotos a serem executados
  4. O agent analisa a resposta
  5. A conexão TCP é encerrada
  6. 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.

Enviando 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 sim agent data
data array de objetos sim Valores dos items.
id number sim O identificador do valor (contador incremental usado para verificar valores duplicados no 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 state do item.
source string não O source do event log do valor.
eventid number não O eventid do event log do valor.
severity number não O severity do event log do valor.
timestamp number não O timestamp do event log do valor.
clock number sim O timestamp do valor (segundos desde Epoch).
ns number sim O timestamp do valor em nanossegundos.
commands array de objetos não Resultado da execução dos 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 servidor de 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 foi bem-sucedida.
error string não Mensagem de erro da execução do comando remoto se a execução falhou.
session string sim Identificador de sessão exclusivo gerado cada vez que o agent é iniciado.
host string sim Nome do host.
version string sim O número da versão do agent.
variant number sim O variant do agent (1 - Zabbix agent, 2 - Zabbix agent 2).

Um ID virtual é atribuído a cada valor. O ID do valor é um contador crescente simples, exclusivo dentro de uma sessão de dados (identificada pelo token de sessão). Esse ID é usado para descartar valores duplicados que podem 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 sim success | failed
info string sim Resultados do processamento dos items.

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á limitada a 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 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 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 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 de destino do server/proxy.

Protocolo XML mais 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, será truncado para 64 KB durante a decodificação.