Le hic sera qu'un tel module ne servira à rien pour les très gros environnements car il va générer trop d'I/O disques. Pour eux ils ne faut sauvegarder que des informations agrégées (quand on voit certains environnements qui font plusieurs Go de log par jour, tu imagine l'activité de logger tous les checks...).
On est d’accord, c’est pour ça que je parlais dans un de mes messages précédents de la possibilité d’activer ou non cette fonctionnalité via une directive de config de service du genre :
define service {
host_name ...
use ...
check_command ...
log_to_mongodb o,w,c,u # log every ok/warning/critical/unknown check return
}Dans mon cas, ce n’est requis que pour une dizaine de services.
Pour le reste, je comprends tes objections, mais en fait, je cherche quelque chose de nettement moins sophistiqué ;-) Prenons un exemple concret pour fixer les choses : je dois fournir des stats de dispo pour un service web. J’ai un plugin (dont le fonctionnement est HS ici) qui me retourne des résultats : ok/warning/critical/unknown. Shinken me permet de lancer un check toutes les 5 minutes, ce qui, d’un point de vue « historique » va donner un truc du genre :
JJ-MM-AAAA-11h55, hostname, service1, ok, perfdata
JJ-MM-AAAA-11h57, hostname, service2, ok, perfdata
JJ-MM-AAAA-12h00, hostname, service1, ok, perfdata
JJ-MM-AAAA-12h03, hostname, service2, warning, perfdata
JJ-MM-AAAA-12h05, hostname, service1, critical, perfdata
JJ-MM-AAAA-12h08, hostname, service2, warning, perfdata
JJ-MM-AAAA-12h10, hostname, service1, warning, perfdata
JJ-MM-AAAA-12h13, hostname, service2, ok, perfdata
Et c’est tout ce dont j’ai besoin : avoir les données brutes dans une base de données, mais TOUTES les données, même si le statut ne change pas par rapport au statut précédent. A partir de là, je dois faire une analyse en interne qui n’est pas liée à Shinken. Les services à superviser sont censés être dispos 24/7, donc pas de downtimes prévus. Les downtimes relevés seront soit dus à un problème applicatif, soit à un problème côté hébergeur.
Re-exemple : si les mesures sur une période donnée sont toutes en critical parce que je me suis ch*é dessus sur une conf serveur, c’est de l’applicatif, on les garde (et tant pis pour mon SLA). Mais si la cause est un incident côté hébergeur (panne réseau, panne matérielle, …) dans ce cas, j’exclus les points de mesure concernés (puisque je fournis un SLA concernant ma propre activité).
Une fois que j’ai tous les points de mesure à prendre en compte, il me suffit de faire le ratio du nombre de « ok » par rapport au nombre de mesures pour chaque service pour obtenir le taux de disponibilité attendu.
Donc :
- les downtimes : dispo prévue 24/7 de l’ensemble d’un service (archi web redondée, donc pas de downtime du service, même si des serveurs peuvent être arrêtés)
- « ack » ou pas « ack » : non significatif ici
- changement d’importance : je comprends où tu veux en venir dans un cas général. Mais ici, l’importance est fixe par rapport à un état.
- période de non checks : le taux de dispo étant calculé à partir du nombre de OK par rapport aux nombres de mesures, le calcul reste le même. Là, c’est à moi d’indiquer dans les petites lignes qui accompagneront mon % final : « basé sur les mesures du ../../…. au ../../…., période du ../../…. au ../../…. exclue pour cause de … »
En résumé, ce dont j’ai besoin, c’est de compter des évènements, d’en exclure 2 ou 3 par-ci par-là (sur la base d’infos que Shinken ne peut pas me fournir) et de faire une division. Donc si j’ai des données brutes, ça marche !