Vous êtes ici:

Menu


Stacks Image 34274
Centreon-Gorgone prend toute sa mesure dans une architecture distribuée. Avec les versions précédentes, la communication entre un central et ses collecteurs (pollers) était réalisée par une liaison SSH et la création d'une clé publique/privé. Centreon-Gorgone innove en proposant une communication basée sur la bibliothèque de communication asynchrone ZeroMQ (ZMQ) plus adaptée pour les architectures distribuées. Centreon-Gorgone dans sa version 20.10 est compatible avec l'ancienne communication SSH mais nous n'aborderons pas son fonctionnement. Il est fortement recommandé de migrer vers la communication ZeroMQ. Les prochaines versions de Centreon abandonneront la méthode avec ssh.

Principe de fonctionnement

Ci-dessous un schéma expliquant brièvement le fonctionnement de gorgone en mode distribuée.
Stacks Image 701556
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.
Stacks Image 701443
Sélectionnez Add a Centreon Poller, cliquez sur Next
Stacks Image 701346
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.
Stacks Image 701446
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.
Stacks Image 34361
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.
Stacks Image 701453
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.
Stacks Image 701458
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.
Stacks Image 701464
Stacks Image 701508
Log de cette action
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.
Stacks Image 701461
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"
  
Stacks Image 701493
Empreinte de clé publique
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.
Stacks Image 701521
Cochez les cases d’options, sélectionnez Restart pour le premier démarrage. Puis cliquez sur Export.
Stacks Image 701526
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.
Stacks Image 701535

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.
Stacks Image 701438
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.
comments powered by Disqus
 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.