9 agent HTTP

Vue d'ensemble

Ce type d'élément permet l'interrogation des données à l'aide du protocole HTTP/HTTPS. La réception 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 à l'aide de 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é.

HTTP agent 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 le paramètre MaxConcurrentChecksPerPoller).

Le nombre de pollers HTTP agent asynchrones est défini par le paramètre StartHTTPAgentPollers.

La fonctionnalité de connexions persistantes de cURL a été ajoutée aux vérifications HTTP agent depuis Zabbix 7.0.

Configuration

Pour configurer un élément HTTP :

  1. Accédez à Collecte de données > Hôtes.
  2. Cliquez sur Éléments dans la ligne du hôte.
  3. Cliquez sur Créer un élément.
  4. 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 les suivants :

Paramètre Description
Type Sélectionnez HTTP agent ici.
Clé Saisissez une clé d'élément unique.
URL URL à laquelle se connecter pour 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 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 (tels que ?name=Admin&password=mypassword) de l'URL, en déplaçant les attributs et les valeurs vers Champs de requête 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.
Cette option définit l'option cURL CURLOPT_URL.
Champs de requête Variables pour l'URL (voir ci-dessus).
Spécifiées sous forme de paires attribut-valeur.
Les valeurs sont automatiquement encodées pour l'URL. Les valeurs issues des macros sont résolues, puis automatiquement encodées pour 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.
Cette option définit l'option cURL CURLOPT_URL.
Type de requête Sélectionnez le type de méthode de requête : GET, POST, PUT ou HEAD
Type de corps de la requête Sélectionnez le type de corps de la requête :
Données brutes - corps de requête HTTP personnalisé ; les macros sont remplacé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 issues 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 issues 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 »
Remarque : 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}, {HOST.PORT}, {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 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.
Cette option définit l'option cURL CURLOPT_HTTPHEADER.
Codes d'état requis 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 la liste 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.
Cette option utilise l'option cURL CURLINFO_RESPONSE_CODE.
Suivre les redirections Cochez la case pour suivre les redirections HTTP.
Cette option définit l'option cURL CURLOPT_FOLLOWLOCATION.
Mode de récupération Sélectionnez la partie de la réponse qui doit être récupérée :
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 sous forme de paires attribut-valeur sous la clé « header » si le Mode de récupération n'est pas défini sur Corps.
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 :
Proxy HTTP 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). 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é.
S'il est spécifié, le proxy remplacera les variables d'environnement liées au proxy, telles que http_proxy et 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 aucune vérification de cohérence.
Remarque : seule l'authentification simple est prise en charge avec un 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.
Cette option définit l'option cURL CURLOPT_PROXY.
Authentification HTTP 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 également : Configuration de Kerberos avec Zabbix) ;
Digest - l'authentification Digest est utilisée.
Cette option définit l'option cURL CURLOPT_HTTPAUTH.
Nom d'utilisateur Saisissez le nom d'utilisateur (255 caractères maximum).
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.
Mot de passe Saisissez le mot de passe utilisateur (255 caractères maximum).
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.
Vérifier le pair SSL Cochez la case pour vérifier le certificat SSL du serveur web. Le certificat du serveur est vérifié par rapport aux certificats de l'autorité de certification (CA) de confiance provenant de l'emplacement système des CA. Vous pouvez remplacer l'emplacement des fichiers CA à l'aide du paramètre de configuration SSLCALocation du serveur Zabbix ou du proxy.
Cette option 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 Subject Alternate Name du certificat du serveur web correspond.
Cette option 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 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 Zabbix ou du proxy.
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.
Cette option 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 paramètre de configuration SSLKeyLocation du serveur Zabbix ou du proxy.
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.
Cette option 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.
Cette option définit l'option cURL CURLOPT_KEYPASSWD.
Délai d'expiration Zabbix ne consacrera pas plus de temps que la durée définie au traitement de l'URL (1 à 600 secondes). En réalité, ce paramètre définit la durée maximale pour établir une connexion à l'URL et la durée maximale pour effectuer une requête HTTP. Par conséquent, Zabbix ne consacrera pas plus de 2 x Délai d'expiration secondes à une vérification.
Cette option définit l'option cURL CURLOPT_TIMEOUT.
Pour plus d'informations sur le paramètre Délai d'expiration, consultez les attributs généraux des éléments.
Activer la réception de données 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 Zabbix ou au proxy à 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, consultez : Éléments trapper.
Hôtes autorisés Visible uniquement si la case Activer la réception de données est cochée.
Liste d'adresses IP séparées par des virgules, éventuellement au format CIDR, ou de noms DNS.
Si cette option est spécifiée, les connexions entrantes seront acceptées uniquement depuis les hôtes répertoriés ici.
Si la prise en charge d'IPv6 est activée, « 127.0.0.1 », « ::127.0.0.1 » et « ::ffff:127.0.0.1 » sont traités de manière équivalente 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 Proxy HTTP est laissé vide, une autre méthode pour 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 une commande shell : # man curl.

[1] Zabbix prend uniquement en charge les certificats et les clés privées au format PEM. Si les données de votre certificat et de votre clé privée se trouvent 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 de simples requêtes GET pour récupérer des données depuis des services tels que 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 des requêtes POST simples pour récupérer des données depuis des 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 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, 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 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 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. Consultez l'API Openweathermap pour savoir comment les renseigner.

Exemple de JSON renvoyé en réponse par 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 des éléments dépendants qui extraient des données du JSON.

  • Configurez un exemple d'élément dépendant pour l'humidité :

D'autres métriques météorologiques, telles que « Temperature », 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 lot.

  • Configurez Nginx en suivant le guide officiel.
  • Configurez un élément maître pour la collecte de données en lot :

Exemple de sortie du statut 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 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 :