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:
- OTLP receiver listening on port 55680
- 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 - OTLP receiver, 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:9200
is 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.