![Stacks Image 34274](files/stacks-image-23abdc0-126x90.png)
Le module cron
Tout d'abord, regardons de plus près l'organisation des dossiers de configuration de Centreon-Gorgone.
![Stacks Image 701346](files/stacks-image-1a56391-1288x466.jpg)
Organisation des fichiers
Si vous vérifiez le statut de Centreon-Gorgone, vous découvrirez les modules actifs dont le module cron (process 613) :
systemctl status gorgoned ● gorgoned.service - Centreon Gorgone Loaded: loaded (/etc/systemd/system/gorgoned.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2020-10-12 00:07:07 CEST; 9h ago Main PID: 416 (perl) Tasks: 104 (limit: 2356) Memory: 108.7M CGroup: /system.slice/gorgoned.service ├─ 416 /usr/bin/perl /usr/bin/gorgoned --config=/etc/centreon-gorgone/config.yaml --logfile=/var/log/centreon-gorgone/gorgone ├─ 608 gorgone-nodes ├─ 609 gorgone-statistics ├─ 610 gorgone-action ├─ 611 gorgone-engine ├─ 612 gorgone-dbcleaner ├─ 613 gorgone-cron ├─ 614 gorgone-httpserver ├─ 615 gorgone-legacycmd ├─1127 gorgone-proxy ├─1128 gorgone-proxy ├─1132 gorgone-proxy ├─1136 gorgone-proxy └─1143 gorgone-proxy
Première configuration
Voici la configuration par défaut de ce module. Le fichier est au format yaml, faites attention à la syntaxe. L'indentation doit se faire avec des espaces et avoir le même nombre d'espaces pour chaque ligne.
- name: cron package: "gorgone::modules::core::cron::hooks" enable: true cron: !include cron.d/*.yaml
Pour éviter de saisir les commandes dans ce fichier de configuration, une directive indique le chemin /etc/centreon-gorgone/config.d/cron.d. Il suffira de créer un fichier de configuration cron par commande. les fichiers, ainsi créés, seront exécuté par Centreon-Gorgone. Commençons par un exemple tout simple.
Créons le fichier test.yaml dans le dossier /etc/centreon-gorgone/config.d/cron.d. Nous allons créer une commande qui enregistrera la date courant dans le dossier /tmp toutes les minutes.
Créons le fichier test.yaml dans le dossier /etc/centreon-gorgone/config.d/cron.d. Nous allons créer une commande qui enregistrera la date courant dans le dossier /tmp toutes les minutes.
- id: echo_date timespec: "* * * * *" action: COMMAND parameters: - command: "date >> /tmp/date.log" timeout: 10 keep_token: true
Voici l'explication de ces lignes.
id: nom de la commande (doit être unique)
timespec: configuration de la date et heure d'exécution semblable au cron Linux. Dans notre exemple toutes les minutes.
action: Type d'action dans notre cas c'est une commande
parameters -> command: la commande qui sera exécutée avec le user centreon-gorgone
parameters -> timeout: timeout pour éviter le blocage de l'application en cas de dysfonctionnement de la commande
keep_token: utilise ou non l'id de la configuration, il est conseillé de mettre true pour avoir un log plus parlant.
Lorsque vous avez terminé l'édition, relancez Centreon-gorgone.
id: nom de la commande (doit être unique)
timespec: configuration de la date et heure d'exécution semblable au cron Linux. Dans notre exemple toutes les minutes.
action: Type d'action dans notre cas c'est une commande
parameters -> command: la commande qui sera exécutée avec le user centreon-gorgone
parameters -> timeout: timeout pour éviter le blocage de l'application en cas de dysfonctionnement de la commande
keep_token: utilise ou non l'id de la configuration, il est conseillé de mettre true pour avoir un log plus parlant.
Lorsque vous avez terminé l'édition, relancez Centreon-gorgone.
systemctl restart gorgoned
Vous pouvez vérifier la présence de ce fichier dans le dossier /tmp
cat /tmp/date.log .. lundi 12 octobre 2020, 10:28:00 (UTC+0200) lundi 12 octobre 2020, 10:29:00 (UTC+0200) lundi 12 octobre 2020, 10:30:00 (UTC+0200) lundi 12 octobre 2020, 10:31:00 (UTC+0200) lundi 12 octobre 2020, 10:32:01 (UTC+0200) ..
et le fonctionnement dans le fichier de log
tail -f /var/log/centreon-gorgone/gorgoned.log .. 2020-10-12 10:33:00 - INFO - [cron] Launching job 'echo_date' ..
Avec le mode debug, vous aurez plus d'information
tail -f /var/log/centreon-gorgone/gorgoned.log .. 2021-01-20 12:06:00 - DEBUG - [core] Message received - [PUTLOG] [echo_date] [] {"etime":1611140760,"data":{"metadata":null,"command":"date >> /tmp/date.log","message":"command has started"},"instant":null,"token":"echo_date","code":0} 2021-01-20 12:06:00 - DEBUG - [core] Message received - [PUTLOG] [echo_date] [] {"etime":1611140760,"data":{"metrics":{"duration":0,"end":1611140760,"start":1611140760},"metadata":null,"result":{"exit_code":0,"stdout":""},"command":"date >> /tmp/date.log","message":"command has finished successfully"},"instant":null,"token":"echo_date","code":100} 2021-01-20 12:06:00 - DEBUG - [core] Message received - [PUTLOG] [echo_date] [] {"etime":1611140760,"data":{"message":"commands processing has finished successfully"},"instant":null,"token":"echo_date","code":2} ..
Avec l'option keep_token: false et le mode debug, vous aurez le token original mais pas forcement plus lisible.
tail -f /var/log/centreon-gorgone/gorgoned.log .. 2021-01-20 12:08:00 - DEBUG - [core] Message received - [PUTLOG] [b0776af62880af0faa37fd7d514b3cc7dd04ee0846fdd275c5b88eef7c3bcfb8bbdad93eb5a8e0c4f1d6f961077e11ac969a177b7c2edcc63bfc46b77aa42f85] [] {"etime":1611140880,"data":{"metadata":null,"command":"date >> /tmp/date.log","message":"command has started"},"instant":null,"token":"b0776af62880af0faa37fd7d514b3cc7dd04ee0846fdd275c5b88eef7c3bcfb8bbdad93eb5a8e0c4f1d6f961077e11ac969a177b7c2edcc63bfc46b77aa42f85","code":0} 2021-01-20 12:08:00 - DEBUG - [core] Message received - [PUTLOG] [b0776af62880af0faa37fd7d514b3cc7dd04ee0846fdd275c5b88eef7c3bcfb8bbdad93eb5a8e0c4f1d6f961077e11ac969a177b7c2edcc63bfc46b77aa42f85] [] {"etime":1611140880,"data":{"metrics":{"duration":0,"end":1611140880,"start":1611140880},"metadata":null,"result":{"exit_code":0,"stdout":""},"command":"date >> /tmp/date.log","message":"command has finished successfully"},"instant":null,"token":"b0776af62880af0faa37fd7d514b3cc7dd04ee0846fdd275c5b88eef7c3bcfb8bbdad93eb5a8e0c4f1d6f961077e11ac969a177b7c2edcc63bfc46b77aa42f85","code":100} 2021-01-20 12:08:00 - DEBUG - [core] Message received - [PUTLOG] [b0776af62880af0faa37fd7d514b3cc7dd04ee0846fdd275c5b88eef7c3bcfb8bbdad93eb5a8e0c4f1d6f961077e11ac969a177b7c2edcc63bfc46b77aa42f85] [] {"etime":1611140880,"data":{"message":"commands processing has finished successfully"},"instant":null,"token":"b0776af62880af0faa37fd7d514b3cc7dd04ee0846fdd275c5b88eef7c3bcfb8bbdad93eb5a8e0c4f1d6f961077e11ac969a177b7c2edcc63bfc46b77aa42f85","code":2}..
![Stacks Image 701491](files/stacks-image-fa0737e-48x46.png)
Un petit bug non bloquant empêche la prise en compte de l'option keep_token à false. Si vous voulez obtenir le résultat ci-dessus, il faut supprimer la ligne de l'option ou sinon modifiez le fichier /usr/share/perl5/vendor_perl/gorgone/modules/core/cron/class.pm comme ci-dessous. Merci à Quentin pour sa réactivité.
Cas concret
Nous venons de vérifier le fonctionnement du module cron, nous passons à un cas concret. Je vous propose de synchroniser le dossier des plugins historiques des pollers existant par rapport au poller Central. En effet, ce dossier comprend généralement des plugins qui ne sont pas repris par les plugins Centreon, des fichiers de commande de notification ou des scripts de type eventhandler. Nous allons créer un fichier de configuration qui synchronisera le dossier du Central vers les pollers.
Nous utiliserons le user centreon-gorgone pour faire le transfert de fichier par scp. Nous allons créer un échange de clé entre le Central et un poller distant. Tout d'abord, il faut initialiser le mot de passe de centreon-gorgone sur le poller distant.
Nous utiliserons le user centreon-gorgone pour faire le transfert de fichier par scp. Nous allons créer un échange de clé entre le Central et un poller distant. Tout d'abord, il faut initialiser le mot de passe de centreon-gorgone sur le poller distant.
passwd centreon-gorgone
Sur le serveur Central, nous créons la clé publique/privée et la déployons sur le poller distant.
su - centreon-gorgone ssh-keygen -t rsa ssh-copy-id centreon-gorgone@<IP POLLER DISTANT>
Il faut adapter le dossier /usr/lib/nagios/plugins ou /usr/lib64/nagios/plugins pour que le user centreon-gorgone puisse copier les fichiers et sous-dossiers. Sur le poller distant, lancez les commandes suivantes (adapter le dossier des plugins en fonction de votre installation) :
chmod -R 775 /usr/lib/nagios/plugins chown -R root:centreon /usr/lib/nagios/plugins
remettre les droits particuliers sur certaines sondes en fonction des besoins pour éviter un problème d'exécution.
chmod u+s /usr/lib/nagios/plugins/check_icmp chmod u+s /usr/lib/nagios/plugins/check_dhcp chown root:root /usr/lib/nagios/plugins/check_icmp chown root:root /usr/lib/nagios/plugins/check_dhcp
Nous allons créer notre fichier de synchro dans le dossier /etc/centreon-gorgone/config.d/cron.d. J'ai choisi de créer un fichier par poller distant, je ne sais pas si c'est la meilleure option mais elle me convient.
création du fichier /etc/centreon-gorgone/config.d/cron.d/synchro_poller1.yaml
création du fichier /etc/centreon-gorgone/config.d/cron.d/synchro_poller1.yaml
- id: sync_poller1 timespec: "*/30 8-19 * * *" action: COMMAND parameters: - command: "scp -r /usr/lib/nagios/plugins/* centreon-gorgone@192.168.1.33:/usr/lib/nagios/plugins" timeout: 10 keep_token: true
Explication du script
L'id du cron sera sync_poller1. Nous paramétrons la commande toutes les 30 minutes entre 8 h 00 et 19 h 00 tous les jours. La commande scp va copier tout le dossier /usr/lib/nagios/plugins vers le poller distant. Attention, il est important que la configuration du cron soit répétitive avec la syntaxe */valeur. Pour vous aider dans la construction de votre cron, vous pouvez utiliser le lien suivant crontab guru. Merci à @cgagnaire pour son coup de main 😉
Redémarrez centreon-gorgone
L'id du cron sera sync_poller1. Nous paramétrons la commande toutes les 30 minutes entre 8 h 00 et 19 h 00 tous les jours. La commande scp va copier tout le dossier /usr/lib/nagios/plugins vers le poller distant. Attention, il est important que la configuration du cron soit répétitive avec la syntaxe */valeur. Pour vous aider dans la construction de votre cron, vous pouvez utiliser le lien suivant crontab guru. Merci à @cgagnaire pour son coup de main 😉
Redémarrez centreon-gorgone
systemctl restart gorgoned
Il est possible de vérifier le fonctionnement dans le fichier de log /var/log/centreon-gorgone/gorgoned.log
2020-10-13 10:48:00 - INFO - [cron] Launching job 'sync_poller1'
Les modifications effectuées sur le Central seront répercutées sur le poller à intervalles réguliers. Si vous avez plusieurs pollers, il suffira de dupliquer le fichier et de le modifier en conséquence.