Supervision du Web
Supervision web classique
Introduction
Dans Pandora FMS, le Web Server fonctionne au sein de un serveur indépendant, le Network server. Ce système fonctionne selon le principe de la transaction web, où chaque transaction effectuée sur une ou plusieurs pages web est définie par une ou plusieurs étapes consécutives, qui doivent être franchies avec succès pour que la transaction soit considérée comme terminée.
- Le Network Server présente d'importantes limitations telles que la gestion dynamique de JavaScript au moment de l'exécution.
- Pour les transactions web plus complexes, Pandora FMS dispose d'un autre composant beaucoup plus puissant (et complexe) appelé Supervision WUX (Web User Experience).
Installation et configuration
Le Network Server est activé par défaut. En fonction du nombre de requêtes, il se peut que vous deviez augmenter le nombre de threads et le timeout par défaut:
web_threads 1 web_timeout 60 # Use curl or LWP web_engine curl
Pandora FMS dispose d'une protection contre le CSRF et il peut arriver que les contrôles web, lorsqu'ils sont débogués, obtiennent ce message:
Cannot verify the origin of the request
Cette protection doit être prise en compte lors de l'utilisation de « Supervision WUX ».
Création de modules web
Pour superviser une page web à distance, une fois l'agent créé, cliquez sur l'onglet supérieur des modules (Modules). Dans ce document, choisissez de créer Create a new web module et cliquez sur Create:
Le type de contrôle WEB doit être sélectionné:
- Remote HTTP module to check latency: Il obtient le temps total écoulé entre la première requête et la vérification de la dernière requête (dans un test WEB, une ou plusieurs requêtes intermédiaires complètent la transaction). Si la définition du contrôle prévoit que l'opération doit être effectuée plus d'une fois, la durée moyenne de chaque demande est utilisée.
- Remote HTTP module to check server response: Il obtient un 1 (
OK) ou un 0 (CRITICAL) à la suite de la vérification de l'ensemble de la transaction. S'il y a plusieurs tentatives mais qu'au moins l'une d'entre elles échoue, le test dans son ensemble est considéré comme un échec. Précisément, le nombre de tentatives est parfois utilisé pour éviter les faux positifs en utilisant le champ retries dans les champs avancés. - Remote HTTP module to retrieve numeric data: Il obtient une valeur numérique, parsant la réponse HTTP à l'aide d'une expression régulière pour obtenir cette valeur.
- Remote HTTP module to retrieve string data: Analogue au point précédent, mais avec une chaîne de texte.
- Remote HTTP module to check server status code: Au moyen de l'outil curl dûment activé avec la configuration token
web_engine curl, les en-têtes HTTP peuvent être retournés.
Web checks: Ce champ essentiel définit le contrôle WEB à effectuer. Il peut être défini en une ou plusieurs étapes, ou en une seule demande. Les contrôles commencent par la balise task_begin et se terminent par la balise task_end.
Pour le contrôle des formulaires, il y a plusieurs variables supplémentaires:
- resource (1 ou 0): Télécharger toutes les ressources web (images, vidéos, etc.).
- cookie (1 ou 0): Il conserve un cookie, ou une session ouverte pour des vérifications ultérieures.
- variable_name: Le nom d'une variable dans un formulaire.
- variable_value: Le valeur de la variable ci-dessus dans le formulaire.
Dans certains cas de redirection de domaine, les contrôles peuvent ne pas fonctionner. Une façon d'y remédier est de modifier le module pointant vers le domaine final, par exemple curl -L.
Vérifier le temps de chargement d'un site web
Pour vérifier le temps de réponse ou la latence d'une page web, vous devez sélectionner le type de module suivant Remote HTTP module to check latency. Par exemple:
task_begin get https://pandorafms.com task_end
- Pour que le temps de téléchargement comprenne toutes les ressources (JavaScript, CSS, images, etc.),
resource 1doit être ajouté sur une ligne avanttask_end. - Les contrôles web prennent également en charge l'utilisation de proxy dans le champ token Proxy URL.
Le temps de téléchargement d'un site web n'est pas le temps qu'il faut pour qu'un site web s'affiche dans un navigateur, car ce temps dépend généralement du temps de chargement du JavaScript.
Contrôle de formulaire sur une page web
Le contrôle d'un formulaire est beaucoup plus complexe que le simple contrôle d'un texte sur une page web. Pour pouvoir effectuer ce type de contrôle, vous devez disposer des informations d'identification nécessaires. En outre, vous devez aller à la page et obtenir le code HTML pour obtenir les noms des variables, puis vous devez avoir une connaissance minimale du HTML pour saisir la requête pour le Network Server.
La méthode pratique pour concevoir un test transactionnel WEB comportant plusieurs étapes consiste à les tester une par une en mode débogage.
Vérification du code d'état du serveur
Pour vérifier le code d'état d'une page web, sélectionnez le type de module Remote HTTP module to check server status code:
task_begin head https://pandorafms.com task_end
- Il est important d'utiliser le paramètre
headpour obtenir le code d'état. - Dans la configuration du serveur, dans la section web_engine vous devez avoir
curlde configuré.
Utilisant l'authentification HTTP Simple
Certaines pages peuvent nécessiter une simple authentification HTTP. Elle est généralement utilisée comme un contrôle rapide, une salutations de sécurité minimale qui permet d'accéder à des contrôles de sécurité plus avancés (cryptage, persistance des données, etc.)
- L'utilisation de guillemets dans le mot de passe pour
http_auth_passn'est pas supportée. - Évitez d'utiliser des guillemets simples.
Supervision des services web et des API
Les API de type REST peuvent être supervisées, à l'exception des API plus complexes basées sur des protocoles tels que SOAP ou XMLRPC.
En vérifiant la sortie à l'aide d'une expression régulière, vous pouvez vous assurer que tout est correct:
task_begin get https://swapi.dev/api/planets/1/ get_content Tatooine task_end
Pour des réponses plus complexes, d'autres expressions régulières et le jeton get_content_advanced doivent être utilisés.
- Il est important de définir correctement les groupes de prises entre parenthèses pour que l'appel soit effectué correctement.
- Lors des appels à l'API, il est important de noter que l'API cible doit disposer de permissions pour être interrogée.
Options avancées
Modifier les en-têtes HTTP
L'option header permet de modifier les champs de l'en-tête HTTP ou de créer des champs personnalisés. Pour modifier le champ Host de l'en-tête HTTP:
task_begin get http://192.168.1.5/index.php header Host 192.168.1.1 task_end
Débogage des contrôles web
Les contrôles Web peuvent être débogués en ajoutant l'option debug <log_file>. Deux fichiers log_file.req et log_file.res sont créés avec le contenu de la requête HTTP et de la réponse, respectivement:
task_begin get http://192.168.1.5/index.php debug /tmp/request.log task_end
Utilisation de Curl au lieu de LWP
L'utilitaire LWP peut rencontrer des problèmes lorsque de nombreux threads effectuent des requêtes HTTPS (en raison d'une limitation d'OpenSSL). L'alternative consiste à utiliser l'outil curl tool. Pour corriger ce problème, éditez le fichier /etc/pandora/pandora_server.conf avec la ligne suivante:
web_engine curl
Lors du redémarrage de Pandora FMS server, le binaire Curl sera utilisé pour effectuer les contrôles web à la place de LWP.
Supervision transactionnelle avancée
En plus de la fonctionnalité offerte par PFMS Web server, il existe une autre façon d'effectuer une supervision transactionnelle: la Contrôle de l'expérience utilisateur WEB (WUX).