This is a translation of the original English documentation page. Help us make it better.

16 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 :

  • Allez dans : ConfigurationHôtes
  • Cliquez sur Éléments dans la rangée 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 :

Paramètre Description
Type Sélectionnez Agent HTTP ici.
Clé Entrez une clé d'élément unique.
URL URL de connexion et de récupération des données. Par exemple :
https://www.example.com
http://www.example.com/download
Les noms de domaine peuvent être spécifiés en caractères Unicode. Ils sont automatiquement convertis en punycode en 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 l'encodage automatique des URL.
Limité à 2 048 caractères.
Macros prises en charge : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST. NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros utilisateur, macros de découverte de bas niveau.
Ceci définit l'option CURLOPT_URL de cURL.
Champs de requête Variables pour l'URL (voir ci-dessus).
Spécifiées en tant que paires d'attributs et de valeurs.
Les valeurs sont automatiquement codées en URL. Les valeurs des macros sont résolues puis automatiquement codées en URL.
Macros prises en charge : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM .ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros utilisateur, macros de découverte de bas niveau.
Ceci définit l'option CURLOPT_URL de cURL.
Type de requête Sélectionnez le type de méthode de requête : GET, POST, PUT ou HEAD
Exîration Zabbix ne passera pas plus que le temps défini sur le traitement de l'URL (1-60 secondes). En fait, ce paramètre définit le temps maximum pour établir une connexion à l'URL et le temps maximum pour effectuer une requête HTTP. Par conséquent, Zabbix ne passera pas plus de 2 secondes de délai d'attente sur une vérification.
Les suffixes temporels sont pris en charge, par ex. 30s, 1m.
Macros prises en charge : macros utilisateur, macros de découverte de bas niveau.
Cela définit l'option CURLOPT_TIMEOUT de cURL.
Type du corps de la requête Sélectionnez le type de corps de la requête :
Données brutes : corps de la requête HTTP personnalisé, les macros sont remplacées mais aucun encodage n'est effectué
Données JSON : corps de la requête HTTP dans Format JSON. Les macros peuvent être utilisées comme chaîne, nombre, vrai et faux ; les macros utilisées comme chaînes doivent être placées entre guillemets doubles. Les valeurs des macros sont résolues puis automatiquement échappées. Si "Content-Type" n'est pas spécifié dans les en-têtes, il sera 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 comme nœud de texte, attribut ou section CDATA. Les valeurs 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, il sera par défaut "Content-Type : application/xml"
Notez que la sélection de Données XML nécessite libxml2.
Corps de la requête Saisissez le corps de la requête.
Macros prises en charge : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM. ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros utilisateur, macros de découverte de bas niveau.
En-têtes 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 d'attributs et de valeurs.
Macros prises en charge : {HOST.IP}, {HOST.CONN}, {HOST.DNS} , {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros utilisateur, macros de découverte de bas niveau.
Ceci définit l'option CURLOPT _HTTPHEADER de cURL.
Codes d'état requis Liste des codes d'état HTTP attendus. Si Zabbix obtient un code qui ne figure pas dans la liste, l'élément ne sera plus pris en charge. Si 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 CURLINFO_RESPONSE_CODE de cURL.
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é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
Convertir en JSON Les en-têtes sont enregistrés en tant que paires d'attributs et de valeurs sous la clé "en-tête".
Si 'Content-Type : application/json' est rencontré, le corps est enregistré en tant qu'objet, sinon il est stocké en tant que chaîne, par exemple :
Proxy HTTP Vous pouvez spécifier un proxy HTTP à utiliser, en utilisant le format [protocol://][username[:password]@]proxy.example.com[:port].
Le préfixe facultatif protocol:// peut être utilisé pour spécifier des protocoles proxy alternatifs (par exemple https, socks4, socks5 ; voir la documentation ; 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. Si vous spécifiez le mauvais protocole, la connexion échouera et l'élément ne sera plus pris en charge.
Par défaut, le port 1080 sera utilisé.
Si spécifié, le proxy écrasera les variables d'environnement liées au proxy comme http_proxy, HTTPS_PROXY. S'il n'est pas spécifié, le proxy n'écrasera pas les variables d'environnement liées au proxy. La valeur saisie est transmise "telle quelle", aucune vérification d'intégrité n'a lieu.
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}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros utilisateur, macros de découverte de bas niveau.<br >Cela définit l'option cURL CURLOPT_PROXY.
Authentification HTTP Type d'authentification :
Aucun - aucune authentification utilisée.
Basique - l'authentification de base est utilisée.
NTLM - NTLM (Windows NT LAN Manager) est utilisé.
Kerberos - L'authentification Kerberos est utilisée. Voir aussi : Configuration de Kerberos avec Zabbix.
Digest - L'authentification Digest est utilisée.
La sélection d'une méthode d'authentification fournira deux champs supplémentaires pour entrer un utilisateur nom et mot de passe, où les macros utilisateur et les macros de découverte de bas niveau sont prises en charge.
Cela 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 (CA) à l'échelle du système. Vous pouvez remplacer l'emplacement des fichiers CA à l'aide du serveur Zabbix ou du paramètre de configuration du proxy SSLCALocation.
Cela définit l'option cURL CURLOPT_SSL_VERIFYPEER.
Vérifier l'hôte SSL Cochez la case pour vérifier que le champ Common Name ou le champ Subject Alternate Name du certificat de serveur Web correspond.
Cela définit l'option CURLOPT_SSL_VERIFYHOST de cURL.
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 prises en charge : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME }, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros utilisateur, macros de découverte de bas niveau.
Cela 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 prises en charge : {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME }, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros utilisateur, macros de découverte de bas niveau.
Cela 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 prises en charge : macros utilisateur, macros de découverte de bas niveau.
Cela définit l'option cURL CURLOPT_KEYPASSWD.
Activer les traps Avec cette case cochée, l'élément fonctionnera également comme élément de trappeur et acceptera les données envoyées à cet élément par l'expéditeur Zabbix ou en utilisant le protocole d'expéditeur Zabbix.
Hôtes autorisés Visible uniquement si la case Activer les traps 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 qu'à partir des hôtes répertorié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 tout IPv4 ou Adresse 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 obsolètes par 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és dans ce champ.
Les macros d'hôte : {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN} sont autorisés dans ce champ.

Si le champ Proxy HTTP 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 les fichiers de certificat et de clé privée au format PEM uniquement. Si vous avez votre certificat et vos données de clé privée 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 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 métriques en masse.

  • Configurez Nginx en suivant le [guide officiel] (https://nginx.ru/en/docs/http/ngx_http_stub_status_module.html).
  • Configurez un élément principal pour la collecte de données en masse :

Exemple de sortie d'état du 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 les données.

  • Configurez un exemple d'élément dépendant pour les requêtes par seconde :

  • Exemple de prétraitement de la valeur de l'élément dépendant avec une expression régulière le serveur accepte les requêtes traitées\s+([0-9]+) ([0-9]+) ([0-9]+) :

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