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

À ce stade, nous partons du principe que vous vous êtes déjà familiarisé avec les principes de base des programmes de source de données et des agents spéciaux, et que vous en comprenez les mécanismes fondamentaux. Les agents spéciaux ajoutent une configurabilité simple à un programme de source de données. Les règles de la configuration sont utilisées à cette fin. Cette configurabilité peut affecter à la fois la portée et le type des données récupérées, ainsi que leur prétraitement avant qu’elles ne soient transférées, en tant que sortie de l’agent, vers la chaîne de traitement ultérieure.

Chaque agent spécial est un programme exécutable de manière indépendante, sans dépendance vis-à-vis des interfaces de programmation de Checkmk. Tout comme les programmes de source de données, les agents spéciaux sont également appelés à l’intervalle de vérification habituel (généralement une minute par défaut). Un processus est lancé par l’agent spécial et la sortie de l’agent est transférée vers la sortie standard. L’agent spécial se termine ensuite. Cela vous permet d’implémenter des agents spéciaux dans n’importe quel langage de programmation. Cependant, les processus de courte durée font que les langages compilés « juste à temps » tels que Java sont moins adaptés que les langages compilés ou les langages interprétés à démarrage rapide.

Les processus déclenchés sont configurés via des paramètres de ligne de commande lors de l’appel de l’agent spécial. Pour ce faire, vous déterminez comment les éléments de l’interface graphique, tels que les champs de saisie de texte ou les cases à cocher, doivent être mappés à des paramètres spécifiques.

Les exemples de code créés pour cet article sont disponibles dans notre dépôt GitHub et l'agent spécial Open-Meteo finalisé est disponible sous forme de MKP dans la boutique Checkmk.

2. Création d'un agent spécial « minimal »

Tip

Lors du développement d’agents spéciaux, vous devez également vous assurer d’utiliser l’utilisateur du site correspondant pour la création du fichier. Si les propriétaires ou les autorisations ne sont pas correctement définis, cela peut entraîner des problèmes et des incompatibilités.

Contrairement au programme de source de données, un agent spécial ne peut pas être situé n’importe où dans le système de fichiers. Il dispose d’un emplacement spécifique dans la hiérarchie des répertoires de Checkmk. De plus, le nom du fichier doit commencer par agent_. Par ailleurs, les agents spéciaux doivent toujours être signalés au site Checkmk. Un agent spécial minimal et exécutable nécessite donc au moins trois fichiers : l’agent spécial, la configuration des règles et la configuration des appels.

2.1. Préparation de l’environnement

À titre de préparation, vous devez donc créer trois répertoires, tous situés sous ~/local/lib/python3/cmk_addons/plugins/<plug-in_family>. Le quatrième répertoire indiqué dans l’exemple ci-dessous est facultatif — il peut être utilisé pour une vérification basée sur un agent.

OMD[mysite]:~$ mkdir -p ~/local/lib/python3/cmk_addons/plugins/hellospecial/libexec
OMD[mysite]:~$ mkdir -p ~/local/lib/python3/cmk_addons/plugins/hellospecial/rulesets
OMD[mysite]:~$ mkdir -p ~/local/lib/python3/cmk_addons/plugins/hellospecial/server_side_calls
OMD[mysite]:~$ mkdir -p ~/local/lib/python3/cmk_addons/plugins/hellospecial/agent_based
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

2.2. L'agent spécial

Quoi de mieux comme agent spécial minimal qu’une vérification locale fournissant un service « Hello World ! » ? Même un simple script shell générant deux lignes de sortie peut le faire :

~/local/lib/python3/cmk_addons/plugins/hellospecial/libexec/agent_hellospecial
#!/bin/bash
echo '<<<local>>>'
echo '0 "Hello special" - This static service is always OK'
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é !
Tip

Ce script ne doit pas avoir d'extension de fichier.

N'oubliez pas : le fichier doit être rendu exécutable :

OMD[mysite]:~$ chmod 755 local/lib/python3/cmk_addons/plugins/hellospecial/libexec/agent_hellospecial
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Cela attribuera les autorisations nécessaires :

  • pour le propriétaire du fichier (lecture, écriture, exécution)

  • pour le groupe associé au fichier (lecture, exécution)

  • pour les autres utilisateurs (lecture, exécution).

2.3. Configuration de la règle

Une règle minimale est désormais créée :

  • Le titre et la catégorie sont définis.

  • Le formulaire graphique de configuration reste vide.

~/local/lib/python3/cmk_addons/plugins/hellospecial/rulesets/special_agent.py
#!/usr/bin/env python3
# Shebang needed only for editors

from cmk.rulesets.v1.form_specs import Dictionary
from cmk.rulesets.v1.rule_specs import SpecialAgent, Topic, Help, Title

def _formspec():
    return Dictionary(
        title=Title("Hello special!"),
        help_text=Help("This rule is to demonstrate the minimum special agent."),
        elements={}
    )

rule_spec_hellospecial = SpecialAgent(
    topic=Topic.GENERAL,
    name="hellospecial",
    title=Title("Hello special!"),
    parameter_form=_formspec
)
Copier le contenu du fichier dans le presse-papiers
Le contenu du fichier a été copié avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

L'name fait référence au nom de l'agent spécial, auquel est attribué le préfixe agent_. Un agent configuré de cette manière sera disponible dans Other integrations. Cependant, son modèle de configuration ne contient aucune entrée en raison de l'elements={} vide.

2.4. La configuration de l'appel

Cette configuration combine l'agent spécial à exécuter avec les paramètres obtenus via l'interface graphique et les paramètres par défaut. Ces paramètres deviennent désormais des paramètres d'appel. L'name fait à nouveau référence au nom de l'agent spécial, auquel est ajouté le préfixe agent_.

~/local/lib/python3/cmk_addons/plugins/hellospecial/server_side_calls/special_agent.py
#!/usr/bin/env python3
# Shebang needed only for editors

from cmk.server_side_calls.v1 import noop_parser, SpecialAgentConfig, SpecialAgentCommand

def _agent_arguments(params, host_config):
    yield SpecialAgentCommand(command_arguments=[])

special_agent_hellospecial = SpecialAgentConfig(
    name="hellospecial",
    parameter_parser=noop_parser,
    commands_function=_agent_arguments
)
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é !

Cela fournit les exigences de base pour l'agent spécial. Vous pouvez, bien sûr, ajouter des informations supplémentaires à tout moment.

2.5. Le premier test

Une fois les fichiers créés, vérifiez d'abord si Checkmk peut les valider :

OMD[mysite]:~$ cmk-validate-plugins
Agent based plugins loading succeeded, Active checks loading succeeded, Special agents
loading succeeded, Rule specs loading succeeded, Rule specs forms creation succeeded,
Referenced rule specs validation succeeded, Loaded rule specs usage succeeded
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Ensuite, redémarrez le serveur web du site :

OMD[mysite]:~$ omd restart apache
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Si vous souhaitez que la nouvelle règle soit immédiatement visible dans la recherche, vous devrez redémarrer la base de données en mémoire Redis :

OMD[mysite]:~$ omd restart redis
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Si vous ouvrez maintenant Setup > Agents > Other integrations, vous devriez voir la nouvelle entrée « Hello special! » dans la section « Custom integrations ».

Si celle-ci est manquante, vérifiez d'abord si vous avez bien stocké tous les fichiers à l'emplacement indiqué. Si vous recherchez d'autres sources d'erreur possibles, vous pouvez le faire facilement dans les éditions commerciales via l'administration des paquets d'extension Checkmk. Sinon, nous avons répertorié les sources d'erreur les plus importantes et les solutions possibles dans le chapitre Dépannage.

3. Un exemple plus complexe : un service météo complet

Une vérification dont l'état ne change jamais est, disons-le, assez prévisible. Nous allons donc oser franchir le pas vers un « véritable » agent spécial qui interroge une API Web ou REST et reçoit en réponse un objet sous forme de structure JSON ou XML. Il s'agit là également de formats de données courants lors de l'accès aux API de périphériques réseau tels que les périphériques SAN.

Afin que vous n’ayez pas besoin de matériel spécifique pour cet exercice, nous utiliserons l’API gratuite d’Open-Meteo.com. Notre objectif est d’écrire un agent spécial complet configuré avec une latitude et une longitude. Pour simplifier l’exercice, l’agent spécial interprétera également les données directement. Par exemple, l’agent spécial devra considérer l’état « WARN » pour les températures inférieures à 5 degrés Celsius, et l’état « CRIT » pour les températures inférieures à 0 degré. Nous abrégerons notre requête en « ometemp », l’agent spécial en « agent_ometemp », et ainsi de suite.

Tip

Open-Meteo autorise une utilisation gratuite à des fins non commerciales et se réserve le droit de bloquer des adresses IP en cas de requêtes trop nombreuses. Les requêtes à l'API toutes les minutes restent dans des limites acceptables. Néanmoins, vous ne devez pas abuser du service et devez supprimer les règles d'agent spécial utilisant ce service une fois les tests réussis. Veillez tout particulièrement à ce que les règles d'affectation d'agent spécial créées pour le test ne s'appliquent qu'à un seul hôte et non à des dizaines ou des centaines !

3.1. Préparation de l'environnement

Comme dans l'exercice précédent, créez d'abord les répertoires requis — cette fois-ci sous le nom ometemp au lieu de hellospecial.

3.2. L'agent spécial

Maintenant que des données réelles doivent être traitées, vous devrez également réfléchir au langage de programmation et au prétraitement, par exemple. Notre exercice interroge une API publique et reçoit des données JSON. Cela pourrait être effectué dans le shell à l’aide d’une commande curl. Cependant, comme Checkmk est fourni avec un environnement Python bien équipé, il est judicieux de l’utiliser.

La décision suivante concerne le traitement des données. Par exemple, vous pouvez simplement transmettre les données JSON à la sortie de l’agent ou les convertir en format de tableau dans l’agent spécial. En pratique, vous prendrez généralement cette décision en fonction de votre environnement de travail : La « répartition des tâches » a-t-elle été prise en compte lors du développement de votre contrôle ? Les données préparées simplifient-elles le développement du plug-in de contrôle basé sur l’agent associé ? Ou rendent-elles même celui-ci superflu ? Ce dernier cas de figure se présente si les données peuvent être préparées de manière à pouvoir être analysées par un plug-in de contrôle existant.

Notre exemple se contente de transférer la réponse JSON. L'analyse s'effectue ensuite dans le plug-in de contrôle basé sur un agent. La longitude et la latitude sont saisies à l'aide des arguments de ligne de commande --latitude et --longitude. Pour faciliter la lecture des arguments de ligne de commande, nous utilisons la bibliothèque argparse. Comme Open-Meteo prend en charge la latitude et la longitude encodées dans l'URL, une URL avec des espaces réservés suffit. Essayez cette URL dans le navigateur en remplaçant les paramètres par vos propres coordonnées de latitude et de longitude.

~/local/lib/python3/cmk_addons/plugins/ometemp/libexec/agent_ometemp
#!/usr/bin/env python3
# Shebang needed this time to find the interpreter!

import requests
import argparse

url = "https://api.open-meteo.com/v1/forecast?latitude={lat:.4f}&longitude={long:.4f}&current=temperature_2m"

parser = argparse.ArgumentParser("agent_ometemp")
parser.add_argument(
    "--latitude",
    help="Specify the latitude in degrees (decimal notation).",
    type=float,
    default=0.0)
parser.add_argument(
    "--longitude",
    help="Specify the longitude in degrees (decimal notation).",
    type=float,
    default=0.0)
args = parser.parse_args()

# print(url.format(lat=args.latitude, long=args.longitude))
response = requests.get(url.format(lat=args.latitude, long=args.longitude))
print('<<<ometemp:sep(0)>>>')
print(response.json())
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é !
Tip

Rappel : ce script ne doit pas avoir d'extension de fichier.

La section de l'agent ometemp ne contiendra que l'objet JSON reçu. Testez l'agent spécial en l'appelant depuis la ligne de commande.

OMD[mysite]:~$ ~/local/lib/python3/cmk_addons/plugins/ometemp/libexec/agent_ometemp --latitude 48.1305 --longitude 11.5953
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Votre sortie sur la ligne de commande devrait désormais ressembler à ceci :

<<<ometemp:sep(0)>>>
{'latitude': 48.14, 'longitude': 11.6, 'generationtime_ms': 0.01728534698486328, 'utc_offset_seconds': 0, 'timezone': 'GMT', 'timezone_abbreviation': 'GMT', 'elevation': 536.0, 'current_units': {'time': 'iso8601', 'interval': 'seconds', 'temperature_2m': '°C'}, 'current': {'time': '2025-01-09T12:45', 'interval': 900, 'temperature_2m': 9.8}}

3.3. La configuration de la règle

L'étape suivante consiste à configurer les règles pour l'agent. Une fois cette opération terminée, cette règle s'affichera dans Setup > Agents > Other integrations, dans le groupe « Environmental ».

Tip

Les en-têtes du groupe dans Setup > Agents > Other integrations seront rendus visibles de manière dynamique. Cela signifie que le groupe « Environmental » ne sera visible qu’une fois que le premier agent spécial qui y est classé sera disponible. Vous trouverez un aperçu (non exhaustif) des groupes utilisables sous la rubrique « Fichiers et répertoires » à la fin de cet article.

~/local/lib/python3/cmk_addons/plugins/ometemp/rulesets/special_agent.py
#!/usr/bin/env python3
# Shebang needed only for editors

from cmk.rulesets.v1.form_specs import Dictionary, DictElement, Float
from cmk.rulesets.v1.rule_specs import SpecialAgent, Topic, Help, Title

def _formspec():
    return Dictionary(
        title=Title("Open-Meteo temperature"),
        help_text=Help("This rule is used to showcase a special agent with configuration."),
        elements={
            "latitude": DictElement(
                required=True,
                parameter_form=Float(
                    title=Title("Latitude in degrees (decimal notation)"),
                ),
            ),
            "longitude": DictElement(
                required=True,
                parameter_form=Float(
                    title=Title("Longitude in degrees (decimal notation)"),
                ),
            ),
        }
    )

rule_spec_ometemp = SpecialAgent(
    topic=Topic.ENVIRONMENTAL,
    name="ometemp",
    title=Title("Open-Meteo temperature"),
    parameter_form=_formspec
)
Copier le contenu du fichier dans le presse-papiers
Le contenu du fichier a été copié avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

L'agent spécial a ainsi été créé. Après avoir vérifié l'état du site via cmk-validate-plugins, redémarrez le serveur web du site :

OMD[mysite]:~$ omd restart apache
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Une règle pourrait désormais être créée à partir de cet agent spécial à l'aide d'Add rule: Open-Meteo temperature. Cette règle n'aura toutefois pas encore beaucoup d'utilité, car elle ne contient actuellement que les deux champs permettant de saisir la longitude et la latitude.

Extension : Utilisation de mots de passe

Dans de nombreux cas, un nom d'utilisateur et un mot de passe ou une clé API sont nécessaires pour accéder aux données. Des éléments d'formspec distincts sont disponibles pour la gestion des mots de passe. Ceux-ci vous permettent soit de définir des mots de passe ad hoc, soit d'accéder au magasin de mots de passe. Dans cet exemple, l'extension suivante du script créé ci-dessus peut être utilisée à cette fin. Complétez la première ligne avec les variables supplémentaires et insérez les nouvelles sections de programme :

from cmk.rulesets.v1.form_specs import Dictionary, DictElement, Float, String, Password, migrate_to_password

def _formspec():
    return Dictionary(
        # ...
        elements={
            # ...
            "user": DictElement(
                required=True,
                parameter_form=String(
                    title=Title("User ID for login"),
                    prefill=DefaultValue("monitoring"),
                ),
            ),
            "password": DictElement(
                required=True,
                parameter_form=Password(
                    title=Title("Password for this user"),
                    migrate=migrate_to_password,
                ),
            ),
        }
    )
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é !

N'oubliez pas de redémarrer le serveur web du site après avoir modifié (dans ce cas, étendu) un script.

Comme l'exemple avec Open-Meteo ne nécessite pas de mot de passe, nous présentons ici la gestion de base des mots de passe, mais ne les incluons pas dans l'appel API.

3.4. La configuration de l'appel

Ensuite, nous étendons le nouvel agent spécial afin qu’il ne contienne pas seulement la longitude et la latitude, mais qu’il les traite également. Notre objectif final est d’obtenir les valeurs de température actuelles pour notre emplacement. La configuration suivante combine donc l’agent spécial à exécuter avec les paramètres obtenus depuis l’interface graphique — c’est-à-dire depuis notre section de règles existante — et les paramètres issus des normes.

Les valeurs de longitude et de latitude, que vous pouvez généralement spécifier, sont désormais transférées vers le dictionnaire nommé params. Parallèlement, l’objet host_config contient tous les paramètres spécifiques à l’hôte qui doivent être utilisés ici. Par exemple, host_config.primary_ip_config.address vous donne accès à l’adresse IP principale, et host_config.name contient le nom d’hôte.

Lors du transfert vers l'agent spécial, notez que l'appel est effectué via un shell. La liste des paramètres d'appel ne peut donc contenir que des chaînes de caractères. Les paramètres deviennent alors des paramètres d'appel qui se retrouvent dans la liste command_arguments.

~/local/lib/python3/cmk_addons/plugins/ometemp/server_side_calls/special_agent.py
#!/usr/bin/env python3
# Shebang needed only for editors

from cmk.server_side_calls.v1 import noop_parser, SpecialAgentConfig, SpecialAgentCommand

def _agent_arguments(params, host_config):
    args = [ "--latitude", str(params['latitude']), "--longitude", str(params['longitude']) ]
    yield SpecialAgentCommand(command_arguments=args)

special_agent_ometemp = SpecialAgentConfig(
    name="ometemp",
    parameter_parser=noop_parser,
    commands_function=_agent_arguments
)
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é !

Utilisation des mots de passe

Important

L'exemple présenté ici transmet les mots de passe en texte clair sous forme d'arguments de ligne de commande. Sans mesures de sécurité supplémentaires, ces mots de passe pourraient être lus à partir de la table des processus, par exemple. Cette vulnérabilité peut être minimisée en modifiant l'entrée dans la table des processus au démarrage du programme. En Python, par exemple, cela peut être réalisé à l'aide du module setproctitle. Nous préparons actuellement une méthode encore plus sécurisée permettant au programme démarré de lire le mot de passe directement à partir du magasin de mots de passe.

Les mots de passe étant stockés sous forme d'objet, l'accès s'effectue via la fonction `unsafe()` de cet objet :

def _agent_arguments(params, host_config):
    args = [
        "--latitude", str(params['latitude']),
        "--longitude", str(params['longitude']),
        "--user", params['user'],
        "--password", params['password'].unsafe()
    ]
    yield SpecialAgentCommand(command_arguments=args)
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é !

3.5. Le plug-in de vérification

Par souci d'exhaustivité, nous présentons également ici le plug-in de vérification basé sur un agent. Le développement de ces plug-ins est décrit en détail dans l'article consacré aux plug-ins de vérification basés sur un agent.

Une différence par rapport à l’exemple mentionné dans l’article réside dans le transfert du JSON renvoyé par l’API REST : Le plug-in de vérification reçoit toujours la section de l’agent sous la forme d’une liste bidimensionnelle (« liste de listes ») de chaînes de caractères. Tout d’abord, nous utilisons la fonction `itertools` pour transformer cette liste bidimensionnelle en une liste unidimensionnelle. Nous concaténons ensuite ce tableau résultant avec des espaces, ce qui convertit l’intégralité de la section agent en une seule chaîne de caractères. Enfin, nous veillons à remplacer les guillemets simples par des guillemets doubles afin de pouvoir charger la chaîne directement en tant qu’objet avec `json.loads()`.

~/local/lib/python3/cmk_addons/plugins/ometemp/agent_based/ometemp.py
#!/usr/bin/env python3

from cmk.agent_based.v2 import AgentSection, CheckPlugin, Service, Result, State, Metric, check_levels
import itertools
import json

def parse_ometemp(string_table):
    flatlist = list(itertools.chain.from_iterable(string_table))
    parsed = json.loads(" ".join(flatlist).replace("'", "\""))
    return parsed

def discover_ometemp(section):
    yield Service()

def check_ometemp(section):
    t = section['current']['temperature_2m']
    if t < 0.0:
        yield Result(state=State.CRIT, summary="Brrrrrr!")
    elif t < 5.0:
        yield Result(state=State.WARN, summary="It's getting cold...")
    else:
        yield Result(state=State.OK, summary="Nice here.")
    return

agent_section_ometemp = AgentSection(
    name = "ometemp",
    parse_function = parse_ometemp,
)

check_plugin_ometemp = CheckPlugin(
    name = "ometemp",
    service_name = "Open Meteo temperature (2m)",
    discovery_function = discover_ometemp,
    check_function = check_ometemp,
)
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é !

3.6. Test final

Il est toujours recommandé d'effectuer une validation à l'aide de la commande « cmk-validate-plugins » si vous avez apporté des modifications à des éléments exécutés dans le cadre des processus Checkmk. Dans cet article, cela concerne notamment les règles, la configuration des appels et les plug-ins de vérification.

Si vous n'avez apporté des modifications qu'à la configuration des appels et à l'agent spécial lui-même, il suffit de générer une nouvelle configuration pour le noyau de surveillance et de le redémarrer. Pour ce faire, utilisez la commande suivante :

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

Si vous avez également modifié des règles ou des plug-ins de contrôle, générez d'abord la configuration du noyau de surveillance, puis redémarrez l'ensemble du site :

OMD[mysite]:~$ cmk -U
OMD[mysite]:~$ omd restart
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Les scripts décrits dans cet article pour l'agent spécial, la configuration des règles et la configuration des appels, lorsqu'ils sont utilisés en combinaison avec ce plug-in de vérification, devraient désormais vous fournir un service fonctionnel dans Checkmk :

View of services including ometemp.

4. Dépannage

Même lorsque vous développez vos propres agents spéciaux, des erreurs et des problèmes peuvent (malheureusement) survenir. Identifier la cause d’une erreur est tout aussi important que de la corriger. Pour avoir une première idée des causes possibles, vous devriez d’abord exécuter la commande « cmk-validate-config ». Les sections suivantes vous aideront à isoler davantage la source d’un problème.

4.1. Avertissements dans l'aperçu des services de l'hôte

Si le service Check_MK passe soudainement à l'état « WARN » ou « CRIT » après l'activation de son agent spécial, consultez l'Summary associée.

Error message from the Check_MK service related to its special agent.

Si l’Summary indique une connexion avec le nouvel agent spécial, vérifiez les propriétés de l’hôte. La valeur Configured API integrations and Checkmk agent doit être sélectionnée pour le paramètre Checkmk agent / API integrations.

Selection of ‘Configured API integrations and Checkmk agent’.

4.2. La règle a disparu ou un avertissement s'affiche

Si votre agent spécial n'apparaît pas (ou n'apparaît plus) dans Checkmk sous « Setup > Agents > Other integrations », il se peut qu'il y ait une erreur dans la configuration de la règle (rulesets/special_agent.py).

CEE Si vous utilisez l'une des éditions commerciales, vous verrez peut-être apparaître un avertissement rouge lorsque vous essayez de modifier la règle ou d'en créer une nouvelle. Suivez le lien vers la page du rapport d'erreur. La cause possible du problème y sera affichée.

Consultez ensuite les descriptions d'erreur :

OMD[mysite]:~$ tail -f var/log/web.log
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Par exemple, vous obtiendrez un résultat similaire à celui-ci :

2024-12-17 10:15:51,742 [40] [cmk.web 2669118] Error converting to legacy rulespec 'ometemp' : name 'migrate_to_password' is not defined

Vérifiez la syntaxe de votre fichier d'rulesets/special_agent.py. Vérifiez si toutes les bibliothèques requises ont été prises en compte et si toutes les variables ont été importées. Vérifiez si toutes les indentations sont correctes et vérifiez l'ensemble de la syntaxe.

Tip

Si votre règle était auparavant visible dans Checkmk et qu’elle a soudainement disparu à la suite d’une modification de sa configuration, vous ne le remarquerez que si vous souhaitez adapter des règles existantes ou en créer de nouvelles. Ce problème n’affectera pas la surveillance des services existants.

4.3. Messages d'erreur lors de l'activation des modifications

Il peut également y avoir un problème dans la configuration de l'appel ou dans l'agent spécial lui-même. Cela se manifeste, par exemple, par l'affichage d'un avertissement jaune lors de l'Activate changes.

Vérifiez le fichier d'server_side_calls/special_agent.py en suivant les informations fournies dans le message d'erreur. Si cela ne résout pas l'erreur, vous pouvez rechercher à nouveau les messages d'erreur sur la ligne de commande :

OMD[mysite]:~$ cmk -d localhost --debug | less
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Après un court instant, vous obtiendrez un résultat similaire à celui-ci (ici abrégé pour plus de clarté) :

Traceback (most recent call last):
  File "/omd/sites/devtest/bin/cmk", line 118, in <module>
    exit_status = modes.call(mode_name, mode_args, opts, args)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/omd/sites/devtest/lib/python3/cmk/base/modes/__init__.py", line 70, in call
    return handler(*handler_args)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/omd/sites/devtest/lib/python3/cmk/base/modes/check_mk.py", line 562, in mode_dump_agent
    for source in sources.make_sources(
                  ^^^^^^^^^^^^^^^^^^^^^
  File "/omd/sites/devtest/lib/python3/cmk/base/sources/_builder.py", line 407, in make_sources
    return _Builder(
           ^^^^^^^^^
  File "/omd/sites/devtest/lib/python3/cmk/base/sources/_builder.py", line 140, in __init__
    self._initialize_agent_based()
  File "/omd/sites/devtest/lib/python3/cmk/base/sources/_builder.py", line 198, in _initialize_agent_based
    special_agents = tuple(make_special_agents())
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/omd/sites/devtest/lib/python3/cmk/base/sources/_builder.py", line 187, in make_special_agents
    for agent_data in special_agent.iter_special_agent_commands(agentname, params):
  File "/omd/sites/devtest/lib/python3/cmk/base/server_side_calls/_special_agents.py", line 139, in iter_special_agent_commands
    yield from self._iter_commands(special_agent, params)
  File "/omd/sites/devtest/lib/python3/cmk/base/server_side_calls/_special_agents.py", line 115, in _iter_commands
    for command in special_agent(processed.value, self.host_config):
  File "/omd/sites/devtest/local/lib/python3/cmk_addons/plugins/ometemp/server_side_calls/special_agent.py", line 13, in _agent_arguments
    "--user", params['bulla'],
              ~~~~~~^^^^^^^^^
KeyError: 'bulla'

Les dernières lignes du résultat sont particulièrement intéressantes : Dans le fichier server_side_calls/special_agent.py, une tentative d'accès à un élément du dictionnaire params qui n'existe pas est en cours.

4.4. Vérification de la sortie de l'agent

Une autre source d'erreur peut être que le plug-in de vérification ne génère aucune donnée. Cela peut également être vérifié en ligne de commande :

OMD[mysite]:~$ cmk -d localhost --debug | less
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Si vous recevez ici un message d'erreur au lieu d'une chaîne contenant les données de mesure actuelles, utilisez ce message d'erreur pour corriger le problème.

5. Fichiers et répertoires

5.1. Répertoires

Chemin d'accès au fichier Description

~/local/lib/python3/cmk_addons/plugins/

Répertoire de base pour le stockage des fichiers de plug-in.

~/local/lib/python3/cmk_addons/plugins/<plug-in_family>/libexec/

Emplacement de stockage des fichiers exécutables.

~/local/lib/python3/cmk_addons/plugins/<plug-in_family>/rulesets/

Emplacement de stockage des fichiers de jeux de règles.

~/local/lib/python3/cmk_addons/plugins/<plug-in_family>/server_side_calls/

Emplacement de stockage des fichiers de configuration des appels.

~/local/lib/python3/cmk_addons/plugins/<plug-in_family>/agent_based/

Emplacement de stockage des plug-ins de vérification basés sur des agents.

~/share/check_mk/agents/special/

Les agents spéciaux standard sont installés ici.

~/local/share/check_mk/agents/special/

Stockage des agents spéciaux que vous avez modifiés.

~/local/bin/

Emplacement de stockage de vos propres programmes ou scripts qui doivent figurer dans le chemin de recherche et qui peuvent être exécutés directement sans spécifier de chemin d'accès. Si un programme se trouve à la fois dans ~/bin/ et dans ~/local/bin/, ce dernier a la priorité.

5.2. Regroupements disponibles dansOther integrations

Nom Description

APPLICATIONS

Surveillance des applications

CLOUD

Surveillance du cloud

CONFIGURATION_DEPLOYMENT

Surveillance des systèmes de gestion de configuration

DATABASES

Surveillance des bases de données

GENERAL

Tout ce qui ne rentre pas dans les autres catégories

ENVIRONMENTAL

Surveillance de l'environnement et des environs

LINUX

Surveillance du système d'exploitation Linux

NETWORKING

Surveillance du réseau

MIDDLEWARE

Surveillance des intergiciels

NOTIFICATIONS

Surveillance des systèmes de notification

OPERATING_SYSTEM

Surveillance du système d'exploitation en général

PERIPHERALS

Surveillance des périphériques

POWER

Surveillance de l'alimentation électrique

SERVER_HARDWARE

Surveillance du matériel serveur

STORAGE

Surveillance des systèmes de stockage

SYNTHETIC_MONITORING

Surveillance synthétique

VIRTUALIZATION

Surveillance des environnements de virtualisation

WINDOWS

Surveillance du système d'exploitation Windows


Last modified: Wed, 01 Apr 2026 14:27:49 GMT via commit abaa3aa20
Sur cette page