RousselTMLEARNING

TP · OpenTelemetry: From Discovery to Expertise

Lab: OpenTelemetry logs correlated with traces and file collection

What you will learn in this TP
  • Connect an existing logger to OpenTelemetry
  • Correlate logs and traces
  • Collect files with filelog

Introduction #

What you will learn in this section
  • Connect an existing logger to OpenTelemetry
  • Correlate logs and traces
  • Collect files with filelog

Context. Billing logs are text files nobody links to traces. You connect the modern service to OpenTelemetry and collect the legacy application's logs without changing it.

Prerequisites: Docker and Python 3.10 or later; the grafana/otel-lgtm stack (Collector, Tempo, Loki, Prometheus, Pyroscope and Grafana in one container)  ·  Estimated time: 45 min

Structured logs correlated with traces, from both collection paths.

Hands-on #

Guided steps, with their solution.

  1. 1. Start the observability stack

    Why? A single image provides an OTLP Collector and every backend: focus on the signal.

    Start grafana/otel-lgtm, create a Python environment and point exporters to OTLP/HTTP port 4318.
  2. 2. Connect the logging module

    Why? The LoggingHandler turns each logging call into an OpenTelemetry LogRecord, with the active trace context.

    Write facturation.py: a LoggerProvider with OTLP exporter, a handler added to the root logger, a TracerProvider, and INFO and ERROR logs emitted inside spans.
  3. 3. Query and correlate in Grafana

    Why? The trace_id carried by each log lets you jump from the log to the trace and back.

    In Explore > Loki, show the service's errors, expand a line and spot trace_id, span_id, severity and your attributes. Open the linked trace, then from a Tempo span show its logs.
  4. 4. Collect a legacy application's logs

    Why? Without touching code, the filelog receiver reads files and parses JSON, severity and trace context.

    Generate a JSON log file, then run a contrib Collector on the same network as the stack, with filelog, json_parser, trace_parser and a resource processor setting service.name.
  5. 5. Reduce and mask

    Why? The Collector removes noise and personal data before storage.

    Add a filter processor dropping INFO logs and a transform masking e-mail addresses in the body, then check in Loki.

Difficulty level : ●●●○○ (3/5)

My progress

  • ⏱ Estimated time : ≈ 45 min

Sign in to track your progress and take notes. Sign in

✉️ Ask a question

Recommended Articles

Les logs avec OpenTelemetry : modèle de données, appenders, corrélation et collecte

Maîtriser le signal log : modèle de données LogRecord, Logs Bridge API et appenders (Logback, Log...

Understanding the concept of score

The concept of score allows Elasticsearch to rank your documents by relevance during a search.

Understanding the Elastic Common Schema (ECS)

As always in our consulting engagements, we recommend that companies harmonise and standardise: k...

License consumption types

Understand the evolution of billing in Dynatrace: the difference between the old licensing model ...

Grafana Alloy: The importance of Self-Monitoring

Discover why and how to configure Grafana Alloy so that it monitors itself, collecting its own lo...

Grafana Alloy: Understanding and exploiting the User Interface (UI)

Discover how to enable, secure, and use Grafana Alloy's built-in web interface to visualize your ...

Grafana Alloy: Introduction and Architecture

Discover the fundamental concepts of Grafana Alloy, the transition from the static Agent to Alloy...

Grafana Alloy: Syntax and Configuration (Alloy Language: River)

As part of a Grafana training or observability training, master the declarative syntax of Grafana...

Grafana Alloy: Metrics Collection (Prometheus & Ecosystem)

Learn how to configure Grafana Alloy to collect, transform, and forward metrics using the Prometh...