Un outil intéressant à étudier pour l'observabilité d'un système IT est Prometheus.
Schéma d'archi générale:
Par l'intermédiaire d'
exporters, il permet de regrouper les métriques de plusieurs systèmes ( bases de données, hardware, systèmes de messages, stockage de données, API, ... ) dans une TSDB ( Time Series DataBase ) pour ensuite les diffuser vers des outils d'alertes ou des outils de visualisation, en particulier
Grafana, lui-même disposant d'un alert manager pour info.
Comme l'indique cette
best practise, éviter d'utiliser le module Pushgateway. En particulier, si l'exporter n'existe pas pour le système à monitorer, soit vous pouvez créer en un, soit vous pouvez utiliser l'option
textfile Collector du
node exporter.
Elle permet de récupérer les métriques d'un système tiers, ces dernières étant créées par batch. Elles doivent respecter le
format d'exposition de Prometheus.
Pour illustrer ce dernier point, voici un exemple de génération de métriques de type CPU:
!/bin/bash
# mpstat 15 >> mpstat.stat
MPSTAT_FILE=./mpstat.stat
DATE_FILE=`date +%F-%T`
METRIC_FILE=./metric.prom.${DATE_FILE}
> ${METRIC_FILE}
# Déclaration des métriques de type cpu
echo '# HELP node_cpu_user node cpu user' >> ${METRIC_FILE}
echo '# TYPE node_cpu_user gauge' >> ${METRIC_FILE}
echo '# HELP node_cpu_sys node cpu user' >> ${METRIC_FILE}
echo '# TYPE node_cpu_sys gauge' >> ${METRIC_FILE}
echo '# HELP node_cpu_idle node cpu user' >> ${METRIC_FILE}
echo '# TYPE node_cpu_idle gauge' >> ${METRIC_FILE}
echo '# HELP node_cpu_wait node cpu user' >> ${METRIC_FILE}
echo '# TYPE node_cpu_wait gauge' >> ${METRIC_FILE}
LAST_LINE=`cat ${MPSTAT_FILE} | tail -n 1 | tr -s ' '`
CPU_USER=`echo ${LAST_LINE} | cut -d ' ' -f 3 | sed 's/,/./'`
CPU_SYS=`echo ${LAST_LINE} | cut -d ' ' -f 5 | sed 's/,/./'`
CPU_IDLE=`echo ${LAST_LINE} | cut -d ' ' -f 12 | sed 's/,/./'`
CPU_WAIT=`echo ${LAST_LINE} | cut -d ' ' -f 6 | sed 's/,/./' `
# Valeur des métriques de type cpu
echo "node_cpu_user ${CPU_USER}" >> ${METRIC_FILE}
echo "node_cpu_sys ${CPU_SYS}" >> ${METRIC_FILE}
echo "node_cpu_idle ${CPU_IDLE}" >> ${METRIC_FILE}
echo "node_cpu_wait ${CPU_WAIT}" >> ${METRIC_FILE}
# Copie du fichier des métriques dans le répertoire du node exporter
PROM_FILE=~/metrics/metric.prom
> ${PROM_FILE}
cp ${METRIC_FILE} ${PROM_FILE}
Pour stresser une VM sur différents aspects ( CPU, mémoire, disque, socket, ... ), il existe deux outils
stress et stress-ng pour le faire.