Résumé
La première façon d’instrumenter une application avec OpenTelemetry est aussi la plus directe: l’agent Java est attaché à chaque service et envoie les traces à un seul outil, Zipkin. Une trace suit une requête à travers HTTP et Kafka sans écrire une ligne de code, mais chaque service connaît désormais son outil, et en ajouter un second oblige à reconfigurer et redémarrer tous les services.
Le collecteur OpenTelemetry se place entre les services et les outils. Les agents lui envoient traces, métriques et logs en OTLP; il les reçoit, les traite et les exporte, signal par signal, vers autant de destinations que nécessaire. Le déploiement de référence présenté ici collecte les données d’une application Java, de PostgreSQL et d’un broker ActiveMQ, ainsi que des fichiers de logs, le syslog et les métriques des hôtes, et alimente au choix une pile OpenSearch ou une pile Grafana Loki, Tempo et Mimir, sans rien changer côté sources.
Chaque composant du collecteur porte un niveau de stabilité, alpha, bêta ou stable, et ce niveau varie selon le signal: en mars 2023, OTLP est stable pour les traces et les métriques mais encore bêta pour les logs, et le récepteur syslog est alpha. L’article en fait une donnée de conception, puis donne les règles de déploiement: un collecteur proche des applications et par environnement, dimensionné par domaine métier, une passerelle en production, et le filtrage des données sensibles avant leur envoi.
Idées clés
- Exporter directement vers un outil lie chaque service à cet outil: ajouter ou remplacer une destination oblige à toucher tous les services.
- Le collecteur découple les deux côtés: les services ne connaissent qu’un point d’entrée OTLP, et chaque pipeline relie des récepteurs, des processeurs et des exportateurs pour un signal donné.
- Le même collecteur peut alimenter une pile OpenSearch ou une pile Grafana: on standardise la collecte, pas l’outil, et deux environnements peuvent utiliser deux outils différents.
- Le niveau de stabilité de chaque composant, par signal, est une donnée de conception: un composant alpha a sa place sur un chemin non critique, et un flux critique garde une solution de repli.
- En production, le collecteur se déploie près des applications, par environnement et par domaine métier, derrière une passerelle, et filtre les données sensibles avant de les transmettre.