Logs et traces¶
Structured logging, centralisation, traces distribuées et OpenTelemetry.
Structured logging¶
Le logging structure consiste à produire des logs en format machine-readable (JSON) plutôt que du texte libre.
Texte vs JSON¶
| Critère | Texte libre | JSON structure |
|---|---|---|
| Lisibilite humaine | Bonne | Moyenne (avec outils) |
| Requetabilite | Regex fragile | Filtres précis sur champs |
| Parsing | Regex sur chaque format | Schéma cohérent |
| Agrégation | Difficile | Native |
Champs standards recommandes¶
| Champ | Description | Exemple |
|---|---|---|
| timestamp | Date ISO 8601 | 2024-03-15T10:23:45Z |
| level | Sévérité | info, warn, error |
| service | Nom du service émetteur | payment-api |
| trace_id | Identifiant de trace | abc123def456 |
| request_id | Identifiant de requête | req-789xyz |
| message | Message lisible | Order processed |
| error | Erreur éventuellement | timeout after 5s |
Correlation ID obligatoire
Sans trace_id ou request_id dans les logs, retrouver tous les logs d'une requête traversant plusieurs services est quasi impossible. Propagez le contexte systematiquement.
Centralisation des logs¶
graph LR
A["Application A"] --> AG["Agent\n(Fluentd / Vector)"]
B["Application B"] --> AG
C["Systeme / OS"] --> AG
AG --> AGG["Agregateur\n(Loki / Elasticsearch)"]
AGG --> ST["Stockage\n(S3 / disque)"]
AGG --> Q["Requetes\n(Grafana / Kibana)"]
Q --> OP["Operateurs"] Stacks de centralisation des logs¶
| Stack | Composants | Points forts |
|---|---|---|
| PLG (Grafana) | Promtail + Loki + Grafana | Léger, intégré Grafana, pas de full-text search |
| ELK | Filebeat + Elasticsearch + Kibana | Full-text search puissant, coûteux en ressources |
| EFK | Fluentd + Elasticsearch + Kibana | Fluentd plus flexible que Filebeat |
| Graylog | Sidecar + Graylog + MongoDB | Interface opérationnelle, alerting intégré |
Traces distribuées¶
Une trace représenté le chemin complet d'une requête à travers plusieurs services.
Concepts¶
| Concept | Définition |
|---|---|
| Trace | Ensemble de spans représentant une requête de bout en bout |
| Span | Unite de travail dans un service (une opération, un appel DB) |
| Parent span | Span qui a initié les spans enfants |
| Propagation | Transmission du contexte de trace entre services (headers HTTP) |
| Sampling | Fraction des traces effectivement collectees |
Propagation de contexte¶
Le contexte de trace se propagé via des headers HTTP standardises (W3C Trace Context) :
traceparent: identifiant de trace et span couranttracestate: données vendeur spécifiques
Sans propagation correcte, les spans de différents services ne peuvent pas être assembles en trace cohérente.
OpenTelemetry¶
OpenTelemetry (OTel) est le standard CNCF unifiant la collecte de logs, métriques et traces.
Architecture¶
| Composant | Rôle |
|---|---|
| API | Interface d'instrumentation dans le code applicatif |
| SDK | Implémentation de l'API par langage |
| Collector | Agent/gateway recevant, transformant et exportant les telemetries |
| OTLP | Protocole de transport universel |
Avantages¶
- Un seul SDK par langage pour les 3 signaux (logs, métriques, traces)
- Vendor-neutral : exporter vers Jaeger, Zipkin, Prometheus, Datadog...
- Auto-instrumentation disponible pour les frameworks majeurs
- Standard CNCF avec adoption massive
OpenTelemetry est le futur
Les SDK propriétaires (Datadog, Jaeger natif) sont en recul face à OTel. Instrumentez avec OTel et choisissez le backend independamment. Cela evite le vendor lock-in sur l'instrumentation.
Correlation logs / métriques / traces¶
La vraie valeur de l'observabilité vient de la correlation entre les 3 piliers.
| Scenario | Piliers utilisés |
|---|---|
| Alerte latence p99 en hausse | Métrique → trace (trouver la requête lente) |
| Erreur 500 mysterieuse | Métrique → log (message d'erreur) → trace (appel échoué) |
| Dégradation après déploiement | Métrique (avant/après) + annotation + log (exception) |
Correlation pratique¶
- Ajouter le
trace_iddans les logs permet de passer d'un log à la trace complète en un clic - Grafana permet de naviguer entre Loki (logs), Prometheus (métriques) et Tempo (traces) avec un identifiant commun
Outils¶
| Outil | Catégorie | Notes |
|---|---|---|
| OpenTelemetry Collector | Agent universel | Standard CNCF recommande |
| Jaeger | Traces | Open source, CNCF graduated |
| Zipkin | Traces | Simple, historique |
| Grafana Tempo | Stockage traces | Intégré PLG, bas coût |
| Loki | Logs | Léger, labels comme Prometheus |
| Elasticsearch | Logs + recherche | Puissant mais lourd |
| Vector | Agent logs/métriques | Performant, configuration flexible |