Observabilité
Monitoring (supervision)
Collecte de métriques sur les
ressources (CPU, mémoire, disque, réseau)
performances (temps de réponse, latence, débit)
erreurs (code HTTP, exceptions, logs)
...
Observabilité
Mesure de l'inférence de l'état interne d'un système à partir de ses observations externes
Trois piliers
Logs (journalisation)
Métriques (monitoring)
Traces (suivi)
Observabilité vs Monitoring
Monitoring
action de surveiller
dit s'il y a un problème
Observabilité
capacité à être surveillé
capacité à trouver et comprendre le problème
= Monitoring + Logs + Traces
Métriques DORA
DevOps Research and Assessment de Google
4 indicateurs de performance
Deployment Frequency : fréquence de déploiement réussi en prod
Lead Time for Changes : temps d'exécution des changements (commit → prod)
Change Failure Rate : taux d'échec des changements
(Mean) Time to Restore Service (MTTR) : temps de rétablissement (moyen) du service
Métriques DORA

https://platformengineering.org/talks-library/track-dora-devops-metrics-with-logilica-and-humanitec
Dashboard DORA

Métriques DORA

Monitoring avec ELK
Elasticsearch : moteur de recherche et base de données
Logstash : agrège et transforme les données
ETL : Extract-transform-load
Kibana : interface de visualisation et d'exploration de données
Beats : collecte de données (agent)
Open source par Elastic
ELK Stack

ELK Stack

Monitoring Stack
| ELK | Alternative |
|---|---|---|
Collect | Beats | Fluentd |
Process | Logstash | Grafana Loki |
Store | Elasticsearch | Grafana Loki |
Visualize | Kibana | Grafana |
Alert | Kibana | Grafana |
Combinable !
Collecte
Agent
Indépendant du code
Lis la sortie standard (stdout) ou les fichiers de logs
Définition des métriques dans l'agent
Client/Library
Ajoute une nouvelle dépendance au code
Modification du code pour envoyer les logs
Définition des métriques dans le code
Agent
Client/Library
https://opentelemetry.io/docs/collector/deployment/no-collector/
Fluentd Java
import java.util.HashMap;
import java.util.Map;
import org.fluentd.logger.FluentLogger;
public class Main {
private static FluentLogger LOG = FluentLogger.getLogger("fluentd.test");
public void doApplicationLogic() {
// ...
Map<String, Object> data = new HashMap<String, Object>();
data.put("from", "userA");
data.put("to", "userB");
LOG.log("follow", data);
// ...
}
}
Elasticsearch
Moteur de recherche et base de données
Utilise Lucene pour l'indexation et la recherche de texte
Cluster de noeuds (distribué)
API REST