Principe de fonctionnement
Ci-dessous un schéma expliquant brièvement le fonctionnement de gorgone en mode distribuée.
Centreon-Gorgone fonctionne sur le Central et sur le Collecteur distant. Il assure principalement la communication entre les deux équipements pour envoyer les configurations des collecteurs, envoyer les commandes externes, enregistrer les collecteurs, surveiller les collecteurs, enregistrer les statistiques des moteurs, etc. Centreon-gorgone sur le collecteur distant fonctionne en serveur, il écoute sur le port 5556 par défaut, et celui du Central fonctionne en client (un article sera consacré à l'initialisation inverse ). Les processus gorgone n'ont pas les mêmes rôles (modules) en fonction de l'emplacement Central ou Collecteur distant. Vous verrez en détail, le fonctionnement de certains modules plus loin.
Préparation du collecteur distant
La communication ZMQ ne sera pas utilisée pour la communication d'un Central et son collecteur interne.
Configuration d'un collecteur (poller) distant
Nous partirons du principe que votre collecteur est configuré. L'inscription du collecteur vers le Central n'est pas obligatoire pour l'instant, vous pouvez sauter cette option. Dans l'ihm du Central, sélectionnez Configuration / Pollers et cliquez sur Add server with wizard.
Sélectionnez Add a Centreon Poller, cliquez sur Next
Sélectionnez l'option "Create a new Poller", saisissez le nom du collecteur, saisissez l'IP du Collecteur et le serveur Central. Cliquez sur Next. Pour l'instant, le seul avantage de l'inscription du collecteur est de permettre la sélection d'un collecteur enregistré sans avoir à saisir son nom et son adresse IP.
Cliquez sur Apply. L'option "Advanced reverse Centreon Broker communication flow" permet de changer le sens de l'initialisation de la communication TCP du collecteur vers le Central.
Le collecteur est configuré, il faut paramétrer la liaison ZMQ qui permettra d'exporter sa configuration.
Configuration ZMQ
Vérifiez le protocole de communication du nouveau collecteur, changez éventuellement le port de connexion (5556 par défaut). Cette manipulation est optionnelle, c'est le protocole ZMQ qui est activé par défaut.
Vous avez deux collecteurs, le premier pour le serveur Central et le deuxième pour le serveur poller1. Cliquez sur l'icône ci-dessous pour obtenir la configuration de Centreon-Gorgone du collecteur distant.
Copiez la commande et l'appliquez sur le collecteur distant. Cette action va créer le fichier /etc/centreon-gorgone/config.d/40-gorgoned.yaml.
Cette action est loggé dans le fichier /var/log/centreon-gorgone/gorgoned. Il fait appel aux API gorgone pour récupérer des informations nécessaires pour le collecteur distant.
2021-02-02 17:13:18 - INFO - [httpserver] 127.0.0.1 GET '/api/nodes/1/internal/thumbprint' 'Symfony HttpClient/Curl'
2021-02-02 17:13:18 - INFO - [api] Requesting '/api/nodes/1/internal/thumbprint' [GET]
2021-02-02 17:13:18 - INFO - [proxy] Send pings
2021-02-02 17:13:18 - INFO - [httpserver] 127.0.0.1 GET '/api/nodes/1/log/e5acc19b5044c919047d30f0e92d23b10dc567e85ab97257b77c31a8046cbcbc8db280464dcf0b425d848f1f3c8933b5624c1b37fbc081e8fe8b8838cc2fe9ee' 'Symfony HttpClient/Curl'
2021-02-02 17:13:18 - INFO - [api] Requesting '/api/nodes/1/log/e5acc19b5044c919047d30f0e92d23b10dc567e85ab97257b77c31a8046cbcbc8db280464dcf0b425d848f1f3c8933b5624c1b37fbc081e8fe8b8838cc2fe9ee' [GET]
Il va aussi déclencher un mécanisme d'auto-découverte des collecteurs distant comme le montre ce log.
2021-02-02 17:15:49 - INFO - [proxy] Node '2' is registered
2021-02-02 17:15:59 - ERROR - [proxy] Send message problem for '2':
2021-02-02 17:15:59 - INFO - [proxy] PongReset received from '2'
Avant d'appliquer cette configuration dans le collecteur, nous allons vérifier la configuration gorgone. Cliquez sur le nom du collecteur "poller1", dans la section Gorgone Information, vous découvrez les paramètres nécessaires pour la configuration de Centreon-Gorgone :
- Le protocole de communication ZMQ qu'il faudra privilégié,
- Le port de connexion TCP, par défaut 5556,
- La dernière option permet au Central d'utiliser un Remote Server comme un proxy pour envoyer des configurations et commandes au collecteur, par défaut cette option est activée.
L'option SSH Legacy port situé plus haut ne sera plus utilisée dans les prochaines versions.
- Le protocole de communication ZMQ qu'il faudra privilégié,
- Le port de connexion TCP, par défaut 5556,
- La dernière option permet au Central d'utiliser un Remote Server comme un proxy pour envoyer des configurations et commandes au collecteur, par défaut cette option est activée.
L'option SSH Legacy port situé plus haut ne sera plus utilisée dans les prochaines versions.
Le fichier de configuration du collecteur (/etc/centreon-gorgone/config.d/40-gorgoned.yaml) commencera par la description de la configuration.
name: gorgoned-poller1 description: Configuration for poller poller1
Ensuite nous aurons la configuration du démon. L'id du démon, le port TCP. La communication entre le Central et le collecteur se fera avec un chiffrement à clé symétrique avec le couple clé publique/clé privée. C'est une communication client/serveur, le client est le serveur Central et le ou les serveurs seront les collecteurs distants.
gorgone: gorgonecore: id: 2 external_com_type: tcp external_com_path: "*:5556" authorized_clients: - key: SrFQn8Fvdi7SgYLxSYZEnoYHvllfeEweAdENON67gv0 privkey: "/var/lib/centreon-gorgone/.keys/rsakey.priv.pem" pubkey: "/var/lib/centreon-gorgone/.keys/rsakey.pub.pem"
Cette empreinte est définie par rapport à la clé publique sur le serveur Central avec la commande suivante :
perl /usr/local/src/centreon-gorgone-20.10.1/contrib/gorgone_key_thumbprint.pl --key-path='/var/lib/centreon-gorgone/.keys/rsakey.pub.pem'
2021-02-02 15:03:04 - INFO - File '/var/lib/centreon-gorgone/.keys/rsakey.pub.pem' JWK thumbprint: SrFQn8Fvdi7SgYLxSYZEnoYHvllfeEweAdENON67gv0
Pour CentOS il faudra télécharger le fichier sur le GitHub Centreon.
wget -O /root/gorgone_key_thumbprint.pl https://raw.githubusercontent.com/centreon/centreon-gorgone/master/contrib/gorgone_key_thumbprint.pl
perl /root/gorgone_key_thumbprint.pl --key-path='/var/lib/centreon-gorgone/.keys/rsakey.pub.pem'
2021-02-17 22:53:02 - INFO - File '/var/lib/centreon-gorgone/.keys/rsakey.pub.pem' JWK thumbprint: lFtAjNQdAqGI83_rFWGtRApPaq1Zf_m1XW26zxnJLDY
Cela permet de fiabiliser la communication client/serveur.
Nous terminerons par le chargement des modules. Le module action servira à exécuter les commandes envoyées depuis le Central comme une nouvelle configuration. Le module engine permet la communication depuis le Central vers le moteur du collecteur distant.
modules: - name: action package: gorgone::modules::core::action::hooks enable: true
Exemple d'envoi d'une configuration dans le fichier de log /var/log/centreon-gorgone/gorgoned.log
2021-02-02 14:13:01 - INFO - [action] Copy processing - Received chunk for '/etc/centreon-engine//' 2021-02-02 14:13:01 - INFO - [action] Copy processing - Copy to '/etc/centreon-engine//' finished successfully 2021-02-02 14:13:01 - INFO - [action] Copy processing - Received chunk for '/etc/centreon-broker/' 2021-02-02 14:13:01 - INFO - [action] Copy processing - Copy to '/etc/centreon-broker/' finished successfully
Le module engine permet la communication depuis le Central vers le moteur du collecteur distant. Par exemple, pour envoyer un acquittement ou un temps d'arrêt programmé (downtime)
- name: engine package: gorgone::modules::centreon::engine::hooks enable: true command_file: "/var/lib/centreon-engine/rw/centengine.cmd"
Exemple d'envoi d'un temps d'arrêt programmé dans le fichier de log /var/log/centreon-gorgone/gorgoned.log
2021-02-02 14:09:44 - INFO - [engine] Processing external command '[1612271382] SCHEDULE_SVC_DOWNTIME;Poller1;cpu;1612271340;1612274940;1;0;3600;admin;Downtime set by admin'
Prise en compte de la configuration
La première chose à faire est de démarrer ou de redémarrer le démon centreon-gorgone sur le collecteur distant pour prendre en compte la nouvelle configuration.
systemctl restart gorgoned
Centreon-gorgone va tout d'abord créer ses clés publiques/privées et les charger en mémoire. Voici les premières informations du fichier de log /var/log/centreon-gorgone/gorgoned.log.
2021-02-02 15:47:13 - INFO - [core] Initialize server keys 2021-02-02 15:47:13 - INFO - [core] Private key file '/var/lib/centreon-gorgone/.keys/rsakey.priv.pem' loaded 2021-02-02 15:47:13 - INFO - [core] Public key file '/var/lib/centreon-gorgone/.keys/rsakey.pub.pem' loaded 2021-02-02 15:47:13 - INFO - [core] Module 'action' is loading 2021-02-02 15:47:13 - INFO - [core] Module 'action' is loaded 2021-02-02 15:47:13 - INFO - [core] Module 'engine' is loading 2021-02-02 15:47:13 - INFO - [core] Module 'engine' is loaded 2021-02-02 15:47:13 - INFO - [core] Module 'dbcleaner' is loading 2021-02-02 15:47:13 - INFO - [core] Module 'dbcleaner' is loaded 2021-02-02 15:47:13 - INFO - [core] Gorgoned started 2021-02-02 15:47:13 - INFO - [core] PID 20121 2021-02-02 15:47:13 - INFO - [engine] Create module 'engine' process 2021-02-02 15:47:13 - INFO - [action] Create module 'action' process 2021-02-02 15:47:13 - INFO - [dbcleaner] Create module 'dbcleaner' process 2021-02-02 15:47:13 - INFO - [core] Server accepting clients 2021-02-02 15:47:54 - INFO - [core] Connection from proxy-1-2
Ensuite il faut relancer le démon centreon-gorgone sur le Central pour prendre en compte ce nouveau collecteur.
systemctl restart gorgoned
La connexion TCP 5556 est active, vu du collecteur.
netstat -an | grep 5556 tcp 0 0 0.0.0.0:5556 0.0.0.0:* LISTEN tcp 0 0 192.168.1.34:5556 192.168.1.30:59654 ESTABLISHED
Côté serveur Central, la création du collecteur a activé le processus de découverte des collecteurs distants.
2021-02-02 15:47:53 - INFO - [zmqclient] Client connected successfully to 'tcp://192.168.1.34:5556' 2021-02-02 15:47:53 - INFO - [proxy] Received setlogs for '2' 2021-02-02 15:47:53 - INFO - [proxy] Pong received from '2'
Il reste à exporter la configuration du collecteur.
Cochez les cases d’options, sélectionnez Restart pour le premier démarrage. Puis cliquez sur Export.
Voici les logs du Central. Il s'agit des commandes pour envoyer la configuration du moteur, du broker et la méthode restart pour redémarrer le moteur du collecteur.
2021-02-02 17:51:39 - INFO - [legacycmd] Handling command 'SENDCFGFILE', Target: '2' 2021-02-02 17:51:39 - INFO - [legacycmd] Handling command 'SENDCBCFG', Target: '2' 2021-02-02 17:51:39 - INFO - [legacycmd] Handling command 'RESTART', Target: '2'
Voici les logs du collecteur. Ils indiquent que le collecteur a bien reçu les configurations du moteur et du broker.
2021-02-02 17:51:40 - INFO - [action] Copy processing - Received chunk for '/etc/centreon-engine//' 2021-02-02 17:51:40 - INFO - [action] Copy processing - Copy to '/etc/centreon-engine//' finished successfully 2021-02-02 17:51:40 - INFO - [action] Copy processing - Received chunk for '/etc/centreon-broker/' 2021-02-02 17:51:40 - INFO - [action] Copy processing - Copy to '/etc/centreon-broker/' finished successfully
Le collecteur distant devrait être fonctionnel.
Remplacement d'un collecteur défectueux
Constatation
Voici un cas pratique. Votre collecteur distant est crashé, il va falloir le remplacer. Dans notre exemple, il s'agit du poller2 comme le montre l'image ci-dessous, l'interface graphique de Centreon indique que le moteur ne fonctionne plus. Au bout de quelques minutes, les icônes de la barre de status en haut à gauche change de statut en passant de l'orange à rouge.
Si vous vérifiez les logs du Central, le fichier /var/log/centreon-gorgone/gorgoned.log indique au bout d'un certain temps cette information.
2021-02-02 18:19:08 - INFO - [proxy] Ping timeout from '3' … 2021-02-02 18:29:29 - INFO - [proxy] Ping timeout from '3' 2021-02-02 18:29:29 - INFO - [proxy] Ping max timeout reached from '3'
Reprise de la configuration du poller
Pas de souci, il suffit de remonter un serveur en collecteur. La configuration étant stockée sur le Central, il suffira de renvoyer la configuration. Nous passerons les étapes d'installation du collecteur pour arriver à la configuration de Centreon-Gorgone. Nous copions le fichier /etc/centreon-gorgone/config.d/40-gorgoned.yaml et redémarrons le démon gorgone sur le collecteur. Malheureusement, on constate un dysfonctionnement avec le message d'erreur suivant en gras.
2021-02-02 18:36:08 - INFO - [core] Initialize server keys 2021-02-02 18:36:08 - INFO - [core] Private key file '/var/lib/centreon-gorgone/.keys/rsakey.priv.pem' loaded 2021-02-02 18:36:08 - INFO - [core] Public key file '/var/lib/centreon-gorgone/.keys/rsakey.pub.pem' loaded 2021-02-02 18:36:08 - INFO - [core] Module 'action' is loading 2021-02-02 18:36:08 - INFO - [core] Module 'action' is loaded 2021-02-02 18:36:08 - INFO - [core] Module 'engine' is loading 2021-02-02 18:36:08 - INFO - [core] Module 'engine' is loaded 2021-02-02 18:36:08 - INFO - [core] Module 'dbcleaner' is loading 2021-02-02 18:36:08 - INFO - [core] Module 'dbcleaner' is loaded 2021-02-02 18:36:08 - INFO - [core] Gorgoned started 2021-02-02 18:36:08 - INFO - [core] PID 20219 2021-02-02 18:36:08 - INFO - [action] Create module 'action' process 2021-02-02 18:36:08 - INFO - [dbcleaner] Create module 'dbcleaner' process 2021-02-02 18:36:08 - INFO - [engine] Create module 'engine' process 2021-02-02 18:36:08 - INFO - [core] Server accepting clients 2021-02-02 18:36:08 - ERROR - [core] Decoding issue. Protocol not good 2021-02-02 18:36:08 - ERROR - [core] Decoding issue. Protocol not good 2021-02-02 18:36:08 - ERROR - [core] Decoding issue. Protocol not good 2021-02-02 18:36:08 - ERROR - [core] Decoding issue. Protocol not good
La connexion TCP 5669 ne s'initialise pas et on constate les messages de log suivants sur le Central.
2021-02-02 18:39:46 - ERROR - [proxy] Send message problem for '3': uncrypt issue: ~AEs²:é¯Ú¥ 2021-02-02 18:39:46 - INFO - [proxy] PongReset received from '3'
Si on tente un redémarrage du démon gorgone sur le Central, le message d'erreur devient plus explicite.
2021-02-02 18:41:18 - INFO - [proxy] Node '3' is registered 2021-02-02 18:41:18 - ERROR - fingerprint changed for target 'tcp://192.168.1.25:5556' [id: 2] [old fingerprint: P5PvpGhMQQc9Xdj5IQebW9tNtfdaiya3oi1HrkbEtHA] [new fingerprint: HjRlmMYsgl9F19dq2rs0XPAuvvE50VhtWs-Tj_XjXUA] 2021-02-02 18:41:18 - ERROR - [proxy] Send message problem for '3': fingerprint changed for target 'tcp://192.168.1.25:5556' [id: 2] [old fingerprint: P5PvpGhMQQc9Xdj5IQebW9tNtfdaiya3oi1HrkbEtHA] [new fingerprint: HjRlmMYsgl9F19dq2rs0XPAuvvE50VhtWs-Tj_XjXUA] 2021-02-02 18:41:18 - INFO - [proxy] PongReset received from '3'
Le fingerprint de notre collecteur a changé, nous devons supprimer l'ancienne information. Celle-ci se trouve dans le fichier sqlite /var/lib/centreon-gorgone/history.sdb. Voici la procédure pour supprimer cet enregistrement. Les commandes sont en gras.
sqlite3 /var/lib/centreon-gorgone/history.sdb SQLite version 3.27.2 2019-02-25 16:06:06 Enter ".help" for usage hints. sqlite> select * from gorgone_target_fingerprint ; 1|tcp://192.168.1.34:5556|lFtAjNQdAqGI83_rFWGtRApPaq1Zf_m1XW26zxnJLDY 2|tcp://192.168.1.25:5556|P5PvpGhMQQc9Xdj5IQebW9tNtfdaiya3oi1HrkbEtHA sqlite> delete from gorgone_target_fingerprint where id=2; sqlite> .exit
Les fingerprint sont stockés dans la table gorgone_target_fingerprint. Il suffira de supprimer l'enregistrement indiqué par l'erreur correspondant à l'IP du poller2. Redémarrez le démon du collecteur distant. La connexion TCP 5556 fonctionne de nouveau, ci-dessous les logs du collecteur.
2021-02-02 18:43:45 - INFO - [core] Server accepting clients 2021-02-02 19:04:36 - INFO - [core] Connection from proxy-1-3
Et les logs du Central indiquant la connexion avec le collecteur.
2021-02-02 19:04:35 - INFO - [zmqclient] Client connected successfully to 'tcp://192.168.1.25:5556' 2021-02-02 19:04:35 - INFO - [proxy] Received setlogs for '3'
Nous verrons bientôt le fonctionnement avec un flux inverse.