Grafana : Des statistiques graphiques en ligne

La suite prometheus / Grafana + mysql m’a été conseillé par un collègue.

Rapidement mis en place, elle m’a permis de collecter une grande quantité d’informations éparses et d’en faire des graphiques.

Le principe est simple : mettre en place une sonde, un « exporter » que l’on peut trouver sur Internet, puis de paramétrer Promehteus pour qu’il fasse un relevé périodique des valeurs exposées, généralement au travers d’un port sur Internet. Ensuite Grafana les met en forme selon vos indications.

Sur le papier 20/20, en pratique il faut trouver la sonde qui va bien avec les graphiques Grafana, ces deux n’étant pas toujours d’accord sur le nom des variables, vous pourriez collectionner des « NO DATA » assez facilement.

Prometheus

L’installation de Prometheus (linux Ubuntu) contient une sonde sur les activités de Prometheus lui-même.

Il propose aussi de faire quelques tracés, bien pratiques pour mettre au point des requêtes.

Grafana

Le site de Grafana (cf. logo)  contient un grand nombre de graphiques prédéfinies (en Json)

Et moi ?

En étant moins fainéant, il suffit de regarder la longue liste de graphique, d’en repérer un qui plaise, généralement en rapport avec le logiciel surveillé (mysql, mssql, apache2, BBB, fail2ban, Windows, Linux, etc.) pour modifier ensuite les noms de variables et faire correspondre la sonde au graphique.

Rien ne m’empêche de modifier une sonde pour y ajouter mes variables, comme dans le cas de fail2ban.

Intérêt

Dans un premier temps pouvoir visualiser l’évolution de la charge CPU, de l’espace disque ou des échanges sur le réseau est indispensable pour se faire une idée de l’état de santé d’un ordinateur.

Ensuite, Prometheus et Granfana proposent de gérer des alertes qui se traduiront par des envois de méls, généralement basées sur des seuils ou des plafonds. J’en ai et ça marche.

Comme toujours, Prometheus a des concurrents tout à fait à niveau, de même Grafana et on peut remplacer mysql par une autre base (mongdb, Mariadb etc.)

Quelques copies d’écran…

Prometheus

Exemples d’exposition de sondes (ou « exporters » pour les anglophiles), récupérés via un navigateur tout simplement :

# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile= »0″} 0
go_gc_duration_seconds{quantile= »0.25″} 0
go_gc_duration_seconds{quantile= »0.5″} 0
go_gc_duration_seconds{quantile= »0.75″} 0
# TYPE go_memstats_alloc_bytes gauge
go_memstats_alloc_bytes 2.3580856e+07
# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed.
# TYPE go_memstats_alloc_bytes_total counter
go_memstats_alloc_bytes_total 6.731184936e+10
go_memstats_frees_total 1.660300905e+09
# HELP go_memstats_gc_cpu_fraction The fraction of this program’s available CPU time used by the GC since the program started.
# TYPE go_memstats_gc_cpu_fraction gauge
go_memstats_gc_cpu_fraction 0.0007796151599620837
# HELP go_memstats_gc_sys_bytes Number of bytes used for garbage collection system metadata.
# TYPE go_memstats_gc_sys_bytes gauge
go_memstats_gc_sys_bytes 4.936456e+06
# HELP go_memstats_heap_alloc_bytes Number of heap bytes allocated and still in use.
# TYPE go_memstats_heap_alloc_bytes gauge
go_memstats_heap_alloc_bytes 2.3580856e+07

ou encore

# HELP apache_accesses_total Current total apache accesses (*)
# TYPE apache_accesses_total counter apache_accesses_total 30126
# HELP apache_cpuload The current percentage CPU used by each worker and in total by all workers combined (*)
# TYPE apache_cpuload gauge apache_cpuload 2.11413
# HELP apache_exporter_build_info A metric with a constant ‘1’ value labeled by version, revision, branch, and goversion from which apache_exporter was built.
# TYPE apache_exporter_build_info gauge
apache_exporter_build_info{branch= »debian/sid »,goversion= »go1.12.12″,revision= »0.7.0+ds-1″,version= »0.7.0+ds »} 1
# HELPapache_scoreboard Apache scoreboard statuses
# TYPE apache_scoreboard gauge
apache_scoreboard{state= »closing »} 0
apache_scoreboard{state= »dns »} 0
apache_scoreboard{state= »graceful_stop »} 0
apache_scoreboard{state= »idle »} 8
apache_scoreboard{state= »idle_cleanup »} 0
apache_scoreboard{state= »keepalive »} 1
apache_scoreboard{state= »logging »} 0
apache_scoreboard{state= »open_slot »} 140
apache_scoreboard{state= »read »} 0

Grafana, via un navigateur