Checkmk
to checkmk.com
Important

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 :

OMD[mysite]:~$ printf "GET hosts\nColumns: name\n" | unixcat ~/tmp/run/live
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq "GET hosts\nColumns: name"
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq
GET hosts
Columns: name

myserver123
myserver124
myserver125

OMD[mysite]:~$
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq "GET columns\nColumns: table" | sort -u
columns
commands
comments
contactgroups
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq "GET columns\nFilter: table = hosts\nColumns: name"
accept_passive_checks
acknowledged
acknowledgement_type
action_url
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

live_example.py
#!/usr/bin/env python
# Sample program for accessing Livestatus from Python

import json, os, socket

# for local site only: file path to socket
address = f"{os.getenv('OMD_ROOT')}/tmp/run/live"
# for local/remote sites: TCP address/port for Livestatus socket
# address = ("localhost", 6557)

# connect to Livestatus
family = socket.AF_INET if isinstance(address, tuple) else socket.AF_UNIX
with socket.socket(family, socket.SOCK_STREAM) as sock:
    sock.connect(address)

    # send our request and let Livestatus know we're done
    sock.sendall(b"GET status\nOutputFormat: json\n")
    sock.shutdown(socket.SHUT_WR)

    # receive the reply as a JSON string
    chunks = []
    while not chunks or chunks[-1] != b"":
        chunks.append(sock.recv(4096))

reply = b"".join(chunks).decode()

# print the parsed reply
print(json.loads(reply))
Copier le contenu du fichier dans le presse-papiers
Contenu du fichier copié avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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.

OMD[mysite]:~$ lq "GET hosts\nColumns: name address"
myserver123;192.168.0.42
myserver234;192.168.0.73
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Comme on peut le voir, dans une ligne, les valeurs individuelles sont séparées par un point-virgule.

Tip

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 :

OMD[mysite]:~$ lq "GET services\nColumns: host_name description state\nFilter: state = 2"
myserver123;Filesystem /;2
myserver234;ORA MYINST Processes;2
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq "GET services\nColumns: host_name description state\nFilter: state = 2\nFilter: acknowledged = 0"
myserver234;Filesystem /;2
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq "GET services\nColumns: host_name description state\nFilter: description ~~ exchange database|availability"
myserver123;Exchange Database myinst1;1
myserver123;Exchange Availability Service;0
myserver234;Exchange Database myinst3;0
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq "GET hosts\nColumns: name\nOrderBy: name"
ahost
anotherhost
yetanotherhost
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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` :

OMD[mysite]:~$ lq "GET hosts\nColumns: name\nOrderBy: name desc"
yetanotherhost
anotherhost
ahost
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$  lq "GET services\nColumns: host_name performance_data\nFilter: description = Uptime\nOrderBy: performance_data.uptime desc"
anotherhost;uptime|249531.1
yetanotherhost;uptime|149142.3
ahost;uptime|48959
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq "GET hosts\nColumns: name address contacts\nFilter: contacts >= hhirsch"
myserver123;192.168.0.42;hhirsch,hhirsch,mfrisch
myserver234;192.168.0.73;hhirsch,wherrndorf
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq "GET hosts\nColumns: name contacts\nFilter: contacts ="
myserver345;
myserver456;
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq
GET services
Columns: host_name description state
Filter: state = 1
Filter: state = 3
Or: 2

myserver123;Log /var/log/messages;1
myserver123;Interface 3;1
myserver234;Bonding Interface SAN;3

OMD[mysite]:~$
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 » :

OMD[mysite]:~$ lq
GET services
Columns: host_name description state
Filter: state = 3
Filter: description ~ Filesystem
And: 2
Filter: state = 0
Or: 2
Negate:

myserver123;Log /var/log/messages;1
myserver123;Interface 3;1
myserver234;Filesystem /media;2
myserver234;Filesystem /home;2
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 124

Ces séparateurs ont les fonctions suivantes :

  1. Séparateur pour les ensembles de données : 10 (saut de ligne)

  2. Séparateur pour les colonnes d'un ensemble de données : 59 (point-virgule)

  3. Séparateur pour les éléments d'une liste : 44 (virgule)

  4. 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) :

OMD[mysite]:~$ lq
GET services
Columns: host_name description state
Filter: description ~ Filesystem
Separators: 10 9 44 124

myserver123     Filesystem /opt     0
myserver123     Filesystem /var/some/path       1
myserver123     Filesystem /home        0
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !
Tip

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 csv. Il s'agit du format standard si aucun autre n'est spécifié, et il est basé sur le format CSV officiel.

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 » :

OMD[mysite]:~$ lq
GET services
Columns: host_name description state
Filter: description ~ Filesystem
OutputFormat: json

[["myserver123","Filesystem /opt",0]
["myserver123","Filesystem /var/some/path",1]
["myserver123","Filesystem /home",0]]
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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é :

OMD[mysite]:~$ lq
GET services
Stats: state = 0
Stats: state = 1
Stats: state = 2
Stats: state = 3

34506;124;54;20
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

À 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) :

OMD[mysite]:~$ lq
GET hosts
Stats: state >= 0
Stats: staleness >= 3
Stats: scheduled_downtime_depth = 0
StatsAnd: 2

734;23
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq
GET services
Filter: host_name = myserver123
Stats: avg execution_time
Stats: max execution_time
Stats: min execution_time

0.0107628;0.452087;0.008593
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq
GET services
Filter: description ~ CPU utilization
Filter: host_groups >= cluster_a
Stats: sum perf_data

guest=0.000000 steal=0.000000 system=34.515000 user=98.209000 wait=23.008000
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$  lq "GET hosts\nColumns: name\nLimit: 3"
myserver123
myserver234
myserver345
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq "GET hosts\nTimelimit: 1"
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$  lq "GET hosts\nColumns name address groups\nColumnHeaders: on"
name;address;groups
myserver123;192.168.0.42;cluster_a,headnode
myserver234;192.168.0.43;cluster_a
myserver345;192.168.0.44;cluster_a
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

  • columns

  • commands

  • contacts

  • contactgroups

  • eventconsolerules

  • eventconsolestatus

  • status

  • timeperiods

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 :

OMD[mysite]:~$ lq "GET services\nColumns: host_name description contacts\nAuthUser: hhirsch"
myserver123;Uptime;hhirsch
myserver123;TCP Connections;hhirsch
myserver123;CPU utilization;hhrisch,kkleber
myserver123;File /etc/resolv.conf;hhirsch
myserver123;Kernel Context Switches;hhrisch,kkleber
myserver123;File /etc/passwd;hhirsch
myserver123;Filesystem /home;hhirsch
myserver123;Kernel Major Page Faults;hhrisch
myserver123;Kernel Process Creations;hhirsch
myserver123;CPU load;hhrisch,kkleber
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq
GET services
WaitObject: myvmserver CPU load
WaitCondition: state = 2
WaitTrigger: state
WaitTimeout: 10000
Filter: host_name = myesxserver
Filter: description = Disk IO SUMMARY
Columns: host_name description plugin_output

myesxserver;Disk IO SUMMARY;OK - Read: 48.00 kB/s, Write: 454.54 MB/s, Latency: 1.00 ms
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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é.

OMD[mysite]:~$ lq "COMMAND [$(date +%s)] SCHEDULE_FORCED_SVC_CHECK;myserver;Check_MK;$(date +%s)"
OMD[mysite]:~$ lq
GET services
WaitObject: myserver Check_MK
WaitCondition: last_check >= 1517914646
WaitTrigger: check
Filter: host_name = myserver
Filter: description = Memory
Columns: host_name description state

myserver;Memory;0
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !
Tip

Veuillez noter que l'horodatage utilisé dans last_check dans l'exemple DOIT être remplacé par un horodatage approprié – sinon, la condition sera toujours remplie et la sortie sera générée immédiatement.

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 :

OMD[mysite]:~$ lq "GET hosts\nColumns: name last_check\nFilter: name = myserver123\nLocaltime: $(date +%s)"
myserver123;1511173526
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Sinon, fournissez le résultat de date +%s si vous souhaitez utiliser le flux d'entrée :

OMD[mysite]:~$ lq
GET hosts
Columns: name last_check
Filter: name = myserver123
Localtime: 1511173390

myserver123;Memory;1511173526
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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.

OMD[mysite]:~$ lq "GET hosts\nName: myserver123\nResponseHeader: fixed16"
400          33
Columns: undefined request header
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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.

Tip

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 :

OMD[mysite]:~$ lq
GET hosts
ResponseHeader: fixed16
Columns: name
KeepAlive: on

200          33
myserver123
myserver234
myserver345
GET services
ResponseHeader: fixed16
Columns: host_name description last_check
Filter: description = Memory

200          58
myserver123;Memory;1511261122
myserver234;Memory;1511261183
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq "GET log\nFilter: class = 3\nFilter: time >= $(($(date +%s) - 3600))\nColumns: host_name service_description time state"
myserver123;Memory;1511343365;0
myserver234;CPU load;1511343360;3
myserver123;Memory;1511343338;2
myserver234;CPU load;1511342512;0
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !
Tip

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 :

~/etc/nagios/nagios.d/logging.cfg
log_initial_states=0

Dans 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 :

OMD[mysite]:~$ lq
GET statehist
Columns: host_name service_description
Filter: time >= 1511421739
Filter: time < 1511436139
Filter: host_name = myserver123
Filter: service_description = Memory
Stats: sum duration_ok
Stats: sum duration_warning
Stats: sum duration_critical
Stats: sum duration_part_ok
Stats: sum duration_part_warning
Stats: sum duration_part_critical

myserver123;Memory;893;0;9299;0.0620139;0;0.645764
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq "GET hosts\nColumns: name notes_url"
myserver123;https://mymonitoring/heute/wiki/doku.php?id=hosts:$HOSTNAME$
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Si, en revanche, vous interrogez la colonne note_url_expanded, vous obtiendrez la valeur réelle de la macro :

OMD[mysite]:~$ lq "GET hosts\nColumns: name notes_url_expanded"
myserver123;https://mymonitoring/heute/wiki/doku.php?id=hosts:myserver123
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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» :

OMD[mysite]:~$ omd config set LIVESTATUS_TCP on
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

Livestatus configuration in Setup.
Configuration de Livestatus dans la configuration

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 :

OMD[mysite]:~$ openssl s_client -CAfile var/ssl/ca-certificates.crt -connect localhost:6557
CONNECTED(00000003)
Can't use SSL_get_servername
depth=1 CN = Site 'mysite' local CA
verify return:1
depth=0 CN = mysite
verify return:1
---
Certificate chain
 0 s:CN = mysite
   i:CN = Site 'mysite' local CA
 1 s:CN = Site 'mysite' local CA
   i:CN = Site 'mysite' local CA
---
Server certificate
[...]
    Start Time: 1664965470
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ echo -e "GET hosts\nColumns: name\n\n" | \
    openssl s_client -quiet  -CAfile var/ssl/ca-certificates.crt -connect localhost:6557
Can't use SSL_get_servername
depth=1 CN = Site 'mysite' local CA
verify return:1
depth=0 CN = mysite
verify return:1
myserver23
myserver42
myserver123
myserver124
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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.

Display of the site CA's certificate in the Setup.
Affichage du certificat de l'autorité de certification de l'instance dans la Configuration

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 :

user@host:~$ echo -e "GET hosts\nColumns: name\n\n" | \
    openssl s_client -quiet  -CAfile /tmp/mysite_ca.pem -connect cmkserver:6557
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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.

/etc/stunnel/cmk_myremotesite.conf
[pinning client]
client = yes
accept = 0.0.0.0:6557
connect = <myremotesiteip>:6557
verifyPeer = yes
CAfile = /etc/stunnel/myremotesite.pem

Après le redémarrage de stunnel, l'accès non chiffré au port local est possible.

user@host:~$ echo -e "GET hosts\nColumns: name\n\n" | nc localhost 6557
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

user@host:~$ ssh mysite@myserver 'lq "GET hosts\nColumns: name"'
myserver123
myserver234
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Vous pouvez également rediriger le port Livestatus vers l'ordinateur hôte sur lequel vous travaillez actuellement via un tunnel SSH :

user@host:~$ ssh -L 6557:localhost:6557 mysite@myserver
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

user@host:~$ openssl s_client -CAfile /tmp/mysite_ca.pem -connect localhost:6557
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

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 :

OMD[mysite]:~$ lq "COMMAND [$(date +%s)] DISABLE_NOTIFICATIONS"
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Ce format fonctionne à la fois avec le Nagios-Core dans CRE 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

CRE 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 > $commandfile

Comme 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 :

OMD[mysite]:~$ lq "COMMAND [$(date +%s)] CHANGE_CUSTOM_HOST_VAR;host1;_SOMEVAR;SOMEVALUE"
Copier les instructions dans le presse-papiers
Instruction(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

19. Fichiers et répertoires

Chemin d'accès Fonction

~/tmp/run/live

La socket Unix par laquelle les requêtes et les instructions sont envoyées.

~/bin/lq

Commande de script permettant de simplifier l'envoi de requêtes et d'instructions vers le socket Unix dans Livestatus.

~/var/log/cmc.log

Le fichier journal du CMC, dans lequel les requêtes/instructions sont consignées avec d’autres données.

~/var/check_mk/core/history

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.

~/var/check_mk/core/archive/

Les fichiers journaux d'history sont archivés ici. Ceux-ci ne seront consultés qu'en cas de besoin.

~/var/log/nagios.log

Le fichier journal de Nagios-Core, dans lequel sont consignées, entre autres données, les requêtes et les instructions.

~/var/nagios/archive/

Les fichiers journaux de l'history sont archivés ici. Ceux-ci ne seront consultés qu'en cas de besoin.

~/share/doc/check_mk/livestatus/LQL-examples/

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 lq – par exemple : lq < 1.lql


Last modified: Tue, 27 Jan 2026 10:58:11 GMT via commit 3d944493f
Sur cette page