This is a machine translation based on the English version of the article. It might or might not have already been subject to text preparation. If you find errors, please file a GitHub issue that states the paragraph that has to be improved. |
1. Introduction
Le Livestatus est l’interface la plus importante de Checkmk. Il s’agit du moyen le plus rapide d’obtenir toutes les données des ordinateurs hôtes et des services surveillés, y compris les données en temps réel. Ainsi, par exemple, les données de l’aperçu sont récupérées directement via cette interface. Comme celles-ci sont lues directement depuis la mémoire vive (RAM), l’accès lent au disque dur est évité, ce qui permet un accès rapide à la supervision sans trop solliciter le système.
Afin de structurer les données, celles-ci sont organisées en tableaux et en colonnes.
Le tableau « hosts » comprend, par exemple, les colonnes « name », «
state» et de nombreuses autres. Chaque ligne du tableau « hosts »
représente un ordinateur hôte, celle du tableau « services » un service,
et ainsi de suite. De cette manière, les données peuvent être facilement recherchées et récupérées.
Cet article devrait vous aider à utiliser cette interface pour vos propres requêtes, extensions et personnalisations. En tant qu’utilisateur de l’instance, vous pouvez – à l’aide du copier-coller – tester directement toutes les requêtes et instructions présentées dans cet article.
2. Le langage de requête Livestatus (LQL)
2.1. Utilisation du LQL dans le shell
L'accès à Livestatus s'effectue via un socket Unix à l'aide du langage de requête Livestatus (LQL). Sa syntaxe est basée sur HTTP.
Depuis la ligne de commande, il existe plusieurs façons d'accéder à l'interface.
Une possibilité consiste à utiliser les commandes printf et unixcat pour
envoyer une instruction au socket. L'outil unixcat est déjà inclus
dans Checkmk pour l'utilisateur de l'instance. Important : toutes les entrées vers le socket
sont sensibles à la casse, il faut donc toujours en tenir compte :
L'interface attend que toutes les instructions et tous les en-têtes soient sur une ligne distincte. Vous pouvez marquer
un tel saut de ligne avec \n. Comme alternative à l'instruction ci-dessus,
vous pouvez également utiliser l'instruction de script lq, qui vous épargne un peu de
travail en complétant automatiquement certains champs lors de la saisie :
Vous pouvez également lancer le flux de saisie interactif et saisir l'instruction suivie de l'en-tête. Une ligne vide permet d'exécuter l'instruction avec son en-tête, et une ligne supplémentaire met fin à l'accès au socket. Notez que dans l'exemple, tout ce qui précède la ligne vide fait partie de l'instruction, et tout ce qui se trouve entre la première et la deuxième ligne vide constitue la réponse :
Les exemples suivants sont toujours exécutés avec l’instruction lq – sous forme directe
lorsque la requête est courte, et sous forme de flux de saisie pour les requêtes plus longues.
Instructions LQL
Dans les premiers exemples, vous avez déjà vu la première des deux instructions :
avec GET, vous pouvez afficher toutes les tables disponibles. Dans la référence des instructions,
vous trouverez une liste complète, accompagnée d’une description, de toutes les tables disponibles,
et cet article contient également une explication générale
sur l’utilisation de Livestatus.
Avec COMMAND, vous pouvez envoyer des instructions directement au noyau du processeur,
par exemple pour définir une période de maintenance ou pour désactiver complètement les notifications.
Une liste de toutes les instructions disponibles se trouve en tout cas dans la référence des instructions
sous Commandes.
En-têtes LQL
Pour chaque instruction GET, vous pouvez insérer divers en-têtes afin de restreindre les résultats d'une requête, de n'afficher que des colonnes spécifiques d'une table, et bien plus encore. Voici les deux en-têtes les plus importants :
| En-tête | Description |
|---|---|
Columns |
Seules les colonnes spécifiées seront renvoyées par la requête. |
Filtre |
Seules les entrées répondant à une condition spécifique seront affichées. |
Vous trouverez ici une liste de tous les en-têtes, accompagnés chacun d'une brève description.
Afficher les colonnes et les tables disponibles
Il n’est pas possible de se souvenir de toutes les tables et de leurs colonnes,
et l’accès à ce manuel (avec les références de la version en ligne) n’est pas
toujours possible. Il est toutefois possible de créer rapidement une requête qui
fournit les informations souhaitées. Pour obtenir la liste de toutes les tables disponibles,
soumettez la requête suivante, puis supprimez les lignes en double dans le résultat à l’aide de la commande «
sort». Dans le résultat, les quatre premières lignes peuvent être consultées à titre d’exemple :
Pour une requête sur toutes les colonnes d'une table, vous devez bien sûr les spécifier.
Remplacez hosts par la table souhaitée. Ici aussi, les quatre premières
lignes du résultat peuvent être consultées à titre d'exemple :
2.2. Utilisation de LQL en Python
Étant donné que Checkmk repose en grande partie sur Python, les scripts dans ce langage sont pratiques. Le script suivant peut servir de base pour accéder au socket Livestatus :
2.3. Utilisation de l'API Livestatus
Checkmk fournit également une API pour les langages de programmation Python, qui simplifie l'accès à Livestatus. Un exemple de code est disponible pour cette API, qui explique son utilisation. Vous trouverez cette API sur GitHub.
3. Requêtes simples
3.1. Requêtes sur les colonnes (Columns)
Dans les exemples que nous avons vus jusqu’à présent, TOUTES les informations concernant TOUS les ordinateurs hôtes ont été interrogées.
Dans la pratique, cependant, on n’aura probablement besoin que de colonnes spécifiques.
Grâce à l’en-tête Columns déjà mentionné, le résultat
peut être limité à cette colonne. Les noms des colonnes individuelles seront séparés par
un simple espace.
Comme on peut le voir, dans une ligne, les valeurs individuelles sont séparées par un point-virgule.
Si vous utilisez ces en-têtes, l'en-tête sera supprimé dans la sortie. Celui-ci peut être réinséré dans la sortie à l'aide de l'en-tête ColumnHeaders. |
3.2. Définition d'un filtre simple
Pour limiter la requête à des lignes spécifiques, les colonnes peuvent être filtrées en fonction d'un contenu donné. Si vous souhaitez rechercher uniquement les services présentant un statut spécifique, vous pouvez le faire à l'aide d'un filtre :
Dans l'exemple, tous les services ayant le statut « CRIT » seront recherchés, et le nom de domaine, la description du service et son statut seront affichés. De tels filtres peuvent bien sûr être combinés, et limités aux services ayant le statut « CRIT » et qui n'ont pas encore fait l'objet d'une confirmation :
Comme on peut le voir, il est également possible de filtrer par des colonnes qui ne figurent pas sur la liste de Columns.
Opérateurs et expressions régulières
Jusqu'à présent, seuls les nombres correspondants ont été filtrés. Le résultat intermédiaire d'une requête peut également faire l'objet d'une recherche « inférieure à » avec des nombres ou des chaînes de caractères. Les opérateurs disponibles se trouvent dans le chapitre Opérateurs du guide de référence des instructions. Vous pouvez ainsi, par exemple, filtrer selon des expressions régulières dans les colonnes :
Avec l’opérateur approprié, vous pouvez effectuer des recherches dans les colonnes de différentes manières.
Livestatus interprète toujours une telle expression comme « pouvant apparaître n’importe où
dans la colonne », sauf indication contraire.
Indiquez le début d’une ligne avec, par exemple, le caractère ^,
et la fin d’une ligne avec le caractère $. Une liste complète de
tous les caractères spéciaux utilisés dans les expressions régulières de Checkmk est disponible dans l’
article consacré aux expressions régulières.
3.3. Tri de la sortie (OrderBy)
Vous pouvez utiliser l'en-tête OrderBy pour trier la sortie en fonction du contenu de n'importe quelle colonne ou même des valeurs de n'importe quelle clé de dictionnaire.
Cela vous permet de créer une liste alphabétique de tous les ordinateurs hôtes, par exemple :
Par défaut, la sortie est triée par ordre croissant (asc), comme prévu.
Cependant, vous pouvez également spécifier explicitement le tri souhaité et l'inverser en indiquant desc` :
Avec des requêtes légèrement plus longues et un tri par, par exemple, les données de performance, il est possible de créer des listes intéressantes. Dans l'exemple suivant, les ordinateurs hôtes sont affichés par ordre décroissant de leur durée de fonctionnement :
4. Requêtes complexes
4.1. Filtres pour les listes
Certaines colonnes d'un tableau ne renvoient pas une seule valeur, mais toute une liste de valeurs.
Afin de permettre une recherche efficace dans une telle liste, les opérateurs
ont dans ces cas-là une autre fonction. Vous trouverez la liste complète des opérateurs
dans la section Opérateurs pour les listes.
Ainsi, par exemple, l'opérateur >= a la fonction « contient ». Grâce à cela,
vous pourriez, par exemple, rechercher des contacts spécifiques :
Comme le montre l’exemple ci-dessus, les contacts seront répertoriés, séparés par des virgules,
dans la colonne « contacts ». Cela permet de les distinguer clairement
et de ne pas les confondre avec le début d’une autre colonne. Une particularité de l’opérateur d’égalité
est qu’il checke si une liste est vide :
4.2. Combinaison de filtres
Plusieurs filtres ont déjà été combinés précédemment. Il semblerait intuitif que les données doivent passer par tous les filtres pour être affichées. Les filtres seront donc reliés par l'opération logique « et ». Pour relier certains filtres par une opération logique « ou », à la fin de la chaîne de code du filtre, insérez « or: » suivi d'un nombre entier. Ce nombre indique combien des dernières lignes peuvent être combinées par une opération « ou ». De cette manière, des groupes peuvent être formés et combinés selon les besoins. Voici un exemple simple. Ici, deux filtres sont combinés de sorte que tous les services ayant le statut « WARN» ou « UNKNOWN » s'affichent :
Le résultat d'une combinaison peut également être inversé, ou les groupes peuvent à leur tour être
combinés en d'autres groupes. Dans l'exemple, tous les services sont affichés dont le statut
n'est pas « OK », et dont la description commence par « Filesystem », ou
qui ont un statut autre que « UNKNOWN » :
4.3. Spécification d'un format de sortie
Le format de sortie peut être spécifié de deux manières. Une méthode consiste à redéfinir les séparateurs utilisés dans la sortie standard. L'autre méthode consiste à générer une sortie conforme aux formats Python ou JSON.
Personnalisation de l'csv
Comme déjà décrit, vous pouvez personnaliser précisément le format de sortie standard
csv (en minuscules !) et définir comment les éléments individuels
doivent être séparés les uns des autres.
Checkmk reconnaît quatre séparateurs différents pour structurer les données.
Après un deux-points, saisissez une valeur ASCII standard appropriée afin que le
filtre soit structuré comme suit :
Separators: 10 59 44 124Ces séparateurs ont les fonctions suivantes :
Séparateur pour les ensembles de données :
10(saut de ligne)Séparateur pour les colonnes d'un ensemble de données :
59(point-virgule)Séparateur pour les éléments d'une liste :
44(virgule)Séparateur pour les éléments d'une liste de services :
124(barre verticale)
Chacune de ces valeurs peut être sélectionnée pour structurer la sortie comme vous le souhaitez. Dans l'exemple suivant, les colonnes individuelles d'un ensemble de données ont été séparées par une tabulation (9) plutôt que par un point-virgule (59) :
L'ordre des séparateurs est fixe et ne peut pas être modifié. |
Modification des formats de sortie
Outre la production de sorties au format «csv», Livestatus peut également générer des sorties
dans d’autres formats. Ceux-ci présentent l’avantage d’être plus faciles et plus clairs à analyser
dans les langages de programmation de haut niveau.
En conséquence, les sorties peuvent être codées dans les formats suivants :
| Format | Description |
|---|---|
Python |
Génère une sortie sous forme de liste compatible avec la version 2.x. Le texte est formaté en Unicode. |
python3 |
Génère également une sortie sous forme de liste, en tenant compte des changements de type de données – par exemple, la conversion automatique du texte en Unicode. |
json |
La sortie sera également générée sous forme de liste, mais seul un format compatible JSON sera utilisé. |
CSV |
Formate la sortie conformément à la norme RFC-4180. |
csv |
Voir la personnalisation de |
Veuillez ne pas confondre l'CSV Format avec la sortie « csv »
de Livestatus, qui est utilisée si aucun format de sortie n'a été spécifié.
Il est donc absolument essentiel de respecter la casse (majuscules/minuscules).
Pour la personnalisation, indiquez à la fin « OutputFormat » au lieu de « Separator » :
5. Consultation des statistiques (Stats)
5.1. Introduction
Il existe des situations dans lesquelles vous ne vous intéressez pas à l'état d'un
service unique ou d'un groupe de services. Ce qui importe bien davantage, c'est le nombre de services
dont l'état est actuellement « WARN », ou le nombre de bases de données sous supervision.
Livestatus est capable de générer et d'afficher des statistiques à l'aide de l'option « Stats ».
5.2. Chiffres
L’Overviewe reçoit ses données en récupérant les statistiques relatives aux ordinateurs hôtes, aux services et aux événements via Livestatus, puis en les affichant dans l’interface de Checkmk. Grâce à un accès direct à Livestatus, vous pouvez créer votre propre résumé :
À noter que ces statistiques peuvent être combinées avec tous les filtres.
5.3. Regroupement
Les statistiques peuvent également être combinées avec l'and/or. Les en-têtes sont alors
appelés « StatsAnd » ou « StatsOr ». Utilisez « StatsNegate » si la
sortie doit être inversée. Dans l'exemple, le nombre total d'ordinateurs hôtes sera affiché
(Stats initiale), et la sortie inclura en outre le nombre
d'ordinateurs hôtes marqués comme « stale » et qui ne figurent pas non plus dans une liste de période de maintenance
(les statistiques 2 et 3 sont liées par un « ET » logique) :
Ne vous laissez pas dérouter par les différentes options permettant de combiner les
résultats des filtres et des statistiques.
Alors que tous les ordinateurs hôtes répondant aux conditions seront affichés avec l'en-tête «
Filter», avec les statistiques, le résultat sera
la somme du nombre de fois où le filtre « Stats » s'applique.
5.4. Minimum, maximum, moyenne, etc.
Il est également possible d'effectuer des calculs sur les valeurs et, par exemple, d'afficher une valeur moyenne ou une valeur maximale. Une liste complète de tous les opérateurs possibles est disponible ici.
Dans l’exemple suivant, la liste indiquera la moyenne, le minimum et le maximum des temps nécessaires aux plugins de supervision d’un ordinateur hôte pour calculer un état :
Les calculs avec les métriques sont traités d’une manière quelque peu particulière.
Ici aussi, toutes les fonctions de l’en-tête Stats sont disponibles.
Celles-ci s’appliquent toutefois individuellement à toutes les métriques d’un service.
À titre d’exemple, dans l’exemple suivant, les métriques relatives à la charge de travail du processeur d’un groupe d’hôtes
seront additionnées :
6. Limitation de la sortie (Limit)
Le nombre de lignes d'une sortie peut être limité intentionnellement. Cela peut s'avérer utile si, par exemple, vous souhaitez simplement vérifier si vous obtenez une réponse à une requête Livestatus, mais que vous souhaitez éviter d'obtenir une sortie de plusieurs pages :
Notez que cette limite fonctionne également lorsqu'elle est combinée avec d'autres en-têtes.
Si, par exemple, avec Stat, vous comptez le nombre d'ordinateurs hôtes ayant un statut « UP »
et que vous limitez la sortie à 10, seuls les 10 premiers ordinateurs hôtes seront pris en compte.
7. Limites de temps (Timelimit)
Il est possible non seulement de limiter le nombre de lignes à afficher, mais également de limiter la durée maximale d’exécution autorisée pour une requête. Cette option permet d’éviter qu’ une requête Livestatus ne bloque indéfiniment une connexion si elle se bloque pour une raison quelconque. La restriction de temps spécifie la durée maximale, en secondes, pendant laquelle une requête est autorisée à s’exécuter :
8. Activation des en-têtes de colonnes (ColumnHeaders)
Avec l'option « ColumnHeaders », les noms des colonnes peuvent être ajoutés à la sortie.
Ceux-ci sont normalement supprimés afin de faciliter le processus ultérieur :
9. Autorisations (AuthUser)
Si vous souhaitez rendre des scripts accessibles en fonction du statut de service (Livestatus), l'utilisateur
ne devrait probablement voir que les données pour lesquelles il a obtenu l'autorisation.
Checkmk fournit l'en-tête AuthUser pour cette fonction,
avec la restriction qu'il ne peut pas être utilisé dans les tables suivantes :
columnscommandscontactscontactgroupseventconsoleruleseventconsolestatusstatustimeperiods
En revanche, cet en-tête peut être utilisé dans toutes les tables qui accèdent aux tables hosts
ou services. L'autorisation d'un utilisateur pour l'une ou l'autre de ces tables dépend
de ses groupes de contact.
De cette manière, une requête ne renverra que les données que le contact est également autorisé à consulter.
Notez ici la différence entre les paramètres d’autorisation de strict etloose
:
10. Délais (Wait)
L'en-tête Wait vous permet de créer des requêtes pour des ensembles de données spécifiques sans avoir besoin de savoir si les conditions préalables relatives à ces données sont remplies. Cela peut s'avérer utile lorsque, par exemple, vous avez besoin de données de comparaison pour une situation d'erreur spécifique, mais que vous ne souhaitez pas imposer une charge continue et inutile au système. Les informations ne seront donc récupérées que lorsqu'elles sont réellement nécessaires.
Vous trouverez ici la liste complète des en-têtes Wait.
Dans l'exemple suivant, le service «Disk IO SUMMARY» d'un serveur ESXi sera
affiché dès que le statut du service «CPU load» changera pour une
CRIT de machine virtuelle spécifique. Avec l'en-tête «WaitTimeout», la requête sera alors exécutée
si la condition n'a pas été remplie après 10 000 millisecondes.
Cela évite que la connexion Livestatus ne soit bloquée pendant une longue période :
Une autre application consiste à combiner cela avec une instruction. Vous pouvez lancer une instruction et récupérer les résultats dès qu'ils sont disponibles. Dans l'exemple suivant, nous souhaitons interroger et afficher les données actuelles d'un service. Pour cela, l'instruction sera d'abord soumise, puis une requête sera émise. Cela permet de vérifier si les données du service Check_MK sont plus récentes que celles d'un moment donné. Dès que la condition préalable est remplie, l'état du service Memory sera affiché.
Veuillez noter que l'horodatage utilisé dans |
11. Fuseaux horaires (Localtime)
De nombreux environnements de supervision interrogent des ordinateurs hôtes et des services à l'échelle mondiale. Dans de tels cas, on peut rapidement se retrouver dans une situation où des instances de supervision distribuées fonctionnent dans des fuseaux horaires différents. Étant donné que Checkmk utilise l'heure Unix – qui est indépendante des fuseaux horaires – cela ne devrait pas poser de problème.
Si un serveur devait néanmoins être affecté à un fuseau horaire incorrect,
cette différence peut être compensée à l'aide de l'en-tête « Localtime ».
Indiquez également l'heure actuelle dans la requête. Checkmk arrondira alors automatiquement
à la demi-heure supérieure et corrigera la différence.
Vous pouvez fournir l'heure automatiquement si vous lancez la requête directement :
Sinon, fournissez le résultat de date +%s si vous souhaitez utiliser le flux d'entrée :
12. Codes d'état (ResponseHeader)
Si vous développez une API, vous souhaiterez probablement recevoir un code d'état en réponse,
afin de pouvoir mieux traiter les données de sortie.
L'en-tête « ResponseHeader » prend en charge les valeurs « off » (Standard)
et « fixed16 », et fournit ainsi un message d'état
d'exactement 16 octets dans la première ligne de la réponse.
En cas d'erreur, les lignes suivantes contiennent une description détaillée
du code d'erreur. Elles sont donc également très utiles pour rechercher
l'erreur dans les résultats de la requête.
Le rapport d'état de la première ligne combine les éléments suivants :
Octets 1 à 3 : le code d'état. Le tableau complet des codes possibles est disponible ici.
Octet 4 : un simple caractère d'espacement (caractère ASCII : 32)
Octets 5 à 15 : la longueur de la réponse proprement dite sous forme de nombre entier. Les octets inutiles sont remplis par des caractères d'espacement.
Octet 16 : un saut de ligne (caractère ASCII : 10)
Dans l'exemple suivant, nous allons exécuter une requête erronée dans laquelle un filtre est en fait codé de manière erronée avec un nom de colonne.
En cas d'erreur, le format de sortie est toujours un message d'erreur sous forme de texte. Cela s'applique indépendamment des adaptations que vous avez pu effectuer.
13. Maintien de la connexion (KeepAlive)
En particulier avec les scripts qui établissent une connexion Livestatus via le
réseau, vous souhaiterez peut-être maintenir le canal ouvert afin d’
éviter le dépassement généré par l’établissement répété de la connexion.
Vous pouvez y parvenir à l’aide de l’en-tête « KeepAlive », ce qui vous permet ainsi de
réserver un canal.
À noter d’ailleurs : après une instruction, une connexion Livestatus
reste toujours ouverte. Aucun en-tête supplémentaire n’est nécessaire à cet effet.
Comme le canal est bloqué pour les autres processus pendant toute la durée de la connexion, cela peut poser un problème si aucune autre connexion n’est disponible. Les autres processus doivent donc attendre qu’une connexion se libère. Dans la configuration standard, Checkmk dispose de 20 connexions prêtes à l’emploi — augmentez le nombre maximal de ces connexions si nécessaire à l’aide de Setup > General > Global Settings > Monitoring Core > Maximum concurrent Livestatus connections. |
Associez toujours la commande « KeepAlive » à la commande « Response header »,
afin de pouvoir distinguer correctement les différentes réponses les unes des autres :
Assurez-vous qu'il n'y a pas de ligne vide entre la première réponse et la deuxième requête. Dès qu'un en-tête est omis dans une requête, après la sortie suivante, la connexion sera fermée comme d'habitude par la ligne vide.
14. Récupération des journaux
14.1. Aperçu
La table « log » de Livestatus vous offre un accès direct à l'historique de supervision du noyau du processeur,
ce qui vous permet, à l'aide du LQL, de filtrer facilement des événements particuliers.
Les tables de disponibilité, par exemple, seront générées à l'aide de ces tables.
Afin d'améliorer l'aperçu et de restreindre une requête par thème, vous avez accès
aux classes de journaux suivantes :
| Classe | Description |
|---|---|
0 |
Tous les messages non couverts par d'autres classes |
1 |
Alertes relatives à l'ordinateur hôte et au service |
2 |
Événements importants du programme |
3 |
Notifications |
4 |
Vérifications passives |
5 |
Instructions externes |
6 |
Entrées d'état initial ou actuel (par exemple, après une rotation des journaux) |
7 |
Modifications de l'état du programme |
Le simple fait d'utiliser ces classes de journaux vous permet déjà de limiter très efficacement le type d'entrée de journal à afficher. La période prise en compte dans la requête sera en outre restreinte. Ceci est important, car sinon, l'historique complet de l'instance serait exploré – ce qui pourrait logiquement ralentir considérablement le système en raison du flux massif d'informations.
Une autre restriction judicieuse de la sortie concerne les (Columns)
qui doivent être affichées pour une entrée.
Dans l'exemple ci-dessous, nous rechercherons toutes les notifications qui ont été
enregistrées au cours de la dernière heure :
Assurez-vous qu’en mode interactif du flux d’entrées, aucune des variables utilisées dans l’exemple ne puisse être utilisée, et limitez toujours les requêtes à une période. |
14.2. Configuration de l'historique de supervision
Il est possible d’influencer la rotation des fichiers et leur taille maximale. Vous pouvez en outre spécifier le nombre de lignes d’un fichier qui doivent être lues avant que Checkmk n’interrompe le processus. Tout cela peut affecter les performances de vos requêtes, en fonction de la configuration de l’instance. Les trois paramètres suivants sont disponibles ; vous pouvez les trouver et les personnaliser dans Setup > General > Global Settings > Monitoring Core :
| Nom | Description |
|---|---|
History log rotation: Regular interval of rotations |
Vous pouvez définir ici la période pendant laquelle l'historique doit être poursuivi dans un nouveau fichier. |
History log rotation: Rotate by size (Limit of the size) |
Indépendamment de la période, la taille maximale d'un fichier est définie ici. Cette taille représente un compromis entre le débit de lecture possible et les E/S possibles. |
Maximum number of parsed lines per log file |
Lorsque le nombre de lignes spécifié a été lu, la lecture du fichier s'arrête. Cela évite les délais d'attente si, pour une raison quelconque, un fichier devient très volumineux. |
15. Check de la disponibilité
La table « statehist » vous permet d'interroger les données brutes relatives à la disponibilité
des ordinateurs hôtes et des services, et donc d'accéder à toutes les informations
utilisées par l'affichage de la disponibilité de l'interface.
Indiquez toujours une période, sinon tous les journaux disponibles seront parcourus,
ce qui peut imposer une charge importante au système.
Les précisions supplémentaires suivantes s'appliquent également :
La période pendant laquelle un ordinateur hôte/service a présenté un statut particulier peut être affichée sous forme absolue ou en heure Unix, mais aussi sous forme relative et en pourcentage par rapport à la période interrogée.
Pendant les périodes où un ordinateur hôte/service n'était pas sous supervision, le statut sera «
-1» (non sous supervision).
Vérifier si, quand et pendant combien de temps un ordinateur hôte/service a été sous supervision est rendu possible dans Checkmk grâce à la journalisation de l'état initial. Ainsi, vous pouvez non seulement voir quel état existait à un moment précis, mais vous pouvez également retracer s'il était effectivement sous supervision à ce moment-là. Important : cette journalisation est également active avec un Nagios-Core. Elle peut toutefois être désactivée ici :
log_initial_states=0Dans l'exemple ci-dessous, vous pouvez voir à quoi ressemblent la requête d'une répartition en pourcentage et les durées absolues pour un statut particulier. Les dernières 24 heures ont été spécifiées comme période, et la requête a été limitée à la disponibilité d'un service sur un ordinateur hôte particulier :
La manière de récupérer la liste complète des colonnes disponibles est expliquée plus en détail dans la référence des instructions.
16. Variables dans Livestatus
À divers endroits de l'interface Checkmk, vous pouvez utiliser des variables pour
effectuer des affectations en fonction du contexte. Certaines de ces données sont également accessibles via
Livestatus. Étant donné que ces variables doivent également être résolues,
les valeurs de ces colonnes sont dupliquées dans un tableau –
une fois sous forme d'entrée littérale, et une fois avec la variable
remplacée par la valeur appropriée.
Un exemple en est la colonne « notes_url », qui affiche une URL
contenant la variable :
Si, en revanche, vous interrogez la colonne note_url_expanded,
vous obtiendrez la valeur réelle de la macro :
17. Utilisation de Livestatus via un réseau
17.1. Connexions via TCP/IP
Pour accéder à Livestatus via le réseau, vous pouvez établir une connexion entre le socket Unix du processus Livestatus et un port TCP. De cette manière, vous pouvez exécuter des scripts sur des machines distantes et collecter les données directement à l'endroit où elles doivent être traitées.
Lorsqu'une instance est désactivée, l'accès via TCP peut être activé à l'aide de l'instruction «
omd» :
Une fois l'instance démarrée, Livestatus via TCP est généralement actif sur le port par défaut 6557. Pour les serveurs Checkmk comportant plusieurs instances utilisant Livestatus via TCP, le port inutilisé immédiatement supérieur est sélectionné.
Tous les paramètres, tels que le port et les adresses IP autorisées, peuvent être configurés via omd config.
Ces paramètres peuvent également être définis dans la Configuration.
Dans Checkmk, le chiffrement SSL de la communication Livestatus est activé par défaut :

Test de connexion SSL locale
Livestatus utilise un certificat généré automatiquement lors de la création de l’instance.
Ce certificat se trouve dans le fichier var/ssl/ca-certificates.crt, avec tous les autres certificats d’autorité de certification (CA) considérés comme fiables par l’instance.
Pour que l’outil en ligne de commande openssl s_client puisse valider le certificat utilisé par le serveur Livestatus, ce fichier doit être désigné comme fichier d’autorité de certification.
Nous avons considérablement raccourci la sortie de l'instruction ici ; […] affiche les omissions :
Dès qu'il n'y a plus de sortie, vous pouvez exécuter des instructions LQL de manière interactive et mettre fin à l'interaction avec une ligne vide (appuyez deux fois sur Enter).
Si cela fonctionne, vous pouvez également rediriger les requêtes Livestatus et utiliser le paramètre supplémentaire -quiet pour supprimer la sortie de débogage :
La sortie précédant les quatre noms de domaine est écrite dans STDERR par l'instruction openssl.
Elle peut être supprimée en ajoutant 2>/dev/null.
Accès à distance à Livestatus
Si vous accédez à Livestatus depuis des machines distantes, vous ne devez pas utiliser la liste complète des certificats approuvés par l'instance Checkmk sur ces machines. Lisez plutôt le certificat de l'autorité de certification (CA) de l'instance à partir de la configuration uniquement.
Pour ce faire, rendez-vous sur Global Settings > Site management > Trusted certificate authorities for SSL.
Vous pouvez y copier-coller le certificat utilisé par l’autorité de certification de l’instance.
Copiez le texte complet du premier certificat sous Content of CRT/PEM file dans un fichier — dans notre exemple, nous utilisons /tmp/mysite_ca.pem.

Si l'ordinateur hôte distant a désormais été activé pour l'accès à Livestatus, les requêtes Livestatus via un script seront possibles avec ce fichier de certificat :
Remarque : le fichier de certificat ne fournit pas d'authentification, il assure uniquement le chiffrement du transport ! La protection de l'accès est régulée exclusivement via les adresses IP autorisées à accéder au port Livestatus.
Livestatus avec stunnel
Si vous souhaitez rendre le port Livestatus distant chiffré disponible en tant que port local non chiffré, vous pouvez utiliser le programme stunnel.
[pinning client]
client = yes
accept = 0.0.0.0:6557
connect = <myremotesiteip>:6557
verifyPeer = yes
CAfile = /etc/stunnel/myremotesite.pemAprès le redémarrage de stunnel, l'accès non chiffré au port local est possible.
SSL dans les scripts
Si vous souhaitez utiliser des scripts pour accéder à Livestatus via SSL, évitez d'utiliser openssl s_client.
Cet outil a pour objectif principal de tester l'établissement de la connexion et de déboguer les chaînes de certificats.
Pour vérifier si le résultat attendu est complet en cas d'échec de connexion, nous vous recommandons d'évaluer l'en-tête de réponse.
Une API bien entretenue prenant en charge SSL et l'évaluation des en-têtes est celle pour Python, disponible sur GitHub.
17.2. Connexions via SSH
Si un accès à Livestatus depuis l'extérieur de votre réseau local est nécessaire, une protection d'accès basée uniquement sur les adresses IP peut s'avérer peu pratique. Le moyen le plus simple d'obtenir un accès authentifié dans ce cas est d'utiliser Secure Shell.
Avec SSH, vous avez la possibilité de transmettre une instruction qui sera exécutée sur le serveur distant :
Vous pouvez également rediriger le port Livestatus vers l'ordinateur hôte sur lequel vous travaillez actuellement via un tunnel SSH :
Si la connexion a été établie, vous pouvez tester dans une deuxième session de console si l'accès avec openssl s_client est possible :
Si ce test est concluant, tout script que vous avez écrit pour un accès direct au réseau Livestatus peut être utilisé sur localhost.
18. Instructions de configuration
18.1. Aperçu
Livestatus ne sert pas uniquement à interroger des données,
mais également à envoyer des instructions directement au noyau du processeur (CMC ou Nagios).
Une instruction correcte comprend toujours un horodatage – celui-ci peut en fait être n'importe quoi.
Cependant, comme elle sera également utilisée dans les journaux pour suivre l'
heure du processus, il est judicieux d'indiquer l'heure aussi précisément que possible.
Les instructions dont l'horodatage est manquant seront ignorées, sans générer de message d'erreur
, et ne feront l'objet que d'une simple entrée dans l'cmc.log !
Afin que l'horodatage soit aussi précis que possible, il est recommandé de ne pas définir l'instruction dans le flux d'entrée, mais plutôt de l'exécuter directement. Dans ce cas, vous avez également accès aux variables et l'heure actuelle peut être fournie :
Ce format fonctionne à la fois avec le Nagios-Core dans
Checkmk Community et avec le CMC dans les éditions commerciales.
Dans les deux cœurs, les instructions ne se recoupent toutefois que partiellement.
Une liste complète des instructions pour le Nagios-Core est disponible directement sur le
site web de Nagios.
Les instructions disponibles pour le CMC se trouvent dans la
référence des instructions.
18.2. Fonctionnalités spécifiques à Nagios
Dans la liste des instructions, la syntaxe se présente sous la forme suivante :
#!/bin/sh
# This is a sample shell script showing how you can submit the CHANGE_CUSTOM_HOST_VAR command
# to Nagios. Adjust variables to fit your environment as necessary.
now=`date +%s`
commandfile='/usr/local/nagios/var/rw/nagios.cmd'
/bin/printf "[%lu] CHANGE_CUSTOM_HOST_VAR;host1;_SOMEVAR;SOMEVALUE\n" $now > $commandfileComme vous l'avez appris, Checkmk utilise un format beaucoup plus simple pour l'exécution des instructions. Pour rendre le format Nagios compatible avec Checkmk, il vous suffit d'indiquer l'instruction, l'horodatage et, le cas échéant, les variables :
19. Fichiers et répertoires
| Chemin d'accès | Fonction |
|---|---|
|
La socket Unix par laquelle les requêtes et les instructions sont envoyées. |
|
Commande de script permettant de simplifier l'envoi de requêtes et d'instructions vers le socket Unix dans Livestatus. |
|
Le fichier journal du CMC, dans lequel les requêtes/instructions sont consignées avec d’autres données. |
|
Le fichier journal du CMC, dans lequel sont consignées toutes les modifications survenant pendant la durée d'exécution du noyau du processeur – par exemple, les changements d'état d'un ordinateur hôte ou d'un service. |
|
Les fichiers journaux d' |
|
Le fichier journal de Nagios-Core, dans lequel sont consignées, entre autres données, les requêtes et les instructions. |
|
Les fichiers journaux de l' |
|
Dans ce répertoire, vous trouverez plusieurs exemples de requêtes Livestatus que vous pouvez tester. Les exemples sont basés sur l’instruction de script |
