![Stacks Image 8983](files/stacks-image-c47c978-102x102.png)
CentCTL est un exécutable multiplateforme, créé par la société YPSI, permettant l'administration en ligne de commande des plateformes Centreon depuis la version 2.8. Il utilise le RestAPI de Centreon et ne nécessite aucune dépendance. On peut administrer sa plateforme Centreon depuis son poste de travail.
Cet utilitaire est décliné en deux versions : une version Open Source et une version Business, actuellement en version bêta. Ce tutoriel décrit l'utilisation de la version Open Source.
J'en profite pour dire un grand merci à Yann et Victor pour leur aide dans la compréhension de leur outil.
Cet utilitaire est décliné en deux versions : une version Open Source et une version Business, actuellement en version bêta. Ce tutoriel décrit l'utilisation de la version Open Source.
J'en profite pour dire un grand merci à Yann et Victor pour leur aide dans la compréhension de leur outil.
1 Préparation du poste de travail
1.1 Linux
Mon OS de prédilection 😀, j'utilise Linux Mint 20.1 actuellement, une distribution basée sur Ubuntu. J'ai testé sous Debian 10, la procédure sera identique.
1.1a Téléchargement
Téléchargez le fichier pour linux 64bits dans un dossier nommé par exemple centctl. On considère le user kermith. Il faudra rendre le fichier exécutable.
mkdir /home/kermith/centctl
wget https://github.com/YPSI-SAS/centctl/releases/download/v2.0.1/centctl_linux_amd64 -0 centctl
chmod +x centctl
1.1b Préparation de la commande
Il faut configurer une variable d'environnement CENTCTL_CONF comprenant le chemin et le nom du fichier de configuration. Le fichier de configuration s'appellera centctl.yaml. Pour rendre cette opération pérenne, ajouter la commande dans le fichier .bashrc. Ajoutez la ligne suivante à la fin du fichier.
export CENTCTL_CONF=/home/kermith/centctl/centctl.yaml
Maintenant, nous allons configurer la complétion en se connectant en super-utilisateur et en lançant la commande suivante.
sudo su
/home/kermith/centctl/centctl completion > /etc/bash_completion.d/centctl
1.2 Mac OS
1.2a Téléchargement
Télécharger le fichier pour Mac 64bits dans un dossier nommé par exemple centctl. On considère le user kermith. Il faudra rendre le fichier exécutable. Vous pouvez utiliser brew pour installer facilement wget ou sinon avec cette commande :
mkdir centctl
curl -L -o centctl https://github.com/YPSI-SAS/centctl/releases/download/v2.0.1/centctl_darwin_amd64
chmod +x centctl
1.2b Préparation de la commande
Il faut configurer une variable d'environnement CENTCTL_CONF comprenant le chemin et le nom du fichier de configuration. Le fichier de configuration s'appellera centctl.yaml. Pour rendre cette opération pérenne, ajouter la commande dans le fichier .bash_profile. Ajoutez la ligne suivante à la fin du fichier.
export CENTCTL_CONF=/home/kermith/centctl/centctl.yaml
Je n'ai pas réussi à faire fonctionner la complétion sur mon macbook, ma version de brew ne fonctionne plus avec mon OS Sierra, et oui..., il commence à vieillir grave.
1.3 Windows
Pour Windows, j'utilise un serveur Windows 2019. La procédure sera identique pour un poste Windows 10.
1.3a Téléchargement
Téléchargez l'exécutable centctl_windows_amd64.exe vers un dossier du serveur.
![Stacks Image 294445](files/stacks-image-25b7cfa.png)
Copie du fichier CentCTL
1.3b Préparation de la commande
Renommez le fichier exécutable en centctl.exe. Créez la variable d'environnement comme ci-dessous :
CENTCTL_CONF=c:\centctl\centctl.yaml
![Stacks Image 294454](files/stacks-image-a8b8d28.png)
Création de la variable d'environnement
Nous utiliserons l'invite de commande pour exécuter les commandes.
![Stacks Image 294459](files/stacks-image-e5df6c2.png)
Test de la commande
2 Configuration CentCTL
Maintenant, construisons notre fichier de configuration centctl.yaml. Il devra respecter cette syntaxe.
servers:
- server: "NAMESERVER"
url: "URL"
login: "LOGIN"
password: "PASSWORD"
version: "VERSION"
- server: "NAMESERVER2"
url: "URL"
login: "LOGIN"
password: "PASSWORD"
version: "VERSION"
- NAMESERVER devra être un nom unique pour désigner une plateforme Centreon
- URL devra être l'url d'une plateforme au format http://
/centreon ou https:// /centreon - LOGIN devra être un utilisateur Centreon avec des droit d'accès RestAPI
- PASSWORD le mot de passe de l'utilisateur
- VERSION version du RestAPI v1 ou v2
servers:
- server: "almalinux"
url: "http://192.168.1.35/centreon"
login: "admin"
password: "password"
version: "v1"
- server: "centos"
url: "http://192.168.1.42/centreon"
login: "admin"
password: "password"
version: "v1"
3 Premier test
Nous allons, pour commencer, lister les hôtes du serveur AlmaLinux.
./centctl --server=almalinux list host
Voici le résultat au format json qui est le format par défaut.
{ "server": { "name": "almalinux", "hosts": [ { "id": "27", "name": "central", "alias": "serveur central", "address": "127.0.0.1", "activate": "1" }, { "id": "40", "name": "Poller1", "alias": "poller distant", "address": "127.0.0.1", "activate": "0" }, { "id": "49", "name": "serveurWeb", "alias": "serveurWeb", "address": "192.168.1.180", "activate": "1" } ] } }
Vous pouvez choisir d'autres format comme ci-dessous.
./centctl --server=almalinux list host --output yaml
server: name: almalinux hosts: - id: "27" name: central alias: serveur central address: 127.0.0.1 activate: "1" - id: "40" name: Poller1 alias: poller distant address: 127.0.0.1 activate: "0" - id: "49" name: serveurWeb alias: serveurWeb address: 192.168.1.180 activate: "1"
./centctl --server=almalinux list host --output text
Host list for server almalinux: ID: 27 Name: central Alias: serveur central IP address: 127.0.0.1 Activate: 1 ID: 40 Name: Poller1 Alias: poller distant IP address: 127.0.0.1 Activate: 0 ID: 49 Name: serveurWeb Alias: serveurWeb IP address: 192.168.1.180 Activate: 1
./centctl --server=almalinux list host --output csv
Server,ID,Name,Alias,IPAddress,Activate almalinux,27,central,serveur central,127.0.0.1,1 almalinux,40,Poller1,poller distant,127.0.0.1,0 almalinux,49,serveurWeb,serveurWeb,192.168.1.180,1
Il est possible de faire un filtre de type regex, par exemple lister les hôtes commençant par win.
./centctl --server=centos list host -r ^win --output csv
Server,ID,Name,Alias,IPAddress,Activate centos,32,winSUS,serveur wSUS,192.168.1.235,1 centos,42,win01AD,serveur AD,192.168.1.234,1 centos,49,win2008r2,serveur windows,192.168.1.175,1 centos,58,win2019,serveur windows,192.168.1.236,1
Pour connaitre la majorité des options, vous pouvez utiliser la complétion, lorsque celle-ci fonctionne.
./centctl acknowledge apply delete export list --server= version add completion downtime import modify show
Sinon vous pouvez toujours utiliser l'option -h ou --help
./centctl -h centctl is a tool used to controls Centreon through Centreon API (hosts, services, contacts...) Usage: centctl [command] Available Commands: acknowledge Acknowledge hosts/services add Add objects apply apply configuration on a poller completion Generates bash completion scripts delete Delete objects downtime Add downtime on hosts/services export Export in a csv file an object help Help about any command import Import the objects contained in the csv file list List objects modify Modify objects show Show with details one host or service version Show the version Flags: --DEBUG debugging -h, --help helping --server string server name (required) Use "centctl [command] --help" for more information about a command.
4 un exemple d'utilisation de CentCTL
Maintenant, nous allons voir un exemple concret d'utilisation de CentCTL. Nous allons migrer la configuration des hôtes Windows située dans la plateforme Centreon 20.10 vers la nouvelle plate-forme 21.04. Bien sûr, les templates des plugins pack devront être installés sur la nouvelle plateforme.
![Stacks Image 294429](files/stacks-image-3bca2fe.jpg)
le serveur CentOS version 20.10
4.1 Exportation de la configuration
Nous allons maintenant exporter le template de notification.
./centctl --server=centos export template host -r ^Noti -f TemplateNotif
On peut vérifier le contenu du fichier TemplateNotif.csv (les fichiers de sortie sont automatiquement avec l'extension csv)
cat TemplateNotif.csv
add,templateHost,"Notification_24x7","Notification_24x7",
modify,templateHost,"Notification_24x7",address,""
modify,templateHost,"Notification_24x7",snmp_community,""
modify,templateHost,"Notification_24x7",snmp_version,""
modify,templateHost,"Notification_24x7",timezone,""
modify,templateHost,"Notification_24x7",check_command,""
modify,templateHost,"Notification_24x7",check_command_arguments,""
modify,templateHost,"Notification_24x7",check_period,""
modify,templateHost,"Notification_24x7",max_check_attempts,""
modify,templateHost,"Notification_24x7",check_interval,""
modify,templateHost,"Notification_24x7",retry_check_interval,""
modify,templateHost,"Notification_24x7",active_checks_enabled,"2"
modify,templateHost,"Notification_24x7",passive_checks_enabled,"2"
modify,templateHost,"Notification_24x7",notifications_enabled,"2"
modify,templateHost,"Notification_24x7",contact_additive_inheritance,"0"
modify,templateHost,"Notification_24x7",cg_additive_inheritance,"0"
modify,templateHost,"Notification_24x7",notification_options,""
modify,templateHost,"Notification_24x7",notification_interval,""
modify,templateHost,"Notification_24x7",notification_period,""
modify,templateHost,"Notification_24x7",first_notification_delay,""
modify,templateHost,"Notification_24x7",recovery_notification_delay,""
modify,templateHost,"Notification_24x7",obsess_over_host,"2"
modify,templateHost,"Notification_24x7",acknowledgement_timeout,""
modify,templateHost,"Notification_24x7",check_freshness,"2"
modify,templateHost,"Notification_24x7",freshness_threshold,""
modify,templateHost,"Notification_24x7",flap_detection_enabled,"2"
modify,templateHost,"Notification_24x7",low_flap_threshold,""
modify,templateHost,"Notification_24x7",high_flap_threshold,""
modify,templateHost,"Notification_24x7",retain_status_information,"2"
modify,templateHost,"Notification_24x7",retain_nonstatus_information,"2"
modify,templateHost,"Notification_24x7",stalking_options,""
modify,templateHost,"Notification_24x7",event_handler_enabled,"2"
modify,templateHost,"Notification_24x7",event_handler,""
modify,templateHost,"Notification_24x7",event_handler_arguments,""
modify,templateHost,"Notification_24x7",action_url,""
modify,templateHost,"Notification_24x7",notes,""
modify,templateHost,"Notification_24x7",notes_url,""
modify,templateHost,"Notification_24x7",icon_image,""
modify,templateHost,"Notification_24x7",icon_image_alt,""
modify,templateHost,"Notification_24x7",statusmap_image,""
modify,templateHost,"Notification_24x7",2d_coords,""
modify,templateHost,"Notification_24x7",3d_coords,""
modify,templateHost,"Notification_24x7",activate,"1"
modify,templateHost,"Notification_24x7",comment,""
modify,templateHost,"Notification_24x7",contact,"admin"
Il contient toutes les commandes nécessaires à l'importation dans la nouvelle plateforme. Continuons à exporter les serveurs Windows.
./centctl --server=centos export host -r ^win -f hosts
Maintenant, importons la configuration dans la nouvelle plateforme.
./centctl --server=almalinux import -f TemplateNotif.csv
INFO: The HTPL Notification_24x7 is created
WARNING: "Invalid timezone". HTPL's name Notification_24x7 modified timezone.This value is not set.
WARNING: "Object not found:". HTPL's name Notification_24x7 modified check_command.This value is not set.
WARNING: "Unknown timeperiod: ". HTPL's name Notification_24x7 modified check_period.This value is not set.
WARNING: "Unknown timeperiod: ". HTPL's name Notification_24x7 modified notification_period.This value is not set.
WARNING: "Object not found:". HTPL's name Notification_24x7 modified event_handler.This value is not set.
Le template est installé, les Warning ne gêneront pas le fonctionnement. Continuons avec les hôtes.
./centctl --server=almalinux import -f hosts.csv
INFO: The host winSUS is created
INFO: The template of the host winSUS is applied
WARNING: "Invalid timezone". host's name winSUS modified timezone.This value is not set.
WARNING: "Object not found:". host's name winSUS modified check_command.This value is not set.
WARNING: "Unknown timeperiod: ". host's name winSUS modified check_period.This value is not set.
WARNING: "Unknown timeperiod: ". host's name winSUS modified notification_period.This value is not set.
WARNING: "Object not found:". host's name winSUS modified event_handler.This value is not set.
WARNING: "Invalid geo coords". host's name winSUS modified geo_coords.This value is not set.
INFO: The template of the host winSUS is applied
INFO: The template of the host winSUS is applied
INFO: The template of the host winSUS is applied
INFO: The template of the host winSUS is applied
INFO: The template of the host winSUS is applied
INFO: The template of the host winSUS is applied
INFO: The host win01AD is created
INFO: The template of the host win01AD is applied
WARNING: "Invalid timezone". host's name win01AD modified timezone.This value is not set.
WARNING: "Object not found:". host's name win01AD modified check_command.This value is not set.
WARNING: "Unknown timeperiod: ". host's name win01AD modified check_period.This value is not set.
WARNING: "Unknown timeperiod: ". host's name win01AD modified notification_period.This value is not set.
WARNING: "Object not found:". host's name win01AD modified event_handler.This value is not set.
WARNING: "Invalid geo coords". host's name win01AD modified geo_coords.This value is not set.
INFO: The template of the host win01AD is applied
INFO: The template of the host win01AD is applied
INFO: The template of the host win01AD is applied
INFO: The template of the host win01AD is applied
INFO: The template of the host win01AD is applied
INFO: The host win2008r2 is created
INFO: The template of the host win2008r2 is applied
WARNING: "Invalid timezone". host's name win2008r2 modified timezone.This value is not set.
WARNING: "Object not found:". host's name win2008r2 modified check_command.This value is not set.
WARNING: "Unknown timeperiod: ". host's name win2008r2 modified check_period.This value is not set.
WARNING: "Unknown timeperiod: ". host's name win2008r2 modified notification_period.This value is not set.
WARNING: "Object not found:". host's name win2008r2 modified event_handler.This value is not set.
WARNING: "Invalid geo coords". host's name win2008r2 modified geo_coords.This value is not set.
INFO: The template of the host win2008r2 is applied
INFO: The template of the host win2008r2 is applied
INFO: The template of the host win2008r2 is applied
INFO: The host win2019 is created
INFO: The template of the host win2019 is applied
WARNING: "Invalid timezone". host's name win2019 modified timezone.This value is not set.
WARNING: "Object not found:". host's name win2019 modified check_command.This value is not set.
WARNING: "Unknown timeperiod: ". host's name win2019 modified check_period.This value is not set.
WARNING: "Unknown timeperiod: ". host's name win2019 modified notification_period.This value is not set.
WARNING: "Object not found:". host's name win2019 modified event_handler.This value is not set.
WARNING: "Invalid geo coords". host's name win2019 modified geo_coords.This value is not set.
INFO: The template of the host win2019 is applied
INFO: The template of the host win2019 is applied
INFO: The template of the host win2019 is applied
Les hôtes sont installés et les templates sont appliqués pour déployer les services associés.
![Stacks Image 294432](files/stacks-image-99fe983.jpg)
le serveur AlmaLinux version 21.04
![Stacks Image 294478](files/stacks-image-2782cd4-40x38.png)
Vous pouvez directement exporter votre nouvelle configuration en utilisant l'option apply
./centctl --server=almalinux import -f hosts.csv --apply
Le message suivant indiquera l'exportation de la configuration sur les pollers.
INFO: The configuration of the poller Central is exported
INFO: The configuration of the poller poller1 is exported
Il nous restera à appliquer la configuration. Attention, toufefois, si vous avez mis des seuils différents aux templates, il faudra importer les services adéquats. Exemple pour le service IIS-Services et le service X509-Certificate qui devrait être désactivé
![Stacks Image 294462](files/stacks-image-92d4c8e.jpg)
les services en UNKNOWN
Utilisez ces commandes pour résoudre le problème. Attention, bien protéger la syntaxe Name Host|Service Description par des quotes.
./centctl --server=centos export service -n="winSUS|IIS-Services,winSUS|X509-Certificate" -f service
./centctl --server=almalinux import -f service.csv
Vous aurez des messages d'erreurs mais les modifications sont appliquées.
ERROR: "Object already exists". SERVICE's name IIS-Services attached to host winSUS.
WARNING: "Object not found:". service's name IIS-Services attached to host winSUS modified check_command.This value is not set.
WARNING: "Unknown timeperiod: ". service's name IIS-Services attached to host winSUS modified check_period.This value is not set.
WARNING: "Unknown timeperiod: ". service's name IIS-Services attached to host winSUS modified notification_period.This value is not set.
WARNING: "Object not found:". service's name IIS-Services attached to host winSUS modified event_handler.This value is not set.
ERROR: "Object already exists". service's name IIS-Services attached to host winSUS modified host.
ERROR: "Object already exists". SERVICE's name X509-Certificate attached to host winSUS.
WARNING: "Object not found:". service's name X509-Certificate attached to host winSUS modified check_command.This value is not set.
WARNING: "Unknown timeperiod: ". service's name X509-Certificate attached to host winSUS modified check_period.This value is not set.
WARNING: "Unknown timeperiod: ". service's name X509-Certificate attached to host winSUS modified notification_period.This value is not set.
WARNING: "Object not found:". service's name X509-Certificate attached to host winSUS modified event_handler.This value is not set.
ERROR: "Object already exists". service's name X509-Certificate attached to host winSUS modified host.
Rechargez la configuration, le service X509-Certificate est désactivé et le service IIS-Services fonctionne.
![Stacks Image 294475](files/stacks-image-27b4b69.jpg)
5 acquittement
Pour acquitter des hôtes et des services, nous utiliserons les commandes suivantes :
Hôte
Service
./centctl --server=almalinux acknowledge host -i 71 -c "Acquitte par sugarbug" --services
Service
./centctl --server=almalinux acknowledge service -i 66 -s 474 -c "Acquitte par sugarbug"
Options pour les hôtes
--services : acquitte les services associés à l'hôte
Options communes
--notify : notifie le contact associé à l'hôte ou au service
--services : acquitte les services associés à l'hôte
Options communes
--notify : notifie le contact associé à l'hôte ou au service
![Stacks Image 294489](files/stacks-image-2782cd4-40x38.png)
Voici une astuce simple pour avoir rapidement les ID d'un Hôte ou d'un service. Ceci nécessite l'utilitaire jq. Pour obtenir le hostID :
./centctl --server=almalinux list host | jq '.server.hosts[] | select(.name == "winSUS") | .id'
"70"
et pour le serviceID
./centctl --server=almalinux list service | jq '.server.services[] | select((."host name" == "win01AD") and (.description == "Services-Auto")) | .id,."host id"'
"530"
"71"
le premier chiffre correspond au serviceID.
Mais en regardant de plus près les commandes de CentCTL, il existe une commande show permettant de récupérer les informations sur les objets Centreon. Cela va nous permettre de réaliser notre acquittement en une seule ligne de commande en indiquant le nom de l'hôte et/ou du service comme ceci :
Hôte
Service
./centctl --server=almalinux acknowledge host -i $(./centctl --server=almalinux show host -n win01AD | jq -r .server.host.id) -c "Acquitte par sugarbug"
INFO: The host `71` is acknowledged
Service
./centctl --server=almalinux acknowledge service -i $(./centctl --server=almalinux show host -n win01AD | jq -r .server.host.id) -s $(./centctl --server=almalinux show service -n win01AD -d Services-Auto | jq -r .server.service.id) -c "Acquitte par sugarbug"
INFO: The service `530` of the host `71` is acknowledged
C'est terminé pour aujourd'hui. Il existe de nombreuses utilisations de cet outil bien sympathique comme l'automatisation avec Ansible.