The OpenTelemetry Collector Contrib contains everything in the opentelemetry-collector release, be sure to check the release notes there as well.
Unmaintained Components
These components are marked as Unmaintained and will eventually be removed from our community distributions. If you depend on these components we need your help to support them.
- exporter/logicmonitor
- exporter/azuredataexplorer
- receiver/flinkmetrics
End User Changelog
🛑 Breaking changes 🛑
-
connector/service_graph: Remove stable connector.servicegraph.virtualNode gate (#52239) -
exporter/prometheus: Always preserve leading and consecutive underscores in label names. (#50429)
Remove-pkg.translator.prometheus.PermissiveLabelSanitizationfrom--feature-gates; disabling this gate now causes a startup error. -
exporter/prometheus_remote_write: Always preserve leading and consecutive underscores in label names. (#50429)
Remove-pkg.translator.prometheus.PermissiveLabelSanitizationfrom--feature-gates; disabling this gate now causes a startup error. -
pkg/azurelogs: Promote thepkg.translator.azurelogs.EmitV1LogConventionsandpkg.translator.azurelogs.DontEmitV0LogConventionsfeature gates to beta. (#52096)
code.function.nameandcode.file.pathare now emitted instead ofcode.functionandcode.filepathby default.
The gates no longer control theevent.nameresource attribute, which is always emitted. -
pkg/coreinternal: Promote internal.coreinternal.goldendataset.DontEmitV0HTTPConventions and internal.coreinternal.goldendataset.EmitV1HTTPConventions feature gates to Beta (#45293, #45089)
Both feature gates should be promoted together as per RFC.
goldendataset now generates spans with user_agent.original, network.protocol.name,
network.protocol.version, client.address, and http.response.status_code (semconv v1.40.0)
by default, and no longer generates the deprecated http.user_agent, http.flavor
(semconv v1.19.0), http.client_ip, and http.status_code (semconv v1.25.0) attributes.
The http.status_code migration is now wired to these gates so that round-trip translation
stays consistent with pkg.translator.zipkin's HTTP semantic convention feature gates. -
pkg/ottl: Remove the stableottl.set.allowNilfeature gate. (#48714) -
pkg/translator/pprof: Return an error instead of panicking when profiling data contains invalid profile references. (#51908) -
pkg/zipkin: Promote "pkg.translator.zipkin.EmitV1HttpConventions", "pkg.translator.zipkin.DontEmitV0HttpConventions", "pkg.translator.zipkin.EmitV1ScopeConventions", and "pkg.translator.zipkin.DontEmitV0ScopeConventions" feature gates to Beta. (#50909)
This changes the default behavior to emit the new semantic convention attributes instead of the old deprecated ones.
The Zipkin translator will now usehttp.response.status_code(replacinghttp.status_code),otel.scope.name
(replacingotel.library.name), andotel.scope.version(replacingotel.library.version) by default when emitting spans. -
processor/drain: Reject invalid configurations at startup, including negativemax_clustersand empty attribute names. (#51677)
Startup validation now rejectsmax_node_children<= 0, negativemax_clusters, emptytemplate_attribute,
emptywildcards_attributewhenemit_wildcardsis set, and emptyparameter_key_prefixwhenmasking_rulesare configured. -
processor/filter: remove stable processor.filter.defaultErrorModeIgnore gate (#52238) -
receiver/file_log: Promote thefilelog.protobufCheckpointEncodingfeature gate to stable. Checkpoints are always written as protobuf. (#43266, #52037)
The feature gate can no longer be disabled and will be removed in v0.165.0.
Existing JSON checkpoints are still read and are rewritten as protobuf on the next save. -
receiver/kubelet_stats: Remove the deprecatedaws.volume.id,fs.type,gce.pd.name,glusterfs.endpoints.name,glusterfs.pathandpartitionresource attributes. (#40477) -
receiver/mongodb: Changemongodb.operation.latency.timefrom a gauge to a monotonic cumulative sum (#51909)
opLatencies.*.latencyis a cumulative total, so the metric is now a monotonic sum like every
other cumulative duration in the receiver. It isenabled: falseandstability: development. -
receiver/prometheus: Remove the stablereceiver.prometheusreceiver.IgnoreScopeInfoMetricfeature gate. (#47312)
🚩 Deprecations 🚩
exporter/azuredataexplorer: Mark component as unmaintained (#52055)exporter/logicmonitor: Mark component as unmaintained (#52152)extension/google_client_auth: Rename the googleclientauth extension to google_client_auth. The old name remains available as a deprecated alias. (#45339)processor/probabilistic_sampler: Add theotelcol_processor_probabilistic_sampler_count_spans_processedmetric and deprecateotelcol_processor_probabilistic_sampler_count_traces_sampledin favor of it. (#50954)
The deprecated metric remains available for compatibility.processor/transform: Deprecate theflatten_dataoption in favor of the newflatten.logoption. (#51766)
Replaceflatten_data: truewithflatten: {log: true}.flatten_datawill be removed in a future release.receiver/kafka: Deprecate the built-injaeger_protoandjaeger_jsonencodings in favour ofjaegerencodingextension. (#39113)receiver/kafka: Deprecatepartition_processing.max_buffered_batchesin favour ofpartition_processing.max_prefetch.batches. It will be removed in v0.166.0. (#52253)receiver/kafka: Deprecate the built-injsonlogs encoding in favour ofjsonlogencodingextension. (#39113)receiver/riak: Update the stability of the receiver frombetatounmaintained(#52051)
🚀 New components 🚀
-
extension/redis_fleet_tracker: Add the redis_fleet_tracker extension, which reports a collector fleet's live member count so adaptive_tail_sampling can treat goal_throughput as a fleet-wide budget. (#50577) -
processor/verify: Addverifyprocessor, a new processor that verifies RFC 8785 (JCS) canonical integrity attributes (audit.integrity.value) on log records using HMAC and/or certificate public keys. Designed as the verification counterpart tosigningprocessorfor the OpenTelemetry Audit Logging signal. (#51383)
This initial PR donates the component skeleton (config, factory, README). Concrete verification logic follows in a subsequent PR. -
receiver/gnmi: Introduce the gNMI receiver (#50848) -
receiver/nats: Add the NATS receiver to receive traces, metrics, and logs from a NATS server (skeleton; in development). (#50735)
💡 Enhancements 💡
-
cmd/opampsupervisor: Add anagent::stop_grace_periodconfig option to control how long the Supervisor waits for the Collector to exit after a graceful shutdown signal before forcibly killing it. (#50000)
Defaults to 10s when unset. -
exporter/awscloudwatchlogs: resolve {ClusterName} placeholder via k8s.cluster.name attribute (#51601) -
exporter/awss3: Addaccess_keyandsecret_keyoptions to configure static AWS credentials (#52140) -
exporter/awsxray: Add feature gates to migrate semantic conventions from v1.12.0 to v1.40.0 (#46537)
Four new alpha feature gates control the migration:exporter.awsxray.EmitV1HTTPNetworkConventions: reads HTTP/network span attributes using semconv v1.40.0 keys (e.g. http.request.method, server.address, server.port, client.address).exporter.awsxray.DontEmitV0HTTPNetworkConventions: stops reading deprecated v1.12.0 HTTP/network attribute keys. Requires EmitV1HTTPNetworkConventions to also be enabled.exporter.awsxray.EmitV1DBConventions: reads database span attributes using semconv v1.40.0 keys (db.namespace, db.system.name, db.query.text, user.name).exporter.awsxray.DontEmitV0DBConventions: stops reading deprecated v1.12.0 database attribute keys. Requires EmitV1DBConventions to also be enabled.
All gates default to disabled, preserving existing behavior. Enable the EmitV1 gate first for dual-read, then enable the DontEmitV0 gate once upstream instrumentation has migrated.
-
exporter/clickhouse: Added a Bloom Filter data skipping index (idx_event_name) to the EventName column with a 0.01 false positive rate and granularity 1. (#49310) -
exporter/elasticsearch: Additionally retry context deadlines that expire before the connection is ready, including DNS, TCP handshake, and TLS handshake timeouts. (#52102)
A context deadline after the connection is ready, including while the request is being written or while waiting for the response, is still not retried. -
exporter/elasticsearch: Add opt-intelemetry::include_destination_indexto add the destination index as an attribute to theotelcol.elasticsearch.docs.processedmetric (#52108) -
exporter/elasticsearch: Convert explicit bounds OTLP histograms to exponential histograms (#52113)
In OTel mapping mode, explicit-bounds histograms are stored as the nativeexponential_histogramfield when
connected to Elasticsearch 9.4.0 or later; setversion_detection.enabled: falseto keep T-Digest histograms. -
extension/json_log_encoding: Set the observed timestamp of unmarshaled log records to the time the payload was decoded. (#39113) -
extension/opamp: Report component status attributes in OpAMP health messages. (#50330) -
extension/opamp: Addreports_heartbeatcapability, enabled by default, to allow the OpAMP server to configure the agent's heartbeat interval (#51427) -
extension/redis_storage: AddIncrementByandBatchIncrementByfor atomic integer counters shared across Collector instances. (#51567) -
pkg/kafka/configkafka: Adddial_timeoutconfiguration option to control the timeout for establishing connections to Kafka brokers. (#51910) -
pkg/ottl: Promote traces, metrics, and logs signals from beta to stable. (#51068, #47305) -
processor/adaptive_tail_sampling: Add a metric to track multiple root span condition matches (#51458)
Adds the otelcol_processor_adaptive_tail_sampling_root_span_condition_multiple_matches
histogram, which records the number of spans matching the root span condition
for traces where the condition matches more than once. -
processor/cardinality_guardian: Reuse sparse HLL sketches on epoch rotation to cut allocations (#51059) -
processor/k8s_attributes: Add experimental kubelet/podspolling as an opt-in pod metadata source. (#14475) -
processor/partitioning: Promote logs, metrics and traces to alpha and add the processor to the contrib distribution. (#39199) -
processor/partitioning: Addotelcol.processor.partitioning.partitionsandotelcol.processor.partitioning.key_evaluation.errorsinternal telemetry metrics. (#39199) -
processor/resource_detection: Addattributes.includedandattributes.excludedoptions to theenvdetector to filter which attribute keys fromOTEL_RESOURCE_ATTRIBUTESare emitted. Both lists support*and?as wildcards, andexcludedis applied afterincluded. (#49970) -
processor/resource_detection: Define EC2 retry defaults locally instead of importing them from the AWS SDK. Defaults remain 3 attempts and 20s maximum backoff. (#47218) -
receiver/google_cloud_spanner: Add date value type for labels to support Spanner DATE columns & add Supported Optimizer Version table (#51734) -
receiver/google_cloud_spanner: Add table sizes per locality group metrics (used_ssd_bytes,used_hdd_bytes) to monitor SSD and HDD storage usage. (#51550) -
receiver/google_cloud_spanner: Add row deletion policies metrics andtimestamplabelvalue_typesupport ingooglecloudspannerreceiver. (#52030) -
receiver/google_cloud_spanner: Add new SSD, HDD, and Columnar table size metrics for Spanner. (#51269) -
receiver/google_cloud_spanner: Add column operations stats metrics (read_count,query_count,write_count) to monitor how table columns are accessed and modified. (#51545) -
receiver/google_cloud_spanner: Add missing labels and execution metrics to top minute query stats ingooglecloudspannerreceiver. (#51809) -
receiver/google_cloud_spanner: Add missing columns of top and total minute read stats (#51733) -
receiver/google_cloud_spanner: Add table operations stats metrics (read_query_count,write_count,delete_count) to monitor how tables are accessed and modified. (#51336) -
receiver/google_cloud_spanner: Add oldest active queries metrics andhide_client_ip_addressconfiguration to maskclient_ip_addressin oldest_active_queries ingooglecloudspannerreceiver. (#52089) -
receiver/k8s_objects: Add an opt-in informer-based observer behind thereceiver.k8sobjects.useInformerObserverfeature gate. (#43602) -
receiver/kafka: Makemax_decompress_batch_bytesconfigurable in the Kafka receiver consumer configuration. (#51845) -
receiver/kafka: Addpartition_processing.max_in_flight.window. Set it tocross_fetchso exporters that wait to fill a batch, for example withsending_queue.wait_for_resultandbatch.min_size, get records from more than one fetch instead of sending small batches on the flush timeout. (#51804) -
receiver/kafka: Addpartition_processing.max_in_flight.bytesto limit the record bytes each partition holds while it processes records concurrently. Use it to bound memory when record sizes vary. (#51804) -
receiver/kafka: Addpartition_processing.max_prefetch.bytesto cap the bytes of fetched batches waiting for each partition worker. Use it to bound memory when batch sizes vary. (#52253) -
receiver/kubelet_stats: Promotecontainer.cpu.timeto beta stability and align it with Semantic Conventions v1.43.0. (#52197) -
receiver/mongodb: Add operation latency count and non-tailable collection scan metrics (#51909)
Addsmongodb.operation.latency.countand
mongodb.query_executor.collection_scan.non_tailable.count, both disabled by default. -
receiver/mysql: Addmysql.client.nametodb.server.query_sample, the client driver's self-reported identity. (#51317) -
receiver/prometheus_remote_write: Add theotelcol_receiver_prometheusremotewrite_resource_cache_evictionsinternal metric counting evictions from the resource metrics cache. (#52195) -
receiver/prometheus_remote_write: Addresource_cache_sizeto configure the number of job/instance pairs kept in the resource metrics cache. (#52195)
The default remains 1000. -
receiver/prometheus_simple:headersandproxy_urlare now applied to the scrape. Reserved header names andproxy_urlcredentials are rejected at validation. (#52081) -
receiver/prometheus_simple:timeoutnow sets the scrape timeout, capped atcollection_interval. Previously it had no effect. (#52081) -
receiver/sql_server: Adddb.server.procedure_definitionevent to capture the DDL definition of stored procedures observed indb.server.top_procedure. (#51946) -
receiver/sql_server: Addsqlserver.tempdb.file.sizeandsqlserver.tempdb.allocation.waiters.countmetrics, and extendsqlserver.database.tempdb.space. (#52057)
The two new metrics are disabled by default.
🧰 Bug fixes 🧰
-
connector/failover: Fix recovery after a new failover immediately follows primary pipeline recovery. (#48668) -
connector/failover: Prevent data loss when a downstream pipeline mutates data before returning an error. (#52119) -
exporter/elasticsearch: Change the exponential histogram support from ESv9.3.0to ESv9.4.0(#52222)
In Elasticsearch OTLP endpoint exponential histograms were added as a tech preview in ESv9.3.0.
This did not have full backwards compatibility for queryDSL on histograms. Full support was added
in ESv9.4.0. -
exporter/faro: Return an error instead of panicking when a stack trace frame cannot be parsed. (#52064) -
exporter/prometheus: Fix double-counting of buckets when downscaling delta exponential histograms. (#51705) -
exporter/prometheus: Drop exponential histogram data points without a sum instead of exporting a zero sum. (#52231) -
exporter/prometheus_remote_write: Drop exponential histogram data points without a sum instead of exporting a zero sum. (#52232) -
exporter/prometheus_remote_write: Apply thetimeoutto each attempt to send a request instead of to the whole retry loop, so that failed requests are retried untilretry_on_failure.max_elapsed_timeinstead of being dropped aftertimeout. (#51983)
Previously a backend outage longer thantimeout(5s by default) dropped all the data, as the exporter retried a request only for the duration of thetimeout.
The retry delay now also grows up toretry_on_failure.max_interval. It was not passed to the backoff and stayed atretry_on_failure.initial_interval, which would send a request every 50ms by default for the wholemax_elapsed_time. The retries are also interrupted when the exporter shuts down.
retry_on_failure.max_elapsed_timebounds the export of a batch of metrics as a whole, also when the batch is split into several requests (max_batch_size_bytes), and the deadline of the shutdown bounds the flush of the queue.
When only one oftimeoutandhttp.timeoutis set, the other one now takes the same value instead of staying at its5sdefault, which would otherwise cap every attempt at5s. -
exporter/signalfx: Treat non-retryable 4xx responses as permanent errors instead of retrying them indefinitely (#51389)
The SignalFx exporter shares theHandleHTTPCodehelper with the Splunk HEC
exporter. Previously only 400, 401, and 403 were classified as permanent; every
other 4xx (404, 405, 410, 413, 414, 415, 422, ...) fell through and was
retried forever even though retrying an identical request cannot succeed. Those
4xx responses are now permanent, except 408 Request Timeout and 409 Conflict
(transient) and 429 Too Many Requests (throttle). 5xx responses remain
retryable, and 503 continues to honor Retry-After. -
exporter/splunk_hec: Fix inverted condition in multi-metric batching that prematurely terminated batching and dropped valid metrics when encountering an oversized event. (#52142) -
exporter/splunk_hec: Treat non-retryable 4xx responses as permanent errors instead of retrying them indefinitely (#51389)
Previously only 400, 401, and 403 were classified as permanent; every other
4xx (404, 405, 410, 413, 414, 415, 422, ...) fell through and was retried
forever even though retrying an identical request cannot succeed. The shared
HandleHTTPCodehelper now treats all 4xx as permanent except 408 Request
Timeout and 409 Conflict (transient) and 429 Too Many Requests (throttle).
5xx responses remain retryable, and 503 continues to honor Retry-After. This
helper is shared with the SignalFx exporter, whose retry classification
changes in the same way. -
extension/awscloudwatchmetricstreams_encoding: Stop sizing the read buffer from the record's length prefix in theopentelemetry1.0format, so a malformed length can no longer crash the collector with an oversized allocation. (#51744) -
extension/docker_observer: Fix endpoint flapping by selecting a stable IP address for containers attached to multiple networks. (#51726) -
extension/google_cloud_logentry_encoding: Do not drop log entries with an unparseablehttpRequest.requestUrl. (#52044)
The raw value is kept inurl.full;url.path,url.queryandurl.domainare omitted. -
internal/kafka: Reject extensions that do not implement Token(context.Context) during OAUTHBEARER SASL configuration instead of panicking at runtime. (#51958) -
pkg/faro: Keep thewarnlog level when translating logs to a Faro payload (#52114) -
pkg/ottl: Fix context inference for statements that pass an all-uppercase converter name, such asSHA256, as a function argument. (#52192) -
pkg/winperfcounters: Close the PDH query when adding the counter fails, preventing a handle leak on counter initialization errors. (#51048) -
processor/cumulative_to_delta: Handle NaN sums on exponential histograms like on histograms, so the next sum is no longer emitted as a NaN delta (#51965) -
processor/cumulative_to_delta: Include the scope attributes in the identity of a stream, so scopes that only differ in their attributes are no longer converted as one stream (#52162) -
processor/resource_detection: Fix a panic in the ECS detector when the task ARN has only 5 colon-separated parts (#52074)
parseTaskARNchecked for at least 5 parts but read the 6th one, so a task ARN without a resource part
caused an index out of range panic during detection. -
processor/resource_detection: Bypass environment proxies for EKS detector requests to the in-cluster Kubernetes API. (#52301)
Besides this, the EKS detector configuration now accepts API server configuration to control
how it connections to the Kubernetes API server. -
receiver/aws_cloudwatch: Persist acknowledged log checkpoints so failed polls can retry unread logs after a restart when storage is enabled. (#51944) -
receiver/mongodb: Skip top command when mongodb.operation.time is disabled and log warning on BSONObjectTooLarge error (#50712) -
receiver/postgresql: Fix a scrape error that discarded every metric for a table or index dropped while the receiver was collecting (#52041) -
receiver/pprof: Fix the HTTP scraper to return an error for non-2xx responses, close the response body, and honor the scrape context. (#52256) -
receiver/prometheus: Fix config reload failing for multi-line secrets such as an inlinetls_config.key(#52080) -
receiver/prometheus_remote_write: Refuse an out of range symbol reference on a target_info series, as on every other metric name. (#52070)
A request carrying one now gets a 400 where it used to get a 204 with the
sample counted as written. -
receiver/prometheus_simple: Forward inline TLS PEM (ca_pem,cert_pem,key_pem) andserver_name_overrideto the underlying Prometheus receiver instead of silently dropping them. (#52029) -
receiver/prometheus_simple: Forward thetlsmin_versionandmax_versionsettings to the scrape config; previously they had no effect. (#52081) -
receiver/snmp: Create the datapoint with an empty attribute when an indexed attribute column returns an empty value, instead of failing the scrape. (#51875)
An empty OCTET STRING, such as ifPhysAddress on a loopback or null interface, is a valid value.
Previously every scrape of such a device reported "metric OID attribute value is blank" and dropped those datapoints.
A row the attribute column does not return at all still fails as before. -
receiver/snmp: Addmax_repetitionsconfiguration option (defaulting to 25) for GETBULK requests to prevent request timeouts on MTU boundaries. (#51925) -
receiver/splunk_enterprise: Send the search job TTL to Splunk in seconds instead of nanoseconds (#50940)
The receiver sets a TTL on every search job it dispatches, derived from the configured
timeout. The value was formatted from a Go duration with%d, which emits its raw
nanosecond count, and Splunk'ssetttlaction reads the argument as seconds. A default
timeout: 60stherefore asked Splunk to retain each dispatched job for roughly 1900 years,
so search artifacts accumulated until the search dispatch directory filled and Splunk
reported extreme search lag. The duration is now converted to whole seconds. -
receiver/yang_grpc: Log a warning when duplicate YANG module definitions are loaded, identifying conflicting source paths. (#50917)
API Changelog
🛑 Breaking changes 🛑
-
exporter/nats: Move NATS connection settings and auth types to the sharedinternal/natsclientmodule. The YAML configuration is unchanged. (#50735)
Config.Endpoint,Config.Pedantic,Config.TLS, andConfig.Authare now underConfig.ClientConfig.AuthConfig,TokenConfig,UserConfig,NkeyConfig,NkeyJWTConfig, andNkeyUserFileConfigmoved tointernal/natsclient. -
pkg/azurelogs: Promote thepkg.translator.azurelogs.EmitV1LogConventionsandpkg.translator.azurelogs.DontEmitV0LogConventionsfeature gates to beta. (#52096)
code.function.nameandcode.file.pathare now emitted instead ofcode.functionandcode.filepathby default.
The gates no longer control theevent.nameresource attribute, which is always emitted. -
pkg/ottl: Remove the stableottl.set.allowNilfeature gate. (#48714) -
pkg/prometheus: Promote the pkg.translator.prometheus.PermissiveLabelSanitization feature gate to stable and deprecate DropSanitizationGate. (#50429)
The gate can no longer be disabled and will be removed in v0.166.0. -
pkg/prometheus: Remove NormalizeLabel. Use github.com/prometheus/otlptranslator.LabelNamer.Build for label name translation instead. (#50429)
🚩 Deprecations 🚩
processor/transform: Deprecate theflatten_dataoption in favor of the newflatten.logoption. (#51766)
Replaceflatten_data: truewithflatten: {log: true}.flatten_datawill be removed in a future release.
💡 Enhancements 💡
extension/datadog: AddNewFactoryWithOptionsso a host embedding the collector can supply extra Agent-config options, for example to propagate an API key rotation into the extension's forwarder. (#51877)extension/redis_storage: AddIncrementByandBatchIncrementByfor atomic integer counters shared across Collector instances. (#51567)
🧰 Bug fixes 🧰
exporter/prometheus_remote_write: Drop exponential histogram data points without a sum instead of exporting a zero sum. (#52232)
We are thrilled to welcome our first-time contributors to this project. Thank you for your contributions @grvwy, @MissieKahsay, @harshkoli1255, @AnKiT-GaRG2, @MJarmo, @Sander0542, @gaurav-singh2525, @riccardomenegazzo, @adityareddy-dev, @kahirokunn, @alecholmes, @parthksingh1, @SamarthSRao ! 🎉