| | |

Relation entres les tables de services

Convention

Le mot clé « distinct » sera utilisé dans les requêtes pour éviter les lignes en doublons

Les tables en présence

TableDescription
serviceListe les services et templates de services
service_categoriesListe les catégories de services
service_categories_relationRelation entre les tables service et service_categories
ServicegroupListe les groupes de services
servicegroup_relationRelation entre les tables servicegroup et servicegroup_relation

Les services

Le schéma

Compréhension de la table des services

La table des services héberge les services et les templates

Pour les distingués les champs, il y a 2 valeurs de renseignés :

  • service_register :
  • Valeur à 0 Pour un template
  • Valeur à 1 Pour un service
  • Service_activate
  • Valeur à 0 Le service n’est pas pris en compte lors de l’export des pollers et le template n’est pas appliqué lors de l’application d’un template d’hôte
  • Valeur à 1 Le service est exporté et le template de service est applqué

Analyse

Le schéma ci-dessus nous montre la relation entre les services et templates de service :

Comme indiqué ci-dessus il n’y a pas de table de relation entre les services et ses templates.

Requête pour tout lister

Requête

SELECT DISTINCT
SVC.service_description AS "SERVICE",
FROM centreon.service AS SVC
WHERE SVC.service_activate='1'
AND SVC.service_register="1"
ORDER BY SVC.service_description

Résultat partiel

SERVICES
App-DB-MySQL-Connection-Time
App-DB-MySQL-Connections-Number
App-DB-MySQL-Database-Size
App-DB-MySQL-Long-Queries
App-DB-Mysql-Process-mysqld-Status
App-DB-MySQL-Slowqueries
App-DB-MySQL-Uptime
App-Monitoring-Centreon-Broker-module-Stats
App-Monitoring-Centreon-Broker-RRD-Stats-Central
App-Monitoring-Centreon-Broker-SQL-Stats-Central

Relation entre services et templates

Requête

SELECT DISTINCT
SVC.service_description AS "SERVICE",
STPL.service_description AS "TEMMPLATE"
FROM centreon.service AS SVC
LEFT JOIN centreon.service AS STPL ON STPL.service_id=SVC.service_template_model_stm_id
WHERE SVC.service_activate='1'
AND SVC.service_register="1"
ORDER BY SVC.service_description

Résultat partiel

SERVICETEMPLATE
App-DB-MySQL-Connection-TimeTS_App-DB-MySQL-Connection-Time
App-DB-MySQL-Connections-NumberTS_App-DB-MySQL-Connections-Number
App-DB-MySQL-Database-SizeTS_App-DB-MySQL-Database-Size
App-DB-MySQL-Long-QueriesTS_App-DB-MySQL-Long-Queries
App-DB-Mysql-Process-mysqld-StatusTS_App-DB-Mysql-Process-mysqld-Status-SNMP
App-DB-MySQL-SlowqueriesTS_App-DB-MySQL-Slowqueries
App-DB-MySQL-UptimeTS_App-DB-MySQL-Uptime
App-Monitoring-Centreon-Broker-module-StatsTS_App-Monitoring-Centreon-Broker-module-Stats
App-Monitoring-Centreon-Broker-RRD-Stats-CentralTS_App-Monitoring-Centreon-Broker-RRD-Stats-Centra
App-Monitoring-Centreon-Broker-SQL-Stats-CentralTS_App-Monitoring-Centreon-Broker-SQL-Stats-Central

Requête pour filtrer un modèle de template

Nous allons lister ci-dessous tous les services actifs rattachés à un template apache

Cela correspondra au filtre dans la console pour chaque hosts

Requête

SELECT DISTINCT
STPL.service_description AS "TEMMPLATE",
SVC.service_description AS "SERVICE"
FROM centreon.service AS SVC
LEFT JOIN centreon.service AS STPL ON STPL.service_id=SVC.service_template_model_stm_id
WHERE SVC.service_activate='1'
AND SVC.service_register="1"
AND STPL.service_description LIKE "%apache%"
ORDER BY SVC.service_description

Résultat

TEMPLATESERVICE
TS_App-Webserver-Apache-Content-Status-HTTPApp-Webserver-Apache-Content-Status
TS_App-Webserver-Apache-Cpuload-HTTPApp-Webserver-Apache-Cpuload
TS_App-Webserver-Apache-Process-httpd-Status-SNMPApp-Webserver-Apache-Process-httpd-Stats
TS_App-Webserver-Apache-ResponseTime-HTTPApp-Webserver-Apache-ResponseTime
TS_App-Webserver-Apache-SlotStates-HTTPApp-Webserver-Apache-SlotStates
TS_App-Webserver-Apache-Workers-HTTPApp-Webserver-Apache-Workers

Les servicegroups

Contexte

Personnellement j’utilise les servicegroups pour faire certaines regroupements fonctionnels ou techniques :

  • Par application
  • Par type d’indicateurs
  • Disques
  • Process
  • Services Web
  • Service SGBD

Tous les recoupements sont possibles du moment qu’ils sont utiles.

Imaginez les tableaux de bord dont vous auriez besoin pour vos tableaux de bord

Le schéma

Analyse

Le schéma ci-dessus nous montre la relation entre les services et les groupes de services :

  • La table servicegroup_relation fait la jointure entre :
  • servicegroup_relation.service_service_id = service.service_id
  • servicegroup_relation.servicegreoup_sg_id = servicegroup.sg_id

Requête pour tout lister

Requête

SELECT SG.sg_name AS "SERVICEGROUP"
FROM centreon.servicegroup AS SG
ORDER BY SG.sg_name;

Résultat

SERVICEGROUP
SG_Apache
SG_Centreon
SG_Cluster
SG_DB-Mongodb
SG_DB-Mysql
SG_Linux
SG_Linux-Disk
SG_Linux-Process
SG_Web-Apache
SG_Web-Nginx
SG_Web-PHP

Relation entre services et servicegroups

Nous avons 2 filtres déterminants :

  • Le mot clé « distinct » pour éviter les doublons
  • Et le test boolean « is not null » pour n’afficher que les services étant rattaché à un group

Requête

Vision depuis la table service

SELECT DISTINCT
SVC.service_description AS "SERVICE",
SG.sg_name AS "SERVICEGROUP"
FROM centreon.service AS SVC
LEFT JOIN centreon.servicegroup_relation AS SGR ON SGR.service_service_id=SVC.service_id
LEFT JOIN centreon.servicegroup AS SG ON SG.sg_id=SGR.servicegroup_sg_id
WHERE SVC.service_activate='1'
AND SVC.service_register="1"
AND SG.sg_name IS NOT NULL
ORDER BY SVC.service_description, SG.sg_name;

Vision depuis la table servicegroup

SELECT DISTINCT
SVC.service_description AS "SERVICE",
SG.sg_name AS "SERVICEGROUP"
FROM centreon.servicegroup AS SG
LEFT JOIN centreon.servicegroup_relation AS SGR ON SGR.servicegroup_sg_id=SG.sg_id
LEFT JOIN centreon.service AS SVC ON SVC.service_id=SGR.service_service_id
WHERE SVC.service_activate='1'
AND SVC.service_register="1"
ORDER BY SG.sg_name, SVC.service_description;

Résultat Tronqué

SG_ApacheApp-Cluster-Centreon-HA-Resource-http-Status
SG_CentreonApp-Cluster-Centreon-HA-Resource-http-Status
SG_CentreonApp-Cluster-Centreon-HA-Resource-ms_mysql-clone-Status
SG_CentreonApp-Cluster-Centreon-HA-Resource-php-clone-Status
SG_CentreonApp-Cluster-Centreon-HA-Resource-snmptrapd-Status
SG_CentreonApp-Cluster-Centreon-HA-Resource-vip_mysql-clone-Status
SG_CentreonApp-Cluster-Centreon-HA-Resource-vip-Status
SG_CentreonApp-DB-MySQL-Connections-Number
SG_CentreonApp-DB-MySQL-Connection-Time
SG_CentreonApp-DB-MySQL-Database-Size
SG_CentreonApp-DB-MySQL-Long-Queries
SG_CentreonApp-DB-Mysql-Process-mysqld-Status
SG_CentreonApp-DB-MySQL-Slowqueries
SG_CentreonApp-DB-MySQL-Uptime
SG_CentreonApp-Monitoring-Centreon-Broker-module-Stats
SG_CentreonApp-Monitoring-Centreon-Broker-RRD-Stats-Central
SG_CentreonApp-Monitoring-Centreon-Broker-SQL-Stats-Central
SG_CentreonApp-Monitoring-Centreon-Process-broker-rrd
SG_CentreonApp-Monitoring-Centreon-Process-broker-sql
SG_CentreonApp-Monitoring-Centreon-Process-cbd
SG_CentreonApp-Monitoring-Centreon-Process-centengine
SG_ClusterApp-Cluster-Centreon-HA-Resource-gorgone-Status
SG_ClusterApp-Cluster-Centreon-HA-Resource-http-Status
SG_ClusterApp-Cluster-Centreon-HA-Resource-ms_mysql-clone-Status
SG_ClusterApp-Cluster-Centreon-HA-Resource-php-clone-Status
SG_ClusterApp-Cluster-Centreon-HA-Resource-snmptrapd-Status
SG_ClusterApp-Cluster-Centreon-HA-Resource-vip_mysql-clone-Status
SG_ClusterApp-Cluster-Centreon-HA-Resource-vip-Status
SG_LinuxApp-DB-Mysql-Process-mysqld-Status
SG_LinuxApp-Monitoring-Centreon-Process-broker-rrd
SG_LinuxApp-Monitoring-Centreon-Process-broker-sql
SG_LinuxApp-Monitoring-Centreon-Process-cbd
SG_Linux-ProcessApp-DB-Mysql-Process-mysqld-Status
SG_Linux-ProcessApp-Monitoring-Centreon-Process-broker-rrd
SG_Linux-ProcessApp-Monitoring-Centreon-Process-broker-sql
SG_Linux-ProcessApp-Monitoring-Centreon-Process-cbd
SG_Linux-ProcessOs-Linux-Process-sshd-Status
SG_Linux-ProcessOs-Linux-Process-snmpd-Status
SG_Web-ApacheApp-Cluster-Centreon-HA-Resource-http-Status
SG_Web-PHPApp-Cluster-Centreon-HA-Resource-php-clone-Status

Nous pouvons remarquer qu’un même service peut être rattaché à plusieurs servicegroup

Les services categories

Schéma

Analyse

Le schéma ci-dessus nous montre la relation entre les services et les catégories de services :

  • La table service_categories_relation fait la jointure entre :
  • categories_relation.service_service_id = service.service_id
  • service_categories_relation. sc_id = service_categories.sc_id

Requête pour tout lister

Requête

SELECT sc_name,sc_description
FROM centreon.service_categories
ORDER BY sc_name;

Résultat

sc_namesc_description
SC_ Apache_ServicesSC_Apache_Services
SC_Centreon_ProcessSC_ Centreon_Process
SC_DiskSC_Disk
SC_ Linux_disk_UsageSC_ Linux_disk_Usage
SC_ Linux_processSC_Linux_process
SC_MemorySC_Memory
SC_PingSC_ping
SC_TrafficSC_Traffic

Lister les services et leur service categories

Requête

Vision depuis la table service

SELECT DISTINCT
SC.sc_name AS "SERVICECATEGORIES",
SVC.service_description AS "SERVICE"
FROM centreon.service AS SVC
LEFT JOIN centreon.service_categories_relation AS SCR ON SCR.service_service_id=SVC.service_id
LEFT JOIN centreon.service_categories AS SC ON SC.sc_id=SCR.sc_id
WHERE SVC.service_activate='1'
AND SVC.service_register="1"
AND SC.sc_name IS NOT NULL
ORDER BY SC.sc_name, SVC.service_description;

Vision depuis la table service_catégories

SELECT DISTINCT
SC.sc_name AS "SERVICECATEGORIES",
SVC.service_description AS "SERVICE"
FROM centreon.service_categories AS SC
LEFT JOIN centreon.service_categories_relation AS SCR ON SCR.sc_id=SC.sc_id
LEFT JOIN centreon.service AS SVC ON SVC.service_id=SCR.service_service_id
WHERE SVC.service_activate='1'
AND SVC.service_register="1"
AND SC.sc_name IS NOT NULL
ORDER BY SC.sc_name, SVC.service_description;

Résultat

SERVICECATEGORIESSERVICE
SC_Apache_ServicesApp-Webserver-Apache-Cpuload
SC_Apache_ServicesApp-Webserver-Apache-Process-httpd-Stats
SC_Apache_ServicesApp-Webserver-Apache-ResponseTime
SC_Apache_ServicesApp-Webserver-Apache-SlotStates
SC_Apache_ServicesApp-Webserver-Apache-Workers
SC_Centreon_ProcessApp-Monitoring-Centreon-Process-broker-rrd
SC_Centreon_ProcessApp-Monitoring-Centreon-Process-broker-sql
SC_Centreon_ProcessApp-Monitoring-Centreon-Process-cbd
SC_Centreon_ProcessApp-Monitoring-Centreon-Process-centengine
SC_Centreon_ProcessApp-Monitoring-Centreon-Process-gorgoned
SC_Linux_disk_UsageOS-Linux-Disk-/-Usage
SC_Linux_disk_UsageOS-Linux-Disk-/home-Usage
SC_Linux_disk_UsageOS-Linux-Disk-/var/lib/mysql-Usage
SC_Linux_disk_UsageOS-Linux-Disk-/var/lib/centreon-Usage
SC_Linux_disk_UsageOS-Linux-Disk-/var/log/mysql-Usage
SC_Linux_processApp-DB-Mysql-Process-mysqld-Status
SC_Linux_processOs-Linux-Process-sshd-Status
SC_Linux_processOs-Linux-Process-snmpd-Status
SC_Linux_processOs-Linux-Process-snmptrapd-Status

Les services, servicesgroups,service_categories

Context

Nous allons voir comment de bout en bout comment faire le lien entre les 3 tables

  • Depuis la bale des services
  • Depuis la table des servicegroup
  • Depuis la table des service catgories

Schéma

Requête

Vision depuis la table service

SELECT DISTINCT
SVC.service_description AS "SERVICE",
SG.sg_name AS "GROUP",
SC.sc_name AS CATEGORIES
FROM centreon.service AS SVC
LEFT JOIN centreon.servicegroup_relation AS SGR ON SGR.service_service_id=SVC.service_id
LEFT JOIN centreon.servicegroup AS SG ON SG.sg_id=SGR.servicegroup_sg_id
LEFT JOIN centreon.service_categories_relation AS SCR ON SCR.service_service_id=SVC.service_id
LEFT JOIN centreon.service_categories AS SC ON SC.sc_id=SCR.sc_id
WHERE SVC.service_activate='1'
AND SVC.service_register="1"
AND SG.sg_name IS NOT NULL
ORDER BY SVC.service_description, SG.sg_name,SC.sc_name;

Vision depuis la table servicegroup

SELECT DISTINCT
SVC.service_description AS "SERVICE",
SG.sg_name AS "GROUP",
SC.sc_name AS CATEGORIES
FROM centreon.servicegroup AS SG
LEFT JOIN centreon.servicegroup_relation AS SGR ON SGR.servicegroup_sg_id=SG.sg_id
LEFT JOIN centreon.service AS SVC ON SVC.service_id=SGR.service_service_id
LEFT JOIN centreon.service_categories_relation AS SCR ON SCR.service_service_id=SVC.service_id
LEFT JOIN centreon.service_categories AS SC ON SC.sc_id=SCR.sc_id
WHERE SVC.service_activate='1'
AND SVC.service_register="1"
AND SG.sg_name IS NOT NULL
ORDER BY SVC.service_description, SG.sg_name,SC.sc_name;

Vision depuis la table service_categories

SELECT DISTINCT
SVC.service_description AS "SERVICE",
SG.sg_name AS "GROUP",
SC.sc_name AS CATEGORIES
FROM centreon.service_categories AS SC
LEFT JOIN centreon.service_categories_relation AS SCR ON SCR.sc_id=SC.sc_id
LEFT JOIN centreon.service AS SVC ON SVC.service_id=SCR.service_service_id
LEFT JOIN centreon.servicegroup_relation AS SGR ON SGR.service_service_id=SVC.service_id
LEFT JOIN centreon.servicegroup AS SG ON SG.sg_id=SGR.servicegroup_sg_id
WHERE SVC.service_activate='1'
AND SVC.service_register="1"
AND SG.sg_name IS NOT NULL
ORDER BY SVC.service_description, SG.sg_name,SC.sc_name;

Résultat tronqué

SERVICEGROUPCATEGORIES
App-Cluster-Centreon-HA-Resource-cbd_central_broker-StatusSG_App-Monitoring-CentreonSC_Cluster_Resource
App-Cluster-Centreon-HA-Resource-cbd_central_broker-StatusSG_App-Cluster-CentreonSC_App-Monitoring-Centreon_Process
App-Cluster-Centreon-HA-Resource-cbd_rrd-clone-StatusSG_App-Monitoring-CentreonSC_Cluster_Resource
App-Cluster-Centreon-HA-Resource-cbd_rrd-clone-StatusSG_App-Cluster-CentreonSC_App-Monitoring-Centreon_Process
App-DB-Mysql-Process-mysqld-StatusSG_App-DB-MysqlSC_Linux_process
App-DB-Mysql-Process-mysqld-StatusSG_App-Cluster-CentreonSC_App-Cluster_Resource
App-DB-Mysql-Process-mysqld-StatusSG_App-Monitoring-CentreonSC_App-DB-Mysql
App-Monitoring-Centreon-Process-broker-rrdSG_App-Monitoring-CentreonSC_App-Monitoring-Centreon_Process
App-Monitoring-Centreon-Process-broker-rrdSG_App-Cluster-CentreonSC_App-Monitoring-Centreon_Process
App-Monitoring-Centreon-Process-broker-rrdSG_App-Monitoring-CentreonSC_Cluster_Resource-clone
App-Monitoring-Centreon-Process-broker-sqlSG_App-Monitoring-_CentreonSC_App-DB-Mysql
App-Monitoring-Centreon-Process-broker-sqlSG_App-Monitoring-_CentreonSC_Cluster_Resource-clone
App-Monitoring-Centreon-Process-broker-sqlSG_App-Cluster-CentreonSC_App-DB-Mysql
App-Monitoring-Centreon-Process-centengineSG_App-Monitoring-CentreonSC_App-Monitoring-Centreon_Process
App-Monitoring-Centreon-Process-centengineSG_App-Monitoring-CentreonSC_App-Cluster_Resource
App-Monitoring-Centreon-Process-centengineSG_App-Cluster-CentreonSC_App-Monitoring-Centreon_Process
App-Monitoring-Centreon-Process-gorgoned
SG_App-Monitoring-Centreon
SC_App-Monitoring-Centreon_Process
App-Monitoring-Centreon-Process-gorgoned
SG_App-Monitoring-Centreon
SC_App-Cluster_Resource
App-Monitoring-Centreon-Process-gorgonedSG_App-Cluster-CentreonSC_App-Monitoring-Centreon_Process
App-Webserver-Apache-CpuloadSG_App-WebServer-ApacheSC_App-Webserver-Apache_Services
App-Webserver-Apache-CpuloadSG_App-Monitoring-CentreonSC_App-Webserver-Apache_Status
App-Webserver-Apache-CpuloadSG_App-Cluster-CentreonSC_App-Monitoring-Centreon_Process
App-Webserver-Apache-Process-httpd-StatsSG_App-WebServer-ApacheSC_App-Webserver-Apache_Services
App-Webserver-Apache-Process-httpd-StatsSG_App-WebServer-Apache
SC_Web_Services
App-Webserver-Apache-ResponseTimeSG_App-WebServer-ApacheSC_App-Webserver-Apache_Services
App-Webserver-Apache-SlotStatesSG_App-WebServer-ApacheSC_App-Webserver-Apache_Services
App-Webserver-Apache-SlotStatesSG_App-Monitoring-CentreonSC_App-Webserver-Apache_Status
OS-Linux-Disk-/var/lib/mysql-UsageSG_App-Monitoring-CentreonSC_OS-Linux-Disk-Usage
OS-Linux-Disk-/var/lib/mysql-UsageSG_App-DB-MysqlSC_App-DB-Mysql-Disk-Usage
OS-Linux-Disk-/var/lib/centreon-UsageSG_App-Monitoring-CentreonSC_OS-Linux-Disk-Usage
OS-Linux-Disk-/var/log/mysql-UsageSG_App-DB-MysqlSC_OS-Linux-Disk-Usage
OS-Linux-Disk-/var/log/mysql-UsageSG_App-DB-MysqlSC_App-DB-Mysql-Disk-Usage
OS-Linux-Process-crond-StatusSG_OS-Linux-Process-StatusSC_App-Monitoring-Centreon_Process
OS-Linux-Process-crond-StatusSG_App-Monitoring-CentreonSC_OS-Linux-Process-Status
OS-Linux-Process-ntpd-StatusSG_OS-Linux-Process-StatusSC_OS-Linux-Process-Status
OS-Linux-Process-ntpd-StatusSG_App-Monitoring-CentreonSC_OS-Linux-Process-Status

Conclusion

Nous venons de voir différentes requêtes autour des services et leurs regroupements.

Il est important de noter que cette vision ne prend pas en compte le lien avec les hosts que vous verrons dans un prochain article.