From ca2d6162770866124a8bc9cfc4aca6cead11295d Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Tue, 31 Mar 2026 22:17:02 +0100 Subject: [PATCH] refactor(telemetry): remove Jaeger service, exporter, and datasource Tempo is now the sole trace backend. Remove Jaeger all-in-one service from docker-compose, otlp/jaeger exporter from OTel Collector config, and Jaeger Grafana datasource provisioning file. Co-Authored-By: Claude Opus 4.6 (1M context) --- docker/telemetry/docker-compose.yml | 19 ++-------- .../provisioning/datasources/jaeger.yaml | 12 ------- docker/telemetry/otel-collector-config.yaml | 13 +++---- docs/build/telemetry.md | 35 +++++++++---------- 4 files changed, 23 insertions(+), 56 deletions(-) delete mode 100644 docker/telemetry/grafana/provisioning/datasources/jaeger.yaml diff --git a/docker/telemetry/docker-compose.yml b/docker/telemetry/docker-compose.yml index 491a3c78e7..b359cc5ce2 100644 --- a/docker/telemetry/docker-compose.yml +++ b/docker/telemetry/docker-compose.yml @@ -2,13 +2,12 @@ # # Provides services for local development: # - otel-collector: receives OTLP traces from rippled, batches and -# forwards them to Jaeger and Tempo. Listens on ports 4317 (gRPC) +# forwards them to Tempo. Listens on ports 4317 (gRPC) # and 4318 (HTTP). -# - jaeger: all-in-one tracing backend with UI on port 16686. # - tempo: Grafana Tempo tracing backend, queryable via Grafana Explore # on port 3000. Recommended for production (S3/GCS storage, TraceQL). -# - grafana: dashboards on port 3000, pre-configured with Jaeger, Tempo -# datasources. +# - grafana: dashboards on port 3000, pre-configured with Tempo +# datasource. # # Usage: # docker compose -f docker/telemetry/docker-compose.yml up -d @@ -31,21 +30,10 @@ services: volumes: - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml:ro depends_on: - - jaeger - tempo networks: - rippled-telemetry - jaeger: - image: jaegertracing/all-in-one:latest - environment: - - COLLECTOR_OTLP_ENABLED=true - ports: - - "16686:16686" # Jaeger UI - - "14250:14250" # gRPC - networks: - - rippled-telemetry - tempo: image: grafana/tempo:2.7.2 command: ["-config.file=/etc/tempo.yaml"] @@ -67,7 +55,6 @@ services: volumes: - ./grafana/provisioning:/etc/grafana/provisioning:ro depends_on: - - jaeger - tempo networks: - rippled-telemetry diff --git a/docker/telemetry/grafana/provisioning/datasources/jaeger.yaml b/docker/telemetry/grafana/provisioning/datasources/jaeger.yaml deleted file mode 100644 index e410cb854b..0000000000 --- a/docker/telemetry/grafana/provisioning/datasources/jaeger.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Grafana datasource provisioning for the rippled telemetry stack. -# Auto-configures Jaeger as a trace data source on Grafana startup. -# Access Grafana at http://localhost:3000, then use Explore -> Jaeger -# to browse rippled traces. - -apiVersion: 1 - -datasources: - - name: Jaeger - type: jaeger - access: proxy - url: http://jaeger:16686 diff --git a/docker/telemetry/otel-collector-config.yaml b/docker/telemetry/otel-collector-config.yaml index 61937af6b1..4dc5aaa2f6 100644 --- a/docker/telemetry/otel-collector-config.yaml +++ b/docker/telemetry/otel-collector-config.yaml @@ -1,10 +1,9 @@ # OpenTelemetry Collector configuration for rippled development. # -# Pipeline: OTLP receiver -> batch processor -> debug + Jaeger + Tempo. +# Pipeline: OTLP receiver -> batch processor -> debug + Tempo. # rippled sends traces via OTLP/HTTP to port 4318. The collector batches -# them and forwards to both Jaeger and Tempo via OTLP/gRPC on the Docker -# network. Jaeger provides a standalone UI at :16686; Tempo is queryable -# via Grafana Explore using TraceQL. +# them and forwards to Tempo via OTLP/gRPC on the Docker network. Tempo +# is queryable via Grafana Explore using TraceQL. receivers: otlp: @@ -22,10 +21,6 @@ processors: exporters: debug: verbosity: detailed - otlp/jaeger: - endpoint: jaeger:4317 - tls: - insecure: true otlp/tempo: endpoint: tempo:4317 tls: @@ -36,4 +31,4 @@ service: traces: receivers: [otlp] processors: [batch] - exporters: [debug, otlp/jaeger, otlp/tempo] + exporters: [debug, otlp/tempo] diff --git a/docs/build/telemetry.md b/docs/build/telemetry.md index 8f6b6755e2..fce29ae719 100644 --- a/docs/build/telemetry.md +++ b/docs/build/telemetry.md @@ -16,10 +16,10 @@ This document explains how to build rippled with OpenTelemetry distributed traci - [Observability Stack](#observability-stack) - [Start the stack](#start-the-stack) - [Verify the stack](#verify-the-stack) - - [View traces in Jaeger](#view-traces-in-jaeger) + - [View traces in Grafana Explore](#view-traces-in-grafana-explore) - [Running Tests](#running-tests) - [Troubleshooting](#troubleshooting) - - [No traces appear in Jaeger](#no-traces-appear-in-jaeger) + - [No traces appear in Grafana](#no-traces-appear-in-grafana) - [Conan lockfile error](#conan-lockfile-error) - [CMake target not found](#cmake-target-not-found) - [Architecture](#architecture) @@ -31,7 +31,7 @@ This document explains how to build rippled with OpenTelemetry distributed traci Rippled supports optional [OpenTelemetry](https://opentelemetry.io/) distributed tracing. When enabled, it instruments RPC requests with trace spans that are exported via OTLP/HTTP to an OpenTelemetry Collector, which forwards them to a tracing backend -such as Jaeger. +such as Grafana Tempo. Telemetry is **off by default** at both compile time and runtime: @@ -153,11 +153,11 @@ trace_peer=0 A Docker Compose stack is provided in `docker/telemetry/` with three services: -| Service | Port | Purpose | -| ------------------ | ---------------------------------------------- | ---------------------------------------------------- | -| **OTel Collector** | `4317` (gRPC), `4318` (HTTP), `13133` (health) | Receives OTLP spans, batches, and forwards to Jaeger | -| **Jaeger** | `16686` (UI) | Trace storage and visualization | -| **Grafana** | `3000` | Dashboards (Jaeger pre-configured as datasource) | +| Service | Port | Purpose | +| ------------------ | ---------------------------------------------- | --------------------------------------------------- | +| **OTel Collector** | `4317` (gRPC), `4318` (HTTP), `13133` (health) | Receives OTLP spans, batches, and forwards to Tempo | +| **Tempo** | `3200` (HTTP API) | Trace storage backend | +| **Grafana** | `3000` | Dashboards (Tempo pre-configured as datasource) | ### Start the stack @@ -171,18 +171,15 @@ docker compose -f docker/telemetry/docker-compose.yml up -d # Collector health curl http://localhost:13133 -# Jaeger UI -open http://localhost:16686 - -# Grafana +# Grafana (Explore -> Tempo for traces) open http://localhost:3000 ``` -### View traces in Jaeger +### View traces in Grafana Explore -1. Open `http://localhost:16686` in a browser. -2. Select the service name (e.g. `rippled`) from the **Service** dropdown. -3. Click **Find Traces**. +1. Open `http://localhost:3000` in a browser. +2. Navigate to **Explore** and select the **Tempo** datasource. +3. Use **Search** or **TraceQL** to find traces by service name (e.g. `rippled`). 4. Click into any trace to see the span tree and attributes. Traced RPC operations produce a span hierarchy like: @@ -229,13 +226,13 @@ curl -s -X POST http://127.0.0.1:5005/ \ ## Troubleshooting -### No traces appear in Jaeger +### No traces appear in Grafana 1. Confirm the OTel Collector is running: `docker compose -f docker/telemetry/docker-compose.yml ps` 2. Check collector logs for errors: `docker compose -f docker/telemetry/docker-compose.yml logs otel-collector` 3. Confirm `[telemetry] enabled=1` is set in the rippled config. 4. Confirm `endpoint` points to the correct collector address (`http://localhost:4318/v1/traces`). -5. Wait for the batch delay to elapse (default `5000` ms) before checking Jaeger. +5. Wait for the batch delay to elapse (default `5000` ms) before checking Grafana Explore. ### Conan lockfile error @@ -265,7 +262,7 @@ The Conan package provides a single umbrella target | `src/xrpld/telemetry/TracingInstrumentation.h` | Convenience macros (`XRPL_TRACE_RPC`, etc.) | | `src/xrpld/rpc/detail/ServerHandler.cpp` | RPC entry point instrumentation | | `src/xrpld/rpc/detail/RPCHandler.cpp` | Per-command instrumentation | -| `docker/telemetry/docker-compose.yml` | Observability stack (Collector + Jaeger + Grafana) | +| `docker/telemetry/docker-compose.yml` | Observability stack (Collector + Tempo + Grafana) | | `docker/telemetry/otel-collector-config.yaml` | OTel Collector pipeline configuration | ### Conditional compilation