Superviser avec CMA

🎯 Ce que vous aurez à la fin de ce guide

  • ✅ Un agent CMA qui pousse ses métriques en TLS vers votre poller
  • ✅ Une authentification par token (obligatoire en 25.10 dès que le chiffrement est actif)
  • ✅ La création automatique des hôtes supervisés
  • ✅ Et surtout : une supervision qui alerte vraiment quand une machine tombe (le piège n°1 des débutants CMA)

🚀 1. Pourquoi passer de NRPE à CMA ?

CMA est l’agent de supervision nouvelle génération de Centreon. Contrairement à NRPE, il fonctionne en mode passif : l’agent exécute ses sondes localement et pousse les résultats vers le collecteur (poller) via le protocole OTLP (OpenTelemetry) sur gRPC. Résultat : une communication moderne, chiffrée et authentifiée.

NRPE (ancien) CMA (nouveau)
Transport TCP 5666, protocole maison OTLP / gRPC sur le port 4317
Sens de connexion Le poller interroge l’agent (pull) L’agent pousse ses données au poller (push)
Chiffrement SSL anonyme, pas d’authentification réelle TLS + token JWT
Création des hôtes Manuelle Automatique (create_host_auto)
🔥 Le détail qui change tout : les checks CMA sont passifs. Le poller n’interroge plus rien, il attend les données. Gardez ça en tête — on verra à l’étape 7 que ça a une conséquence sournoise sur la détection des pannes.

Deux modes de connexion

  • Mode standard (celui de ce guide) : l’agent initie la connexion vers le poller (agent → poller:4317). Idéal quand les agents peuvent joindre le central.
  • Mode inversé (reversed) : c’est le poller qui va vers l’agent. Utile derrière un pare-feu qu’on ne veut pas ouvrir en entrée (reversed_grpc_streaming: true).

✅ 2. Prérequis & pare-feu

Avant de commencer, assurez-vous d’avoir :

  • Un central Centreon 25.10 (ou 24.10+), sur RHEL 9 ou Debian 12. Chez moi : 192.168.1.46, Debian 12 (Bookworm).
  • Une licence Centreon IT Edition (offre gratuite, souvent appelée « IT-100 » car limitée à 100 hôtes) — indispensable pour les fonctions agent/OpenTelemetry. Voir l’encadré ci-dessous pour l’obtenir.
  • La connectivité réseau agent → poller sur le port 4317/tcp.
  • Le dépôt Centreon configuré (RPM ou APT) et un accès root/sudo partout.

ℹ️ Comment obtenir la licence IT Edition (gratuite)

  1. Rendez-vous sur centreon.com/free-trial et remplissez le formulaire pour demander la licence gratuite Centreon IT Edition : elle permet de superviser jusqu’à 100 hôtes, pour une durée illimitée.
  2. Vous recevez par email un token personnel qui sert de clé de licence.
  3. Activez-le en ligne sur votre plateforme avec ce token (procédure d’activation Centreon). ⚠️ Votre serveur Centreon doit garder un accès Internet permanent pour valider le token.
  4. Vérifiez que la licence est bien active avant d’installer le pack de plugins CMA — sans elle, les modèles d’agent n’apparaissent pas dans le catalogue.

Astuce : la page propose aussi des images toutes prêtes (AlmaLinux 9 ou Debian 12) si vous montez une plateforme neuve.

⚠️ Chiffrement = token obligatoire. Depuis la 25.10, dès que vous activez encryption: full, un token d’authentification devient indispensable. Sans lui, l’agent est rejeté. C’est voulu : pas de TLS sans identité.

2.1 Ouvrir le pare-feu sur le poller

Le poller doit accepter le port 4317/tcp en entrée.

🎩 RHEL / Alma / Rocky (firewalld)

firewall-cmd --permanent --add-port=4317/tcp
firewall-cmd --reload
firewall-cmd --list-ports

🌀 Debian / Ubuntu — généralement pas de pare-feu hôte actif. Si ufw est activé :

sudo ufw allow 4317/tcp
sudo ufw status

🗺️ 3. L’architecture en un coup d’œil

Avant de plonger dans les commandes, visualisons qui parle à qui :
Architecture CMA : agent qui pousse en OTLP/gRPC TLS vers le collecteur Centreon

  • Le poller écoute sur *:4317 (vérif : ss -ltn | grep 4317).
  • Le poller présente son certificat serveur ; l’agent s’authentifie par token.
  • Certificats auto-signés générés à la main sur le central (Let’s Encrypt inutile sur un LAN — voir l’encadré en étape 2).

📦 Étape 1 — Installer l’agent sur la machine à superviser

Bonne nouvelle : en 25.10, vous n’avez presque rien à faire à la main. Centreon vous génère une commande d’installation clé en main, valable aussi bien sous Windows que sous Linux.

Cas nº1 — La machine a accès à Internet (méthode recommandée)

Générateur de commande d'installation CMA dans l'interface Centreon
La commande générée télécharge le script depuis GitHub et configure le dépôt Centreon : elle suppose donc un accès sortant vers Internet. Dans l’interface, allez dans Configuration > Collecteurs > Configurations d’agent et ouvrez le générateur « Générez votre commande d’installation CMA ». Vous choisissez le collecteur qui supervisera l’hôte, le système d’exploitation (Windows ou Linux) — et Centreon produit la commande à copier-coller sur la machine à superviser.

⚠️ La commande générée n’est valable que pour les hôtes dont la connexion est initiée par l’agent (mode standard, celui de ce guide). Pour le mode inversé, ajoutez l’option -r.

🪟 Windows (PowerShell)

curl -fsSL https://raw.githubusercontent.com/centreon/centreon-collect/refs/tags/25.10.15-latest/agent/installer/install_cma.ps1 -o install_cma.ps1 ; .\install_cma.ps1 -endpoint "192.168.1.46:4317" -fingerprint "<EMPREINTE_FOURNIE_PAR_L_UI>" -commonname "centreon"

🐧 Linux (RHEL & Debian)

curl -fsSL https://raw.githubusercontent.com/centreon/centreon-collect/refs/tags/25.10.15-latest/agent/installer/scripts_linux/install_cma.sh -o install_cma.sh \
  && sudo chmod +x install_cma.sh \
  && sudo ./install_cma.sh -e "192.168.1.46:4317" -f "<EMPREINTE_FOURNIE_PAR_L_UI>" -N "centreon"

Ce script unique fait tout le travail :

  • détecte l’OS et configure le dépôt Centreon (avec la clé officielle apt-key.centreon.com) ;
  • installe centreon-monitoring-agent et les plugins (option -p agent,plugins) ;
  • génère /etc/centreon-monitoring-agent/centagent.json (endpoint, chiffrement, empreinte, host, host_template) ;
  • vous demande le token de manière interactive (celui de l’étape 3) s’il n’est pas passé en -t — c’est pourquoi il n’apparaît pas dans la commande copiée.
ℹ️ C’est quoi le « fingerprint » (empreinte) ? C’est le condensé SHA-256 du certificat serveur, encodé en base64. En le fournissant à l’agent, celui-ci vérifie qu’il parle bien au bon poller sans avoir à copier le fichier CA sur chaque machine — c’est du certificate pinning, bien plus simple à déployer sur un parc. L’interface vous le donne dans la commande ; pour le calculer ou le vérifier vous-même sur le central :
openssl x509 -in /etc/pki/centreon-agent.crt -outform der | openssl dgst -sha256 -binary | openssl base64
# -> ex. gxt5P9+eLKK3THylg9wuAcf7omZSrbK/iJ09cOuhXm4=

Une fois la commande passée, vérifiez que le service tourne :

systemctl status centagent          # Linux
tail -f /var/log/centreon-monitoring-agent/centagent.log

Variante « à la main » (toujours avec accès Internet) — si vous préférez piloter le dépôt et la config vous-même plutôt que le script, installez le paquet de façon classique (vous écrirez alors le centagent.json à la main, étape 5) :

🎩 RHEL / Alma / Rocky

dnf install -y dnf-plugins-core ca-certificates curl gpg wget

# Depot Centreon 25.10 (inclut aussi le depot plugins)
dnf config-manager --add-repo https://packages.centreon.com/rpm-standard/25.10/el9/centreon-25.10.repo
rpm --import https://yum-gpg.centreon.com/RPM-GPG-KEY-CES

dnf clean all
dnf install -y centreon-monitoring-agent centreon-plugin-Operatingsystems-Linux-Local

🌀 Debian / Ubuntu

# Depot standard (agent) + depot plugins
echo "deb https://packages.centreon.com/apt-standard/ bookworm-25.10-stable main" \
  | sudo tee /etc/apt/sources.list.d/centreon.list
echo "deb https://packages.centreon.com/apt-plugins-stable/ bookworm main" \
  | sudo tee /etc/apt/sources.list.d/centreon-plugins.list

# Cle GPG officielle Centreon
wget -O- https://apt-key.centreon.com \
  | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/centreon.gpg > /dev/null

sudo apt update
sudo apt install -y centreon-monitoring-agent centreon-plugin-operatingsystems-linux-local

Sous Ubuntu, remplacez apt-plugins-stable par ubuntu-plugins-stable et bookworm par votre codename (ex. noble).

Cas nº2 — Machine en DMZ ou sans aucun accès à Internet (installation hors-ligne)

Pour une machine qui n’aura jamais accès à Internet (DMZ, réseau isolé, OT/industriel…), la commande générée ne peut pas fonctionner : elle joint ni GitHub ni le dépôt Centreon. On récupère alors les paquets depuis une machine qui a l’accès (même OS/version), on les transfère, on installe hors-ligne, puis on configure à la main.

ℹ️ Rassurez-vous : une fois installé, l’agent n’a besoin de joindre que le collecteur, sur le port 4317jamais Internet. C’est tout l’intérêt du modèle « push » + empreinte : aucune ouverture vers l’extérieur, et pas de certificat CA à copier si vous utilisez le fingerprint.

1. Récupérer les paquets sur une machine « pont » qui a accès au dépôt Centreon (même distribution/version que la cible) :

🎩 RHEL / Alma / Rocky

# Telecharge le rpm + toutes ses dependances dans ./cma
# (la commande "dnf download" est fournie par dnf-plugins-core)
mkdir -p cma
dnf download --resolve --alldeps --destdir ./cma \
  centreon-monitoring-agent centreon-plugin-Operatingsystems-Linux-Local

🌀 Debian / Ubuntu

# Depots Centreon (standard + plugins) configures sur la machine pont, puis :
mkdir -p cma
sudo apt-get update
# --reinstall force le telechargement meme si le paquet est deja installe sur le pont
sudo apt-get install -y --reinstall --download-only \
  centreon-monitoring-agent centreon-plugin-operatingsystems-linux-local
cp /var/cache/apt/archives/*.deb ./cma/

2. Transférer les paquets vers la machine isolée (clé USB, ou scp via un rebond autorisé) :

ssh utilisateur@hote-isole 'mkdir -p /tmp/cma'
scp cma/* utilisateur@hote-isole:/tmp/cma/

3. Installer hors-ligne, sur la machine isolée :

🎩 RHEL / Alma / Rocky

sudo dnf install /tmp/cma/*.rpm

🌀 Debian / Ubuntu

sudo apt install /tmp/cma/*.deb   # apt resout les dependances a partir des .deb fournis

4. Configurer à la main : créez /etc/centreon-monitoring-agent/centagent.json (voir étape 5). Sur une machine isolée, privilégiez le fingerprint (aucun fichier CA à transférer) et n’oubliez pas le token.
5. Ouvrir le flux agent → poller 4317/tcp dans le pare-feu de la DMZ (uniquement vers le collecteur), puis démarrer :

sudo systemctl enable --now centagent
sudo systemctl status centagent
⚠️ Mises à jour : une machine sans Internet ne se met pas à jour toute seule. Prévoyez de rejouer ce transfert de paquets à chaque montée de version de l’agent (ou montez un miroir de dépôt interne accessible depuis la DMZ, ce qui permet alors de réutiliser la commande générée en pointant vers ce miroir).

Vérifier la version installée (dans tous les cas) : rpm -q centreon-monitoring-agent (RHEL) ou dpkg -l | grep centreon-monitoring-agent (Debian).

🔐 Étape 2 — Générer les certificats TLS (auto-signés)

C’est le cœur du sujet. Sur un réseau interne, on génère nos propres certificats auto-signés (openssl est identique sur RHEL et Debian). Tout se passe sur le central, en root.

ℹ️ Et Let’s Encrypt ? Si votre poller est sur un FQDN public, vous pouvez générer un certificat Let’s Encrypt avec certbot, copier fullchain.pem / privkey.pem vers les chemins de l’étape 2.3, et pointer le trust store système côté agent (/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem sur RHEL, /etc/ssl/certs/ca-certificates.crt sur Debian). Sur un LAN, l’auto-signé ci-dessous est plus simple et tout aussi sûr.

2.1 La CA (autorité de certification maison)

Centreon pose déjà une CA à l’installation (/etc/pki/centreon-engine/default_cma_ca.crt, valable 10 ans). Pour en créer une propre :

sudo mkdir -p /etc/pki/centreon-engine

# Cle privee de la CA
sudo openssl genrsa -out /etc/pki/centreon-engine/default_cma_ca.key 4096

# Certificat auto-signe de la CA (10 ans)
sudo openssl req -x509 -new -nodes \
  -key /etc/pki/centreon-engine/default_cma_ca.key \
  -sha256 -days 3650 \
  -subj "/CN=centreon/description=cma centreon auto signed certificate" \
  -out /etc/pki/centreon-engine/default_cma_ca.crt

2.2 Le certificat serveur (celui que le poller présente)

⚠️ Le piège classique : le certificat DOIT contenir un subjectAltName (SAN) avec le nom DNS et l’IP du poller. Sans SAN correct, l’agent refuse tout net la connexion TLS.

La commande ci-dessous produit exactement le certificat en place chez moi (CN=centreon, SAN = DNS:centreon, IP:192.168.1.46, valable 1 an) :

# Cle privee du serveur
sudo openssl genrsa -out /etc/pki/centreon-agent.key 4096

# Demande + signature en une passe, avec SAN
sudo openssl req -new -x509 -nodes -sha256 -days 365 \
  -key /etc/pki/centreon-agent.key \
  -subj "/CN=centreon" \
  -addext "subjectAltName=DNS:centreon,IP:192.168.1.46" \
  -out /etc/pki/centreon-agent.crt

2.3 Droits sur les fichiers

Le moteur tourne sous l’utilisateur centreon-engine, qui doit pouvoir lire la clé et le certificat :

sudo chown centreon-engine:centreon-engine \
  /etc/pki/centreon-agent.crt /etc/pki/centreon-agent.key
sudo chmod 640 /etc/pki/centreon-agent.key
sudo chmod 644 /etc/pki/centreon-agent.crt

# Verification
openssl x509 -in /etc/pki/centreon-agent.crt -noout -subject -dates -ext subjectAltName
🎩 Sur RHEL uniquement : si SELinux est actif, il faut en plus poser le bon contexte sur ces certificats — voir l’étape 6. Sous Debian, rien à faire.

2.4 Variante recommandée pour un parc : signer le certificat par la CA

L’auto-signé (2.2) est parfait pour démarrer. Mais sur un parc de plusieurs machines, il y a mieux : signer le certificat serveur par votre CA maison (celle du 2.1, valable 10 ans). Les agents feront alors confiance à la CA et non au certificat serveur — vous pourrez donc renouveler ce dernier chaque année sans jamais retoucher les agents.

# 1. Cle privee + demande de signature (CSR) du serveur
sudo openssl genrsa -out /etc/pki/centreon-agent.key 4096
sudo openssl req -new -key /etc/pki/centreon-agent.key \
  -subj "/CN=centreon" -out /tmp/centreon-agent.csr

# 2. Fichier d'extension portant le SAN (indispensable)
printf "subjectAltName=DNS:centreon,IP:192.168.1.46\n" | sudo tee /tmp/centreon-agent.ext

# 3. Signature du certificat serveur par la CA maison (valable 365 jours)
sudo openssl x509 -req -in /tmp/centreon-agent.csr \
  -CA /etc/pki/centreon-engine/default_cma_ca.crt \
  -CAkey /etc/pki/centreon-engine/default_cma_ca.key \
  -CAcreateserial -days 365 -sha256 \
  -extfile /tmp/centreon-agent.ext \
  -out /etc/pki/centreon-agent.crt

# 4. Nettoyage des fichiers temporaires
sudo rm -f /tmp/centreon-agent.csr /tmp/centreon-agent.ext

Réappliquez ensuite les droits (comme en 2.3). Côté agent, on ne pointe plus ca_certificate vers le certificat serveur mais vers la CA — que l’on copie une fois pour toutes sur chaque machine :

"ca_certificate": "/etc/centreon-monitoring-agent/default_cma_ca.crt",

Comme la CA change rarement (10 ans), vous pouvez alors renouveler le certificat serveur chaque année sans retoucher un seul agent. C’est la variante que je recommande dès que vous avez plus de deux ou trois agents.

🎫 Étape 3 — Créer le token d’authentification

Le token est un JWT (JSON Web Token : un jeton signé cryptographiquement qui encode quelques informations — son nom, sa date d’émission, son éventuelle expiration — et que le serveur peut vérifier à la volée grâce à sa signature, sans base de données) que le poller garde dans sa liste de confiance (trusted_tokens) et que l’agent présente à chaque connexion.

Où le créer

Dans l’interface : Administration > Jetons d’authentificationAjouter, en choisissant le type « Centreon Monitoring Agent » (type cma). Donnez-lui un nom (ex. Central-xxxxxxxx) et une expiration — laissez vide pour un jeton permanent (le mien est en exp: null). Vous pouvez aussi le générer directement depuis la page Configuration > Collecteurs > Configurations d’agent au moment de créer la configuration.

🔒 Où la récupérer : la valeur du token (la longue chaîne eyJ0eXAi…) reste accessible — depuis Administration > Jetons d’authentification, vous pouvez la recopier dans le presse-papiers à tout moment (pas besoin de la sauvegarder à la création). Gardez-la secrète : ne la commitez jamais, ne la publiez jamais.

Où le mettre ensuite

Cette même chaîne se retrouve à trois endroits — c’est le même token partout :

  • côté serveur : dans trusted_tokens de otl_server.json (Centreon l’y place tout seul quand le jeton est rattaché à la configuration d’agent — étape 4) ;
  • côté agent : c’est ce que le script d’installation vous demande de coller de manière interactive (étape 1, cas nº1), ou que vous mettez dans le champ "token" du centagent.json (étape 5, install manuelle / hors-ligne).

🛰️ Étape 4 — Configurer le serveur OTLP côté central

⚠️ Prérequis interface à ne pas sauter : avant tout, installez le connecteur de supervision « Centreon Monitoring Agent » via Configuration > Connecteurs > Connecteurs de supervision (cherchez « Monitoring Agent » → Installer). C’est lui qui fournit les commandes agent et le modèle d’hôte OS-Linux-Centreon-Monitoring-Agent-custom référencé plus loin. Sans ce pack, la création automatique d’hôtes et les templates ne fonctionnent pas.

Ensuite, direction Configuration > Collecteurs > Configurations d’agent. On y déclare le poller, le chiffrement (Encryption level : full), les chemins du certificat/clé de l’étape 2, et le token de l’étape 3. C’est aussi de cette page que part le générateur de commande d’installation (étape 1). À l’export du collecteur, Centreon génère /etc/centreon-engine/otl_server.json. Voici le mien (secrets caviardés) :

{
    "otel_server": {
        "host": "0.0.0.0",
        "port": 4317,
        "encryption": "full",
        "public_cert": "/etc/pki/centreon-agent.crt",
        "private_key": "/etc/pki/centreon-agent.key",
        "ca_certificate": "",
        "trusted_tokens": [
            "eyJ0eXAiOiJKV1Qi....<VOTRE_TOKEN_JWT>....nEu8"
        ]
    },
    "centreon_agent": {
        "check_interval": 60,
        "export_period": 60,
        "create_host_auto": true
    }
}
📌 Ce fichier est régénéré à chaque export du collecteur : ne l’éditez pas à la main (vos modifications seraient écrasées), tout se règle depuis la Configuration d’agent dans l’UI. Je le montre uniquement pour comprendre ce que Centreon produit.

Les clés à retenir :

  • encryption: "full" → TLS activé, le poller présente son public_cert.
  • ca_certificate: "" → vide chez moi = pas de mTLS (pas de vérif du cert client). C’est le token qui authentifie l’agent. Plus simple à exploiter sur un parc.
  • create_host_auto: true → les hôtes inconnus sont créés automatiquement (rattachés à un modèle, étape 5).
  • check_interval / export_period → cadence des checks et des envois (60 s).

Puis on recharge le moteur :

systemctl reload centengine
ss -ltn | grep 4317        # doit etre en ecoute : *:4317

⚙️ Étape 5 — Configurer l’agent côté machine supervisée

Si vous avez utilisé la commande générée (étape 1), ce fichier est déjà écrit pour vous — cette section sert surtout à le comprendre et à l’ajuster. Elle est indispensable en revanche si vous êtes passé par l’installation manuelle.

La configuration vit dans /etc/centreon-monitoring-agent/centagent.json. Gabarit commenté :

{
    "log_level": "info",
    "log_type": "file",
    "log_file": "/var/log/centreon-monitoring-agent/centagent.log",
    "endpoint": "192.168.1.46:4317",
    "host": "nom-de-la-machine",
    "encryption": "full",
    "ca_certificate": "/etc/centreon-monitoring-agent/centreon-agent.crt",
    "token": "eyJ0eXAiOiJKV1Qi....<VOTRE_TOKEN_JWT>....",
    "plugins_directory": "/usr/lib/centreon/plugins/src",
    "custom_check_file": "/etc/centreon-monitoring-agent/custom_checks.cfg"
}

(Config réelle d’un de mes hôtes, secrets caviardés. En installation manuelle vous l’écrivez vous-même ; via la commande générée elle est déjà produite.)
Ce fichier est lu par le service centagent (utilisateur centreon-monitoring-agent). Comme il contient le token, on restreint ses droits — par défaut il est en 664, lisible par tout le monde, ce qui est trop permissif :

sudo chown centreon-monitoring-agent:centreon-monitoring-agent /etc/centreon-monitoring-agent/centagent.json
sudo chmod 640 /etc/centreon-monitoring-agent/centagent.json

Champ par champ, les points qui font échouer une install sur deux :

  • token → LE champ qu’on oublie tout le temps. C’est le même JWT que celui créé à l’étape 3 et déclaré dans trusted_tokens côté serveur (étape 4). Sans lui, le chiffrement s’établit mais le poller rejette l’agent (« empty jwt token » dans les logs). Obligatoire dès que le chiffrement est actif.
  • "encryption": "full" → active TLS ; la valeur (chaîne "full" en 25.10) doit correspondre au niveau du serveur.
  • ca_certificate → le certificat auquel l’agent fait confiance. Mon cert serveur étant auto-signé, je le copie sur l’agent : scp centreon@192.168.1.46:/etc/pki/centreon-agent.crt /etc/centreon-monitoring-agent/centreon-agent.crt
  • Alternative au ca_certificate : le fingerprint. Plutôt que de copier le fichier certificat sur chaque machine, on peut le remplacer par "fingerprint": "<empreinte>" (l’empreinte SHA-256 base64 vue en étape 1). C’est ce que fait la commande générée. Un seul des deux suffit.
  • plugins_directory → le dossier où l’agent trouve les plugins Centreon standard (ex. /usr/lib/centreon/plugins/src).
  • custom_check_file → le chemin de vos sondes personnalisées (voir étape 8). À omettre si vous n’en avez pas.
  • host → le nom sous lequel l’hôte apparaîtra dans Centreon.
📌 Champs optionnels utiles : "reversed_grpc_streaming": true pour le mode inversé, et "host_template": "OS-Linux-Centreon-Monitoring-Agent-custom" pour la création automatique de l’hôte.

On démarre et on surveille :

sudo systemctl enable --now centagent
sudo systemctl status centagent
sudo tail -f /var/log/centreon-monitoring-agent/centagent.log

🛡️ Étape 6 — SELinux (RHEL / Alma / Rocky uniquement)

🌀 Debian / Ubuntu : pas de SELinux, sautez cette étape et passez directement à l’étape 7.

Sur RHEL 9, SELinux est actif par défaut (getenforceEnforcing). Trois réglages sur le poller :

# 1. Autoriser le moteur a lire les certificats
dnf install -y policycoreutils-python-utils
semanage fcontext -a -t cert_t "/etc/pki/centreon-agent\.(crt|key)"
restorecon -v /etc/pki/centreon-agent.crt /etc/pki/centreon-agent.key

# 2. Autoriser l'ecoute sur le port 4317
semanage port -a -t centreon_engine_port_t -p tcp 4317

# 3. En cas de blocage : diagnostiquer et generer la politique
ausearch -m avc -ts recent
ausearch -m avc -ts recent | audit2allow -M centreon_cma
semodule -i centreon_cma.pp
ℹ️ Le type centreon_engine_port_t (étape 2) n’existe que si le paquet centreon-engine-selinux est installé — c’est le cas sur une installation Centreon standard sous RHEL. S’il manque : dnf install -y centreon-engine-selinux. Sinon la commande semanage port renverra une erreur « type not defined ».
⚠️ Évitez le setenforce 0 réflexe : posez plutôt les bons contextes ci-dessus. Le mode permissif ne doit rester qu’un dépannage temporaire.

🔥 Étape 7 — Le piège de la fraîcheur (mon retour d’expérience n°1)

⭐ En bref — Une machine CMA éteinte reste au VERT dans Centreon si vous ne faites rien. Le correctif tient en 4 points : (1) check_freshness=1 sur chaque service, (2) freshness_threshold=600, (3) check_service_freshness=1 au niveau moteur, (4) un host-alive ICMP réel. Détails ci-dessous.

Voici la partie que je n’aurais jamais pu écrire dans mon premier article : il faut s’être fait avoir pour la comprendre.

Le symptôme : j’éteins une machine supervisée en CMA… et ses services restent au vert. Aucune alerte. C’est logique une fois qu’on a compris que les checks CMA sont passifs : l’agent est muet → plus aucune donnée n’arrive → le moteur conserve le dernier état OK. Rien ne bascule.

La parade : la vérification de fraîcheur. Le principe : « si aucune donnée fraîche n’arrive à temps, le service passe UNKNOWN » (données périmées — volontairement pas CRITICAL). Il m’a fallu réunir trois conditions côté service :

  1. check_freshness=1 sur chaque service. ⚠️ Piège dans le piège : cette directive n’est PAS héritée depuis les modèles de service. Centreon ne l’exporte jamais depuis un template — il faut la poser sur le service lui-même. Vérifié empiriquement.
  2. freshness_threshold=600 (10 min) sur chaque service.
  3. check_service_freshness=1 au niveau moteur (objet ENGINECFG) — l’interrupteur maître. S’il est à 0, les deux points précédents ne servent à rien. À vérifier en premier.

Et côté hôte, un second piège : le host-alive livré par les modèles CMA (OS-Linux-Centreon-Monitoring-Agent-Host-Alive) est un factice :

/usr/bin/echo Host alive     ->   renvoie TOUJOURS OK

Donc l’hôte ne passe jamais DOWN, même éteint. La correction : un vrai check ICMP sur le modèle d’hôte custom.

check_command = base_host_alive     (un vrai check_icmp)
💡 Bonne nouvelle : contrairement au check_freshness des services, le check_command d’un hôte s’hérite bien depuis le template. En le posant sur OS-Linux-Centreon-Monitoring-Agent-custom, toutes vos futures machines CMA sont couvertes automatiquement.

Comment mettre ces 4 points en place, concrètement

Tout se pilote en CLAPI (ligne de commande Centreon) ou depuis l’interface. Les commandes ci-dessous utilisent le binaire /usr/share/centreon/bin/centreon — remplacez USER/PASS par vos identifiants. ⚠️ Rien ne prend effet tant que vous n’avez pas fait l’export du collecteur (APPLYCFG) à la toute fin.

① L’interrupteur maître, au niveau moteur — une seule fois pour toute la plateforme :

centreon -u USER -p PASS -o ENGINECFG -a setparam \
  -v 'Centreon Engine Central;check_service_freshness;1'

Interface : Configuration > Collecteurs > Configuration du moteur → cochez « Check service freshness ».

② et ③ La fraîcheur sur chaque service — non héritable, donc à poser service par service :

centreon -u USER -p PASS -o SERVICE -a setparam \
  -v 'mon-hote;mon-service;check_freshness;1'
centreon -u USER -p PASS -o SERVICE -a setparam \
  -v 'mon-hote;mon-service;freshness_threshold;600'

Interface : sur chaque service, onglet « Traitement des données »Check freshness = Oui et Freshness threshold = 600.

④ Le vrai host-alive ICMP — posé sur le modèle d’hôte custom, il s’hérite donc tout seul par les futures machines :

centreon -u USER -p PASS -o HTPL -a setparam \
  -v 'OS-Linux-Centreon-Monitoring-Agent-custom;check_command;base_host_alive'

Interface : Configuration > Modèles > Hôtes → modèle OS-Linux-Centreon-Monitoring-Agent-customCheck Command = base_host_alive.

Enfin, on déploie la configuration du poller pour tout activer :

centreon -u USER -p PASS -a APPLYCFG -v 'Central'

À retenir : le vrai signal de panne = hôte DOWN (ping ICMP réel). Les services UNKNOWN ne font que refléter l’absence de données.

🧩 Étape 8 — Scripts et sondes personnalisés en CMA

CMA exécute les sondes sur l’agent. Pour ajouter vos propres scripts, on ne passe pas par une commande « libre » comme avec NRPE : en CMA, chaque script custom se déclare sur l’agent, dans le fichier pointé par custom_check_file (typiquement /etc/centreon-monitoring-agent/custom_checks.cfg). C’est un simple fichier INI : une section [custom_checks] qui associe un nom à une ligne de commande.

[custom_checks]
# nom_du_check = /chemin/vers/le/script $ARG1$ $ARG2$
check_service      = /usr/lib/nagios/plugins/check_service.sh $ARG1$
check_service_ssh  = /usr/lib/nagios/plugins/check_service.sh ssh
mon_check_disque   = /usr/lib/nagios/plugins/check_disque_custom.sh $ARG1$ $ARG2$

Déposez votre script sur l’agent (ex. dans /usr/lib/nagios/plugins/), rendez-le exécutable, ajoutez sa ligne ici, puis redémarrez l’agent : sudo systemctl restart centagent.

⚠️ Piège d’encodage : ce fichier doit être en UTF-8 sans BOM. Un fichier en UTF-16 ou UTF-8 avec BOM empêche l’agent de le lire — vos checks resteront muets sans erreur évidente. Sous vi/nano vous êtes tranquille ; méfiance si vous l’éditez depuis Windows (Bloc-notes).

Câblage côté Centreon

Côté Centreon, tout est déjà fourni par le pack CMA : une commande OS-Linux-Centreon-Monitoring-Agent-Custom-Script (connecteur « Centreon Monitoring Agent ») dont la ligne est un petit JSON…

{ "check": "custom", "args": { "name": "$_SERVICECUSTOMCHECK$",
  "ARG1": "$_SERVICEARG1$", "ARG2": "$_SERVICEARG2$", ... } }

…et un modèle de service prêt à l’emploi : OS-Linux-Custom-Script-Centreon-Monitoring-Agent (ou OS-Windows-Custom-Script-Centreon-Monitoring-Agent sous Windows). Pour brancher votre sonde, créez un service basé sur ce modèle et renseignez ses macros :

  • CUSTOMCHECK (macro $_SERVICECUSTOMCHECK$) = le nom déclaré dans custom_checks.cfg (ex. check_service) ;
  • ARG1ARG8 ($_SERVICEARG1$$_SERVICEARG8$) = jusqu’à 8 arguments passés au script (ex. ssh).

À l’export du collecteur, l’agent reçoit le nom + les arguments, retrouve la ligne correspondante dans custom_checks.cfg et exécute votre script localement. Les plugins Centreon standard, eux, sont cherchés dans le dossier plugins_directory du centagent.json (ex. /usr/lib/centreon/plugins/src).

ℹ️ Et la « whitelist » du moteur ? Vous croiserez peut-être le dossier /etc/centreon-engine-whitelist/ : c’est une fonction optionnelle et distincte, qui restreint les commandes exécutées par le moteur, sur le poller (checks classiques, event handlers…). Elle ne concerne pas les custom checks CMA, qui tournent sur l’agent via custom_checks.cfg. Par défaut ce dossier est vide = aucune restriction, et il est parfaitement normal de n’y avoir aucun fichier.
🎩 Agent sous RHEL : si SELinux bloque l’exécution de votre script custom, appliquez-lui le bon contexte : semanage fcontext -a -t bin_t "/chemin/sondes(/.*)?" puis restorecon -Rv /chemin/sondes.

♻️ Étape 9 — Renouveler les certificats

Mon certificat serveur est valable 1 an. Pour éviter la coupure, renouvellement annuel : on régénère le certificat (étape 2.2), on le repropage vers les agents qui le référencent, puis on recharge.

# Sur le central : regenerer (voir 2.2), puis
systemctl reload centengine

# Sur chaque agent qui reference le certificat (meme chemin qu'a l'etape 5) :
scp centreon@192.168.1.46:/etc/pki/centreon-agent.crt /etc/centreon-monitoring-agent/centreon-agent.crt
systemctl restart centagent
💡 Astuce parc : signez le certificat serveur par la CA maison (valable 10 ans) au lieu de l’auto-signer — la marche à suivre exacte (openssl) est en étape 2.4. Les agents font alors confiance à la CA, pas au certificat serveur : vous renouvelez ce dernier sans rien toucher sur les agents. À l’inverse, si vous aviez épinglé le certificat par son fingerprint, chaque renouvellement change l’empreinte et vous oblige à la re-pousser sur tous les agents — d’où l’intérêt de la CA sur un parc. (Avec Let’s Encrypt, le hook /etc/letsencrypt/renewal-hooks/post/ automatise copie + reload tous les 90 jours.)

🩺 Dépannage express

Symptôme Cause probable Correctif
Connexion TLS échoue / certificat rejeté ca_certificate pointe le mauvais fichier, ou fingerprint erroné Vérifier ca_certificate (ou le fingerprint) côté agent — étape 5
« hostname mismatch » SAN absent ou mauvaise IP/DNS Régénérer le certificat avec le bon subjectAltName (2.2)
Refus malgré TLS OK Token absent ou non déclaré Vérifier trusted_tokens + le token présenté par l’agent
Permission denied sur la clé Droits fichiers ou (RHEL) contexte SELinux chown/chmod (2.3) ; sur RHEL, restorecon (étape 6)
Port 4317 pas en écoute Config non appliquée / moteur non rechargé Export du collecteur puis systemctl reload centengine
4317 injoignable depuis l’agent Pare-feu du poller Ouvrir 4317/tcp (firewalld ou ufw — étape 2.1)
Machine éteinte mais services verts Fraîcheur non activée Les 3 verrous + host-alive réel (étape 7)
Sonde custom en UNKNOWN Nom absent de custom_checks.cfg, ou script non exécutable Déclarer le check dans custom_checks.cfg + chmod +x le script + restart centagent (étape 8)

Diagnostic pas à pas (méthode officielle)

Diagnostic CMA : vérification de la connexion agent et des logs
Du plus simple au plus fin :

1. L’agent tourne-t-il ?

systemctl status centagent          # Linux
# Windows : services.msc -> service "CentreonMonitoringAgent"

2. L’agent joint-il le collecteur sur 4317 ? (à lancer depuis la machine supervisée)

nc -vz 192.168.1.46 4317                        # Linux         -> "succeeded"
Test-NetConnection 192.168.1.46 -Port 4317      # PowerShell    -> TcpTestSucceeded : True

3. Le collecteur écoute-t-il, la session est-elle établie ?

ss -plant | grep 4317     # LISTEN cote poller ; ESTABLISHED = un agent est connecte
tcpdump -i any port 4317  # du trafic passe (illisible car chiffre = c'est normal)

4. Que disent les logs ?

grep -i error /var/log/centreon-monitoring-agent/centagent.log   # cote agent
grep -i error /var/log/centreon-engine/centengine.log            # cote poller
ausearch -m avc -ts recent                                       # blocages SELinux (RHEL)

5. Passer en mode debug si besoin :

  • Agent : mettez "log_level": "debug" (voire "trace") dans centagent.json, puis systemctl restart centagent.
  • Collecteur / OpenTelemetry : Configuration > Collecteurs > Configuration du moteur → montez le niveau de log du serveur OTLP (debug/trace), exportez, puis observez centengine.log.
⚠️ Pensez à redescendre les niveaux de log (agent et moteur) une fois le diagnostic terminé : le mode debug/trace est très bavard et pèse sur les performances.

🏁 Conclusion

CMA a complètement remplacé NRPE chez moi, et pour de bonnes raisons : transport moderne (gRPC), chiffrement TLS réel adossé à un token, et création automatique des hôtes. La procédure est identique sur RHEL et Debian, à trois détails près : le dépôt (RPM/APT), le pare-feu (firewalld/ufw) et SELinux (RHEL). Les vrais pièges ne sont pas dans l’installation — simple — mais dans deux détails d’exploitation : le SAN du certificat (sans quoi rien ne se connecte) et la fraîcheur passive (sans quoi une machine morte reste au vert). Une fois ces deux points maîtrisés, c’est un agent solide et confortable.

🧠 À garder en tête

  • Procédure identique RHEL/Debian ; seuls dépôt, pare-feu et SELinux diffèrent.
  • Sur un LAN, un certificat auto-signé suffit — Let’s Encrypt pour un FQDN public.
  • Le SAN (DNS + IP) du certificat serveur est obligatoire, sinon la connexion TLS est refusée.
  • Avec le chiffrement, le token est indispensable (obligatoire en 25.10+).
  • CMA est passif : pensez fraîcheur + host-alive ICMP réel, sinon les pannes passent inaperçues.

Une question, un cas tordu, une amélioration ? Dites-le en commentaire 👇

Bon monitoring avec Centreon CMA !

Derniers Articles