Skip to content

[stat] Suppression des valeurs 0 dans influxdb

Lucas Seguinot requested to merge fix/engine-stat-null-fields into develop

Ticket : https://git.canopsis.net/canopsis/canopsis/issues/1965

À tester avec : https://git.canopsis.net/canopsis/canopsis/merge_requests/1196

Cette MR modifie le comportement du moteur stat, pour qu'il ne stocke plus la valeur 0 dans influxdb.

Par exemple, lors de la réception d'un événement check avec un état 0 sur l'entité r/c, le point suivant était précédemment inséré dans influxdb :

time eid ko ok
---- --- -- --
...  r/c  0  1

Suite à cette MR, le point suivant est inséré :

time eid ko ok
---- --- -- --
...  r/c     1

Cela permet de récupérer le dernier événement ko avec la requête :

SELECT last(ko) FROM event_state_history

au lieu de

SELECT last(ko) FROM event_state_history WHERE ko = 1

ce qui améliore considérablement les performances.

Procédure de migration

Pour que les statistiques affichées dans la MDS soient correctes, les utilisateurs du moteur engine-stat doivent l'arrêter, et lancer les requêtes suivants dans la base canopsis d'influxdb :

select ok::integer,ko::integer into event_state_history_old from event_state_history group by connector,connector_name,component,resource,eid;
drop measurement event_state_history;
select ok::integer into event_state_history from event_state_history_old where ok > 0 group by connector,connector_name,component,resource,eid;
select ko::integer into event_state_history from event_state_history_old where ko > 0 group by connector,connector_name,component,resource,eid;
drop measurement event_state_history_old;

Cela peut être effectué avec la commande suivante :

influx -username cpsinflux -password canopsis -database canopsis -execute 'select ok::integer,ko::integer into event_state_history_old from event_state_history group by connector,connector_name,component,resource,eid;drop measurement event_state_history;select ok::integer into event_state_history from event_state_history_old where ok > 0 group by connector,connector_name,component,resource,eid;select ko::integer into event_state_history from event_state_history_old where ko > 0 group by connector,connector_name,component,resource,eid;drop measurement event_state_history_old;'

Cette procédure peut prendre beaucoup de temps (30 minutes lors de mes tests).

Edited by Lucas Seguinot

Merge request reports