16 Agent HTTP
Vue d’ensemble
Ce type d’élément permet l’interrogation des données à l’aide du protocole HTTP/HTTPS.
Le trapping est également possible à l’aide de l’utilitaire Zabbix sender ou du protocole Zabbix sender (pour l’envoi de données au serveur ou au proxy Zabbix), ou en utilisant la méthode d’API history.push (pour l’envoi de données au serveur Zabbix).
Les vérifications d’éléments HTTP sont exécutées par le serveur Zabbix. Toutefois, lorsque des hôtes sont surveillés par un proxy Zabbix, les vérifications d’éléments HTTP sont exécutées par le proxy.
Les vérifications d’é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 peut éventuellement suivre les redirections (voir l’option Follow redirects 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 initialement configuré 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.
Le niveau maximal de concurrence des vérifications asynchrones est de 1000 (défini par MaxConcurrentChecksPerPoller).
Le nombre de pollers asynchrones de l’agent HTTP 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 : Collecte de données → Hôtes
- Cliquez sur Éléments sur la ligne de l’hôte
- Cliquez sur Créer un élément
- Saisissez les paramètres de l’élément dans le formulaire

Tous les champs de saisie 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 Agent HTTP ici. |
| Key | Saisissez une clé d’élément unique. |
| URL | URL à laquelle se connecter pour récupérer des 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 Analyser 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 dans Champs de requête pour un encodage URL automatique. 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. 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 automatiquement encodées en URL. Les valeurs provenant des macros sont résolues puis automatiquement encodées en 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. 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 requête : Données brutes - corps de requête HTTP personnalisé, les macros sont substituées mais aucun encodage n’est effectué Données JSON - 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 des macros sont résolues puis automatiquement échappées. Si "Content-Type" n’est pas spécifié dans les en-têtes, la valeur par défaut sera "Content-Type: application/json" Données XML - corps de requête HTTP au format XML. Les macros peuvent être utilisées comme nœud de texte, attribut ou section CDATA. Les valeurs provenant des macros sont résolues puis automatiquement échappées dans un nœud de 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. Définit l’option cURL CURLOPT_HTTPHEADER. |
| Required status codes | Liste des codes d’état HTTP attendus. Si Zabbix reçoit 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. Utilise l’option cURL CURLINFO_RESPONSE_CODE. |
| Follow redirects | Cochez cette case pour suivre les redirections HTTP. Définit l’option cURL CURLOPT_FOLLOWLOCATION. |
| Retrieve mode | Sélectionnez la partie de la réponse à récupérer : Corps - corps uniquement En-têtes - en-têtes uniquement Corps et en-têtes - 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 Mode de récupération n’est pas défini sur Corps. Si 'Content-Type: application/json' est rencontré, le corps est enregistré comme objet ; sinon, il est stocké comme 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 ex. https, socks4, socks5 ; voir la documentation ; la prise en charge du préfixe de protocole a été ajoutée dans cURL 7.21.7). Si aucun protocole n’est spécifié, le proxy sera traité comme un proxy HTTP. Si vous spécifiez un protocole incorrect, 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 telles que http_proxy, HTTPS_PROXY. S’il n’est pas spécifié, le proxy ne remplacera pas les variables d’environnement liées au proxy. La valeur saisie est transmise « telle quelle », sans aucun contrôle de validité. Notez 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. Définit l’option cURL CURLOPT_PROXY. |
| HTTP authentication | Sélectionnez l’option d’authentification : Aucune - aucune authentification n’est utilisée ; Basic - l’authentification Basic est utilisée ; NTLM - l’authentification NTLM (Windows NT LAN Manager) est utilisée ; Kerberos - l’authentification Kerberos est utilisée (voir aussi : Configuration de Kerberos avec Zabbix) ; Digest - l’authentification Digest est utilisée. Définit l’option cURL CURLOPT_HTTPAUTH. |
| User name | Saisissez le nom d’utilisateur (jusqu’à 255 caractères). Ce champ est disponible si Authentification HTTP 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 utilisateur (jusqu’à 255 caractères). Ce champ est disponible si Authentification HTTP 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 cette case pour vérifier le certificat SSL du serveur web. Le certificat du serveur sera automatiquement pris à partir de l’emplacement système global de l’autorité de certification (CA). Vous pouvez remplacer l’emplacement des fichiers CA à l’aide du paramètre de configuration du serveur Zabbix ou du proxy SSLCALocation. Définit l’option cURL CURLOPT_SSL_VERIFYPEER. |
| SSL verify host | Cochez cette case pour vérifier que le champ Common Name ou le champ Subject Alternate Name du certificat du serveur web correspond. 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, indiquez 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 du serveur Zabbix ou du proxy SSLCertLocation. 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. 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 du serveur Zabbix ou du proxy SSLKeyLocation. 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. 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. Définit l’option cURL CURLOPT_KEYPASSWD. |
| Timeout | Zabbix ne passera pas plus que le temps défini à traiter 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 exécuter une requête HTTP. Par conséquent, Zabbix ne passera pas plus de 2 x Timeout secondes sur une vérification. Définit l’option cURL CURLOPT_TIMEOUT. Pour plus d’informations sur le paramètre Timeout, voir attributs généraux des éléments. |
| Enable trapping | Si cette case est cochée, l’élément fonctionnera également comme un élément trapper et acceptera les données envoyées au serveur Zabbix ou au proxy à l’aide de l’utilitaire Zabbix sender ou du protocole Zabbix sender, ou acceptera 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 Activer le trapping est cochée. Liste d’adresses IP séparées par des virgules, éventuellement en notation CIDR, ou de noms DNS. Si spécifié, les connexions entrantes seront acceptées uniquement 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ées de manière identique et '::/0' autorisera n’importe quelle adresse IPv4 ou IPv6. '0.0.0.0/0' peut être utilisé pour autoriser n’importe quelle 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. Les 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. Plus 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 des requêtes GET simples pour récupérer des données à partir de services tels que Elasticsearch :
- Créez un élément GET avec l'URL :
localhost:9200/?pretty - Notez 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 des requêtes POST simples pour récupérer des données à partir de 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 minute 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, à l’aide de 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 ne renvoyer que les en-têtes :
- 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 Dernières données :

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

Notez l’utilisation des macros dans les champs de requête. Consultez 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 de Nginx et récupération de ses métriques en bloc.
- Configurez Nginx en suivant le guide officiel.
- Configurez un élément maître pour la collecte de données en bloc :

Exemple de sortie de l’état stub 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 Données récentes :

