| Scroll Ignore | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||
|
Intérêt global de la commande
Sur les grands environnements, la majorité de la charge CPU va être consommée par les sondes de supervision. Quand elles sont nombreuses et qu'elles sont ordonnancées avec des intervalles de temps différents, il peut être difficile :
- d'extrapoler, par rapport au nombre d'hôtes déjà présents, de combien de CPUs sur ses Pollers une infrastructure à besoin.
- de savoir, sur une infrastructure, qu'elles sont les sondes les plus consommatrices en termes de CPU :
- une fois identifiées, il est intéressant de passer du temps pour optimiser ces sondes afin de diminuer le nombre de CPU nécessaires.
C'est pour répondre à ces problématiques que nous avons crée la commande shinken-scheduler-export-data.
Vous trouverez des exemples d'analyses de résultat de la commande dans les pages suivantes :
- Vous avez un environnement avec un certain nombre d'hôtes, vous souhaitez dimensionner vos Pollers si vous rajoutez 10, 20 ou 50% d'hôtes en plus :
- dans ce cas, il faut se référer à la page Dimensionnement des Pollers à l'aide de la commande shinken-scheduler-export-data.
- Si vous souhaitez diminuer le nombre de CPU de vos Pollers en identifiant, et optimisant, les sondes les plus consommatrices :
- dans ce cas, il faut se référer à la page Identification des checks les plus consommateurs à l'aide de la commande shinken-scheduler-export-data.
Cette commande interroge les Schedulers, car ce sont eux qui centralisent les informations de temps d'exécution des sondes de supervision exécutées par les Pollers.
- Le fichier de résultat est un fichier .csv qui contient une ligne par check exécuté par les Pollers, avec suivant les options des données différentes.
- Ces données seront les données constatées par les Pollers.
- Vous pouvez aussi simuler la génération des lignes de check sur une période.
- L’intérêt est que si certains checks sont exécutés toutes les heures, ils n'auront pas le même poids dans vos besoins en ressource qu'un check exécuté toutes les minutes.
Fonctionnement général de la commande
Récupération des données des checks auprès des schedulers
La commande "shinken-scheduler-export-data" est seulement utilisable depuis le serveur de l'Arbiter.
- En effet, elle se connecte sur tous les Schedulers, et c'est le seul démon habilité à cela.
La commande va lire la configuration depuis /etc/shinken et va pouvoir se connecter sur tous les Schedulers qui sont définis dans l'architecture. Le fichier de résultat peut être :
- soit ANONYME ( aucun nom d'hôte, royaume, etc, ne sera présent dans le fichier généré, voir l'option --anonymous ),
- L'extraction sera anonymisée ( seule un hash des noms sera lisible )
- L'extraction sera anonymisée ( seule un hash des noms sera lisible )
- soit NORMAL, donc avec les noms des éléments ( par défaut )
- Un mot de passe vous sera systématiquement demandé pour générer ce fichier
- Le mot de passe est celui défini dans le fichier de configuration de Shinken ( /etc/shinken/shinken.cfg ) dans la clé : daemon__export_data__password ( voir la page Fichier de configuration ( shinken.cfg ) ).
Il est possible de désactiver l'extraction pour un Scheduler via l'option définie dans son fichier de configuration avec le paramètre : scheduler__export_data__enabled ( voir la page Le Scheduler ).
Options de la commande
La commande accepte les options suivantes :
Nom | Type | Unité | Défaut | Commentaire | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Texte | -- | -- | Cette option permet de choisir quel type de donnée sera exportées. Les valeurs possibles de cette option sont :
| ||||||||||||||
| -- | -- | -- | Cette option permet d'avoir un export anonyme, c'est-à-dire que les noms des éléments ne seront pas présents.
| ||||||||||||||
| Entier | sec | 10 | Permets de configurer le temps d'attente acceptée sur les appels des Schedulers avant de retourner une erreur.
| ||||||||||||||
| Texte | -- | -- | Prends le nom du royaume que l'on souhaite utiliser comme filtre afin de n'avoir que des Schedulers de ce royaume dans notre extraction de données. ( on ne peut mettre qu'un seul royaume dans le filtre )
| ||||||||||||||
| Booléen | -- | -- | Si activé, la commande ne s’arrêtera plus si un ou plusieurs Scheduler est éteint/mal configuré, ou s'il ne répond pas ( timeout ). A noter que dans ce cas les données extraites risquent d'être partielles avec des éléments manquants. De plus, les Schedulers spare inactifs sont automatiquement passés, il n'est pas nécessaire d'utiliser cette option pour ces derniers.
| ||||||||||||||
| -- | -- | -- | Option permettant d'avoir plus d'affichage sur le fonctionnement interne de la commande. Pour le support uniquement.
|
Options de la commande pour les extractions de types sizing-pollers et identify-most-consuming-checks
Nom | Type | Unité | Défaut | Commentaire | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Entier | sec | 0 | Cette option permet, de simuler une activité normale des checks, en rajoutant leurs données après chaque intervalle de vérification spécifique à chaque check.
|
Résultat du lancement sur le terminal
Le lancement de la commande fera deux choses :
- un retour dans le terminal pour voir le retour global de la commande,
- la génération d'un fichier .csv avec l'ensemble des données.
- Les lignes du fichier csv représente chaque occurrence d'exécution de chaque check.
Deux exemples seront fournis pour illustrer la documentation:
Exemple 1 : Exécution sécurisée des données pour le dimensionnement des Pollers ( --export-type=sizing-pollers ) et sans simulation dans le futur.
Code Block language text theme Emacs shinken-scheduler-export-data --export-type=sizing-pollers
Exemple 2 : Exécution des données pour identifier les sondes qui consomme le plus de CPU sur les Pollers ( --export-type=identify-most-consuming-checks ) avec une demande de simulation d'une heure supplémentaire ( --simulate-scheduling-for-X-seconds=3600 ) , de manière anonyme ( --anonymous ) pour ne pas avoir les noms des hôtes.
Code Block language text theme Emacs shinken-scheduler-export-data --export-type=identify-most-consuming-checks --simulate-scheduling-for-X-seconds=3600 --anonymous
Le retour du terminal
Le retour donne :
- la liste des Schedulers,
- l'adresse du fichier où le CSV a été généré,
- le nombre de lignes générées ( qui correspond aux nombres d'éléments et simulé si l'option --simulate-scheduling-for-X-seconds a été utilisé )
| Panel | ||
|---|---|---|
| ||
| Panel | ||
|---|---|---|
| ||
À noter que dans l'exemple 2, le nombre de lignes est bien plus élevées à causes des nombreuses lignes de la simulation ( 530 au lieu de 26 dans notre exemple ).
CSV des données
Elle va générer un fichier csv dans le répertoire /tmp du serveur dont le nom va dépendre des options utilisées :
- Exemple 1 :
/tmp/dump-schedulers--sizing-pollers--no-simulate-scheduling--with-names--2023-04-24-10h04m05s.csv
- Exemple 2 :
/tmp/dump-schedulers--identify-most-consuming-checks--simulate-scheduling-for-3600-seconds--anonymous--2023-04-24-10h05m29s.csv
Contenu du fichier csv généré
Dans le fichier CSV, on a les données suivantes :
host_uuid | UUID de l'hôte. |
host_name | Nom de l'hôte ( Vide si l'option --anonymous est défini dans la commande ). |
check_uuid | UUID du check. |
check_name | Nom du check ( Vide si l'option --anonymous est défini dans la commande );
|
command_name | Nom de la commande ( Vide si l'option --anonymous est défini dans la commande ) . |
command_name_anonymous_hash | Hash du nom pour l'identifier sur un export avec l'option --anonymous. |
realm | Nom du royaume ( Vide si l'option --anonymous est défini dans la commande ) . |
realm_anonymous_hash | Hash du nom du royaume pour l'identifier sur un export avec l'option --anonymous. |
check_interval | Intervalle entre les vérifications. |
retry_interval | Intervalle de nouvelles tentatives de confirmations d'état. |
cpu_time | Temps CPU utilisé par le check :
|
scheduled_epoch | Seconde où le check est planifié ( en epoch, depuis le 1er janvier 1970 ). |
scheduled_date | Format YYYY-MM-DD hh:mm:ss |
is_simulated | Booléen permettant de savoir si le check est issu d'une vraie exécution prévue dans le Scheduler, ou s'il est issu d'une simulation du check dans le futur ( via l'option --simulate-scheduling-for-X-seconds )simulation du check dans le futur ( via l'option --simulate-scheduling-for-X-seconds ) |
last_reference_epoch | Seconde où le check s'est exécuté pour la dernière fois et que son état a été confirmé ( "HARD" ) ( en epoch, depuis le 1er janvier 1970 ). |
Chargement et analyse des données
Chargement du fichier csv
Les fichiers CSV générés peuvent être importés dans un tableur comme Excel.
- L'import dans ce dernier se fait simplement, dans les autres tableurs l'import suivra un mécanisme similaire.
- Depuis un tableur vide, il faut passer par Données→Fichier texte.
| Panel |
|---|
Vu que le fichier a une première ligne avec la description des champs, il faut bien activer "Mes données ont des en-têtes".
| Panel |
|---|
Sur la phase suivante, il faut bien placer le séparateur sur "Virgule".
- L'Aperçu de données permet de s’apercevoir que la séparation des champs est bien prise en compte.
| Panel |
|---|
Si la majorité des champs sont des formats simples ( chaines de caractères ou entier ), deux colonnes sont particulières et on doit indiquer à Excel comment les interpréter :
- cpu_time : Il faut lui indiquer via "Avancé" que le séparateur de décimale n'est pas "," mais "." ( à faire que dans un Excel en Français, car dans le Excel en Anglais le séparateur par défaut est déjà le point ).
| Panel |
|---|
- scheduled_date : Il faut lui indiquer que le champ est un format Date.
| Panel |
|---|
Excel nous demande alors où charger ces données. Il est plus simple et lisible de le charger dans une "Nouvelle feuille de calcul" que l'on pourra renommer facilement.
| Panel |
|---|
Voici un exemple de ce qu'on obtient finalement :
| Panel |
|---|
Analyse des données
L'analyse des données issues du script va être répartie en deux grandes catégories :
- Vous avez un environnement avec un certain nombre d'hôtes, vous souhaitez dimensionner vos Pollers si vous rajoutez 10, 20 ou 50% d'hôtes en plus :
- Dans ce cas, il faut se référer à la page Dimensionnement des Pollers à l'aide de la commande shinken-scheduler-export-data
- Dans ce cas, il faut se référer à la page Dimensionnement des Pollers à l'aide de la commande shinken-scheduler-export-data
- Si vous souhaitez diminuer le nombre de CPU de vos Pollers en identifiant, et optimisant, les sondes les plus consommatrices :
- Dans ce cas, il faut se référer à la page Identification des checks les plus consommateurs à l'aide de la commande shinken-scheduler-export-data
Erreurs possibles
La commande est lancée depuis un serveur autre que l'Arbiter
La commande échange avec les Schedulers de la même manière que l'Arbiter. Elle a donc besoin d'avoir les accès réseaux. C'est pour cela que le lancement de la commande n'est autorisé que sur le serveur de l'Arbiter, car c'est le seul à avoir tous les accès vers les démons.
Dans le cas où la commande est lancée depuis un serveur qui n'est pas Arbiter, elle retourne l'erreur suivante :
| Code Block | ||||
|---|---|---|---|---|
| ||||
ERROR: command must be launched on the Arbiter server |
Problème de paramétrage du mot de passe d'accès ( daemon__export_data__password dans /etc/shinken/shinken.cfg )
Par défaut, la commande va extraire les données avec les noms des éléments inclus ( désactivé avec la paramètre --anonymous ). Vu que le nom des éléments est une information sensible à protéger, l'accès à ces informations est protégée par un système de mot de passe ( paramètre daemon__export_data__password dans /etc/shinken/shinken.cfg ).
Le mot de passe est vide ou non configuré dans le fichier /etc/shinken/shinken.cfg
Dans le cas où le mot de passe est vide ou non paramétré ( le paramètre daemon__export_data__password dans le fichier /etc/shinken/shinken.cfg ) vous aurez l'erreur suivante :
| Code Block | ||||
|---|---|---|---|---|
| ||||
Cannot fetch SCHEDULER : The "daemon__export_data__password" parameter is missing or void, that is forbidden for not anonymous request |
Le mot de passe fourni par l'utilisateur est incorrect
Dans le cas où le mot de passe rentré lors du lancement de la commande est incorrect, la commande retourne l'erreur suivante :
| Code Block | ||||
|---|---|---|---|---|
| ||||
Cannot fetch SCHEDULER : The password is not matching "daemon__export_data__password" parameter |
Problème de paramétrage de la désactivation de l'export des données des démons ( scheduler__export_data__enabled parameter dans le .cfg du Scheduler )
Il est possible de désactiver entièrement l'export de donnée sur un Scheduler ( depuis le paramètre scheduler__export_data__enabled dans le fichier de configuration du Scheduler ).
Dans le cas où on tente de communiquer avec un Scheduler avec cette configuration, la commande va retourner une erreur :
| Code Block | ||||
|---|---|---|---|---|
| ||||
Cannot fetch SCHEDULER : The Scheduler configuration disabled data export with the "scheduler__export_data__enabled" parameter. |
Problèmes avec le réseaux ou l'état du Scheduler
Le Scheduler n'est pas accessible ( éteint ou problème réseau )
Dans le cas où le Scheduler est éteint ou s'il y a des problèmes réseaux entre le serveur de l'Arbiter et de dernier, l'erreur réseau de connexion sera retournée :
| Code Block | ||||
|---|---|---|---|---|
| ||||
Cannot fetch SCHEDULER : ERREUR RESEAU ( connexion refusée, nom d'hôte inconnu, temps écoulé, ... ) |
Le Scheduler n'a pas encore reçu de configuration de l'Arbiter
Si le Scheduler n'a pas encore reçu de configuration de l'Arbiter:
- il n'a aucun éléments supervisés
- et il n'a pas reçu le mot de passe de vérification.
Dans le cas où la commande tente de se connecter au Scheduler avant qu'il ait reçu une communication, l'erreur suivante sera retournée :
| Code Block | ||||
|---|---|---|---|---|
| ||||
Cannot fetch SCHEDULER : The Scheduler does not have any configuration |
Passer les erreurs et travailler avec des données partielles
Toutes les erreurs concernant les Schedulers sont par défaut bloquantes pour la commande afin d'être sûr d'avoir l'ensemble des données. Si un seul des Schedulers a une erreur, alors la commande sort en erreur et ne génère pas de fichier d'export csv.
Il est cependant possible, via le paramètre --dont-stop-on-scheduler-error, de signaler à la commande qu'on accepte les données partielles et que les erreurs sur les Schedulers ne sont que des avertissements et pas des erreurs bloquantes.
Dans le cas par défaut où on ne mets pas le paramètre, la commande indique qu'il est possible de les passer avec le message suivant :
| Code Block | ||||
|---|---|---|---|---|
| ||||
There was some errors, cannot continue. Use --dont-stop-on-scheduler-error to allow partial results |
- Les erreurs seront transformées en WARNING au niveau des Schedulers.
- La commande averti tout de même que les données risques d'être partielles avec le message suivant :
| Code Block | ||||
|---|---|---|---|---|
| ||||
WARNING: The results may be partial because some schedulers were in errors: SCHEDULERS |








