2 Vérifications passives et actives de l'agent
Aperçu
Cette section fournit des détails sur les contrôles passifs et actifs effectués par Zabbix agent et Zabbix agent 2.
Zabbix utilise un protocole de communication basé sur JSON pour communiquer avec les agents.
Les protocoles de Zabbix agent et de Zabbix agent 2 sont unifiés depuis Zabbix 7.0. La différence entre les requêtes/réponses de Zabbix agent et de Zabbix agent 2 est exprimée par la valeur de la balise « variant ».
Vérifications passives
Une vérification passive est une simple requête de données. Le serveur ou le proxy Zabbix demande certaines données (par exemple, la charge CPU) et l'agent Zabbix renvoie le résultat au serveur.
Les vérifications passives sont exécutées de manière asynchrone : il n'est pas nécessaire de recevoir la réponse à une requête avant de démarrer d'autres vérifications. La résolution DNS est également asynchrone.
L'agent poller tentera de se connecter à toutes les adresses renvoyées par la recherche DNS. Cela garantit que si une adresse IP est inaccessible, le poller essaiera l'adresse disponible suivante, augmentant ainsi la probabilité d'une connexion réussie. Cette amélioration s'applique à la fois au serveur et au proxy Zabbix.
La concurrence maximale des vérifications asynchrones est de 1000 (définie par MaxConcurrentChecksPerPoller).
Le nombre d'agent pollers asynchrones est défini par le paramètre StartAgentPollers.
Requête du serveur
Pour la définition de l'en-tête et de la longueur des données, veuillez consulter les détails du protocole.
{
"request": "passive checks",
"data": [
{
"key": "agent.version",
"timeout": 3
}
]
}
| Champ | Type | Obligatoire | Valeur | |
|---|---|---|---|---|
| request | string | oui | "passive checks" |
|
| data | array of object | oui | Élément de vérification passive. | |
| key | string | oui | Clé d'élément avec macros développées. | |
| timeout | number | oui | Délai d'expiration de la communication. | |
Réponse de l'agent
{
"version": "8.0.0",
"variant": 2,
"data": [
{
"value": "8.0.0"
}
]
}
| Champ | Type | Obligatoire | Valeur | |
|---|---|---|---|---|
| version | string | oui | Le numéro de version de l'agent. | |
| variant | number | oui | La variante de l'agent (1 - agent Zabbix, 2 - agent Zabbix 2). | |
| data | array of object | oui | Contient le résultat de la vérification. | |
| value | string | non | La valeur de l'élément si la vérification a réussi. | |
| error | string | non | Le message d'erreur si la vérification n'a pas réussi. | |
Par exemple, pour les éléments pris en charge :
- Le serveur ouvre une connexion TCP
- Le serveur envoie <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}
- L'agent lit la requête et répond avec <HEADER><DATALEN>{"version":"8.0.0","variant":2,"data":[{"value":1}]}
- Le serveur traite les données pour obtenir la valeur, « 1 » dans notre cas
- La connexion TCP est fermée
Pour les éléments non pris en charge :
- Le serveur ouvre une connexion TCP
- Le serveur envoie <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
- L'agent lit la requête et répond avec <HEADER><DATALEN>{"version":"8.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
- Le serveur traite les données, change l'état de l'élément en non pris en charge avec le message d'erreur spécifié
- La connexion TCP est fermée
Basculement vers l’ancien protocole
Pour garantir que le serveur ou le proxy Zabbix puisse fonctionner avec des agents des versions antérieures à 7.2, qui utilisent un protocole en texte brut, un basculement vers l’ancien protocole a été mis en place.
Les contrôles passifs sont effectués à l’aide du protocole JSON (7.0 et versions ultérieures) après un redémarrage ou lorsqu’une configuration d’interface est modifiée. Si aucune réponse JSON valide n’est reçue (l’agent a envoyé « ZBX_NOTSUPPORTED »), Zabbix mettra l’interface en cache comme utilisant l’ancien protocole et réessaiera le contrôle en envoyant uniquement la clé de l’élément.
Notez que toutes les heures, le serveur/proxy Zabbix essaiera de nouveau d’utiliser le nouveau protocole avec toutes les interfaces, en revenant à l’ancien protocole si nécessaire.
Vérifications actives
Les vérifications actives nécessitent un traitement plus complexe. L'agent doit d'abord récupérer depuis le serveur/proxy une liste d'éléments et/ou de commandes distantes pour un traitement indépendant.
Les serveurs/proxys à partir desquels obtenir les vérifications actives sont listés dans le paramètre 'ServerActive' du fichier de configuration de l'agent. La fréquence de demande de ces vérifications est définie par le paramètre 'RefreshActiveChecks' dans ce même fichier de configuration. Cependant, si l'actualisation des vérifications actives échoue, une nouvelle tentative est effectuée après 60 secondes codées en dur.
Depuis Zabbix 6.4, l'agent (en mode actif) ne reçoit plus du serveur/proxy une copie complète de la configuration toutes les deux minutes (par défaut). À la place, afin de réduire le trafic réseau et l'utilisation des ressources, une synchronisation incrémentielle de la configuration est effectuée toutes les 5 secondes (par défaut), au cours de laquelle le serveur/proxy fournit une copie complète de la configuration uniquement si l'agent ne l'a pas encore reçue, ou si quelque chose a changé dans la configuration de l'hôte, les macros globales ou les expressions régulières globales.
L'agent envoie ensuite périodiquement les nouvelles valeurs au(x) serveur(s). Si l'agent a reçu des commandes distantes à exécuter, le résultat de l'exécution sera également envoyé. Notez que l'exécution de commandes distantes sur un agent actif est prise en charge depuis Zabbix agent 7.0.
Si un agent se trouve derrière le pare-feu, vous pouvez envisager d'utiliser uniquement des contrôles actifs, car dans ce cas vous n'auriez pas besoin de modifier le pare-feu pour autoriser les connexions entrantes initiales.
Obtention de la liste des éléments
Requête de l’agent
La requête de contrôles actifs est utilisée pour obtenir les contrôles actifs à traiter par l’agent.
Cette requête est envoyée par l’agent au démarrage, puis selon les intervalles 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"
}
| Champ | Type | Obligatoire | Valeur |
|---|---|---|---|
| request | string | oui | active checks |
| host | string | oui | Nom d’hôte. |
| host_metadata | string | non | Le paramètre de configuration HostMetadata ou la valeur de la métrique HostMetadataItem. |
| interface | string | non | Le paramètre de configuration HostInterface ou la valeur de la métrique HostInterfaceItem. |
| ip | string | non | La première IP du paramètre de configuration ListenIP, s’il est défini. |
| port | number | non | La valeur du paramètre de configuration ListenPort, s’il est défini et différent du port d’écoute par défaut de l’agent. |
| version | string | oui | Le numéro de version de l’agent. |
| variant | number | oui | La variante de l’agent (1 - Zabbix agent, 2 - Zabbix agent 2). |
| config_revision | number | non | Identifiant de configuration pour la synchronisation incrémentielle de la configuration. |
| session | string | non | Identifiant de session pour la synchronisation incrémentielle de la configuration. |
Réponse du serveur
La réponse des contrôles actifs est renvoyée par le serveur à l’agent après traitement de la requête de contrôles actifs.
{
"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
}
]
}
| Champ | Type | Obligatoire | Valeur | |
|---|---|---|---|---|
| response | string | oui | success | failed |
|
| info | string | non | Informations sur l’erreur en cas d’échec. | |
| data | array of objects | non | Éléments de contrôle actif. Omis si la configuration de l’hôte est inchangée. | |
| key | string | non | Clé d’élément avec macros développées. | |
| itemid | number | non | Identifiant de l’élément. | |
| delay | string | non | Intervalle de mise à jour de l’élément. Les intervalles flexibles/de planification sont pris en charge à la fois par Zabbix agent et Zabbix agent 2 depuis Zabbix 7.0. |
|
| lastlogsize | number | non | lastlogsize de l’élément. | |
| mtime | number | non | mtime de l’élément. | |
| timeout | string | non | Délai d’expiration de l’élément. | |
| refresh_unsupported | number | non | Intervalle de rafraîchissement des éléments non pris en charge. | |
| regexp | array of objects | non | Expressions régulières globales. | |
| name | string | non | Nom de l’expression régulière globale. | |
| expression | string | non | Expression régulière globale. | |
| expression_type | number | non | Type d’expression régulière globale. | |
| exp_delimiter | string | non | Délimiteur de l’expression régulière globale. | |
| case_sensitive | number | non | Paramètre de sensibilité à la casse de l’expression régulière globale. | |
| commands | array of objects | non | Commandes distantes à exécuter. Incluses si l’exécution de commandes distantes a été déclenchée par une operation d’action ou par l’exécution manuelle d’un script. Notez que l’exécution de commandes distantes sur un agent actif est prise en charge depuis Zabbix agent 7.0. Les anciens agents actifs ignoreront toute commande distante incluse dans la réponse du serveur aux contrôles actifs. | |
| command | string | non | Commande distante. | |
| id | number | non | Identifiant de la commande distante. | |
| wait | number | non | Mode d’exécution de la commande distante ("0" (nowait) pour les commandes provenant des operations d’action ; "1" (wait) pour les commandes provenant de l’exécution manuelle d’un script). | |
| config_revision | number | non | Identifiant de configuration pour la synchronisation incrémentielle de la configuration. Omis si la configuration de l’hôte est inchangée. Incrémenté si la configuration de l’hôte est modifiée. | |
Le serveur doit répondre avec success.
Par exemple :
- L’agent ouvre une connexion TCP
- L’agent demande la liste des contrôles
- Le serveur répond avec une liste d’éléments et de commandes distantes à exécuter
- L’agent analyse la réponse
- La connexion TCP est fermée
- L’agent démarre la collecte périodique des données et exécute les commandes distantes (pris en charge depuis Zabbix agent 7.0)
Notez que des données de configuration (sensibles) peuvent devenir accessibles à des parties ayant accès au port trapper du serveur Zabbix lors de l’utilisation d’un contrôle actif. Cela est possible parce que n’importe qui peut se faire passer pour un agent actif et demander les données de configuration des éléments ; aucune authentification n’a lieu, sauf si vous utilisez les options de chiffrement.
Envoi des données collectées
Envoi par l’agent
La requête de données de l’agent contient les valeurs d’éléments collectées ainsi que les valeurs des commandes distantes exécutées (le cas échéant).
{
"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
}
| Champ | Type | Obligatoire | Valeur | |
|---|---|---|---|---|
| request | string | oui | agent data |
|
| data | array of objects | oui | Valeurs des éléments. | |
| id | number | oui | Identifiant de la valeur (compteur incrémental utilisé pour vérifier les valeurs dupliquées en cas de problèmes réseau). | |
| itemid | number | oui | Identifiant de l’élément. | |
| value | string | non | Valeur de l’élément. | |
| lastlogsize | number | non | lastlogsize de l’élément. | |
| mtime | number | non | mtime de l’élément. | |
| state | number | non | État de l’élément. | |
| source | string | non | Source du journal des événements de la valeur. | |
| eventid | number | non | eventid du journal des événements de la valeur. | |
| severity | number | non | Gravité du journal des événements de la valeur. | |
| timestamp | number | non | Horodatage du journal des événements de la valeur. | |
| clock | number | oui | Horodatage de la valeur (secondes depuis l’époque Unix). | |
| ns | number | oui | Nanosecondes de l’horodatage de la valeur. | |
| commands | array of objects | non | Résultat de l’exécution des commandes distantes. Notez que l’exécution de commandes distantes sur un agent actif est prise en charge depuis Zabbix agent 7.0. Les anciens agents actifs ignoreront toute commande distante incluse dans la réponse du serveur de contrôles actifs. | |
| id | number | non | Identifiant de la commande distante. | |
| value | string | non | Résultat de l’exécution de la commande distante si l’exécution a réussi. | |
| error | string | non | Message d’erreur d’exécution de la commande distante si l’exécution a échoué. | |
| session | string | oui | Identifiant de session unique généré à chaque démarrage de l’agent. | |
| host | string | oui | Nom d’hôte. | |
| version | string | oui | Numéro de version de l’agent. | |
| variant | number | oui | Variante de l’agent (1 - Zabbix agent, 2 - Zabbix agent 2). | |
Un ID virtuel est attribué à chaque valeur. L’ID de valeur est un simple compteur croissant, unique au sein d’une session de données (identifiée par le jeton de session). Cet ID est utilisé pour ignorer les valeurs dupliquées qui peuvent être envoyées dans des environnements à connectivité dégradée.
Réponse du serveur
La réponse de données de l’agent est renvoyée par le serveur à l’agent après traitement de la requête de données de l’agent.
{
"response": "success",
"info": "processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
}
| Champ | Type | Obligatoire | Valeur |
|---|---|---|---|
| response | string | oui | success | failed |
| info | string | oui | Résultats du traitement des éléments. |
Si l’envoi de certaines valeurs échoue sur le serveur (par exemple, parce que l’hôte ou l’élément a été désactivé ou supprimé), l’agent ne réessaiera pas d’envoyer ces valeurs.
Par exemple :
- L’agent ouvre une connexion TCP
- L’agent envoie une liste de valeurs
- Le serveur traite les données et renvoie l’état
- La connexion TCP est fermée
Le message d’erreur sera tronqué à 2048 caractères côté serveur.
Message de pulsation
L'agent envoie
Le message de pulsation est envoyé par un agent actif au serveur/proxy Zabbix toutes les HeartbeatFrequency secondes (configuré dans le fichier de configuration de Zabbix agent/ agent 2).
Il est utilisé pour surveiller la disponibilité des contrôles actifs.
{
"request": "active check heartbeat",
"host": "Zabbix server",
"heartbeat_freq": 60,
"version": "8.0.0",
"variant": 2
}
| Champ | Type | Obligatoire | Valeur |
|---|---|---|---|
| request | string | oui | active check heartbeat |
| host | string | oui | Le nom d'hôte. |
| heartbeat_freq | number | oui | La fréquence de pulsation de l'agent (paramètre de configuration HeartbeatFrequency). |
| version | string | oui | Le numéro de version de l'agent. |
| variant | number | oui | La variante de l'agent (1 - Zabbix agent, 2 - Zabbix agent 2). |
Réponse de redirection
Lorsqu'un hôte a été réaffecté, le serveur peut demander à l'agent de rediriger sa pulsation (ainsi que les contrôles actifs suivants) vers une autre instance de proxy ou de serveur.
{
"response": "failed",
"redirect": {
"revision": 2,
"address": "192.0.2.0:10055"
}
}
| Champ | Type | Obligatoire | Valeur | |
|---|---|---|---|---|
| response | string | oui | success | failed |
|
| redirect | object | oui | Instructions de redirection. | |
| revision | number | oui | Identifiant de révision de la configuration. | |
| address | string | oui | Adresse du serveur/proxy cible. | |
Ancien protocole XML
Zabbix prendra jusqu'à 16 Mo de données codées en XML Base64, mais une seule valeur décodée ne devrait pas dépasser 64 Ko, sinon elle sera tronquée à 64 Ko lors du décodage.