2 Controlli degli agenti passivi e attivi

Panoramica

Questa sezione fornisce dettagli sui controlli passivi e attivi eseguiti da Zabbix agent e Zabbix agent 2.

Zabbix utilizza un protocollo di comunicazione basato su JSON per comunicare con gli agent.

I protocolli di Zabbix agent e Zabbix agent 2 sono stati unificati a partire da Zabbix 7.0. La differenza tra le richieste/risposte di Zabbix agent e Zabbix agent 2 è espressa dal valore del tag "variant".

Controlli passivi

Un controllo passivo è una semplice richiesta di dati. Zabbix server o proxy richiede alcuni dati (ad esempio, il carico della CPU) e Zabbix agent restituisce il risultato al server.

I controlli passivi vengono eseguiti in modo asincrono: non è necessario ricevere la risposta a una richiesta prima di avviare altri controlli. Anche la risoluzione DNS è asincrona.

L'agent poller tenterà di connettersi a tutti gli indirizzi restituiti dalla ricerca DNS. Questo garantisce che, se un indirizzo IP non è raggiungibile, il poller proverà l'indirizzo successivo disponibile, aumentando la probabilità di una connessione riuscita. Questo miglioramento si applica sia a Zabbix server che a proxy.

La concorrenza massima dei controlli asincroni è 1000 (definita da MaxConcurrentChecksPerPoller).

Il numero di agent poller asincroni è definito dal parametro StartAgentPollers.

Richiesta del server

Per la definizione dell'header e della lunghezza dei dati, fare riferimento ai dettagli del protocollo.

{
  "request": "passive checks",
  "data": [
    {
      "key": "agent.version",
      "timeout": 3
    }
  ]
}
Campo Tipo Obbligatorio Valore
request string yes "passive checks"
data array of object yes item di controllo passivo.
key string yes Chiave item con macro espanse.
timeout number yes Timeout di comunicazione.

Risposta dell'agent

{
  "version": "8.0.0",
  "variant": 2,
  "data": [
    {
      "value": "8.0.0"
    }
  ]
}
Campo Tipo Obbligatorio Valore
version string yes Il numero di versione dell'agent.
variant number yes La variante dell'agent (1 - Zabbix agent, 2 - Zabbix agent 2).
data array of object yes Contiene il risultato del controllo.
value string no Il valore dell'item se il controllo è riuscito.
error string no Il messaggio di errore se il controllo non è riuscito.

Ad esempio, per gli item supportati:

  1. Il server apre una connessione TCP
  2. Il server invia <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}
  3. L'agent legge la richiesta e risponde con <HEADER><DATALEN>{"version":"8.0.0","variant":2,"data":[{"value":1}]}
  4. Il server elabora i dati per ottenere il valore, nel nostro caso '1'
  5. La connessione TCP viene chiusa

Per gli item non supportati:

  1. Il server apre una connessione TCP
  2. Il server invia <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
  3. L'agent legge la richiesta e risponde con <HEADER><DATALEN>{"version":"8.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
  4. Il server elabora i dati, cambia lo stato dell'item in non supportato con il messaggio di errore specificato
  5. La connessione TCP viene chiusa
Fallback al vecchio protocollo

Per garantire che Zabbix server o proxy possano funzionare con agent delle versioni precedenti alla 7.2, che utilizzano il protocollo in testo semplice, è stato implementato un fallback al vecchio protocollo.

I controlli passivi vengono eseguiti utilizzando il protocollo JSON (7.0 e successive) dopo un riavvio o quando viene modificata la configurazione dell'interfaccia.
Se in risposta non viene ricevuto alcun JSON valido (l'agent ha inviato "ZBX_NOTSUPPORTED"), Zabbix memorizzerà l'interfaccia come vecchio protocollo e ritenterà il controllo inviando solo la chiave dell'item.

Si noti che ogni ora Zabbix server/proxy proverà nuovamente a utilizzare il nuovo protocollo con tutte le interfacce, tornando al vecchio protocollo se necessario.

Controlli attivi

I controlli attivi richiedono un'elaborazione più complessa.
L'agent deve prima recuperare dal server/proxy un elenco di item e/o comandi remoti per l'elaborazione indipendente.

I server/proxy da cui ottenere i controlli attivi sono elencati nel parametro 'ServerActive' del file di configurazione dell'agent.
La frequenza con cui vengono richiesti questi controlli è impostata dal parametro 'RefreshActiveChecks' nello stesso file di configurazione.
Tuttavia, se l'aggiornamento dei controlli attivi non riesce, viene ritentato dopo 60 secondi codificati in modo fisso.

A partire da Zabbix 6.4, l'agent (in modalità attiva) non riceve più dal server/proxy una copia completa della configurazione una volta ogni due minuti (impostazione predefinita). Invece, per ridurre il traffico di rete e l'utilizzo delle risorse, viene eseguita una sincronizzazione incrementale della configurazione ogni 5 secondi (impostazione predefinita), durante la quale il server/proxy fornisce una copia completa della configurazione solo se l'agent non l'ha ancora ricevuta oppure se è cambiato qualcosa nella configurazione dell'host, nelle macro globali o nelle espressioni regolari globali.

L'agent invia quindi periodicamente i nuovi valori al server o ai server. Se l'agent ha ricevuto dei comandi remoti da eseguire, verrà inviato anche il risultato dell'esecuzione. Si noti che l'esecuzione di comandi remoti su un agent attivo è supportata a partire da Zabbix agent 7.0.

Se un agent si trova dietro il firewall, si può prendere in considerazione l'uso dei soli controlli attivi, perché in questo caso non sarebbe necessario modificare il firewall per consentire le connessioni iniziali in ingresso.

Ottenere l'elenco degli item

Richiesta dell'agent

La richiesta dei controlli attivi viene utilizzata per ottenere i controlli attivi che devono essere elaborati dall'agent. Questa richiesta viene inviata dall'agent all'avvio e successivamente agli intervalli di 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 Obbligatorio Valore
request string active checks
host string Nome del host.
host_metadata string no Il parametro di configurazione HostMetadata o il valore della metrica HostMetadataItem.
interface string no Il parametro di configurazione HostInterface o il valore della metrica HostInterfaceItem.
ip string no Il primo IP del parametro di configurazione ListenIP, se impostato.
port number no Il valore del parametro di configurazione ListenPort, se impostato e diverso dalla porta di ascolto predefinita dell'agent.
version string Il numero di versione dell'agent.
variant number La variante dell'agent (1 - Zabbix agent, 2 - Zabbix agent 2).
config_revision number no Identificatore di configurazione per la sincronizzazione incrementale della configurazione.
session string no Identificatore di sessione per la sincronizzazione incrementale della configurazione.

Risposta del server

La risposta dei controlli attivi viene inviata dal server all'agent dopo l'elaborazione della richiesta dei controlli attivi.

{
  "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 Obbligatorio Valore
response string success | failed
info string no Informazioni sull'errore in caso di errore.
data array of objects no Item dei controlli attivi. Omissi se la configurazione del host non è cambiata.
key string no Chiave dell'item con macro espanse.
itemid number no Identificatore dell'item.
delay string no Intervallo di aggiornamento dell'item.
Gli intervalli flessibili/di pianificazione sono supportati sia da Zabbix agent che da Zabbix agent 2 a partire da Zabbix 7.0.
lastlogsize number no lastlogsize dell'item.
mtime number no mtime dell'item.
timeout string no Timeout dell'item.
refresh_unsupported number no Intervallo di aggiornamento degli item non supportati.
regexp array of objects no Espressioni regolari globali.
name string no Nome dell'espressione regolare globale.
expression string no Espressione regolare globale.
expression_type number no Tipo di espressione regolare globale.
exp_delimiter string no Delimitatore dell'espressione regolare globale.
case_sensitive number no Impostazione della distinzione tra maiuscole e minuscole per l'espressione regolare globale.
commands array of objects no Comandi remoti da eseguire. Inclusi se l'esecuzione di comandi remoti è stata attivata da una operation di un'azione o dall'esecuzione manuale di uno script. Si noti che l'esecuzione di comandi remoti su un agent attivo è supportata a partire da Zabbix agent 7.0. Gli agent attivi meno recenti ignoreranno eventuali comandi remoti inclusi nella risposta del server dei controlli attivi.
command string no Comando remoto.
id number no Identificatore del comando remoto.
wait number no Modalità di esecuzione del comando remoto ("0" (nowait) per i comandi dalle operations di un'azione; "1" (wait) per i comandi dall'esecuzione manuale di uno script).
config_revision number no Identificatore di configurazione per la sincronizzazione incrementale della configurazione. Omissi se la configurazione del host non è cambiata. Incrementato se la configurazione del host cambia.

Il server deve rispondere con success.

Ad esempio:

  1. L'agent apre una connessione TCP
  2. L'agent richiede l'elenco dei controlli
  3. Il server risponde con un elenco di item e comandi remoti da eseguire
  4. L'agent analizza la risposta
  5. La connessione TCP viene chiusa
  6. L'agent avvia la raccolta periodica dei dati ed esegue i comandi remoti (supportato a partire da Zabbix agent 7.0)

Si noti che i dati di configurazione (sensibili) possono diventare disponibili a soggetti che hanno accesso alla porta trapper del server Zabbix quando si utilizza un controllo attivo. Ciò è possibile perché chiunque può fingersi un agent attivo e richiedere i dati di configurazione degli item; l'autenticazione non avviene a meno che non si utilizzino le opzioni di encryption.

Invio dei dati raccolti

Invio dell'agent

La richiesta dati dell'agent contiene i valori degli item raccolti e i valori dei comandi remoti eseguiti (se presenti).

{
  "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 Obbligatorio Valore
request string agent data
data array of objects Valori degli item.
id number Identificatore del valore (contatore incrementale usato per verificare i valori duplicati in caso di problemi di rete).
itemid number Identificatore dell'item.
value string no Valore dell'item.
lastlogsize number no lastlogsize dell'item.
mtime number no mtime dell'item.
state number no Stato dell'item.
source string no Sorgente del log eventi del valore.
eventid number no eventid del log eventi del valore.
severity number no Severità del log eventi del valore.
timestamp number no Timestamp del log eventi del valore.
clock number Timestamp del valore (secondi dall'Epoch).
ns number Nanosecondi del timestamp del valore.
commands array of objects no Risultato dell'esecuzione dei comandi remoti. Si noti che l'esecuzione di comandi remoti su un agent attivo è supportata a partire da Zabbix agent 7.0. Gli agent attivi meno recenti ignoreranno eventuali comandi remoti inclusi nella risposta del server ai controlli attivi.
id number no Identificatore del comando remoto.
value string no Risultato dell'esecuzione del comando remoto se l'esecuzione è riuscita.
error string no Messaggio di errore dell'esecuzione del comando remoto se l'esecuzione non è riuscita.
session string Identificatore univoco della sessione generato ogni volta che l'agent viene avviato.
host string Nome del host.
version string Numero di versione dell'agent.
variant number Variante dell'agent (1 - Zabbix agent, 2 - Zabbix agent 2).

A ogni valore viene assegnato un ID virtuale. L'ID del valore è un semplice contatore crescente, univoco all'interno di una sessione dati (identificata dal token di sessione). Questo ID viene usato per scartare i valori duplicati che potrebbero essere inviati in ambienti con connettività scarsa.

Risposta del server

La risposta ai dati dell'agent viene inviata dal server all'agent dopo l'elaborazione della richiesta dati dell'agent.

{
  "response": "success",
  "info": "processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
}
Campo Tipo Obbligatorio Valore
response string success | failed
info string Risultati dell'elaborazione degli item.

Se l'invio di alcuni valori non riesce sul server (per esempio, perché il host o l'item è stato disabilitato o eliminato), l'agent non ritenterà l'invio di tali valori.

Per esempio:

  1. L'agent apre una connessione TCP
  2. L'agent invia un elenco di valori
  3. Il server elabora i dati e restituisce lo stato
  4. La connessione TCP viene chiusa

Il messaggio di errore verrà troncato a 2048 simboli sul lato server.

Messaggio heartbeat

L'agent invia

Il messaggio heartbeat viene inviato da un agent attivo a Zabbix server/proxy ogni HeartbeatFrequency secondi (configurato nel file di configurazione di Zabbix agent/ agent 2).

Viene utilizzato per monitorare la disponibilità dei controlli attivi.

{
  "request": "active check heartbeat",
  "host": "Zabbix server",
  "heartbeat_freq": 60,
  "version": "8.0.0",
  "variant": 2
}
Campo Tipo Obbligatorio Valore
request string active check heartbeat
host string Il nome del host.
heartbeat_freq number La frequenza heartbeat dell'agent (parametro di configurazione HeartbeatFrequency).
version string Il numero di versione dell'agent.
variant number La variante dell'agent (1 - Zabbix agent, 2 - Zabbix agent 2).

Risposta di reindirizzamento

Quando un host è stato riassegnato, il server può indicare all'agent di reindirizzare il proprio heartbeat (e i successivi controlli attivi) a un'altra istanza di proxy o server.

  {
    "response": "failed",
    "redirect": {
      "revision": 2,
      "address": "192.0.2.0:10055"
    }
  }
Campo Tipo Obbligatorio Valore
response string success | failed
redirect object Istruzioni di reindirizzamento.
revision number Identificatore della revisione della configurazione.
address string Indirizzo del server/proxy di destinazione.

Protocollo XML precedente

Zabbix accetterà fino a 16 MB di dati XML codificati in Base64, ma un singolo valore decodificato non deve superare 64 KB, altrimenti verrà troncato a 64 KB durante la decodifica.