The OpenTelemetry Collector Contrib contains everything in the opentelemetry-collector release, be sure to check the release notes there as well.
End User Changelog
🛑 Breaking changes 🛑
-
all: It's recommended to change the field type in your component configuration to beconfigoptional.Optional[exporterhelper.QueueBatchConfig]to keep theenabledsubfield. Use configoptional.Some(exporterhelper.NewDefaultQueueConfig()) to enable by default. Use configoptional.Default(exporterhelper.NewDefaultQueueConfig()) to disable by default. (#44320) -
exporter/datadog: Update the Datadog exporter to support the Orchestrator Explorer by accepting receiver/k8sobjects logs and sending Kubernetes data to the Datadog endpoint. (#44523)
The Cluster name field in Orchestrator Explorer Configuration has been removed. Use the k8s.cluster.name attribute instead. -
exporter/prometheusremotewrite: Updated to Remote Write 2.0 spec rc.4, requiring Prometheus 3.8.0 or later as the receiving endpoint. (#44861)
The upstream Prometheus library updated the Remote Write 2.0 protocol from rc.3 to rc.4 in
prometheus/prometheus#17411. This renamedCreatedTimestamptoStartTimestampand moved it
from theTimeSeriesmessage to individualSampleandHistogrammessages. This is a
wire-protocol incompatibility, so if you are exporting to a Prometheus server, you must upgrade
it to version 3.8.0 or later to receive data from this exporter. -
extension/googlecloudlogentry_encoding: Parse External Application Load Balancer logs into log record attributes instead of placing it in the body as is. (#44438) -
pkg/stanza: Allowmax_batch_sizeof 0 for unlimited batching inrecombineoperator (#43982)
The recombine operator now supports settingmax_batch_size: 0to disable batch size limits.
This allows unlimited batching, letting entries be combined based only onmax_log_sizeand matching conditions.
If you havemax_batch_size: 0in your config and want to keep the behavior unchanged, change the configuration tomax_batch_size: 1. -
processor/cumulativetodelta: Change defaultmax_stalenessfrom 0 (infinite) to 1 hour (#44427)
The processor now defaults to amax_stalenessof 1 hour instead of 0 (infinite retention).
This prevents unbounded memory growth in long-running collector instances, especially when tracking metrics with high cardinality or frequently changing attribute values.
To restore the previous behavior of infinite retention, explicitly setmax_staleness: 0in your configuration. -
processor/resourcedetection: Promoteprocessor.resourcedetection.propagateerrorsfeature gate to beta (#44609) -
processor/resourcedetection: Remove deprecatedattributesconfiguration option (#44610) -
receiver/awss3: Remove thes3_partitionconfig option in favor ofs3_partition_formatands3_partition_timezoneoptions. This aligns the S3 receiver more closely with the S3 Exporter. Also add the ability to include or exclude the telemetry type from the file prefix using thefile_prefix_include_telemetry_typeoption. (#43720) -
receiver/docker_stats: Upgrades default Docker API version to 1.44 to be compatible with recent Docker Engine versions. (#44279)
Users requiring an older Docker API version can set theapi_versionin the docker stats receiver config. The minimum supported API level is not changed, only default. -
receiver/filelog: Movefilelog.decompressFingerprintto stable stage (#44570) -
receiver/prometheus: Promote the receiver.prometheusreceiver.RemoveStartTimeAdjustment feature gate to stable and remove in-receiver metric start time adjustment in favor of the metricstarttime processor, including disabling the created-metric feature gate. (#44180)
Previously, users could disable the RemoveStartTimeAdjustment feature gate to temporarily keep the legacy start time adjustment behavior in the Prometheus receiver.
With this promotion to stable and bounded registration, that gate can no longer be disabled; the receiver will no longer set StartTime on metrics based on process_start_time_seconds, and users should migrate to the metricstarttime processor for equivalent functionality.
This change also disables the receiver.prometheusreceiver.UseCreatedMetric feature gate, which previously used the<metric>_createdseries to derive start timestamps for counters, summaries, and histograms when scraping non OpenMetrics protocols.
However, this does not mean that the_createdseries is always ignored: when using the OpenMetrics 1.0 protocol, Prometheus itself continues to interpret the_createdseries as the start timestamp, so only the receiver-side handling for other scrape protocols has been removed. -
receiver/prometheus: Native histogram scraping and ingestion is now controlled by the scrape configuration optionscrape_native_histograms. (#44861)
The feature gatereceiver.prometheusreceiver.EnableNativeHistogramsis now stable and enabled by default.
Native histograms scraped from Prometheus will automatically be converted to OpenTelemetry exponential histograms.To enable scraping of native histograms, you must configure
scrape_native_histograms: truein your Prometheus
scrape configuration (either globally or per-job). Additionally, the protobuf scrape protocol must be enabled
by settingscrape_protocolsto includePrometheusProto. -
receiver/prometheusremotewrite: Updated to Remote Write 2.0 spec rc.4, requiring Prometheus 3.8.0 or later (#44861)
The upstream Prometheus library updated the Remote Write 2.0 protocol from rc.3 to rc.4 in
prometheus/prometheus#17411. This renamedCreatedTimestamptoStartTimestampand moved it
from theTimeSeriesmessage to individualSampleandHistogrammessages. This is a
wire-protocol incompatibility, so Prometheus versions 3.7.x and earlier will no longer work
correctly with this receiver. Please upgrade to Prometheus 3.8.0 or later.
🚩 Deprecations 🚩
-
processor/k8sattributes: Removes stable k8sattr.fieldExtractConfigRegex.disallow feature gate (#44694) -
receiver/kafka: Deprecatedefault_fetch_sizeparameter for franz-go client (#43104)
Thedefault_fetch_sizeparameter is now deprecated for the franz-go Kafka client and will only be used with the legacy Sarama client.
Users should configuremax_fetch_sizeinstead when using franz-go.
This deprecation is marked as of v0.142.0. -
receiver/kafka: Support configuring a list of topics and exclude_topics; deprecate topic and exclude_topic (#44477) -
receiver/prometheus: Deprecateuse_start_time_metricandstart_time_metric_regexconfig in favor of the processormetricstarttime(#44180)
🚀 New components 🚀
receiver/yanggrpc: Implement the YANG/gRPC receiver (#43840)
💡 Enhancements 💡
-
exporter/elasticsearch: add dynamic data stream routing for connectors (#44525) -
exporter/kafka: Adds server.address attribute to all Kafka exporter metrics. (#44649) -
exporter/prometheusremotewrite: Add option to removeservice.name,service.instance.id,service.namespaceResourceAttribute from exported metrics (#44567) -
exporter/signalfx: Support setting default properties for dimension updates to be set lazily as part of configuration (#44891) -
extension/azure_encoding: Implement general Azure Resource Log parsing functionality (#41725) -
extension/datadog: Datadog Extension users may view and manage OTel Collectors in Fleet Automation. (#44666)
Interested users should read the post on the Datadog Monitor blog and fill out the preview intake form listed there. -
extension/datadog: Adds deployment_type configuration option to the Datadog Extension. (#44430)
Users may specify the deployment type of the collector in Datadog Extension configuration to view in Datadog app.
If the collector is deployed as a gateway (i.e. receiving pipeline telemetry from multiple hosts/sources),
user should specify "gateway" as the deployment type.
If the collector is deployed as a daemonset/agent, user should specify "daemonset" as the deployment type.
The default setting is "unknown" if not set. -
extension/datadog: Adds standard (non-billed) liveness metricotel.datadog_extension.runningto ensure host data is shown in Datadog app. (#44285) -
extension/googlecloudlogentry_encoding: Add support for GCP VPC Flow Log fields for MIG (Managed Instance Group) and Google Service logs. (#44220)
Adds support for the following GCP VPC Flow Log fields:- Add support for gcp.vpc.flow.{source,destination}.google_service.{type,name,connectivity}
- Add support for gcp.vpc.flow.{source,destination}.instance.managed_instance_group.{name,region,zone}
-
extension/health_check: Added extension.healthcheck.useComponentStatus feature gate to enable v2 component status reporting in healthcheckextension while maintaining backward compatibility by default. (#42256) -
pkg/ottl: Accept string trace/span/profile IDs forTraceID(),SpanID(), andProfileID()in OTTL. (#43429)
This change allows for a more straightforward use of string values to set trace, span, and profile IDs in OTTL. -
pkg/stanza: New featuregatefilelog.windows.caseInsensitiveintroduced. It will make glob matching is case-insensitive on Windows. (#40685)
Previously, anyincludepattern that included some manner of wildcard (*or**) would
be case-sensitive on Windows, but Windows filepaths are by default case-insensitive. This meant
that in a directory with the filesa.logandb.LOG, the pattern*.logwould previously only
matcha.log. With thefilelog.windows.caseInsensitivefeaturegate enabled, it will match botha.log
andb.LOGwhen on Windows. The behaviour is the same as always on other operating systems, as all other
currently supported platforms for the Collector have case-sensitive filesystems. -
pkg/translator/azurelogs: Added support for Activity Logs Recommendation category (#43220) -
processor/k8sattributes: Updates semconv version to v1.37.0 (#44696) -
processor/resourcedetection: Add support for dynamic refresh resource attributes with refresh_interval parameter (#42663) -
processor/resourcedetection: Update semconv dependency to 1.37.0 which updates the schema url in the data, but no other impact is expected. (#44726) -
processor/transform: New Transform Processor functionset_semconv_span_name()to overwrite the span name with the semantic conventions for HTTP, RPC, messaging, and database spans. (#43124)
In other cases, the originalspan.nameis unchanged.
The primary use ofset_semconv_span_name()is alongside the
Span Metrics Connector
to address high-cardinality issues in span metrics whenspan.namedoes not comply with the OTel requirement
that span names be low cardinality. -
receiver/azuremonitor: Scrape storage account sub types (#37220) -
receiver/datadog: Improve the compliance with OTel Semantic Conventions for RPC spans in the Datadog receiver. (#44671)
Compliance improvements on spans received via the Datadog receiver when applicable:- Set span name according to RPC conventions.
- Set
rpc.methodandrpc.serviceattributes.
-
receiver/datadog: Bump OTel Semantic Conventions from v1.30.0 to v1.37.0 in the Datadog receiver. (#44671)
Changes in OTel Semantic Conventions v1.37.0 affecting the Datadog receiver:- The Datadog tag
runtimeis now mapped to the OTel attributecontainer.runtime.nameinstead ofcontainer.runtime.
- The Datadog tag
-
receiver/datadog: Improve the compliance with OTel Semantic Conventions for AWS SDK spans in the Datadog receiver. (#44723)
Compliance improvements on spans received via the Datadog receiver when applicable:- Set span name according to AWS SDK conventions.
- Set
rpc.system,rpc.methodandrpc.serviceattributes.
-
receiver/datadog: Addreceiver.datadogreceiver.EnableMultiTagParsingfeature gate (#44747)
The feature flag changes the logic that converts Datadog tags to OpenTelemetry attributes.
When the flag is enabled, data points that have multiple tags starting with the samekey:prefix
will be turned into an attribute slice (instead of a string) containing all the suffix values. -
receiver/datadog: Improve the compliance with OTel Semantic Conventions for HTTP spans in the Datadog receiver. (#44722)
Compliance improvements on spans received via the Datadog receiver when applicable:
Set span name according to HTTP conventions forweb.requestandhttp.requestspans. -
receiver/github: Add concurrency limiting to reduce likelihood of hitting secondary rate limits (#43388)
Addsconcurrency_limitconfiguration parameter (default: 50) to limit
concurrent repository processing goroutines. This reduces the likelihood of
getting 502/504 errors when scraping organizations with >100 repositories. -
receiver/googlecloudpubsub: Exponential backoff streaming restarts (#44741) -
receiver/kafka: Makesession_timeout,heartbeat_interval,max_partition_fetch_size, andmax_fetch_waitunconditional in franz-go consumer (#44839) -
receiver/kafka: Validate thatexclude_topicsentries in kafkareceiver config are non-empty. (#44920) -
receiver/oracledb: Added independent collection interval config for Oracle top query metrics collection (#44607) -
receiver/prometheusremotewrite: Map.PutStr causes excessive memory allocations due to repeated slice expansions (#44612) -
receiver/splunk_hec: Support parsing JSON array payloads in Splunk HEC receiver (#43941) -
receiver/sshcheck: Promote sshcheck receiver to beta stability (#41573) -
receiver/yanggrpc: Promote to alpha stability (#44783)
🧰 Bug fixes 🧰
-
exporter/elasticsearch: Fix hostname mapping in Elasticsearch exporter (#44874)- The exporter now supports to map an otel field to an ecs field only if the ecs field is not already present. This is applied to
host.hostnamemapping.
- The exporter now supports to map an otel field to an ecs field only if the ecs field is not already present. This is applied to
-
processor/cumulativetodelta: Check whether bucket bounds are the same when verifying whether histograms are comparable (#44793) -
processor/cumulativetodelta: Fix logic handling ZeroThreshold increases for exponential histograms (#44793) -
processor/filter: Fix context initialization for metric/datapoint context (#44813) -
processor/k8sattributes: Fixk8sattr.labelsAnnotationsSingular.allowfeature gate to affect config default tag names in addition to runtime extraction (#39774) -
processor/tail_sampling: Fix a memory leak introduced in 0.141.0 of the tail sampling processor when not blocking on overflow. (#44884) -
receiver/datadog: Thedb.instancetag of Datadog database client spans should be mapped to the OTel attributedb.namespace, not todb.collection.name. (#44702)
Compliance improvements on spans received via the Datadog receiver when applicable:- The
db.instancetag is now mapped to the OTel attributedb.namespaceinstead ofdb.collection.name. - The
db.sql.tabletag is mapped to the OTel attributedb.collection.name. - The
db.statementtag is mapped to the OTel attributedb.query.text.
- The
-
receiver/datadog: Fix Datadog trace span counting so otelcol_receiver_accepted_spans is not under-reported (#44865)
Previously only the last payload's spans were counted, so the otelcol_receiver_accepted_spans metric could be lower than otelcol_exporter_sent_spans in pipelines where they should match. -
receiver/github: Adds corrections to span kind for GitHub events when they are tasks. (#44667) -
receiver/googlecloudpubsub: Acknowledge messages at restart (#44706)
Rewrote the control flow loop so the acknowledgment of messages is more reliable. At stream restart, the messages
ackIds are resent immediately without an explicit acknowledgment. Outstanding ackIds are only cleared when the
acknowledgment is sent successfully. -
receiver/googlecloudspanner: Fixed goroutine leaks in ttlcache lifecycle management and applied modernize linter fixes across multiple receivers. (#44779)- Simplified cache lifecycle management by removing unnecessary WaitGroup complexity
- Added goleak ignores for ttlcache goroutines that don't stop immediately after Stop()
-
receiver/kafka: Usemax_fetch_sizeinstead ofdefault_fetch_sizein franz-go client (#43104)
The franz-go Kafka consumer was incorrectly usingdefault_fetch_size(a Sarama-specific setting) instead ofmax_fetch_sizewhen configuringkgo.FetchMaxBytes.
This fix ensures the correct parameter is used and adds validation to preventmax_fetch_sizefrom being less thanmin_fetch_size.
The default value formax_fetch_sizehas been changed from 0 (unlimited) to 1048576 (1 MiB) to maintain backward compatibility with the previous (incorrect) behavior. -
receiver/prometheus: Fix HTTP response body leak in target allocator when fetching scrape configs fails (#44921)
The getScrapeConfigsResponse function did not close resp.Body on error paths.
If io.ReadAll or yaml.Unmarshal failed, the response body would leak,
potentially causing HTTP connection exhaustion. -
receiver/prometheus: Fixes yaml marshaling of prometheus/common/config.Secret types (#44445)
API Changelog
🛑 Breaking changes 🛑
all: It's recommended to change the field type in your component configuration to beconfigoptional.Optional[exporterhelper.QueueBatchConfig]to keep theenabledsubfield. Use configoptional.Some(exporterhelper.NewDefaultQueueConfig()) to enable by default. Use configoptional.Default(exporterhelper.NewDefaultQueueConfig()) to disable by default. (#44320)pkg/pdatatest: apply recent breaking changes to pprofiletest (#44758)
🚩 Deprecations 🚩
pkg/ottl: Use pointer when passing TransformContext around or calling into. (#44541)
Change Expr/Parser/Getter/Setter and all ottl related funcs to accept pointers to avoid unnecessary copy of a large
TransformContext(96B). Avoid allocating a new pcommon.Map every time a new context is created by using a Borrow/Return
pattern and reuse objects between calls. Deprecated funcs are:ottldatapoint.NewTransformContextin favor ofottldatapoint.NewTransformContextPtr;ottllog.NewTransformContextin favor ofottllog.NewTransformContextPtr;ottlmetric.NewTransformContextin favor ofottlmetric.NewTransformContextPtr;ottlspan.NewTransformContextin favor ofottlspan.NewTransformContextPtr;ottlspanevent.NewTransformContextin favor ofottlspanevent.NewTransformContextPtr;filterprocessor.WithResourceFunctionsin favor offilterprocessor.WithResourceFunctionsNewfilterprocessor.DefaultDataPointFunctionsin favor offiltermprocessor.DefaultDataPointFunctionsNewfilterprocessor.WithDataPointFunctionsin favor offilterprocessor.WithDataPointFunctionsNewfilterprocessor.DefaultLogFunctionsin favor offilterprocessor.DefaultLogFunctionsNewfilterprocessor.WithLogFunctionsin favor offilterprocessor.WithLogFunctionsNewfilterprocessor.DefaultMetricFunctionsin favor offilterprocessor.DefaultMetricFunctionsNewfilterprocessor.WithMetricFunctionsin favor offilterprocessor.WithMetricFunctionsNewfilterprocessor.DefaultSpanFunctionsin favor offilterprocessor.DefaultSpanFunctionsNewfilterprocessor.WithSpanFunctionsin favor offilterprocessor.WithSpanFunctionsNewfiltermprocessor.DefaultSpanEventFunctionsin favor offiltermprocessor.DefaultSpanEventFunctionsNewfiltermprocessor.WithSpanEventFunctionsin favor offiltermprocessor.WithSpanEventFunctionsNewtransformprocessor.DefaultDataPointFunctionsin favor oftransformprocessor.DefaultDataPointFunctionsNewtransformprocessor.WithDataPointFunctionsin favor oftransformprocessor.WithDataPointFunctionsNewtransformprocessor.DefaultLogFunctionsin favor oftransformprocessor.DefaultLogFunctionsNewtransformprocessor.WithLogFunctionsin favor oftransformprocessor.WithLogFunctionsNewtransformprocessor.DefaultMetricFunctionsin favor oftransformprocessor.DefaultMetricFunctionsNewtransformprocessor.WithMetricFunctionsin favor oftransformprocessor.WithMetricFunctionsNewtransformprocessor.DefaultSpanFunctionsin favor oftransformprocessor.DefaultSpanFunctionsNewtransformprocessor.WithSpanFunctionsin favor oftransformprocessor.WithSpanFunctionsNewtransformprocessor.DefaultSpanEventFunctionsin favor oftransformprocessor.DefaultSpanEventFunctionsNewtransformprocessor.WithSpanEventFunctionsin favor oftransformprocessor.WithSpanEventFunctionsNew
💡 Enhancements 💡
exporter/datadog: introduce a container tags buffer in the stats writer, which is disabled by default. (#44661)pkg/ottl: Add PSliceGetSetter interface to allow OTTL functions to accept typed accessors forpcommon.Slicepaths. (#44421)
We are thrilled to welcome our first-time contributors to this project. Thank you for your contributions @FabianPonce, @geekysatbir, @MoosaTae, @zmoog, @maheshkanote, @kevleu5716, @shalane-proctor, @ldufr, @anubhav21sharma ! 🎉