RousselTMLEARNING

Observabilité

Ingérer des logs OpenTelemetry dans Elasticsearch

Collecter et structurer des logs avec le Collector OpenTelemetry (receiver filelog, opérateurs, processeur transform, k8sattributes), les envoyer dans Elasticsearch et les interroger avec ES|QL.

1. Le modèle de log OTel #

Corps, sévérité, attributs, contexte.

Les champs #

Champ OTelStocké dans Elasticsearch (mode otel)
Bodybody.text (body.structured)
SeverityText / SeverityNumberseverity_text / severity_number
Attributesattributes.*
Resourceresource.attributes.* (service.name, host.name, k8s.pod.name)
TraceId / SpanIdtrace_id / span_id : lien direct avec la trace
Receiver, analyse, enrichissement, Elasticsearch.

2. Collecter des fichiers #

Le receiver filelog.

Configuration #

receivers:
  filelog:
    include: [/var/log/monapp/*.log]
    start_at: end
    operators:
      - type: regex_parser
        regex: '^(?P<ts>\S+) (?P<level>[A-Z]+) (?P<msg>.*)$'
        timestamp: { parse_from: attributes.ts, layout_type: gotime, layout: '2006-01-02T15:04:05Z07:00' }
        severity: { parse_from: attributes.level }
      - type: move
        from: attributes.msg
        to: body
processors:
  resource:
    attributes:
      - { key: service.name, value: monapp, action: upsert }
service:
  pipelines:
    logs: { receivers: [filelog], processors: [resource, batch], exporters: [elasticsearch] }
Bonne pratique : Renseignez toujours service.name : c'est la clé qui relie logs, traces et métriques d'un même service dans Kibana.

Kubernetes #

Sur Kubernetes, le Collector en DaemonSet lit /var/log/pods ; le processeur k8sattributes ajoute namespace, pod, déploiement et labels, indispensables pour filtrer.

3. Interroger et maîtriser les volumes #

ES|QL et filtrage.

Requêtes #

FROM logs-*.otel-*
| WHERE severity_text == "ERROR" AND @timestamp > NOW() - 1 hour
| STATS erreurs = COUNT(*) BY resource.attributes.service.name
| SORT erreurs DESC

Filtrer à la source #

processors:
  filter/debug:
    error_mode: ignore
    logs:
      log_record:
        - severity_number < SEVERITY_NUMBER_INFO
Erreur courante : Envoyer les logs de debug de toute la production : le volume, donc le coût de stockage, explose. Filtrez dans le Collector ou réduisez le niveau dans l'application.

Articles liés

Transforms et enrich : résumer et enrichir les données dans Elasticsearch

Créer des index centrés sur les entités avec les transforms pivot et latest, et enrichir les documents à l'in…

OpenTelemetry et Elasticsearch : compatibilité et architecture

Envoyer de l'OpenTelemetry vers Elasticsearch : Collector et exportateur elasticsearch, endpoint OTLP géré, A…

Traces OpenTelemetry dans Elasticsearch et Kibana APM

Instrumenter des applications avec les SDK OpenTelemetry ou EDOT, envoyer les traces à Elasticsearch, obtenir…

Pour aller plus loin

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !