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".
Uma checagem passiva é uma simples solicitação de dados. O server ou proxy do Zabbix solicita alguns dados (por exemplo, carga da CPU) e o agent do Zabbix envia de volta o resultado para o server.
As checagens passivas são executadas de forma assíncrona - não é necessário receber a resposta de uma solicitação antes que outras checagens 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 server quanto ao proxy do Zabbix.
A concorrência máxima de checagens assíncronas é 1000 (definida por MaxConcurrentChecksPerPoller).
O número de agent pollers assíncronos é definido pelo parâmetro StartAgentPollers.
Solicitação do server
Para definição do cabeçalho e comprimento dos dados, consulte detalhes do protocolo.
| Campo | Tipo | Obrigatório | Valor | |
|---|---|---|---|---|
| request | string | sim | "passive checks" |
|
| data | array de objeto | sim | Item de checagem passiva. | |
| key | string | sim | Chave do item com macros expandidas. | |
| timeout | string | sim | Timeout do item. | |
Resposta do agent
| 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 de objeto | sim | Contém o resultado da checagem. | |
| value | string | não | O valor do item se a checagem foi bem-sucedida. | |
| error | string | não | A mensagem de erro se a checagem não foi bem-sucedida. | |
Por exemplo, para itens suportados:
Para itens não suportados:
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.
As checagens ativas requerem 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 checagens ativas estão listados no parâmetro 'ServerActive' do arquivo de configuração do agent. A frequência de solicitação dessas checagens é definida pelo parâmetro 'RefreshActiveChecks' no mesmo arquivo de configuração. No entanto, se a atualização das checagens ativas falhar, ela será tentada novamente após 60 segundos (valor fixo).
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.
Requisição do agent
A requisição de verificações ativas é usada para obter as verificações ativas a serem processadas pelo agent. Esta requisição é enviada pelo agent ao iniciar e, em seguida, em intervalos definidos por 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"
}| Campo | Tipo | Obrigatório | Valor |
|---|---|---|---|
| request | string | sim | active checks |
| host | string | sim | Nome do host. |
| host_metadata | string | não | O parâmetro de configuração HostMetadata ou o valor da métrica HostMetadataItem. |
| interface | string | não | O parâmetro de configuração HostInterface ou o valor da métrica HostInterfaceItem. |
| ip | string | não | O primeiro IP do parâmetro de configuração ListenIP, se definido. |
| port | number | não | O valor do parâmetro de configuração ListenPort, se definido e não for a porta padrão de escuta do agent. |
| 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). |
| config_revision | number | não | Identificador de configuração para sincronização incremental de configuração. |
| session | string | não | Identificador de sessão para sincronização incremental de configuração. |
Resposta do server
A resposta de verificações ativas é enviada pelo server de volta ao agent após processar a requisiçã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ção de erro em caso de falha. | |
| data | array of objects | não | Items de verificação ativa. Omitido se a configuração do host não for 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/agendados são suportados tanto pelo Zabbix agent quanto pelo 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 item não suportado. | |
| 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 sensibilidade a maiúsculas/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 comando remoto foi acionada por uma operação de ação ou execução manual de 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 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 de execução manual de script). | |
| config_revision | number | não | Identificador de configuração para sincronização incremental de configuração. Omitido se a configuração do host não for alterada. Incrementado se a configuração do host for alterada. | |
O server deve responder com sucesso.
Por exemplo:
Observe que dados de configuração (sensíveis) podem ficar disponíveis para partes que tenham acesso à porta trapper do Zabbix server ao usar uma verificação ativa. Isso é possível porque qualquer pessoa pode fingir ser um agent ativo e solicitar dados de configuração de item; a autenticação não ocorre a menos que você use as opções de criptografia.
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": "1234456akdsjhfoui",
"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 em caso de problemas de rede). | |
| itemid | string | 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 | O source do log de eventos do valor. | |
| eventid | number | não | O eventid do log de eventos do valor. | |
| severity | number | não | O severity 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 o Epoch). | |
| ns | number | sim | O timestamp do valor em nanossegundos. | |
| commands | array de objetos | não | 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 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 | 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 ascendente simples, exclusivo dentro de uma sessão de dados (identificada pelo token de sessão). Este 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.
| 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:
Observe como, no exemplo acima, o status não suportado para vfs.fs.size[/nono] é indicado pelo valor "state" igual a 1 e pela mensagem de erro na propriedade "value".
A mensagem de erro será limitada a 2048 símbolos no lado do server.
Agent envia
A mensagem de heartbeat é enviada por um agent ativo para o Zabbix server/proxy a cada HeartbeatFrequency segundos (configurado no arquivo de configuração do Zabbix agent/ agent 2).
Ela é usada para monitorar a disponibilidade de checagens 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 do 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 foi reatribuído, o server pode instruir o agent a redirecionar seu heartbeat (e as checagens ativas subsequentes) para outra instância de proxy ou server.
| 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. | |
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.