This is the documentation page for an unsupported version of Zabbix.
Is this not what you were looking for? Switch to the current version or choose one from the drop-down menu.

17 Agent HTTP

Aperçu

Ce type d'élément autorise l'interrogation des données à l'aide du protocole HTTP/HTTPS. Le trap est également possible à l’aide de Zabbix Sender ou du protocole Zabbix Sender.

La vérification d'éléments HTTP est exécutée par le serveur Zabbix. Toutefois, lorsque les 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 n'exigent pas que l'agent s'exécute 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 maximum de redirections est codé en dur à 10 (à l'aide de l'option cURL CURLOPT_MAXREDIRS).

Voir également les problèmes connus liés à l'utilisation du protocole HTTPS.

Le serveur/proxy Zabbix doit être configuré initialement avec le support cURL (libcurl).

Configuration

Pour configurer un élément HTTP :

  • Aller dans : ConfigurationHôtes
  • Cliquez sur Élément dans la rangée de l'hôte
  • Cliquez sur Créer un élément
  • Entrez 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 les suivants :

Type Sélectionnez Agent HTTP ici.
Clé Entrez une clé d'élément unique.
URL URL pour se connecter et récupérer les données. Par exemple :
https://www.google.com
http://www.zabbix.com/download
Les noms de domaine peuvent être spécifiés en caractères Unicode. Ils sont automatiquement convertis au format 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 les Champs de requêtes pour l'encodage automatique des URLs.
Limité à 2048 caractères.
Macros supportées : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, macros utilisateur, macros de découverte de bas niveau.
Ceci définit l'option cURL CURLOPT_URL.
Champs de requête Variables pour l'URL (voir ci-dessous).
Spécifié sous forme de paires d'attributs et de valeurs.
Les valeurs sont automatiquement codées par l'URL. Les valeurs des macros sont résolues puis encodées automatiquement par URL.
Macros supportées : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, macros utilisateur, macros de découverte de bas niveau.
Ceci définit l'option cURL CURLOPT_URL.
Type de requête Sélectionnez le type de méthode de requête : GET, POST, PUT or HEAD
Expiration Zabbix ne passera pas plus de temps que prévu à traiter l’URL (maximum 1 minute). En réalité, ce paramètre définit le délai maximal de connexion à l'URL et le délai maximal d'exécution d'une requête HTTP. Par conséquent, Zabbix ne passera pas plus de 2xExpiration secondes sur une vérification.
Les suffixes temporels sont supportés, ex : 30s, 1m.
Macros supportées : macros utilisateur, macros de découverte de bas niveau.
Ceci définit l'option cURL CURLOPT_TIMEOUT.
Type du corps de la requête Sélectionnez le type du corps de la 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 la requête HTTP au format JSON. Les macros peuvent être utilisées comme chaîne, nombre, vrai et faux ; les macros utilisées en tant que chaînes doivent être placées entre guillemets. Les valeurs des macros sont résolues puis échappées automatiquement. Si "Content-Type" n'est pas spécifié dans les en-têtes, il utilisera par défaut "Content-Type: application/json"
Données XML - Corps de la requête HTTP au format XML. Les macros peuvent être utilisées en tant que nœud de texte, attribut ou section CDATA. Les valeurs des macros sont résolues puis échappées automatiquement 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".
Remarque que la sélection de données XML nécessite libxml2.
Corps de la requête Entrez le corps de la demande.
Macros supportées : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, macros utilisateur, macros de découverte de bas niveau.
En-têtes En-têtes HTTP personnalisés à envoyer lors de l'exécution d'une requête.
Spécifié sous forme de paires d'attributs et de valeurs.
Macros supportées : {HOST.IP}, {HOST.CONN}, {HOST. DNS }, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, macros utilisateur, macros de découverte de bas niveau.
Ceci définit l'option cURL CURLOPT_HTTPHEADER.
Code d'état requis Liste des codes d'état attendus. Si Zabbix obtient un code qui ne figure pas dans la liste, l'élément deviendra non supporté. Si vide, aucune vérification n'est effectuée.
Par exemple : 200,201,210-299
Macros supportées dans la liste : macros utilisateur, macros de découverte de bas niveau.
Ceci utilise l'option cURL CURLINFO_RESPONSE_CODE.
Suivre les redirections Cochez la case pour suivre les redirections HTTP.
Cela définit l'option cURL CURLOPT_FOLLOWLOCATION.
Mode de récupération Sélectionner la partie de la réponse à récupérer :
Corps - corps seulement
En-têtes - en-têtes seulement
Corps et en-têtes - coprs et en-têtes
Convertir en JSON Les en-têtes sont enregistrés sous forme de paires attribut et valeur sous la clé "header".
Si 'Content-Type: application/json' est rencontré, le corps est enregistré en tant qu'objet. Sinon, il est stocké sous forme de chaîne. Par exemple :
Proxy HTTP Vous pouvez spécifier un proxy HTTP à utiliser, au format [protocol://][username[:password]@]proxy.mycompany.com[:port].
Le préfix optionnel protocol:// peut être utilisé pour spécifier des protocoles de proxy alternatifs (le support du préfixe de protocole a été ajouté dans cURL 7.21.7). Sans protocole spécifié, le proxy sera traité comme un proxy HTTP.
Par défaut, le port 1080 sera utilisé.
Si spécifié, le proxy écrasera les variables d'environnement associées au proxy, telles que http_proxy, HTTPS_PROXY. S'il n'est pas spécifié, le proxy n'écrase pas les variables d'environnement liées au proxy. La valeur entrée est transmise "telle quelle", aucune vérification de cohérence n'a lieu.
Vous pouvez également entrer une adresse proxy SOCKS. Si vous spécifiez un protocole incorrect, la connexion échouera et l'élément ne sera plus supporté. En l'absence de protocole spécifié, le proxy sera traité comme un proxy HTTP.
Notez que seule l'authentification simple est prise en charge avec le proxy HTTP.
Macros supportées : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, macros utilisateur, macros de découverte de bas niveau.
Ceci définit l'option cURL CURLOPT_PROXY.
Authentication HTTP Type d'identification :
Aucun - aucune authentification utilisée.
Basique - L'authentification basique est utilisée..
NTLM - L’authentification NTLM (Windows NT LAN Manager) est utilisée.
La sélection d'une méthode d'authentification fournira deux champs supplémentaires pour la saisie d'un nom d'utilisateur et d'un mot de passe, les macros d'utilisateur et les macros de découverte de bas niveau étant prises en charge.
Ceci définit l'option cURL CURLOPT_HTTPAUTH.
Vérifier le pair SSL Cochez la case pour vérifier le certificat SSL du serveur Web. Le certificat du serveur sera automatiquement extrait de l'emplacement de l'autorité de certification à l'échelle du système. Vous pouvez remplacer l'emplacement des fichiers de l'autorité de certification à l'aide du serveur Zabbix ou du paramètre de configuration du proxy SSLCALocation.
Ceci définit l'option cURL CURLOPT_SSL_VERIFYPEER.
Vérifier l'hôte SSL Cochez la case pour vérifier que le champ Nom commun ou le champ Autre nom sujet du certificat du serveur Web correspond.
Ceci définit l'option cURL CURLOPT_SSL_VERIFYHOST.
Fichier de certificat SSL 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 Fichier de clé SSL vide. Si la clé est cryptée, spécifiez le mot de passe dans le champ Mot de passe de la clé SSL. Le répertoire contenant ce fichier est spécifié par le serveur Zabbix ou le paramètre de configuration du proxy SSLCertLocation.
Macros supportées : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, macros utilisateur, macros de découverte de bas niveau.
Ceci définit l'option cURL CURLOPT_SSLCERT.
Fichier de clé SSL 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 serveur Zabbix ou le paramètre de configuration du proxy SSLKeyLocation.
Macros supportées : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, macros utilisateur, macros de découverte de bas niveau.
Ceci définit l'option cURL CURLOPT_SSLKEY.
Mot de passe de la clé SSL Mot de passe du fichier de clé privée SSL.
Macros supportées : macros utilisateur, macros de découverte de bas niveau.
Ceci définit l'option cURL CURLOPT_KEYPASSWD.
Activer les trap Si cette case est cochée, l'élément fonctionnera également comme élément trappeur et acceptera les données envoyées à cet élément par le sender Zabbix ou à l'aide du protocole sender de Zabbix.
Hôtes autorisés Visible uniquement si la case Activer les trap est cochée.
Liste des adresses IP délimitées par des virgules, éventuellement en notation CIDR, ou noms d’hôte.
Si spécifié, les connexions entrantes ne seront acceptées que des hôtes listés ici.
Si la prise en charge IPv6 est activée, '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' sont traitées de la même manière et '::/0' autorise toutes les adresses 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 supportées mais obsolètes par la RFC4291.
Exemple : Server=127.0.0.1, 192.168.1.0/24, 192.168.3.1-255, 192.168.1-10.1-255, ::1,2001:db8::/32, zabbix.domain
Les espaces et les macros utilisateur sont autorisées dans ce champs.
Les macros d'hôtes : {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN} sont autorisées dans ce champs depuis Zabbix 4.0.2.

Si le champs Proxy HTTP est laissé vide, une autre façon d'utiliser un proxy HTTP consiste à définir des variables d'environnement associées au proxy.

Pour HTTP - définissez la variable d'environnement http_proxy pour l'utilisateur 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 une commande shell : # man curl.

[1] Zabbix prend en charge les fichiers de certificat et de clé privée au format PEM uniquement. 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 à 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 extraire des données de services tels que Elasticsearch :

  • Créer 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 en utilisant une étape de prétraitement JSONPath : $.version.number
Exemple 2

Envoyez des requêtes POST simples pour extraire des données de services tels que 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 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érifier si l'API Zabbix est vivant en utilisant apiinfo.version.

  • Configuration de l'élément :

Notez l'utilisation de la méthode POST avec les données JSON, la définition des en-têtes de requête et le renvoi des en-têtes uniquement :

  • Prétraitement de la valeur d'é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 principal pour la collecte de données en bloc dans un seul JSON :

Notez l'utilisation de macros dans les champs de requête. Reportez-vous à l'API Openweathermap pour savoir comment les remplir.

Exemple de code 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
           }
       }

La tâche suivante consiste à configurer les éléments dépendants qui extraient les données du JSON.

  • Configurez un é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 de l'é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 obtention de ses statistiques en masse.

  • Configurez un élément principal pour la collecte de données en bloc :

Exemple de sortie de statut de stub 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 les éléments dépendants qui extraient des données.

  • Configurez un élément dépendant pour les demandes par seconde :

  • Exemple de prétraitement de valeur d'élément dépendant avec une expression régulière :

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