9 agent HTTP
Vue d'ensemble
Ce type d'élément permet l'interrogation des données via le protocole HTTP/HTTPS.
Le trapping est également possible à l'aide de l'utilitaire Zabbix sender ou du protocole Zabbix sender (pour envoyer des données au serveur Zabbix ou au proxy), ou en utilisant la méthode API history.push (pour envoyer des données au serveur Zabbix).
Les vérifications des éléments HTTP sont exécutées par le serveur Zabbix. Cependant, lorsque les hôtes sont surveillés par un proxy Zabbix, les vérifications des éléments HTTP sont exécutées par le proxy.
Les vérifications des éléments HTTP ne nécessitent aucun agent en cours d'exécution sur un hôte surveillé.
L'agent HTTP prend en charge HTTP et HTTPS.
Zabbix suivra éventuellement les redirections (voir l'option Suivre les redirections ci-dessous).
Le nombre maximal de redirections est codé en dur à 10 (à l'aide de l'option cURL CURLOPT_MAXREDIRS).
Le serveur/proxy Zabbix doit être configuré initialement avec la prise en charge de cURL (libcurl).
Les vérifications HTTP sont exécutées de manière asynchrone - il n'est pas nécessaire de recevoir la réponse à une requête avant que d'autres vérifications ne soient lancées. La résolution DNS est également asynchrone.
La concurrence maximale des vérifications asynchrones est de 1000 (définie par MaxConcurrentChecksPerPoller).
Le nombre de pollers d'agent HTTP asynchrones est défini par le paramètre StartHTTPAgentPollers.
La fonctionnalité de connexions persistantes de cURL a été ajoutée aux vérifications de l'agent HTTP depuis Zabbix 7.0.
Configuration
Pour configurer un élément HTTP :
- Allez dans Data collection > Hosts.
- Cliquez sur Items dans la ligne de l'hôte.
- Cliquez sur Create item.
- Saisissez les paramètres de l'élément dans le formulaire.

Tous les champs obligatoires sont marqués d'un astérisque rouge.
Les champs qui nécessitent des informations spécifiques pour les éléments HTTP sont :
| Parameter | Description |
|---|---|
| Type | Sélectionnez HTTP agent ici. |
| Key | Saisissez une clé d'élément unique. |
| URL | URL à laquelle se connecter et depuis laquelle récupérer les données. Par exemple : https://www.example.com http://www.example.com/download Les noms de domaine peuvent être spécifiés avec des caractères Unicode. Ils sont automatiquement convertis en punycode vers ASCII lors de l'exécution de la vérification HTTP. Le bouton Parse peut être utilisé pour séparer les champs de requête facultatifs (comme ?name=Admin&password=mypassword) de l'URL, en déplaçant les attributs et les valeurs vers Query fields pour un encodage automatique de l'URL. Limité à 2048 caractères. Macros prises en charge : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros utilisateur, macros de découverte de bas niveau.Cela définit l'option cURL CURLOPT_URL. |
| Query fields | Variables pour l'URL (voir ci-dessus). Spécifiées sous forme de paires attribut-valeur. Les valeurs sont encodées automatiquement dans l'URL. Les valeurs provenant de macros sont résolues puis encodées automatiquement dans l'URL. Macros prises en charge : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros utilisateur, macros de découverte de bas niveau.Cela définit l'option cURL CURLOPT_URL. |
| Request type | Sélectionnez le type de méthode de requête : GET, POST, PUT ou HEAD |
| Request body type | Sélectionnez le type de corps de la requête : Raw data - corps de requête HTTP personnalisé, les macros sont substituées mais aucun encodage n'est effectué JSON data - corps de requête HTTP au format JSON. Les macros peuvent être utilisées comme chaîne, nombre, true et false ; les macros utilisées comme chaînes doivent être placées entre guillemets doubles. Les valeurs provenant de macros sont résolues puis échappées automatiquement. Si "Content-Type" n'est pas spécifié dans les en-têtes, la valeur par défaut sera "Content-Type: application/json" XML data - corps de requête HTTP au format XML. Les macros peuvent être utilisées comme nœud texte, attribut ou section CDATA. Les valeurs provenant de macros sont résolues puis échappées automatiquement dans un nœud texte et un attribut. Si "Content-Type" n'est pas spécifié dans les en-têtes, la valeur par défaut sera "Content-Type: application/xml" |
| Request body | Saisissez le corps de la requête. Macros prises en charge : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros utilisateur, macros de découverte de bas niveau. |
| Headers | En-têtes HTTP personnalisés qui seront envoyés lors de l'exécution d'une requête. Spécifiés sous forme de paires attribut-valeur. Macros prises en charge : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros utilisateur, macros de découverte de bas niveau.Cela définit l'option cURL CURLOPT_HTTPHEADER. |
| Required status codes | Liste des codes d'état HTTP attendus. Si Zabbix obtient un code qui ne figure pas dans la liste, l'élément deviendra non pris en charge. Si ce champ est vide, aucune vérification n'est effectuée. Par exemple : 200,201,210-299 Macros prises en charge dans la liste : macros utilisateur, macros de découverte de bas niveau. Cela utilise l'option cURL CURLINFO_RESPONSE_CODE. |
| Follow redirects | Cochez la case pour suivre les redirections HTTP. Cela définit l'option cURL CURLOPT_FOLLOWLOCATION. |
| Retrieve mode | Sélectionnez la partie de la réponse à récupérer : Body - corps uniquement Headers - en-têtes uniquement Body and headers - corps et en-têtes |
| Convert to JSON | Les en-têtes sont enregistrés sous forme de paires attribut-valeur sous la clé "header" si Retrieve mode n'est pas défini sur Body. Si "Content-Type: application/json" est détecté, le corps est enregistré comme un objet, sinon il est stocké comme une chaîne, par exemple : ![]() |
| HTTP proxy | Vous pouvez spécifier un proxy HTTP à utiliser, au format [protocol://][username[:password]@]proxy.example.com[:port].Le préfixe facultatif protocol:// peut être utilisé pour spécifier d'autres protocoles de proxy (par exemple https, socks4, socks5 ; voir la documentation ; la prise en charge du préfixe de protocole a été ajoutée dans cURL 7.21.7). Sans protocole spécifié, le proxy sera traité comme un proxy HTTP. Si vous spécifiez le mauvais protocole, la connexion échouera et l'élément deviendra non pris en charge.Par défaut, le port 1080 sera utilisé. Si spécifié, le proxy remplacera les variables d'environnement liées au proxy comme http_proxy, HTTPS_PROXY. Si non spécifié, le proxy ne remplacera pas les variables d'environnement liées au proxy. La valeur saisie est transmise telle quelle, sans vérification de cohérence.Note que seule l'authentification simple est prise en charge avec le proxy HTTP. Macros prises en charge : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros utilisateur, macros de découverte de bas niveau.Cela définit l'option cURL CURLOPT_PROXY. |
| HTTP authentication | Sélectionnez l'option d'authentification : None - aucune authentification utilisée ; Basic - authentification de base utilisée ; NTLM - authentification NTLM (Windows NT LAN Manager) utilisée ; Kerberos - authentification Kerberos utilisée (voir aussi : Configuration de Kerberos avec Zabbix) ; Digest - authentification Digest utilisée. Cela définit l'option cURL CURLOPT_HTTPAUTH. |
| User name | Saisissez le nom d'utilisateur (jusqu'à 255 caractères). Ce champ est disponible si HTTP authentication est défini sur Basic, NTLM, Kerberos ou Digest. Les macros utilisateur et les macros de découverte de bas niveau sont prises en charge. |
| Password | Saisissez le mot de passe de l'utilisateur (jusqu'à 255 caractères). Ce champ est disponible si HTTP authentication est défini sur Basic, NTLM, Kerberos ou Digest. Les macros utilisateur et les macros de découverte de bas niveau sont prises en charge. |
| SSL verify peer | Cochez la case pour vérifier le certificat SSL du serveur web. Le certificat du serveur sera automatiquement pris à partir de l'emplacement de l'autorité de certification (CA) défini à l'échelle du système. Vous pouvez remplacer l'emplacement des fichiers CA à l'aide du paramètre de configuration SSLCalocation du serveur ou du proxy Zabbix. Cela définit l'option cURL CURLOPT_SSL_VERIFYPEER. |
| SSL verify host | Cochez la case pour vérifier que le champ Common Name ou le champ Subject Alternate Name du certificat du serveur web correspond. Cela définit l'option cURL CURLOPT_SSL_VERIFYHOST. |
| SSL certificate file | Nom du fichier de certificat SSL utilisé pour l'authentification du client. Le fichier de certificat doit être au format PEM1. Si le fichier de certificat contient également la clé privée, laissez le champ du fichier de clé SSL vide. Si la clé est chiffrée, spécifiez le mot de passe dans le champ du mot de passe de la clé SSL. Le répertoire contenant ce fichier est spécifié par le paramètre de configuration SSLCertLocation du serveur ou du proxy Zabbix. Macros prises en charge : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros utilisateur, macros de découverte de bas niveau.Cela définit l'option cURL CURLOPT_SSLCERT. |
| SSL key file | Nom du fichier de clé privée SSL utilisé pour l'authentification du client. Le fichier de clé privée doit être au format PEM1. Le répertoire contenant ce fichier est spécifié par le paramètre de configuration SSLKeyLocation du serveur ou du proxy Zabbix. Macros prises en charge : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros utilisateur, macros de découverte de bas niveau.Cela définit l'option cURL CURLOPT_SSLKEY. |
| SSL key password | Mot de passe du fichier de clé privée SSL. Macros prises en charge : macros utilisateur, macros de découverte de bas niveau. Cela définit l'option cURL CURLOPT_KEYPASSWD. |
| Timeout | Zabbix ne consacrera pas plus que la durée définie au traitement de l'URL (1-600 secondes). En réalité, ce paramètre définit le temps maximal pour établir une connexion à l'URL et le temps maximal pour effectuer une requête HTTP. Par conséquent, Zabbix ne consacrera pas plus de 2 x Timeout secondes à une vérification. Cela définit l'option cURL CURLOPT_TIMEOUT.Pour plus d'informations sur le paramètre Timeout, voir attributs généraux de l'élément. |
| Enable trapping | Lorsque cette case est cochée, l'élément fonctionne également comme un élément trapper et accepte les données envoyées au serveur ou au proxy Zabbix à l'aide de l'utilitaire Zabbix sender ou du protocole Zabbix sender, ou accepte les données envoyées au serveur Zabbix à l'aide de la méthode API history.push. Pour plus d'informations sur l'envoi de données, voir : Éléments trapper. |
| Allowed hosts | Visible uniquement si la case Enable trapping est cochée. Liste d'adresses IP séparées par des virgules (éventuellement en notation CIDR) ou de noms DNS. La valeur par défaut est la macro utilisateur {$TRAPPER.ALLOWED_HOSTS}. Par défaut, {$TRAPPER.ALLOWED_HOSTS} vaut 127.0.0.1,::1. Vous pouvez soit saisir directement les adresses dans le champ, soit modifier la valeur de la macro. Si ce champ est laissé vide, les connexions entrantes seront refusées depuis tous les hôtes. Si une valeur est spécifiée, les connexions entrantes ne seront acceptées que depuis les hôtes listés ici.Si la prise en charge d'IPv6 est activée, alors 127.0.0.1, ::127.0.0.1, ::ffff:127.0.0.1 sont traités de la même manière et ::/0 autorisera toute adresse IPv4 ou IPv6.0.0.0.0/0 peut être utilisé pour autoriser toute adresse IPv4.Notez que les "adresses IPv6 compatibles IPv4" (préfixe 0000::/96) sont prises en charge mais déconseillées par la RFC4291.Exemple : 127.0.0.1, 192.168.1.0/24, 192.168.3.1-255, 192.168.1-10.1-255, ::1,2001:db8::/32, mysqlserver1, zabbix.example.com, {HOST.HOST}Les espaces et les macros utilisateur sont autorisés dans ce champ. Macros d'hôte : {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN} sont autorisées dans ce champ. |
Si le champ HTTP proxy est laissé vide, une autre façon d'utiliser un proxy HTTP consiste à définir des variables d'environnement liées au proxy.
Pour HTTP - définissez la variable d'environnement http_proxy pour l'utilisateur du serveur Zabbix.
Par exemple :
http_proxy=http://proxy_ip:proxy_port.
Pour HTTPS - définissez la variable d'environnement HTTPS_PROXY.
Par exemple :
HTTPS_PROXY=http://proxy_ip:proxy_port.
Davantage de détails sont disponibles en exécutant la commande shell : # man curl.
[1] Zabbix prend en charge uniquement les fichiers de certificat et de clé privée au format PEM.
Si vos données de certificat et de clé privée sont dans un fichier au format PKCS #12 (généralement avec l'extension *.p12 ou *.pfx), vous pouvez générer le fichier PEM à partir de celui-ci à l'aide des commandes suivantes :
openssl pkcs12 -in ssl-cert.p12 -clcerts -nokeys -out ssl-cert.pem
openssl pkcs12 -in ssl-cert.p12 -nocerts -nodes -out ssl-cert.key
Exemples
Exemple 1
Envoyez de simples requêtes GET pour récupérer des données depuis des services tels qu'Elasticsearch :
- Créez un élément GET avec l'URL :
localhost:9200/?pretty - Observez la réponse :
{
"name" : "YQ2VAY-",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "kH4CYqh5QfqgeTsjh2F9zg",
"version" : {
"number" : "6.1.3",
"build_hash" : "af51318",
"build_date" : "2018-01-26T18:22:55.523Z",
"build_snapshot" : false,
"lucene_version" : "7.1.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You know, for search"
}
- Extrayez maintenant le numéro de version à l'aide d'une étape de prétraitement JSONPath :
$.version.number
Exemple 2
Envoyez de simples requêtes POST pour récupérer des données depuis des services tels qu'Elasticsearch :
- Créez un élément POST avec l'URL :
http://localhost:9200/str/values/_search?scroll=10s - Configurez le corps POST suivant pour obtenir la charge du processeur (moyenne sur 1 min par cœur)
{
"query": {
"bool": {
"must": [{
"match": {
"itemid": 28275
}
}],
"filter": [{
"range": {
"clock": {
"gt": 1517565836,
"lte": 1517566137
}
}
}]
}
}
}
- Reçu :
{
"_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAkFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAJRZZUTJWQVktVFNacU5nRHhlcEI0QUxRAAAAAAAAACYWWVEyVkFZLVRTWnFOZ0R4ZXBCNEFMUQAAAAAAAAAnFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAKBZZUTJWQVktVFNacU5nRHhlcEI0QUxR",
"took": 18,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1.0,
"hits": [{
"_index": "dbl",
"_type": "values",
"_id": "dqX9VWEBV6sEKSMyk6sw",
"_score": 1.0,
"_source": {
"itemid": 28275,
"value": "0.138750",
"clock": 1517566136,
"ns": 25388713,
"ttl": 604800
}
}]
}
}
- Utilisez maintenant une étape de prétraitement JSONPath pour obtenir la valeur de l'élément :
$.hits.hits[0]._source.value
Exemple 3
Vérification que l'API Zabbix est active, en utilisant apiinfo.version.
- Configuration de l'élément :

Notez l'utilisation de la méthode POST avec des données JSON, la définition des en-têtes de requête et la demande de retour des en-têtes uniquement :
- Prétraitement de la valeur de l'élément avec une expression régulière pour obtenir le code HTTP :

- Vérification du résultat dans Latest data :

Exemple 4
Récupération d'informations météorologiques en se connectant au service public Openweathermap.
- Configurez un élément maître pour la collecte de données en masse dans un seul JSON :

Notez l'utilisation de macros dans les champs de requête. Reportez-vous à l'API Openweathermap pour savoir comment les renseigner.
Exemple de JSON renvoyé en réponse à l'agent HTTP :
{
"body": {
"coord": {
"lon": 40.01,
"lat": 56.11
},
"weather": [{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02n"
}],
"base": "stations",
"main": {
"temp": 15.14,
"pressure": 1012.6,
"humidity": 66,
"temp_min": 15.14,
"temp_max": 15.14,
"sea_level": 1030.91,
"grnd_level": 1012.6
},
"wind": {
"speed": 1.86,
"deg": 246.001
},
"clouds": {
"all": 20
},
"dt": 1526509427,
"sys": {
"message": 0.0035,
"country": "RU",
"sunrise": 1526432608,
"sunset": 1526491828
},
"id": 487837,
"name": "Stavrovo",
"cod": 200
}
}
L'étape suivante consiste à configurer des éléments dépendants qui extraient les données du JSON.
- Configurez un exemple d'élément dépendant pour l'humidité :

D'autres métriques météorologiques, telles que « Température », sont ajoutées de la même manière.
- Exemple de prétraitement de la valeur d'un élément dépendant avec JSONPath :

- Vérifiez le résultat des données météorologiques dans Dernières données :

Exemple 5
Connexion à la page d'état Nginx et récupération de ses métriques en masse.
- Configurez Nginx en suivant le guide officiel.
- Configurez un élément maître pour la collecte de données en masse :

Exemple de sortie du stub status de Nginx :
Active connections: 1 Active connections:
server accepts handled requests
52 52 52
Reading: 0 Writing: 1 Waiting: 0
La tâche suivante consiste à configurer des éléments dépendants qui extraient les données.
- Configurez un exemple d'élément dépendant pour les requêtes par seconde :

- Exemple de prétraitement de la valeur d'un élément dépendant avec l'expression régulière
server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+):

- Vérifiez le résultat complet du module stub dans Dernières données :

