@super-dev.app · Full-stack · ★ ouvert aux missions
12,8k abonnés·47 vidéos·Actif depuis 2017
Développeur full-stack .NET / Angular avec une casquette DevOps sur Azure Cloud. Aussi à l'aise sur Flutter + Firebase. Je construis des produits, je les déploie, je les surveille.
Quand une requête traverse trois services et qu'elle est lente, les logs seuls ne disent pas où . L'observabilité moderne repose sur trois signaux corrélés — traces, métriques, logs — et OpenTelemetry en est le standard vendor-neutral : on instrumente une fois, on exporte vers n'importe quel backend (Jaeger, Prometheus, Azure Monitor) sans réécrire le code.
Trois signaux, une seule API
OpenTelemetry unifie les trois piliers de l'observabilité. Les traces suivent une requête de bout en bout via une suite de spans corrélés par un trace_id . Les métriques agrègent des compteurs et histogrammes (taux de requêtes, latence p95). Les logs apportent le contexte textuel, désormais rattaché au trace_id courant. .NET expose nativement ces concepts via System.Diagnostics.Activity (les spans) et System.Diagnostics.Metrics .
L' auto-instrumentation couvre gratuitement l'essentiel : AddAspNetCoreInstrumentation crée un span par requête entrante, AddHttpClientInstrumentation propage le contexte sur les appels sortants — la corrélation inter-services se fait toute seule via les en-têtes traceparent du standard W3C. Pour la logique métier, on ajoute des spans manuels afin de mesurer une opération précise et d'y attacher des attributs métier.
Les attributs ( SetTag ) transforment une trace en outil de debug : on filtre par order.total > 1000 ou on repère le span précis qui a explosé en latence.
L'exporteur OTLP et le Collector
OTLP (OpenTelemetry Protocol) est le format de transport commun. Plutôt que d'exporter directement vers un backend, on envoie tout au Collector : un processus intermédiaire qui reçoit, transforme (batching, échantillonnage, filtrage des attributs sensibles) et redistribue vers une ou plusieurs destinations. L'app ne connaît qu' un endpoint ; changer de backend devient une modification de config côté Collector, pas un redéploiement.
YAML
1receivers:
2otlp:
3protocols:
4grpc:
5endpoint: 0.0.0.0:4317
6processors:
7batch:
8timeout: 5s
9exporters:
10prometheus:
11endpoint: 0.0.0.0:8889
12otlp/jaeger:
13endpoint: jaeger:4317
14service:
15pipelines:
16traces:
17receivers: [otlp]
18processors: [batch]
19exporters: [otlp/jaeger]
20metrics:
21receivers: [otlp]
22processors: [batch]
23exporters: [prometheus]
L'app pointe vers le Collector via OTEL_EXPORTER_OTLP_ENDPOINT , une variable d'environnement standard. La documentation OpenTelemetry couvre l'échantillonnage ( ParentBased , TraceIdRatioBased ) indispensable en prod pour ne pas crouler sous le volume de traces.
Instrumenter avec OpenTelemetry, c'est découpler son code de son outil de monitoring. Le jour où l'on migre de Jaeger vers Azure Monitor, on ne touche pas à une seule ligne d'app : on change l'exporteur du Collector.