vendredi 10 mars 2023

Observabilité

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.

vendredi 3 mars 2023

Kafka

 Sur le sujet, un livre:

Kafka: The Definitive Guide

Real-Time Data and Stream Processing at Scale

Gwen Shapira, Todd Palino,Rajini Sivaram & Krit Petty

et un site didactique: https://www.conduktor.io/kafka/