🎯 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)
📑 Sommaire
- Pourquoi passer de NRPE à CMA ?
- Prérequis & pare-feu
- L’architecture en un coup d’œil
- Étape 1 — Installer l’agent
- Étape 2 — Générer les certificats TLS
- Étape 3 — Créer le token
- Étape 4 — Configurer le serveur OTLP (central)
- Étape 5 — Configurer l’agent
- Étape 6 — SELinux (RHEL uniquement)
- Étape 7 — Le piège de la fraîcheur ⭐
- Étape 8 — Scripts et sondes personnalisés
- Étape 9 — Renouveler les certificats
- Dépannage express
🚀 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) |
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)
- 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.
- Vous recevez par email un token personnel qui sert de clé de licence.
- 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.
- 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.
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 :

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

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.
-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-agentet 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.
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.
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
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.
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)
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
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’authentification → Ajouter, 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.
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_tokensdeotl_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"ducentagent.json(étape 5, install manuelle / hors-ligne).
🛰️ Étape 4 — Configurer le serveur OTLP côté central
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
}
}
Les clés à retenir :
encryption: "full"→ TLS activé, le poller présente sonpublic_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
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é danstrusted_tokenscô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: lefingerprint. 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.
"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)
Sur RHEL 9, SELinux est actif par défaut (getenforce → Enforcing). 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
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 ».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)
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 :
check_freshness=1sur 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.freshness_threshold=600(10 min) sur chaque service.check_service_freshness=1au niveau moteur (objetENGINECFG) — 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)
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-custom → Check 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.
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é danscustom_checks.cfg(ex.check_service) ;ARG1…ARG8($_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).
/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.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
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)

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") danscentagent.json, puissystemctl restart centagent. - Collecteur / OpenTelemetry : Configuration > Collecteurs > Configuration du moteur → montez le niveau de log du serveur OTLP (
debug/trace), exportez, puis observezcentengine.log.
🏁 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 !