Quand j’ai commencé linux la première phrase qu’on peut lire dans la littérature consacrée est : « tout est dans un fichier ».
Pour la gestion de l’interface de centreon on peut dire « tout est en base » 😀
Il m’est arrivé d’avoir des données corrompues ,en arrivant chez mes clients, parce que des personnes, certainement plus intelligentes que les autres, ont crues bon d’écrire directement en base 😛
Il m’a paru donc important d’expliquer :
Comment est gérée l’interface
Comment sont affichés les éléments de configuration
Dans cette suite d’article nous verrons :
Le lien entre la base de données et l’affichage des menus dans l’interface
Comment centreon affiche les informations dans l’interface depuis les vues
Menu Monitoring
L’état des services avec application de filtres
Menu Configuration
Liste des hôtes avec les différents filtres disponibles
Liste des services avec les différents filtres
Les forces en présence
Les fichiers
Les fichiers de mise à disposition de l’interface à apache sont présents dans le répertoire /usr/share/centreon/www du serveur web
Au premier niveau nous avons ci-dessous les répertoires les plus importants :
include -> Code php pour afficher les différents menus
modules -> Les différents modules opensource ou non installés
widgets -> Code des widgets utilisés dans les customviews
Les bases de données
Tous les éléments permettant le bon fonctionnement de l’interface sont dans la database centreon. Donc on ne modifie rien dedans par une commande mysql, que ce soit par un insert, drop, update ou tout autre commande farfelue qui pour passer par la tête d’un illuminé.
On ne fait que des « select » et rien de plus.
J’espère que c’est écrit suffisamment gros pour que le message soit clair 😀
Il est important de comprendre que la database centreon_storage est la table du temps réel.
Toutes les données affichées dans la console en dehors des vues configuration et administration proviennent de cette database.
Il y a un lien entre les databases centreon et centeon_storage ce sont les ID pour :
Les hôtes
Les différents regroupements
Services
Hosts
Services
Donc tous les vues temps réel s’appuient sur cette database en utilisant la durée de rétention pour afficher l’historique dans les différentes vues.
La structure de la database est sensiblement identique à celle de centreon.
Pour faire un raccourci dans la database centreon les tables sont au singulier et dans centreon-storage au pluriel.
Ainsi par exemple les tables on peut faire les relations suivantes :
centreon
centreon_storage
acl_group_contactgroups_relations
centreon_acl
host
hosts
hostgroup
hostgroups
host_service_relation
host_template_relation
Hostcategories
hostcategories_relation
hostgroup_hg_relation
hostgroup_relation
hosts_hostgroups
dependency
dependency_hostChild_relation
hosts_hosts_dependencies
dependency_hostParent_relation
host_service_relation
host_hostparent_relation
hosts_hosts_parents
servicegroup
servicegroups
service
services
servicegroup_relation
services_servicegroups
dependency_serviceParent_relation
services_services_dependencies
dependency_serviceChild_relation
dependency_servicegroupChild_relation
dependency_servicegroupParent_relation
service_categories
service_categories_relation
nagios_server
instances
Nous pouvons noter que certaines tables n’existent pas dans cetreon_storage. Donc la console aura besoin des 2 databases pour afficher les informations dans la console.
Dans cette suite d’article nous allons regarder la structure des données de centreon.
But des articles
Nous allons voir :
Les différentes relations à l’intérieur des databases :
Les tables de centreon (Eléments de configuration)
Les tables centreon_storage (Historisation de la supervision)
Entre les databases :
Relation entre les tables de centreon et centreon_storage
Nous ne rentrerons pas dans le détail de toutes les tables mais nous nous intéresserons aux tables principales pour comprendre le fonctionnement de base de l’application.
Convention de nommage
Afin de faciliter la lecture des requêtes et d’éviter les ambiguïtés pour MySQL, pour les différentes jointures, nous utiliserons un trigramme en alias de la table.
Copier le contenu de la clé Web1 sur le serveur Web2 et inversement
Insérer le contenu de la clé publique de l’autre membre du cluster dans le fichier
Modifier les droits du fichier
Validation de la connexion SSH sans Mot de passe
Configuration du service de synchronisation
Le service de synchronisation centreon-central-sync nécessite que l’on définisse pour chaque nœud dans /etc/centreon-ha/centreon_central_sync.pm l’adresse IP de son correspondant :
Ainsi pour le serveur CENTREON-WEB1 on doit avoir :
L’arrêt relance des services vont être géré directement par le cluster. Il faut donc désactiver le démarrage automatique des services
Sur les serveurs Web
Sur les Bases de données
Préparation du quorum
Services du cluster
Installation des services
Démarrage des services
Configuration du quorum
Il faut forcer l’utilisation d’IP V4 dans le fichier /etc/sysconfig/corosync-qnetd
Utilisateur hacluster
Pour simplifier l’installation il est important de mettre le même mot de passe pour le compte hacluster de tous les membres du cluster : Centraux, DB et quorum inclus.
Nous allons travailler sur les 2 serveurs base de données Centreon
Création des comptes Centreon pour le cluster
Se connecter à mariadb sur les 2 serveurs Centreon-DB
Pour les Databases sur le serveur Slave
CREATEUSER 'Centreon'@'DATABASE_SLAVE_IPADDR' IDENTIFIED BY'MARIADB_CENTREON_PASSWD';GRANT ALL PRIVILEGES ON centreon.*TO'Centreon@'@'@DATABASE_SLAVE_IPADDR@';GRANT ALL PRIVILEGES ON centreon_storage.*TO'Centreon'@'DATABASE_SLAVE_IPADDR';
Si vous utilisez centreon-KB :
GRANT ALL PRIVILEGES ON centreon_KB.*TO'Centreon'@'DATABASE_SLAVE_IPADDR';
Pour les Databases sur le serveur Master
CREATEUSER 'Centreon'@'DATABASE_MASTER_IPADDR' IDENTIFIED BY'MARIADB_CENTREON_PASSWD';GRANT ALL PRIVILEGES ON centreon.*TO' Centreon'@'DATABASE_MASTER_IPADDR';GRANT ALL PRIVILEGES ON centreon_storage.*TO'Centreon'@'DATABASE_MASTER_IPADDR';
Si vous utilisez centreon-KB
GRANT ALL PRIVILEGES ON centreon_KB.*TO'Centreon'@'DATABASE_SLAVE_IPADDR';
Pour l’administration depuis le central WEB1
CREATEUSER 'Centreon'@'CENTRAL_WEB1_IPADDR' IDENTIFIED BY'MARIADB_CENTREON_PASSWD';GRANT ALL PRIVILEGES ON centreon.*TO' Centreon'@'CENTRAL_WEB1_IPADDR';GRANT ALL PRIVILEGES ON centreon_storage.*TO'Centreon'@'CENTRAL_WEB1_IPADDR';
Si vous utilisez centreon-KB
GRANT ALL PRIVILEGES ON centreon_KB.*TO'Centreon'@'DATABASE_SLAVE_IPADDR';
Pour l’administration depuis le central WEB2
CREATEUSER 'Centreon'@'CENTRAL_WEB2_IPADDR' IDENTIFIED BY'MARIADB_CENTREON_PASSWD';GRANT ALL PRIVILEGES ON centreon.*TO' Centreon'@'CENTRAL_WEB2_IPADDR';GRANT ALL PRIVILEGES ON centreon_storage.*TO'Centreon'@'CENTRAL_WEB2_IPADDR';
Si vous utilisez centreon-KB
GRANT ALL PRIVILEGES ON centreon_KB.*TO'Centreon'@'CENTRAL_WEB2_IPADDR';
Création des comptes de répilication pour le cluster
Création du fichier de configuration pour le cluster
cat>/etc/my.cnf.d/server.cnf<<EOF[server]server-id=1 # SET TO 1 FOR MASTER AND 2 FOR SLAVE#read_onlylog-bin=mysql-binbinlog-do-db=centreonbinlog-do-db=centreon_storageinnodb_flush_log_at_trx_commit=1sync_binlog=1binlog_format=MIXEDslave_compressed_protocol=1slave_parallel_mode=conservativedatadir=/var/lib/mysqlpid-file=/var/lib/mysql/mysql.pidskip-slave-startlog-slave-updatesgtid_strict_mode=ONexpire_logs_days=7ignore-db-dir=lost+found# Tuning standard Centreoninnodb_file_per_table=1open_files_limit=32000key_buffer_size=256Msort_buffer_size=32Mjoin_buffer_size=4Mthread_cache_size=64read_buffer_size=512Kread_rnd_buffer_size=256Kmax_allowed_packet=64M# Uncomment for 4 Go Ram#innodb_buffer_pool_size=512M# Uncomment for 8 Go Ram#innodb_buffer_pool_size=1GEOF
Ajouter après la ligne 6 si vous avez installé centreon-kb Au fichier ci-dessous
binlog-do-db=centreon_kb
Sur le slave
Création du fichier de configuration pour le cluster
cat>/etc/my.cnf.d/server.cnf<<EOF[server]server-id=2 # SET TO 1 FOR MASTER AND 2 FOR SLAVE#read_onlylog-bin=mysql-binbinlog-do-db=centreonbinlog-do-db=centreon_storageinnodb_flush_log_at_trx_commit=1sync_binlog=1binlog_format=MIXEDslave_compressed_protocol=1slave_parallel_mode=conservativedatadir=/var/lib/mysqlpid-file=/var/lib/mysql/mysql.pidskip-slave-startlog-slave-updatesgtid_strict_mode=ONexpire_logs_days=7ignore-db-dir=lost+found# Tuning standard Centreoninnodb_file_per_table=1open_files_limit=32000key_buffer_size=256Msort_buffer_size=32Mjoin_buffer_size=4Mthread_cache_size=64read_buffer_size=512Kread_rnd_buffer_size=256Kmax_allowed_packet=64M# Uncomment for 4 Go Ram#innodb_buffer_pool_size=512M# Uncomment for 8 Go Ram#innodb_buffer_pool_size=1GEOF
Ajouter après la ligne 6 si vous avez installé centreon-kb Au fichier ci-dessous
Nous pouvons dire merci à Mr Bill 😀 de nous avoir pondu un Os ayant des services dépendants de la langue choisie lors de l’installation ( et ça me donne du travail 😀 ).
Les conséquences un service SNMP s’appelera :
Service SNMP en Français
SNMP service en Anglais
Je vous laisse imaginer dans les autres langues 😀
Cela à un impacte non négligeable dans la mise en supervision d’un serveur Windows.
Il va falloir créer un template Windows en fonction de la langue d’installation de l’Os. Et là on se dit WhouAAAAAA, il va falloir créer un template pour chaque langue ?
Et là, on se dit que cela va être galère si il faut gérer toutes les langues que Windows parle, mais c’est que la partie émergée de l’iceberg.
En effet ce n’est pas tout. En fonction de la version de ce super Os, certains services ont disparu, d’autres sont apparus.
L’expérience m’a monté que la supervision d’un serveur ZINDOWS (pour ceux qui auraient leur clavier en QWERTY 😀 ) nécessite de prendre en compte non seulement la version de l’Os mais aussi la langue dans laquelle il a été installé.
Merci de ne pas habité en Serbie ou en république Tchèque (gérer une langue en mode latin avec des caractères que je n’ai pas sur mon clavier et en cyrillique en plus 😀 ), j’ai que l’anglais et le français à gérer 🙂
Arrêtons les digressions et attaquons nous au vif du sujet.
Nous allons donc faire en sorte de prendre en compte les OS de la version 2000 à 2012 en français et en anglais ( j’ai eu des clients en NT4 même au 21ème siècle 😀 mais c’est pas le sujet).
Comment allons nous créer des Templates simple a maintenir et suffisamment flexibles pour ne pas avoir a faire des modifications dans tous les Templates afin d’avoir le résultat voulu.