Vous êtes ici:

Menu


Stacks Image 8983
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.

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
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
Création de la variable d'environnement
Nous utiliserons l'invite de commande pour exécuter les commandes.
Stacks Image 294459
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
Voici mon fichier comprenant deux plateformes Centreon, une plateforme CentOS en 20.10 et une plateforme AlmaLinux en 21.04. J'utilise le compte admin qui est automatiquement autorisé pour l'API Rest.
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
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
le serveur AlmaLinux version 21.04
Stacks Image 294478
Exportation de la configuration
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
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

5 acquittement

Pour acquitter des hôtes et des services, nous utiliserons les commandes suivantes :
Hôte
./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
Stacks Image 294489
Astuce pour connaître le hostID et le serviceID
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
./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.
 Vous êtes ici:

Nous utilisons des cookies pour nous permettre de mieux comprendre comment le site est utilisé. En continuant à utiliser ce site, vous acceptez cette politique.