OpenTelemetry
The future Jaeger backend components will be based on OpenTelemetry collector . This integration will make all OpenTelemetry Collector features available in the Jaeger backend components.
The Jaeger OpenTelemetry backend components are published as Docker images:
| Component | Repository | 
|---|---|
| jaeger-agent | hub.docker.com/r/jaegertracing/jaeger-opentelemetry-agent/ | 
| jaeger-collector | hub.docker.com/r/jaegertracing/jaeger-opentelemetry-collector/ | 
| jaeger-ingester | hub.docker.com/r/jaegertracing/jaeger-opentelemetry-ingester/ | 
| all-in-one | hub.docker.com/r/jaegertracing/opentelemetry-all-in-one/ | 
Compatibility
The Jaeger OpenTelemetry binaries are almost backward compatible with the current Jaeger binaries.
The differences are:
- Health check port changed to 13133
- Not all current Jaeger flags are exposed (e.g. health check port)
- Exposed metrics
Configuration
Jaeger OpenTelemetry components can be configured by a subset of Jaeger current flags (or other configuration sources) and OpenTelemetry configuration file . The OpenTelemetry configuration takes precedence over Jaeger configuration. The Jaeger OpenTelemetry binaries use hardcoded default configuration that enables predefined set of components - Jaeger receiver, attribute processor, (storage) exporter. The opinionated default configuration ensures compatibility between Jaeger current binaries. The user provided OpenTelemetry configuration is merged with the default configuration.
Let’s have a look at the example configuration:
$ docker run --rm -it -v ${PWD}:/config \
    -e SPAN_STORAGE_TYPE=elasticsearch \
    jaegertracing/jaeger-opentelemetry-collector \
    --config-file=/config/config.yaml \
    --es.server-urls=http://localhost:9200 \
    --es.num-shards=3
The content of config.yaml:
exporters:
  jaeger_elasticsearch:
    es:
      server-urls: http://elasticsearch:9200
      num-replicas: 2
processors:
  attributes:
    actions:
      - key: user
        action: delete
service:
  pipelines:
    traces:
      processors: [attributes]
- Enables Jaeger receiver (by default) with collector endpoints - gRPC, TChannel, HTTP.
- Enables Elasticsearch backend with URL http://elasticsearch:9200, 3 primary shards (default is 5) and 2 replica shards (default 1). The CLI flag --es.server.urls=http://localhost:9200is superseded by the value from the configuration file.
- Enables attribute processor (disabled by default). Note that new components have to be explicitly added to the pipeline and component lists (e.g. processors) override the default configuration.
- Enables health check extension (by default).
The following command can be used to list all supported flags:
$ docker run --rm \
    -e SPAN_STORAGE_TYPE=elasticsearch \
    jaegertracing/jaeger-opentelemetry-collector:latest -h
Jaeger Operator
The following Jaeger custom resource (CR) deploys production instance connected to Elasticsearch cluster:
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: simple-prod
spec:
  strategy: production
  collector:
    image: jaegertracing/jaeger-opentelemetry-collector:latest # <1>
    config: # <2>
      extensions:
        health_check:
          port: 14269 # <3>
  storage:
    type: elasticsearch
    options:
      es:
        server-urls: http://elasticsearch:9200
<1> The image has to be explicitly specified.
<2> Config field exposes OpenTelemetry collector configuration. This field has been added to collector, agent, ingester and all-in-one CR nodes.
<3> Health check port has to match Jaeger component health check port from the deployment page.
Once Jaeger OpenTelemetry binaries are released in a stable stream the Jaeger Operator will automatically use a new set of images and properly change readiness probes to the new ports.
