OpenSearch
Introduction
Supported OpenSearch versions: 3.x
OpenSearch maintains API consistency across releases and remains compatible with Elasticsearch 7.10.2. The OpenSearch version is automatically retrieved from the root/ping endpoint. Based on this version, Jaeger uses compatible index mappings and the OpenSearch REST API. The version can be explicitly provided via the version: config property.
OpenSearch does not require initialization other than installing and running OpenSearch. Once it is running, pass the correct configuration values to Jaeger.
Jaeger uses the same storage implementation for OpenSearch as for Elasticsearch. Most configuration options behave the same way, so refer to the Elasticsearch documentation for the shared details.
Configuration
A sample configuration for Jaeger with the OpenSearch backend is available in the Jaeger repository: config-opensearch.yaml. Because OpenSearch shares the Elasticsearch implementation, please refer to config.go as the authoritative source for the available options.
Shards and Replicas
Shards and replicas are configuration values to take special attention to, because they are decided upon index creation. The guidance in Shards and Replicas for Elasticsearch applies to OpenSearch as well.
Query Time Range
max_span_age and max_trace_duration behave the same way as for Elasticsearch, see Query Time Range. Because Alauda Distributed Tracing always uses time-based indices (rotation.periodic) with OpenSearch, max_span_age is effective here, unlike with the alias-based rotation strategies of Elasticsearch. Align it with the retention enforced by jaeger-es-index-cleaner.
Because Alauda Distributed Tracing stores OpenSearch data in daily time-based indices, the max_trace_duration default of 24h (raised from a hardcoded ±1h in Jaeger v2.20.0) always adds one extra daily index on each side of the requested time range. If your traces are short-lived, lower max_trace_duration to reduce the number of indices scanned per query.
Index management
The jaeger-es-rollover tooling and Index Lifecycle Management (ILM) are specific to Elasticsearch and are not used with OpenSearch. OpenSearch uses the Index State Management (ISM) plugin rather than ILM, and the jaeger-es-rollover init command calls the Elasticsearch _ilm/policy/... endpoint, which is not compatible with the OpenSearch _plugins/_ism/policies/... API.
For OpenSearch, Alauda Distributed Tracing uses daily time-based indices together with the jaeger-es-index-cleaner to enforce retention. The cleaner periodically deletes date-suffixed indices (<prefix>-jaeger-(span|service|dependencies|sampling)-YYYY-MM-DD) that are older than the configured retention period, without relying on rollover aliases.
For deployment steps, see Installing Alauda Distributed Tracing with OpenSearch.