Esta seção fornece detalhes sobre verificações passivas e ativas realizadas por agente Zabbix.
O Zabbix usa um protocolo de comunicação baseado em JSON para se comunicar com Agente Zabbix.
Uma checagem passiva é uma solicitação simples de dados. O server ou proxy Zabbix solicita alguns dados (por exemplo, carga da CPU) e o agent 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 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 checagens 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 irá armazenar em cache a interface como protocolo antigo e tentar novamente a checagem 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 sã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 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.
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": "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 | 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 foi 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 foi alterada. Incrementado se a configuração do host foi 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 um 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": "7.4.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 | 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 | 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 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 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 | 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 da sessão). Esse ID é usado para descartar valores duplicados que podem ser enviados em ambientes com conectividade ruim.
Resposta do servidor
A resposta de dados do agent é enviada pelo servidor 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 servidor (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 servidor.
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 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 foi 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.
| Campo | Tipo | Obrigatório | Valor | |
|---|---|---|---|---|
| response | string | sim | success | failed |
|
| redirect | object | sim | Instruções de redirecionamento. | |
| revision | number | sim | Identificador de revisão da configuração. | |
| address | string | sim | Endereço do server/proxy de destino. | |
O Zabbix irá tratar até 16 MB de dados XML codificados em Base64, mas um único valor decodificado não poderá ser superior a 64 KB ou será truncado para 64 KB durante a decodificação.