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.
End User Changelog
🛑 Breaking changes 🛑
-
all: Remove the wavefront receiver after a period of deprecation (#51397) -
connector/signal_to_metrics: The default error mode has been changed frompropagatetoignoreto ensure valid OTLP payloads are not dropped (#48419) -
exporter/elasticsearch: Remove the deprecatedflushandnum_workersconfiguration settings. (#42718)
Migratenum_workerstosending_queue::num_consumers,flush::intervalto
sending_queue::batch::flush_timeout, andflush::bytesto
sending_queue::batch::max_sizewithsending_queue::batch::sizerset tobytes.
This also removesConfig.NumWorkers,Config.Flush, andFlushSettingsfrom
the exported Go API. -
exporter/elasticsearch: Ingest OTel profiles as Elasticsearch (9.6.0) datastreams (#50589)
Inotelmapping mode, profiling signals are now written to OTel-native datastreams
(e.g.profiling-events-all.otel-default) that require Elasticsearch 9.6.0 or later.
Sending profiles to an older cluster will result inindex_not_found_exceptionerrors and data loss.
Users on Elasticsearch < 9.6.0 must restrict the exporter to ECS mode viamapping.allowed_modes: [ecs]. -
exporter/elasticsearch: Move OTel profiling serializer toecsserializerpackage and wireecsmapping mode to use it for profiles. (#50589) -
pkg/ottl: Remove the stableottl.PanicDuplicateNameandottl.contexts.enableOTelColContextfeature gates. (#44630, #46437) -
pkg/prometheus: Promote the pkg.translator.prometheus.PermissiveLabelSanitization feature gate from alpha to beta, enabling it by default. (#50429)
Labels starting with a single underscore (e.g._foo) will no longer be
prefixed withkey_by default. To restore the previous behavior, disable the
feature gate:--feature-gates=-pkg.translator.prometheus.PermissiveLabelSanitization. -
processor/adaptive_tail_sampling: Add explicit root-scoped fingerprint selectors (root.resource.,root.scope.,root.span.,root.any.) and requireroot.to name an origin. (#51304)
root.is now a position prefix that composes with theresource,scope,spanandanyorigins, so a
fingerprint can read the root span's resource-level attributes (root.resource.attributes["service.name"]) or
their union (root.any.attributes[...]). Bareroot.attributes["<name>"]no longer parses; it previously read
only the root span's span attributes, so resource attributes such asservice.namecame back<missing>.
Migrateroot.attributes[...]toroot.span.attributes[...]for the same behaviour, or toroot.resource./
root.any.to reach the attributes that were unreachable before. -
processor/cardinality_guardian: move units to singular form (#45270) -
processor/signing: Wrap attribute scalar values in type-tagged objects ({"intValue":"…"},{"stringValue":"…"}, etc.) to eliminate scalar type collisions in the JCS-canonical signed payload. (#50884)
Previously,PutInt("k", 123)andPutStr("k", "123")produced identical
canonical JSON, so one signature covered both values. Each scalar type is now
wrapped in a single-key object keyed by type name (matching OTLP/JSON
conventions), making every type distinct. Existing signatures are invalidated
by this change.
SeverityNumberandSeverityTextare no longer included in the signed
payload; the audit logging spec marks them as SHOULD NOT. -
processor/signing: Adds OpenBAO and Kubernetes Secrets as newKeyMaterialProvider options to the signing processor. (#50079, #51055)
Additionally, supports a Kubernetes Secret, or an OpenBao/Vault
KV secret. Setsaudit.integrity.signer = "collector"to indicate the Tier-2
Collector produced the integrity proof. -
processor/transform: Remove the stableprocessor.transform.defaultErrorModeIgnorefeature gate. (#51242) -
receiver/kafka: Change the default formetadata::retry::maxfrom 3 to 20 to match franz-go's default. (#50116)
The field was unwired since the migration to franz-go, so every collector has effectively been
running with franz-go's default of 20. The new default preserves that behavior now that the
field is applied. Only configurations that setmetadata::retry::maxexplicitly change
behavior: the configured value is now honored. -
receiver/kafka_metrics: Change the default formetadata::retry::maxfrom 3 to 20 to match franz-go's default. (#50116)
The field was unwired since the migration to franz-go, so every collector has effectively been
running with franz-go's default of 20. The new default preserves that behavior now that the
field is applied. Only configurations that setmetadata::retry::maxexplicitly change
behavior: the configured value is now honored. -
receiver/prometheus: Promote thereceiver.prometheusreceiver.IgnoreScopeInfoMetricfeature gate to stable (#47312)
Theotel_scope_infometric is no longer used for scope attribute extraction and is
converted like any other metric. Scope attributes are populated fromotel_scope_-prefixed
metric labels instead. The feature gate can no longer be disabled and will be removed in v0.164.0.
🚩 Deprecations 🚩
-
connector/grafana_cloud: Rename component type from "grafanacloud" to "grafana_cloud" to follow snake_case naming convention. The old name is kept as a deprecated alias. (#48017) -
receiver/aws_s3: Renameawss3receiver toaws_s3with deprecated aliasawss3(#45339) -
receiver/kafka: Deprecatemetadata::full, which became a no-op after the migration to franz-go. (#50116)
franz-go has no full-metadata mode; it only fetches metadata for the topics the receiver
consumes from. The field is still accepted in configuration for backwards compatibility, but has
no effect at runtime. It will be removed in a future release. -
receiver/kafka_metrics: Deprecatemetadata::full, which became a no-op after the migration to franz-go. (#50116)
franz-go has no full-metadata mode; it only fetches metadata for the topics the scrapers query.
The field is still accepted in configuration for backwards compatibility, but has no effect at
runtime. It will be removed in a future release. -
receiver/kubelet_stats: Deprecatek8s.pod.cpu.node.utilization,k8s.pod.memory.node.utilization,k8s.container.cpu.node.utilization, andk8s.container.memory.node.utilizationmetrics. (#50857)
These metrics are deprecated following the decision in the K8s SemConv SIG
(open-telemetry/semantic-conventions#2768).
They will be removed in a future release.
🚀 New components 🚀
exporter/nats: Add the NATS exporter to export traces, metrics, and logs to a NATS server (skeleton; in development). (#39540)extension/file_telemetry_policy: Add filetelemetrypolicy extension skeleton. (#50965)extension/sd_notify: Promotesd_notifyextension stability from development to alpha. (#49607)processor/telemetry_policy: Add the initial skeleton for the telemetry_policy processor. (#50965)
💡 Enhancements 💡
-
cmd/opampsupervisor: Enable keepalive by default (#51159) -
connector/exceptions: Addlogs_to_logsandlogs_to_metricssupport, and fix thetraces_to_logsedge to emit spec-conformant exception LogEvents (event.name, requiredexception.*attributes, and full resource attribute propagation). (#50900) -
connector/failover: Introducescondition.error.containswhich allows the connector to failover based on error type. (#44518) -
exporter/azure_monitor: Enable keepalive by default (#51178) -
exporter/coralogix: Enable keepalive by default (#51181) -
exporter/datadog: Emitotel.datadog_exporter.metrics.running.azurecontainerappstagged withreplica,name,subscription_id, andresource_groupfor Azure Container Apps workloads sending metrics via the Datadog exporter. (#49615) -
exporter/datadog: Emit running metrics for Azure App Services, Azure Functions, Cloud Run services, and Cloud Run Functions workloads sending metrics through the Datadog exporter. (#51501) -
exporter/honeycomb_marker: Enable keepalive by default (#51180) -
exporter/load_balancing: Addrandomnessrouting key that routes spans by the OTel tracestate randomness value (ot=rv), falling back to trace ID randomness when absent, so traces sharing an explicit randomness value are routed to the same backend. (#49660) -
exporter/logicmonitor: Enable keepalive by default (#49316) -
exporter/sematext: Enable keepalive by default (#49316) -
exporter/syslog: Add support for exporting to Unix datagram sockets such as/dev/log. (#50867) -
extension/awsproxy: Enable keepalive by default (#49316) -
extension/datadog: Enable keepalive by default (#49316) -
extension/health_check: Enable keepalive by default (#51175) -
extension/healthcheckv2: Enable keepalive by default (#51175) -
extension/http_forwarder: Enable keepalive by default (#51182) -
extension/jaegerremotesampling: Enable keepalive by default (#49316) -
extension/json_log_encoding: Add the opt-inparse_intssetting to preserve JSON integer literals within theint64range. (#51299)
Applies to array and single-document/NDJSON input, including nested objects and arrays.
Decimal, exponent, and out-of-range integer literals are still parsed asfloat64.
The option defaults tofalseand adds processing overhead when enabled. -
extension/mcp: Enable keepalive by default (#51177) -
extension/pebble_tail_storage: Add extension telemetry counters for Pebble tail storage operations and read-path failures (#49697)
Adds the following metrics:otelcol_extension_pebble_tail_storage_operations(operation=append|take|delete,outcome=success|failure)otelcol_extension_pebble_tail_storage_read_errors
-
extension/remotetap: Enable keepalive by default (#49316) -
extension/sumologic: Enable keepalive by default (#49316) -
pkg/ottl: Promote theottl.set.allowNilfeature gate to stable. (#49741) -
processor/adaptive_tail_sampling: Addsampler_request_count,sampler_keyspace_size, andsampler_burst_countmetrics exposing the internal performance ofadaptive_percentageandadaptive_throughputsamplers, labelled byrule,sampler_type, andsampler_algorithm. (#49311)
Metrics are labelled byrule,sampler_type(adaptive_percentage,adaptive_throughput), and
sampler_algorithm(ema,windowed), matching the rule's sampler config, so keyspace growth,
request bursts, and convergence state can be compared per rule.
sampler_burst_countis not emitted foradaptive_throughputrules using thewindowedalgorithm,
which doesn't track this counter. -
processor/adaptive_tail_sampling: Defaultmax_keysto 500 when omitted; explicitly setting it to 0 still means unlimited. (#49311) -
processor/interval: Add delta temporality metrics support. (#50845) -
processor/lookup: Promote lookup processor to alpha stage (#51199) -
processor/remotetap: Enable keepalive by default (#49316) -
processor/resource_detection: Add Azure Functions resource detector (#50633) -
processor/rolling_span_latency: Implement EWMA-based rolling latency baseline tracking and slow/very_slow span labeling. (#50260) -
processor/transform: Add extract_avg_metric OTTL function to transform processor (#49238) -
receiver/aws_s3: Support coarser time-steps in partition formats (#51038)
Adds support for day-partitioned time slices when reading partition formats without minute/hour granularity. -
receiver/awscontainerinsightreceiver: Enable keepalive by default (#49316) -
receiver/awsecscontainermetrics: Enable keepalive by default (#49316) -
receiver/awsfirehose: Enable keepalive by default (#49316) -
receiver/awsxray: Enable keepalive by default (#49316) -
receiver/azure_functions: Enable keepalive by default (#49316) -
receiver/azure_monitor: Add support for filtering Azure resources by tags. (#50959)
Filter resources by tag name and optionally by tag value. -
receiver/azure_monitor: Emit thetimegraindatapoint attribute on the ARM collection path, matching the batch API path (#50847)
Datapoints collected through the batch API carried atimegrainattribute while
the same metrics collected through the ARM API did not, so a consumer could not
tell a PT1M series from a PT1H one on that path. Both scrapers now attach the
attribute from the same composite key. -
receiver/cloudflare: Enable keepalive by default (#49316) -
receiver/collectd: Enable keepalive by default (#49316) -
receiver/datadog: Enable keepalive by default (#49316) -
receiver/file_stats: move all attributes and metrics to beta (#51260) -
receiver/github: Enable keepalive by default (#49316) -
receiver/gitlab: Enable keepalive by default (#49316) -
receiver/gitlab: Addgitlab.project.idresource attribute (#48993) -
receiver/google_cloud_spanner: Add missing labeloperations_by_table_json_stringto top minute transaction stats ingooglecloudspannerreceiver. (#51057)
Syncs the OTel receiver with SPANNER_SYS tables to bring the parity between GCP transaction insights page and OTel receiver. -
receiver/google_cloud_spanner: Addquery_typelabel to top minute query stats ingooglecloudspannerreceiver. (#50843)
Syncs the OTel receiver with SPANNER_SYS tables to bring the parity between GCP Query insights page and OTel receiver. -
receiver/haproxy: Enable keepalive by default (#49316) -
receiver/haproxy: Move all metrics and attributes to beta (#51261)
Also, change all units to singular form per #45270 -
receiver/http_check: Enable keepalive by default (#49316) -
receiver/huaweicloudcesreceiver: Enable keepalive by default (#49316) -
receiver/influxdb: Enable keepalive by default (#49316) -
receiver/jaeger: Enable keepalive by default (#49316) -
receiver/journald: Add "convert_to_semantic_conventions" config option to map well-known journald fields to OpenTelemetry semantic convention attributes (#7298)
See the Semantic Conventions Mapping section of the receiver README for details on whatconvert_to_semantic_conventionsdoes. -
receiver/kafka: Link the receive span to the trace context in Kafka record headers, using the propagators configured inservice::telemetry::traces::propagators. (#51077) -
receiver/libhoney: Enable keepalive by default (#49316) -
receiver/loki: Enable keepalive by default (#51183) -
receiver/mongodb: Add replica set topology and oplog metrics (#50654)
Seven opt-in metrics, disabled by default, emitted only by replica set members. -
receiver/mysql: Addserver.addressandserver.portresource attributes (#50967)
Both attributes are emitted by default. When the receiver connects over loopback (for examplelocalhost
or127.0.0.1),server.addressreports the host name of the machine running the collector, matching how
service.instance.idalready resolves its host.mysql.instance.endpointand existing
service.instance.idvalues are unchanged. Disable the attributes via
resource_attributes.server.address.enabled: falseandresource_attributes.server.port.enabled: false. -
receiver/mysql: Add a newdb.server.query_planevent that reports the query execution plan on a record of its own, so it can be filtered, routed or dropped independently of the query statistics. (#51281)
Disabled by default, and requiresdb.server.top_queryordb.server.query_sample. Enabling it
removesmysql.query_planfrom those two events, which keepmysql.query_plan.hashas the join key.
db.server.top_queryalso reportsdb.namespace, whether or not the new event is enabled. -
receiver/nsxt: Enable keepalive by default (#49316) -
receiver/ntp: Move ntp receiver metric to beta (#51380) -
receiver/oracledb: Add a newdb.server.query_planevent that reports the query execution plan on a record of its own, so it can be filtered, routed or dropped independently of the query statistics. (#51065)
Disabled by default, and requiresdb.server.top_query. -
receiver/oracledb: Add theoracle.db.editionresource attribute. (#51292)
Disabled by default. opt in by settingresource_attributes.oracle.db.edition.enabled: truein the receiver config. -
receiver/oracledb: Collect system and resource limit metrics when the receiver is connected directly to a PDB, such as on AWS RDS Oracle (#50147)
Previously, system and resource limit metrics were not reported when connecting straight to a PDB. -
receiver/oracledb: Add thedb.system.nameattribute to thedb.server.query_plananddb.server.session.wait_sampleevents. (#51065) -
receiver/postgresql: Addpostgresql.backend.connection.startattribute todb.server.query_sample(#50769) -
receiver/postgresql: Adddb.system.versionresource attribute. (#51288)
Disabled by default. opt in by settingresource_attributes.db.system.version.enabled: truein the receiver config. -
receiver/postgresql: Emit theserver.addressandserver.portresource attributes regardless of thereceiver.postgresql.useOTelSemconvfeature gate, and report a loopback endpoint as the collector's host name inserver.address. (#50889)
Both attributes were previously emitted only with the gate enabled and are additive, so the resource model the gate selects is otherwise unchanged. Loopback resolution matches howservice.instance.idalready resolves the same endpoint; non-loopback endpoints are unaffected, as istransport: unix, which continues to report the socket path. -
receiver/postgresql: Add a newdb.server.query_planevent to report the query execution plan separately. (#51301)
Disabled by default, and requiresdb.server.top_query. When enabled,db.server.top_query
stops carryingpostgresql.query_plan. -
receiver/prometheus: Enable keepalive by default (#49316) -
receiver/prometheus: Use value types and pre-allocate slices when processing scraped samples and building OTLP metrics. (#51133) -
receiver/prometheus_remote_write: Enable keepalive by default (#49316) -
receiver/rabbitmq: Add the disabled-by-defaultrabbitmq.cluster.nameresource attribute. (#50168) -
receiver/receiver_creator: Add ajoinHostPortfunction for receiver template expressions. (#50969) -
receiver/signalfx: Enable keepalive by default (#49316) -
receiver/skywalking: Enable keepalive by default (#49316) -
receiver/splunk_hec: Enable keepalive by default (#49316) -
receiver/sqlserver: Adddb.system.versionresource attribute. (#51194)
Only available in direct connection mode. Disabled by default. -
receiver/sqlserver: Adddb.namespaceanddb.system.nameto thedb.server.query_planevent, so all four log events carry them. (#50629) -
receiver/tcp_check: move metric to alpha stability (#51381) -
receiver/vcenter: Addproxy_urlto configure a per-receiver proxy for vSphere SDK connections. (#51187)
Thehttp,https,socks5andsocks5hschemes are supported. Whenproxy_urlis
unset the process-wide HTTP_PROXY/HTTPS_PROXY/NO_PROXY environment variables continue to
apply, so existing behavior is unchanged. Because the setting is scoped to a single
receiver instance, severalvcenter/<name>receivers in one collector can now each reach
their vCenter through a different proxy. -
receiver/webhook_event: Enable keepalive by default (#49316) -
receiver/zipkin: Enable keepalive connections by default (#51139)
🧰 Bug fixes 🧰
-
all: Exclude datadogconnector, datadogexporter, and datadogextension on solaris (#51329) -
cmd/opampsupervisor: Preserve the health last reported to the OpAMP server when an accepted connection settings offer replaces the OpAMP client, instead of reporting a running agent as unhealthy (#51009)
The supervisor.agent.health_status metric now also tracks the health reported when no
config is present and at shutdown, which previously bypassed it. -
cmd/opampsupervisor: Open agent.log in append mode for external log rotation (Linux + Windows) (#50376)
This makes external copytruncate-style log rotation (e.g. logrotate) work correctly instead of the file's size reverting on the next write, on both non-Windows (O_APPEND) and Windows (a FILE_APPEND_DATA handle, since Go's O_APPEND does not survive handle inheritance to the managed agent process on Windows). -
cmd/opampsupervisor: Fix stopping a Collector that had just started on Windows sometimes taking the full stop grace period and ending in a forced kill. (#51499) -
cmd/telemetrygen: Prevent unbounded attribute growth and declining metric generation rates when using--unique-timeseries. (#49950) -
connector/grafana_cloud: Makek8s.node.namethe first entry in the defaulthost_identifierslist so that hosts reported by several telemetry sources are counted once (#51502)
The default is now["k8s.node.name", "host.id", "k8s.node.uid"]. -
exporter/doris: Fix materialized view and scheduled job creation on Doris 4.x, and add anis_rootcolumn plus a<traces>_summarymaterialized view to the traces table. (#51265)
Existing tables are not altered; the new column and view only apply to tables created withcreate_schema: true. -
exporter/elasticsearch: Fix downsampled profiling events (profiling-events-5powNN) being silently dropped instead of sent to Elasticsearch. (#51222) -
exporter/kafka: Applymetadata::retry::backoff, which was silently ignored since the migration to franz-go. (#50116)
metadata::retry::backoffis the minimum wait between retries; each successive retry doubles
the wait, with jitter applied, capped atmax(5s, backoff). On the exporter this paces produce
retries. Produce retry counts remain governed byretry_on_failureandtimeout. -
exporter/otelarrow: Recover from transient stream connection errors instead of permanently losing stream capacity. (#50254)
Any failure to establish a stream was previously treated as evidence that the endpoint does
not support OTel-Arrow, however some transient errors like a timeout could also surface on
these code paths and violate that assumption. This resulted in an unhandled partial failure
case where the worker states associated with those failed streams would become orphaned
with no routine processing their inputs. They would also appear to be unloaded, attract
requests, and then permanently wedge the sending goroutine because nothing writes back to it. -
exporter/prometheus: Remove every series ended by a staleness marker when several arrive in the same metric. (#51289) -
exporter/pulsar: Exclude pulsarexporter on solaris (#51330) -
extension/google_cloud_logentry_encoding: Fix decoding of log messages larger than 64KiB, which previously failed with "bufio.Scanner: token too long". (#51014) -
extension/k8s_observer: Format IPv6 Kubernetes port endpoints correctly. (#50969) -
extension/pebble_tail_storage: Exclude pebbletailstorageextension on solaris (#51327) -
pkg/kafka/configkafka: Fix missing AWS MSK SASL validation and incomplete OAUTHBEARER error message (#50934)
Validate that the region is not empty when the AWS MSK mechanism is used, and add the missing OAuth mechanism to the default switch case error message. -
pkg/ottl: Reject lambda expressions at parse time when they are not passed to a function argument that accepts them. (#51560) -
pkg/stanza: Call the Windows Event Log API through*windows.LazyProcdirectly so that pointer arguments stay alive for the duration of the call. (#51074)
The wrappers in the windows_eventlog_input operator routed every call through aSyscallProcinterface, which hid
the callee from the compiler and let the garbage collector free a buffer while the Windows API was still reading it.
The interface is removed and tests mock the wrapper functions instead. -
processor/cumulative_to_delta: Fix histogram and exponential histogram reset recovery by updating prevPoint on reset detection (#50828) -
processor/delta_to_cumulative: Fix exponential histogram downscaling exceeding the bucket limit due to incorrect index rounding. (#50923) -
processor/drain: move units to singular form (#45270) -
processor/k8s_attributes: Reject an invalidexclude.pods[].nameregex at config load instead of panicking at startup (#50957) -
processor/k8s_attributes: Emit the semantic convention deprecation warnings that were unreachable because they were evaluated before the extraction rules were populated (#51188) -
processor/metrics_transform: Preserve an absent histogram sum when aggregating datapoints instead of reporting a sum of 0 (#49379)
When merging (exponential) histogram datapoints, the sum is now only kept when every merged
datapoint carries one, matching the existing handling of min and max. Previously a merge that
involved a datapoint without a sum produced HasSum=true with Sum=0, which is indistinguishable
from a genuine zero sum. -
processor/resource_detection: Honor the configuredtimeoutin thegcpdetector when the metadata server is unreachable. (#50754)
Thegcpdetector did not honor the configuredtimeout. It now checks the metadata
server with a context that carries the deadline. -
processor/rolling_span_latency: move units to singular form (#45270) -
processor/signing: Fix int64 precision loss in canonical payload — timestamps and integer attributes are now serialized as quoted decimal strings instead of IEEE-754 doubles, preventing distinct records from producing identical signatures. (#50881) -
processor/tail_sampling: Reuse the original decision's threshold when rewriting tracestate for late-arriving spans of an already-sampled trace. (#50623) -
processor/transform: Ensure each batch of data receives a fresh cache whenshared_cacheis enabled (#51087) -
processor/transform: Fix exponential-to-explicit histogram conversion (#50737)
The conversion now handles positive, negative, and zero buckets, includes the
required overflow bucket, preserves data point metadata, and uses the
exponential histogram mapping implementation for bucket boundaries. -
receiver/elasticsearch: Emit theelasticsearch.index.shards.sizemetric withaggregation: primary_shardsin addition toaggregation: total(#48918)
The index shards size metric only reported thetotalaggregation, unlike the other index
metrics and its own documented attributes. It now also reports theprimary_shardsaggregation. -
receiver/fluent_forward: Cap decoded msgpack array entries at 1,000,000 and map options at 1,000 to avoid excessive memory allocation. (#49223) -
receiver/jaeger: Bound the Thrift decoder's max message size to the HTTP request body length to prevent a memory-amplification DoS. (#49218)
A tiny Thrift-binary payload could declare a spans list with a huge element count, forcing the decoder to
pre-allocate a large slice before failing to read the (absent) data. The Thrift/api/traceshandler now
caps the decoder's max message size at the number of bytes actually received, so a container that declares
more elements than the payload can hold is rejected instead of being pre-allocated. -
receiver/k8s_events: move units to singular form (#51262) -
receiver/k8s_events: Keep the watcher in the Kubernetes events receiver retry when retrieving fresh resource version after a 410 Gone response but fails transiently. (#49962) -
receiver/k8s_objects: Keep the watcher in the Kubernetes objects receiver retry when retrieving fresh resource version after a 410 Gone response but fails transiently. (#49962) -
receiver/kafka: Stop reporting stale offset lag and current offset metrics for revoked Kafka partitions. (#36093)
Theotelcol_kafka_receiver_offset_lagandotelcol_kafka_receiver_current_offsetmetrics will now be reported using async gauges. -
receiver/kafka: Stop processing a fetched batch once the partition consumer is cancelled, instead of marking and dropping the rest of it (#50753)
message_marking.on_errorandmessage_marking.on_permanent_errorno longer mark a
record that was interrupted by the cancellation. At shutdown, records that were
fetched but not delivered are redelivered on the next run instead of being committed. -
receiver/kafka: Applymetadata::retry::maxandmetadata::retry::backoff, which were silently ignored since the migration to franz-go. (#50116)
metadata::retry::maxgoverns retries for consumer group and offset commit/fetch requests. It
does not apply to fetch requests, nor to the client's internal metadata refresh, which caps
itself at 3 retries.metadata::retry::backoffis the minimum wait between retries; each successive retry doubles
the wait, with jitter applied, capped atmax(5s, backoff). Unlikemax, it applies to every
retry path, including fetches. -
receiver/kafka_metrics: Applymetadata::retry::maxandmetadata::retry::backoff, which were silently ignored since the migration to franz-go. (#50116)
metadata::retry::maxgoverns retries for the admin and offset fetch requests issued by the
scrapers. It does not apply to the client's internal metadata refresh, which caps itself at 3
retries.metadata::retry::backoffis the minimum wait between retries; each successive retry doubles
the wait, with jitter applied, capped atmax(5s, backoff). -
receiver/kafka_metrics: Set thekafka.cluster.aliasresource attribute to enabled whencluster_aliasis defined. (#47573) -
receiver/macos_unified_logging: Stop re-emitting already sent records in live mode by resuming each poll from the last emitted record (#50625)
Live mode previously recomputed--startasnow - max_log_ageon every poll and reset the poll interval
whenever the re-read window returned records, so each record was emitted up tomax_log_age / 100mstimes.
Text formats (default,syslog,compact) now also set the log record timestamp from the line.
Thejsonformat has no per-line timestamp and is not de-duplicated. -
receiver/macos_unified_logging: Add predicate field aliases and support additional fields (#50626)
Extended logType validation to include messageType alias and type validation to include eventType alias.
Added support for eventMessage and signpostName predicate fields.
Updated the README example to use the supported OR form for messageType/logType comparisons. -
receiver/mongodb: Fix replica set secondary connections never being established (#50622)
Replica set secondaries were never discovered, so the receiver only ever collected from the
instance it was pointed at. The receiver now connects to discovered secondaries, applying the
configured TLS settings and an operation timeout to those connections. -
receiver/mysql: Disabling every metric fed by a query now also skips the query that fed it, instead of still running the query and discarding the result. (#50702) -
receiver/mysql: Checkrows.Err()after iterating query results so a failed scrape is not reported as successful (#51125)
Affected queries could return partial results without reporting an error, so a connection lost
part-way through a scrape produced incomplete metrics that looked like a successful collection. -
receiver/netflow: Exclude netflowreceiver on solaris (#51328) -
receiver/oracledb: Fix top_query and top_procedure collection running before the configured collection interval has elapsed (#50888) -
receiver/oracledb: move units to singular form (#45270) -
receiver/otlp_json_file: Fix a panic and a zeroed accepted-data count by reading the span and metric counts before the data is handed to the next consumer (#50314)
EndTracesOp/EndMetricsOpreceivedSpanCount()/MetricCount()evaluated after
ConsumeTraces/ConsumeMetricshad already returned. By that point a consumer that
declaresMutatesDatamay own the data - thebatchprocessor's background goroutine
moves the resource slice out and nils the source - so the receiver counted state it no
longer owned. It reported 0 accepted spans or metric points, and could read a torn slice
header and crash the collector. The logs path in the same file has captured its count
before consuming since #29274. -
receiver/otlp_json_file: Attach the file attributes to profiles, as is already done for logs, metrics and traces. (#50562)
Attributes such aslog.file.namewere silently dropped from profiles. They are now
interned in the profiles dictionary and referenced from each profile, so options like
include_file_namebehave consistently across all four signals. -
receiver/postgresql: Fix incorrect top-query counter increments and query ranking caused by an undersized counter cache. (#51066)
With the defaults (top_n_query: 200, max_rows_per_query: 1000), the cache held 4,000 entries
for up to 10,000 counters, overflowing beyond roughly 400 statements when all ten counters were populated.
Eviction within a collection caused full cumulative totals to be reported as interval increments
on subsequent collections, also distorting which queries were selected as the top N.
The cache is now sized from max_rows_per_query, independently of the reporting limit. -
receiver/postgresql: Prevent dropped top-query records and incorrect query-plan reuse when the same query ID appears under multiple databases or roles. (#51067)
Rows from different databases or roles that shared a query ID previously used the same counter-cache entries.
This could calculate deltas against unrelated counters and silently drop top-query records.
Cache entries are now isolated by database, role, query ID, and counter column.
Query plans are also cached separately for each database, role, and query ID. -
receiver/prometheus: Drop malformed classic histograms with decreasing bucket counts or overall count below largest bucket count instead of emitting invalid OTLP data. (#50348)
Also applies when classic histograms are converted to NHCB via theconvert_classic_histograms_to_nhcbscrape option. -
receiver/pulsar: Exclude pulsarreceiver on solaris (#51326) -
receiver/snmp: Fix a collector-crashing nil-pointer panic in the deferred client Close when a mid-scrape connection reset fails to reconnect. (#49703)
The wrapper's Close now delegates to gosnmp's nil-safe, idempotent Close instead of dereferencing the connection field directly. -
receiver/splunk_hec: Extend the response write deadline while a request body is actively being read (#51391)
Over HTTP/2 the server arms the WriteTimeout deadline when the handler starts
and never extends it, so a large or slow request that is still actively
transferring its body was reset (RST_STREAM) once WriteTimeout elapsed, even
though it was making progress. The receiver now pushes the write deadline out
as the request body is read, so WriteTimeout behaves as an idle timeout for the
body-read phase rather than a hard cap on how long a request may take to arrive.
The deadline is also reset once just before the data is handed to the pipeline
so the downstream consumer starts with a full window; it is not extended while
the consumer runs, so a consumer that blocks longer than WriteTimeout is still
reset. When WriteTimeout is 0 (disabled) behavior is unchanged. -
receiver/splunk_hec: SetObservedTimestampon log records so downstream consumers have a valid timestamp when the event carries no time (#51391)
Previously the receiver only setTimestamp, derived from the event'stime
field (events endpoint) or the?time=query parameter (raw endpoint). When
neither was present the timestamp defaulted to the zero value (Unix epoch) and
ObservedTimestampwas never set, leaving records with no usable time.
ObservedTimestampis now stamped with the receiver's wall-clock time on both
the events and raw paths, giving downstream components the standard fallback. -
receiver/ssh_check: Fix the configuredtimeoutnever being applied to the underlying SSH connection. (#50912) -
receiver/systemd: move units to singular form (#45270) -
receiver/tcp_check: move units to singular form (#45270)
API Changelog
🛑 Breaking changes 🛑
-
all: Remove thepkg/pdatautilmodule. Its hash helpers moved togo.opentelemetry.io/collector/pdata/xpdata/xhashin opentelemetry-collector. (#51108)
Replace imports ofgithub.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil
(Hash,Hash64,MapHash,ValueHash, and theWith*options) with
go.opentelemetry.io/collector/pdata/xpdata/xhash. -
exporter/elasticsearch: Remove the deprecatedflushandnum_workersconfiguration settings. (#42718)
Migratenum_workerstosending_queue::num_consumers,flush::intervalto
sending_queue::batch::flush_timeout, andflush::bytesto
sending_queue::batch::max_sizewithsending_queue::batch::sizerset tobytes.
This also removesConfig.NumWorkers,Config.Flush, andFlushSettingsfrom
the exported Go API. -
pkg/ottl: Unexport the implementations of the standard OTTL functions (#50927) -
pkg/ottl: Move profiles support into a separatepkg/ottl/contexts/xprofilemodule so it is excluded from OTTL's stability guarantees. (#50906)
Theottlprofileandottlprofilesamplecontexts moved to
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/xprofile,
and theProfileIDconverter andNewProfileIDFactorymoved fromottlfuncsinto that
module'sottlfuncspackage.ProfileIDis no longer part ofStandardFuncsand
StandardConverters. Importers must update their import paths, depend on the new module,
and merge the profiles converters (for example via
xprofilefuncs.WithProfileConverters) to keepProfileIDavailable. -
pkg/ottl: Remove the unusedStrp,Floatp,Intp, andBoolphelpers from theottltestpackage. (#51037) -
pkg/ottl: Move the experimental lambda converters into thepkg/ottl/xottlmodule so they are excluded from OTTL's stability guarantees. (#51563)
TheAll,Any,Filter,Find,MapEach,MapKeys,Reduce, andWhenconverters and theirNew*Factory
functions moved togithub.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/xottl/ottlfuncs. They are no
longer part ofStandardFuncsandStandardConverters; merge them (for example via
xottlfuncs.WithExperimentalConverters) to keep them available. -
pkg/ottl: Unexport theParserCollectionSettingsandErrorModefields in favor of read-onlySettings()andErrorMode()accessor methods (#51156) -
pkg/ottl:SliceGetter.Rangenow returns (bool, error); the boolean reports whether the underlying slice is non-nil. (#51494) -
pkg/ottl: Remove theottltestpackage and itsSetFeatureGateForTestfunction from the public API. (#47305) -
pkg/ottl: Remove the stableottl.PanicDuplicateNameandottl.contexts.enableOTelColContextfeature gates. (#44630, #46437) -
pkg/ottl: Unexport the argument structs of the standard OTTL functions (#51023) -
receiver/carbon: Move theprotocolpackage tointernal/protocol, removing it from the public API. (#51500)
🚀 New components 🚀
pkg/ottl/xottl: Add thepkg/ottl/xottlmodule to hold OTTL's experimental Go API outside of OTTL's stability guarantees. (#51561)
💡 Enhancements 💡
-
pkg/ottl: AddExperimental()to theFactoryinterface and aWithExperimentaloption so functions can declare whether they are covered by stability guarantees. (#50927) -
pkg/pdatatest: Add the/countcollection operator topmetricassertforresources,scopes,metrics, anddatapoints. (#48472)
<collection>/counttakesexact, orminand/ormax, and composes with
/include. Pairing it with an exact<collection>list is a schema error. -
pkg/pdatatest: AddWithAttributeExistsandWithAttributeRegexoptions to pmetricassert snapshot generation. (#49734) -
pkg/pdatatest: Add the/includecollection operator topmetricassertforresources,scopes,metrics, anddatapoints. (#48472)
Collections without an operator keep matching exactly. Within an item matched
by/include, an omitted nested collection asserts nothing about it.
🧰 Bug fixes 🧰
pkg/ottl: FixSliceGetter.Getand literal slice folding so a coerced typed-nil slice (for example[]string(nil)when elements are getters) is treated as nil instead of an empty non-nil slice. (#51494)pkg/ottl: FixGetLiteralValuesandGetScalarLiteralValuesso they do not evaluate dynamic slices when checking for literal values. (#51438)pkg/ottl: PreventSliceGetter.GetandSliceGetter.Rangefrom panicking when constructed fromnil. (#51174)processor/transform: Fix exponential-to-explicit histogram conversion (#50737)
The conversion now handles positive, negative, and zero buckets, includes the
required overflow bucket, preserves data point metadata, and uses the
exponential histogram mapping implementation for bucket boundaries.
We are thrilled to welcome our first-time contributors to this project. Thank you for your contributions @hghukasyan, @Easonliuuuuu, @Rucha0901, @sneha-kr20, @sublimemonk, @SerhiiGoTolstoy, @krissiyan, @waheedi, @Lewis-E, @jochil, @abhinav1602, @suckatrash, @Mujib-Ahasan, @bachp, @insatomcat, @perebaj, @weliasz, @bingquanzhao, @Abhimanyu9988, @rahulgtt, @KR-Ravindra, @PySheriff, @chiliec, @MichalPawlus, @eKuG, @stelizhenets, @CedricConday, @weili-broadcom, @samuelvl, @abhishuraina ! 🎉