
Monitoraggio dello SLA dei servizi controllati di Centreon
Qualcosa di curioso e che a seconda delle circostanze può tornare utile potrebbe essere quello di conoscere lo SLA di qualsiasi servizio che stiamo attualmente monitorando nei nostri centri. Può anche essere progettato per quando monitoriamo a livello aziendale, per dare visibilità alla tua disponibilità.
Come sappiamo, Centreon almacena sus métricas y estados en una BD de MariaDB, podemos sencillamente mediante queries de MySQL sacar en tiempo o en % el estado de un Servicio monitorizado en Centreon. Podremos saber cuánto tiempo (o porcentaje) ha estado en estado OK, Avvertimento, Critico, Unknown o en Mantenimiento. Per cosa? Bene, de todos es sabido que podemos conocer el SLA de cualquier Host o Servicio en Centreon, pero otra cosa es monitorizarlo para alertarnos de cuando este no se cumple, o por ejemplo para visualizarlos en nuestro Servicio de Negocio vía NagVis.
Non male, para comenzar sería interesante que si no estás monitorizando queries de MySQL, eches un vistazo a Questo post. Cuando tengas ya el script que permita hacer consultas a BBDD de MySQL, podremos crear los Comandos que necesitamos y cada uno con su tipo de consulta. Ya que unos comandos nos servirán para monitorizar el SLA de Hosts, otros de Servicios, otros nos darán el resultado en tiempo y otros en %, así que dependiendo lo que necesites te dejo aquí ciertas posibilidades:
- SLA de Servicios OK en %:
$CENTREONPLUGINS$/Nagios-Plugins/check_mysql_query.pl -q "SELEZIONA ROUND((SOMMA(OKTimeScheduled)/($ARG1$ * 86400))*100,2) as porcentaje FROM log_archive_service, services WHERE log_archive_service.service_id = services.service_id AND description = '$ARG2$' AND from_unixtime(date_end) > date_sub(ora(), INTERVALLO $ARG 1$ giorno) order BY log_id DESC" -H 127.0.0.1 -d centreon_storage -u centreon -p CONTRASEÑA_USUARIO_CENTREON -t 60 --no-querytime -T -g -l 'SLA' -U %
- SLA de Servicios OK en Tiempo:
$CENTREONPLUGINS$/Nagios-Plugins/check_mysql_query.pl -q "SELEZIONA CONCAT(PAVIMENTO(ORA(sec_to_time(SOMMA(OKTimeScheduled))) / 24), 'd_', MOD(ORA(sec_to_time(SOMMA(OKTimeScheduled))), 24), 'h_', MINUTO(sec_to_time(SOMMA(OKTimeScheduled))), 'm') AS Tiempo FROM log_archive_service, services WHERE log_archive_service.service_id = services.service_id AND description = '$ARG2$' AND from_unixtime(date_end) > date_sub(ora(), INTERVALLO $ARG 1$ giorno) order BY log_id DESC" -H 127.0.0.1 -d centreon_storage -u centreon -p CONTRASEÑA_USUARIO_CENTREON -t 60 --no-querytime -T -g -l 'SLA'
- SLA de Servicios Warning en %:
$CENTREONPLUGINS$/Nagios-Plugins/check_mysql_query.pl -q "SELEZIONA ROUND((SOMMA(WARNINGTimeScheduled)/($ARG1$ * 86400))*100,2) as porcentaje FROM log_archive_service, services WHERE log_archive_service.service_id = services.service_id AND description = '$ARG2$' AND from_unixtime(date_end) > date_sub(ora(), INTERVALLO $ARG 1$ giorno) order BY log_id DESC" -H 127.0.0.1 -d centreon_storage -u centreon -p CONTRASEÑA_USUARIO_CENTREON -t 60 --no-querytime -T -g -l 'SLA' -U %
- SLA de Servicios Warning en Tiempo:
$CENTREONPLUGINS$/Nagios-Plugins/check_mysql_query.pl -q "SELEZIONA CONCAT(PAVIMENTO(ORA(sec_to_time(SOMMA(WARNINGTimeScheduled))) / 24), 'd_', MOD(ORA(sec_to_time(SOMMA(WARNINGTimeScheduled))), 24), 'h_', MINUTO(sec_to_time(SOMMA(WARNINGTimeScheduled))), 'm') AS Tiempo FROM log_archive_service, services WHERE log_archive_service.service_id = services.service_id AND description = '$ARG2$' AND from_unixtime(date_end) > date_sub(ora(), INTERVALLO $ARG 1$ giorno) order BY log_id DESC" -H 127.0.0.1 -d centreon_storage -u centreon -p CONTRASEÑA_USUARIO_CENTREON -t 60 --no-querytime -T -g -l 'SLA'
- SLA de Servicios Critical en %:
$CENTREONPLUGINS$/Nagios-Plugins/check_mysql_query.pl -q "SELEZIONA ROUND((SOMMA(CRITICALTimeScheduled)/($ARG1$ * 86400))*100,2) as porcentaje FROM log_archive_service, services WHERE log_archive_service.service_id = services.service_id AND description = '$ARG2$' AND from_unixtime(date_end) > date_sub(ora(), INTERVALLO $ARG 1$ giorno) order BY log_id DESC" -H 127.0.0.1 -d centreon_storage -u centreon -p CONTRASEÑA_USUARIO_CENTREON -t 60 --no-querytime -T -g -l 'SLA' -U %
- SLA de Servicios Critical en Tiempo:
$CENTREONPLUGINS$/Nagios-Plugins/check_mysql_query.pl -q "SELEZIONA CONCAT(PAVIMENTO(ORA(sec_to_time(SOMMA(CRITICALTimeScheduled))) / 24), 'd_', MOD(ORA(sec_to_time(SOMMA(CRITICALTimeScheduled))), 24), 'h_', MINUTO(sec_to_time(SOMMA(CRITICALTimeScheduled))), 'm') AS Tiempo FROM log_archive_service, services WHERE log_archive_service.service_id = services.service_id AND description = '$ARG2$' AND from_unixtime(date_end) > date_sub(ora(), INTERVALLO $ARG 1$ giorno) order BY log_id DESC" -H 127.0.0.1 -d centreon_storage -u centreon -p CONTRASEÑA_USUARIO_CENTREON -t 60 --no-querytime -T -g -l 'SLA'
- SLA de Hosts Uptime en %:
$CENTREONPLUGINS$/Nagios-Plugins/check_mysql_query.pl -q "SELEZIONA ROUND((SOMMA(UPTimeProgrammato)/($ARG1$ * 86400))*100,2) in percentuale FROM host, log_archive_host WHERE log_archive_host.host_id = hosts.host_id AND hosts.name = '$ARG2$' AND from_unixtime(date_end) > date_sub(ora(), INTERVALLO $ARG 1$ giorno) ordina PER date_end DESC" -H 127.0.0.1 -d centreon_storage -u centreon -p CONTRASEÑA_USUARIO_CENTREON -t 60 --no-querytime -T -g -l 'SLA' -U %
- SLA de Hosts Uptime en Tiempo:
$CENTREONPLUGINS$/Nagios-Plugins/check_mysql_query.pl -q "SELEZIONA CONCAT(PAVIMENTO(ORA(sec_to_time(SOMMA(UPTimeProgrammato))) / 24), 'd_', MOD(ORA(sec_to_time(SOMMA(UPTimeProgrammato))), 24), 'h_', MINUTO(sec_to_time(SOMMA(UPTimeProgrammato))), 'm') AS Tiempo FROM padroni di casa, log_archive_host WHERE log_archive_host.host_id = hosts.host_id AND hosts.name = '$ARG2$' AND from_unixtime(date_end) > date_sub(ora(), INTERVALLO $ARG 1$ giorno) ordina PER date_end DESC" -H 127.0.0.1 -d centreon_storage -u centreon -p CONTRASEÑA_USUARIO_CENTREON -t 60 --no-querytime -T -g -l 'SLA'
- SLA de Hosts Downtime en %:
$CENTREONPLUGINS$/Nagios-Plugins/check_mysql_query.pl -q "SELEZIONA ROUND((SOMMA(DOWNTimeScheduled)/($ARG1$ * 86400))*100,2) in percentuale FROM host, log_archive_host WHERE log_archive_host.host_id = hosts.host_id AND hosts.name = '$ARG2$' AND from_unixtime(date_end) > date_sub(ora(), INTERVALLO $ARG 1$ giorno) ordina PER date_end DESC" -H 127.0.0.1 -d centreon_storage -u centreon -p CONTRASEÑA_USUARIO_CENTREON -t 60 --no-querytime -T -g -l 'SLA' -U %
- SLA de Hosts Downtime en Tiempo:
$CENTREONPLUGINS$/Nagios-Plugins/check_mysql_query.pl -q "SELEZIONA CONCAT(PAVIMENTO(ORA(sec_to_time(SOMMA(DOWNTimeScheduled))) / 24), 'd_', MOD(ORA(sec_to_time(SOMMA(DOWNTimeScheduled))), 24), 'h_', MINUTO(sec_to_time(SOMMA(DOWNTimeScheduled))), 'm') AS Tiempo FROM padroni di casa, log_archive_host WHERE log_archive_host.host_id = hosts.host_id AND hosts.name = '$ARG2$' AND from_unixtime(date_end) > date_sub(ora(), INTERVALLO $ARG 1$ giorno) ordina PER date_end DESC" -H 127.0.0.1 -d centreon_storage -u centreon -p CONTRASEÑA_USUARIO_CENTREON -t 60 --no-querytime -T -g -l 'SLA'
Y ahora sólo falta crear tantos Servicios para monitorizar el SLA como nos interese, en este caso práctico, yo los estoy utilizando únicamente para medir el SLA de los Servicios de Negocio, y por tanto para visualizarlos en NagVis. Como argumentos pondremos los días del SLA que nos interesa ver y en el Nombre del Servicio, el nombre único de un Servicio a chequear.
E come sempre, tras grabar y exportar la configuración, tendremos nuestros servicios SLA listos para chequear mediante una query en la base de datos de Centreon el tiempo o porcentaje del estado de un Servicio.
Y en NagVis, con el Gadget de RawNumbers podremos añadir los ítems SLA monitorizados y quedará más atractivo a la hora de movernos entre mapas y conocer el SLA que ofrece cualquier servicio, ideal para perfiles no 100% técnicos y quieran conocer el estado de su infraestructura en tiempo real.