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 :
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 :
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.
La commande "shinken-scheduler-export-data" est seulement utilisable depuis le serveur de l'Arbiter.
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 :
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 ).
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.
|
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.
|
Le lancement de la commande fera deux choses :
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.
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.
shinken-scheduler-export-data --export-type=identify-most-consuming-checks --simulate-scheduling-for-X-seconds=3600 --anonymous |
Le retour donne :
|
|
À 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 ).
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 :
/tmp/dump-schedulers--sizing-pollers--no-simulate-scheduling--with-names--2023-04-24-10h04m05s.csv
/tmp/dump-schedulers--identify-most-consuming-checks--simulate-scheduling-for-3600-seconds--anonymous--2023-04-24-10h05m29s.csv
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 ) |
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 ). |
Les fichiers CSV générés peuvent être importés dans un tableur comme Excel.
|
|
Sur la phase suivante, il faut bien placer le séparateur sur "Virgule".
|
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 :
|
|
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.
|
Voici un exemple de ce qu'on obtient finalement :
|
L'analyse des données issues du script va être répartie en deux grandes catégories :
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 :
ERROR: command must be launched on the Arbiter server |
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 ).
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 :
Cannot fetch SCHEDULER : The "daemon__export_data__password" parameter is missing or void, that is forbidden for not anonymous request |
Dans le cas où le mot de passe rentré lors du lancement de la commande est incorrect, la commande retourne l'erreur suivante :
Cannot fetch SCHEDULER : The password is not matching "daemon__export_data__password" parameter |
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 :
Cannot fetch SCHEDULER : The Scheduler configuration disabled data export with the "scheduler__export_data__enabled" parameter. |
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 :
Cannot fetch SCHEDULER : ERREUR RESEAU ( connexion refusée, nom d'hôte inconnu, temps écoulé, ... ) |
Si le Scheduler n'a pas encore reçu de configuration de l'Arbiter:
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 :
Cannot fetch SCHEDULER : The Scheduler does not have any configuration |
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 :
There was some errors, cannot continue. Use --dont-stop-on-scheduler-error to allow partial results |
WARNING: The results may be partial because some schedulers were in errors: SCHEDULERS |