Skip to main content

Jaeger

Jaeger is an open-source distributed tracing platform that helps you monitor and troubleshoot request flows across your integration services. WSO2 Integrator provides built-in Jaeger support through the OpenTelemetry protocol.

Prerequisites​

RequirementDetails
JaegerVersion 1.45 or later (all-in-one or production deployment)
BallerinaBuilt with --observability-included
NetworkIntegration must reach the Jaeger agent or collector

Step 1: Start Jaeger​

Run the Jaeger OpenTelemetry all-in-one image for development and testing:

docker run -d --name jaeger \
-p 13133:13133 \
-p 16686:16686 \
-p 4317:4317 \
jaegertracing/opentelemetry-all-in-one:latest
PortProtocolPurpose
4317gRPCOpenTelemetry collector (OTLP)
13133HTTPHealth check endpoint
16686HTTPJaeger UI

For production deployments with higher throughput, use the dedicated Jaeger collector and agent components.

Step 2: Configure Ballerina for Jaeger​

Import the Jaeger extension​

Navigate to your entry point file in the file explorer (typically main.bal in the project root) and add the following import statement at the top:

File path: main.bal (or your entry point)

import ballerinax/jaeger as _;

This enables Jaeger tracing capabilities in your Ballerina application.

Enable tracing in configuration​

Open Ballerina.toml by navigating file explorer and edit as follows

[build-options]
observabilityIncluded = true

Open the Config.toml file in your project root and add the following sections:

File path: Config.toml

[ballerina.observe]
tracingEnabled = true
tracingProvider = "jaeger"

[ballerinax.jaeger]
agentHostname = "localhost"
agentPort = 4317
samplerType = "const"
samplerParam = 1.0
reporterFlushInterval = 2000
reporterBufferSize = 1000

If Config.toml doesn't exist, create it in your project root directory.

Configuration options​

KeyTypeDefaultDescription
agentHostnamestring"localhost"Jaeger agent hostname
agentPortint4317Jaeger OpenTelemetry receiver port (gRPC)
samplerTypestring"const"Sampling strategy: const, probabilistic, ratelimiting
samplerParamfloat1.0Sampler parameter (1.0 = sample all)
reporterFlushIntervalint2000Flush interval in milliseconds
reporterBufferSizeint1000Maximum spans buffered

Sampling strategies​

StrategyParameterDescription
const1.0 (on) or 0.0 (off)Sample all or none
probabilistic0.0 to 1.0Probability of sampling each trace
ratelimitingtraces/secondFixed rate of traces per second

For production, use probabilistic or ratelimiting to reduce overhead.

Edit Config.toml to modify the sampler configuration:

File path: Config.toml

[ballerinax.jaeger]
samplerType = "probabilistic"
samplerParam = 0.1 # Sample 10% of traces

This configuration samples 10% of traces in production to reduce overhead while maintaining visibility into your system.

Step 3: View Traces​

Run the service and Open the Jaeger UI at http://localhost:16686:

  1. Select your service from the Service dropdown.
  2. Click Find Traces.
  3. Click a trace to view the span details.

What's next​

  • Zipkin — Alternative distributed tracing with Zipkin
  • Metrics — Collect and monitor metrics alongside traces
  • Overview — Full observability architecture