Skip to content

v0.159.0

Latest

Choose a tag to compare

@github-actions github-actions released this 17 Aug 21:44
· 2 commits to main since this release
v0.159.0
1120cc0

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.

  • receiver/huaweicloudcesreceiver/
  • receiver/simpleprometheusreceiver/

End User Changelog

🛑 Breaking changes 🛑

  • all: Removes the kafkatopicsobserver extension after being deprecated for 3 months (#48186)
    Use the kafkareceiver with topic regex support instead.

  • extension/observer: Removes the kafka.topics endpoint type along with the kafkatopicsobserver extension (#48186)
    The observer.KafkaTopicType endpoint type and its observer.KafkaTopic details struct are
    removed, as the kafkatopicsobserver was the only observer emitting them. The receivercreator
    no longer accepts type == "kafka.topics" rules or resource attributes for that endpoint type.

  • processor/dynamic_sampling: Reserve the "" prefix in rule names for processor-internal decision labels, and rename the unmatched-drop sentinel to _unmatched (#49311)
    Configs with rule names starting with "
    " are now rejected at validation, so user rule
    names can never collide with the processor-owned sentinel labels on decision metrics
    (_eviction, _root_span_condition). The rule attribute value for traces dropped with
    no matching rule changes from unmatched to _unmatched to follow the same convention.

  • receiver/file_log: ordering_criteria::top_n: 0 now means 'match all files' instead of silently behaving like top_n: 1. (#47444)
    To restore the previous behavior of matching the first file only, set ordering_criteria::top_n: 1.

🚩 Deprecations 🚩

  • exporter/azure_monitor: Rename azuremonitor to azure_monitor (#45339)

  • exporter/signalfx: Remove the logic sending trace correlation. (#50166)
    The trace correlation endpoint is no longer processing requests as the logic has moved
    to be handled by the backend. With this change, the exporter continues to accept spans
    but will no longer send them to the correlation endpoint.

  • receiver/file_log: Deprecate the implicit ordering_criteria.top_n default of 1 when ordering_criteria.sort_by is configured. Enable the filelog.requireExplicitTopN feature gate to require top_n to be set explicitly. (#47444)
    When ordering_criteria.sort_by is configured without top_n, the matcher
    silently defaults top_n to 1, returning only the single highest-priority file
    per poll. With multiple actively-written files this causes severe log
    duplication: the other matching files cycle in and out of the tracker and are
    re-read from offset 0 on rediscovery.

    Enabling the filelog.requireExplicitTopN feature gate makes an unset top_n a
    startup error when sort_by is configured, forcing the choice to be explicit.
    The gate is off by default; it is expected to become the default (and the
    implicit fallback removed) in a future release. Use top_n: 1 to keep the
    previous behavior.

    Independently of the feature gate, top_n: 0 now means "match all files"
    instead of silently behaving like top_n: 1.

  • receiver/sql_query: Rename the 'sqlquery' receiver to 'sql_query'. The old 'sqlquery' type remains available as a deprecated alias. (#45339)

🚀 New components 🚀

  • extension/sd_notify: Introduces the sd_notify extension, which integrates the collector with the sd_notify(3) protocol. (#49607)

💡 Enhancements 💡

  • cmd/opampsupervisor: Add tar.gz archive support and the agent_binary configuration for collector package upgrades. (#49766)

  • exporter/awscloudwatchlogs: Add max_event_payload_bytes config option to opt in to the CloudWatch Logs 1 MiB per-event limit (previously hardcoded to 256 KiB). (#48559)
    The CloudWatch Logs PutLogEvents API began accepting events up to 1 MiB on
    2025-04-02. The exporter previously truncated every event at 256 KiB (the
    pre-2025 service limit) via a hardcoded package constant. The default stays
    at 256 KiB for backwards compatibility; set max_event_payload_bytes: 1048576
    to take advantage of the new ceiling. A new cwlogs.WithMaxEventPayloadBytes
    pusher option exposes the same knob to direct callers of the internal package.

  • exporter/azure_monitor: Allow configuring HTTP status codes that should not be marked as errors in Application Insights. (#47691)
    Adds telemetry_mappings.traces.http.success settings for HTTP success mapping:
    additional_success_status_codes lists status codes treated as Success on both
    server and client HTTP spans, and server_policy: otel treats 4xx responses on
    HTTP server spans as Success, matching the OpenTelemetry HTTP semantic conventions.
    Defaults preserve the existing exporter behaviour.

  • exporter/load_balancing: Promote metrics support to alpha stability (#50086)

  • exporter/opensearch: Add integration test harness against a real OpenSearch instance (#48615)
    Introduces testcontainers-go setup to validate exporter behavior,
    dynamic mappings, and cluster connectivity.

  • exporter/prometheus_remote_write: Add a nested http config block for HTTP client settings. The nested block takes precedence over flat HTTP client settings when set. (#46209)

  • exporter/prometheus_remote_write: Add the exporter ID as an attribute on WAL telemetry metrics to disambiguate multiple PRW exporters sharing a collector. (#49130)

  • exporter/signalfx: Stop excluding container.memory.rss in SignalFx exporter by default. (#50162)

  • extension/aws_iam_db_auth: Change aws_iam_db_auth to alpha (#50118)

  • extension/pebble_tail_storage: Added max_storage_size_mib support to the Pebble tail storage extension to bound local disk usage for pending tail-sampling trace data. (#49592)
    Configuration example:
    extensions:
    pebble_tail_storage:
    directory: /var/lib/otelcol/pebble-tail-storage
    max_storage_size_mib: 10240

  • extension/sumologic: Add optional fleet_id configuration field to assign a collector to a fleet during registration. (#50142)
    When fleet_id is configured, it is sent as fleetId in the collector registration request.
    If the server returns an invalid_fleet_id or fleet_not_found error, registration is
    retried without the fleet ID so the collector can still register successfully.

  • pkg/datadog: Add the datadog.EnableScopeConvention feature gate to control the otel.scope name and version conventions in the Datadog exporter. (#49001)
    When the datadog.EnableScopeConvention feature gate is enabled, spans additionally
    carry the otel.scope.name and otel.scope.version attributes. The deprecated
    otel.library.name and otel.library.version attributes are still emitted with the
    same values for backward compatibility, so existing dashboards and monitors keyed on
    them keep working.

  • pkg/fileconsumer: Move filelog.allowFileDeletion and filelog.windows.caseInsensitive filelog.featuregates to beta (#46635)

  • pkg/ottl: pcommon.Value is now comparable using all comparison operators (==, !=, <, <=, >=, >) in OTTL expressions (#49170)

  • pkg/ottl: The set function will pass nil values directly to the target when the ottl.set.allowNil feature gate is enabled. (#48714)

  • processor/dynamic_sampling: Reduce hot-path overhead with a fast path for the default root-span condition, cheaper decision-cache ordering, precomputed metric attributes, and a precomputed emitted tracestate. (#49311)

  • processor/dynamic_sampling: Document known limitations, the metric label contract (sentinel rule values, trigger values), and refresh the future work list (#49311)

  • processor/dynamic_sampling: Move buffered spans into the output at decision time instead of copying them, halving decision-path allocations. (#49311)

  • processor/dynamic_sampling: Drain pending traces on shutdown, deciding each through the normal rule path instead of silently dropping the buffer (#49311)
    Previously a collector restart, rollout, or config reload discarded every buffered trace
    without a decision (up to trace_timeout worth of spans). Shutdown now decides each pending
    trace with the spans seen so far, forwards the kept ones with a correct ot=th tracestate,
    and reports them on the decision-triggers counter with trigger="shutdown". Traces already
    counted by an earlier trigger are not counted again, and the same double-count guard is
    applied to eviction of a trace in its decision_delay window.

  • processor/dynamic_sampling: Use MoveTo instead of CopyTo when accumulating and forwarding spans, reducing allocations and improving throughput. (#49311)

  • processor/resource_detection: Add feature gates to migrate the elastic_beanstalk detector to the current deployment semantic conventions. (#50130)
    The detector reports the deployment environment as deployment.environment, which is deprecated in
    the semantic conventions, and the deployment ID as service.instance.id. Two alpha feature gates
    migrate them to deployment.environment.name and deployment.id:
    processor.resourcedetection.elasticbeanstalk.EmitV1DeploymentConventions adds the current
    attributes, and processor.resourcedetection.elasticbeanstalk.DontEmitV0DeploymentConventions
    removes the deprecated ones. Enabling only the first reports both sets, so telemetry
    can be migrated before the deprecated attributes are dropped. Enabling only the second is rejected
    at startup. The default output is unchanged.

  • processor/resource_detection: Support global retry config for resource detection processor (#46546)

  • processor/resource_detection: Add Azure Container Apps resource detector (#48239)

  • processor/resource_detection: Add the processor.resourcedetection.consul.prefixMetaAttributes feature gate, which emits Consul node metadata as consul.meta.<key> resource attributes. (#49988)
    The gate is alpha and disabled by default, so Consul meta attribute names are unchanged unless the
    gate is enabled. This namespaces Consul meta consistently with the other detectors that expose
    user-defined key/value data, such as ec2.tag. and openstack.nova.meta..

  • processor/tail_sampling: Add num_shards config option to run N parallel event loops, sharding traces by trace ID to reduce contention under high load. (#48699)
    The single event loop can become a bottleneck under high throughput because
    trace ingestion starves sampling decision evaluation. Setting num_shards
    to a value greater than 1 distributes traces across independent goroutines,
    each with its own storage and decision batcher. The default value of 1
    preserves the original single-loop behavior.
    To keep aggregate behavior consistent with the configured values,
    num_traces, expected_new_traces_per_sec, decision_cache sizes, and
    per-second rate limits in policies (rate_limiting, bytes_limiting, and
    composite max_total_spans_per_second) are divided evenly across shards.
    Limiter burst_capacity is not divided so that single large traces remain
    admissible regardless of the shard count.
    The sampling_traces_on_memory metric reports the total across all shards.

  • processor/transform: Add support for semconv 1.41.0, 1.42.0 and 1.43.0 in the set_semconv_span_name() function. (#50198)

  • receiver/apache: Change the apache.worker.limit metric type from a gauge to a non-monotonic cumulative sum (UpDownCounter) (#47061)
    An UpDownCounter better represents the configured worker slots, which can go up or down over time.

  • receiver/apache: Add an opt-in migration to new, more consistent metric and attribute names behind feature gates (#47327)
    The original metric and attribute names remain the default. Enable
    receiver.apache.enableNewFormatMetrics to also emit the new names, and
    additionally enable receiver.apache.disableOldFormatMetrics to emit only the
    new names. See the receiver's README for the migration guide and full mapping.
    Renamed metrics:

    • apache.current_connections -> apache.connection.active
    • apache.connections.async -> apache.connection.status
    • apache.requests -> apache.request.count
    • apache.scoreboard -> apache.worker.status
    • apache.workers -> replaced by apache.worker.active and apache.worker.idle
      Renamed attributes:
    • connection_state -> apache.connection.state
    • state (on the scoreboard metric) -> apache.worker.state
    • level (on apache.cpu.time) -> apache.process.level
    • mode (on apache.cpu.time) -> cpu.mode
  • receiver/apache: Add apache.request.rate, apache.traffic.rate (disabled by default), and apache.worker.limit metrics (#47061)

  • receiver/aws_lambda: Add the aws.log.subscription_filter.names resource attribute to CloudWatch Logs decoded by the built-in decoder (#49923)
    The subscription filter name is the CloudWatch-managed link between a log group and the
    destination function, so it can carry per-source identity when multiple log groups fan into
    a single Lambda. The attribute is only added when the event contains subscription filters.

  • receiver/dns_check: Add complete scraping implementation for the DNS Check Receiver, including metrics and resource attributes. (#49561)
    Replaces skeleton implementation with full production-ready collector functionality.
    Includes metrics metadata and completed configuration.
    Includes real scraper implementation that performs DNS checks and emits metrics and resource attributes.
    Includes README docs.

  • receiver/googlecloudpubsubpush: Promote logs support to alpha stability (#50112)

  • receiver/kubelet_stats: Add optional k8s node filesystem inode count/free metrics. (#48926)
    Adds the following optional metrics to kubeletstatsreceiver:

    • k8s.node.filesystem.inode.count
    • k8s.node.filesystem.inode.free
  • receiver/mysql: Add replica thread running and open temporary table metrics to the mysqlreceiver. (#50132)

  • receiver/mysql: Add mysql.file.open, mysql.table.open, and mysql.thread.slow_launch metrics, disabled by default. (#49867)

  • receiver/mysql: Add alter_table, create_index, create_table, and optimize command types to the mysql.commands metric. (#49863)

  • receiver/mysql: Add InnoDB data I/O and pending operation metrics. (#50138)

  • receiver/oracledb: Use the go-sqllexer ObfuscateAndNormalize engine to obfuscate SQL in the top query and query sample collectors, and upgrade github.com/DataDog/datadog-agent/pkg/obfuscate to v0.82.0 (#50231)
    The obfuscated db.query.text is now normalized (whitespace collapsed, comments stripped, punctuation
    spaced, trailing semicolon removed), which yields stable query signatures across semantically identical
    statements that previously differed only in formatting. Leading SQL comments are no longer rendered as a
    leading ?; the previous two-pass comment-anonymization behavior has been removed. Comment tags are still
    extracted from the raw SQL and emitted via db.query.comment_tags. Identifier quotation is preserved
    (KeepIdentifierQuotation) so a quoted identifier such as "a b" does not collide with the unquoted
    a b. This is a one-time change to the obfuscated output format and may alter any downstream identifiers
    derived from db.query.text. The obfuscate library upgrade to v0.82.0 (with github.com/DataDog/go-sqllexer
    v0.2.4) also normalizes qualified identifiers consistently.

  • receiver/oracledb: Add tablespace health metrics (#48399)
    All 3 new metrics are opt-in (disabled by default) and support oracle.db.pdb on CDB-root and
    direct-PDB connections. Note: oracle.db.pdb is itself opt-in - if it is not also enabled on a
    CDB root with multiple PDBs, same-named tablespaces in different PDBs will be aggregated
    together rather than reported per PDB, matching the existing behavior of every other opt-in
    oracle.db.pdb metric in this receiver.

  • receiver/oracledb: Add wait event timeout count to the session wait sample event (#49934)

  • receiver/splunk_enterprise: added dimensions to kvstore metrics (#50189)

  • receiver/sqlserver: Use the go-sqllexer ObfuscateAndNormalize engine to obfuscate SQL in the top query and query sample collectors, and upgrade github.com/DataDog/datadog-agent/pkg/obfuscate to v0.82.0 (#50210)
    Comment-only statements (e.g. Blue Prism banners) no longer produce a "result is empty" error or repeated
    error logs; they now obfuscate to an empty string. Statements the legacy tokenizer could not parse are
    obfuscated instead of being dropped. The obfuscated db.query.text is now normalized (whitespace collapsed,
    comments and aliases removed), which changes the obfuscated output format; this is a one-time change and may
    alter any downstream identifiers derived from the obfuscated query text. The obfuscate library upgrade to
    v0.82.0 also normalizes qualified identifiers consistently (e.g. schema.table no longer renders with a
    spurious space after the dot), which contributes to the same one-time change in obfuscated output.
    The transitive github.com/DataDog/go-sqllexer dependency is pinned to v0.2.4, which fixes obfuscation of
    string literals containing a backslash (e.g. REPLACE(@@SERVERNAME, '\', ':')).

  • receiver/sqlserver: Share a single, tunable database connection pool across all scrapers of a metrics or logs receiver instead of opening one pool per query. (#47219)
    Previously each enabled query created its own *sql.DB connection pool to the same instance. All
    scrapers now share one pool per receiver instance — the metrics and logs receivers each own
    their own pool — that is owned by the receiver and closed on shutdown, reducing connection and
    memory overhead as more queries are enabled. The pool can be
    tuned via a new optional connection_pool config block (max_open, max_idle, max_lifetime,
    max_idle_time); by default max_open and max_idle are derived from the number of scrapers,
    replacing the sub-optimal Go driver defaults. Emitted telemetry is unchanged.

🧰 Bug fixes 🧰

  • exporter/awscloudwatchlogs: Resolve the {PodName} placeholder in log_group_name/log_stream_name from the k8s.pod.name resource attribute as well as the legacy pod attribute. (#46202)
    The k8sattributesprocessor sets the semantic convention attribute
    k8s.pod.name, not the legacy pod attribute that {PodName} previously
    looked up. This left {PodName} resolving to undefined for standard EKS
    pipelines unless users added an extra processor to rename the attribute.

  • exporter/datadog: Fix log misrouting when a batch contains multiple ResourceLogs with different scopes, which previously routed the whole batch based on only the first ResourceLogs' scope, via the github.com/DataDog/datadog-agent dependency bump to v0.82.0. (#50069, #49322)

  • exporter/datadog: Fix a goroutine hang on shutdown and swallowed errors when consuming regular logs, via the github.com/DataDog/datadog-agent dependency bump to v0.82.0. (#50069)

  • exporter/datadog: Fix an unbounded loop in the histogram-to-sketch conversion that could drive the exporter to OOM when ingesting an OTel explicit-bucket histogram with a very large finite upper bound, via the github.com/DataDog/datadog-agent dependency bump to v0.82.0. (#50069)

  • exporter/datadog: Map the Rate metric intake type in legacy metric clients so delta-sum datapoints carrying datadog.metric.as_type=rate are no longer silently dropped. (#50119)
    toDataType previously mapped only Count and Gauge, so a Rate datatype fell through to
    METRICINTAKETYPE_UNSPECIFIED and the series was rejected by the intake.

  • exporter/prometheus_remote_write: Fix context.DeadlineExceeded being incorrectly treated as a permanent error, which caused metrics to be dropped instead of retried on timeout. (#49691)
    context.DeadlineExceeded indicates a transient timeout and should result in a retry.
    Only context.Canceled (explicit user/component shutdown) should be treated as permanent.

  • exporter/prometheus_remote_write: Flush buffered WAL entries when the exporter is idle so data is not stalled until the next write. (#49130)

  • internal/aws: Fix eventBatch.exceedsLimit rolling batches at the per-event truncation cap (256 KiB) instead of the 1 MiB per-request PutLogEvents limit. Batches now pack up to the actual service ceiling. (#48559)
    This is a pre-existing inefficiency unrelated to the new
    max_event_payload_bytes config field. eventBatch.exceedsLimit has
    compared cumulative batch bytes against maxEventPayloadBytes (256 KiB)
    rather than maxRequestPayloadBytes (1 MiB) since the original 2022 code.
    The result: batches have been rolling at ~25% of the PutLogEvents request
    limit. Workloads with average event size above ~25 KiB will see roughly
    3-4x fewer PutLogEvents calls for the same data volume after this fix,
    with no config change required.
    The fix is also load-bearing for the new configurable per-event cap shipping
    in the same PR: without it, opted-in users with >256 KiB events would ship
    each event in its own PutLogEvents call rather than packing up to the 1 MiB
    service ceiling.
    The new threshold matches the service-documented batch-size accounting:
    sum(message bytes UTF-8) + 26 * num_events. That is exactly what
    byteTotal already sums (eventPayloadBytes() includes the 26-byte
    perEventHeaderBytes), so no envelope-overhead margin is needed.

  • pkg/datadog: Stop setting the removed Agent config key enable_sketch_stream_payload_serialization, which fixes a spurious unknown key ERROR logged at Agent startup. The key was a no-op, so this changes no behavior. (#50238)

  • pkg/translator/prometheusremotewrite: Preserve consecutive underscores in label names when the permissive label sanitization feature gate is enabled. (#48991)
    When the pkg.translator.prometheus.PermissiveLabelSanitization feature gate was enabled, label names with consecutive underscores (e.g. a__b) were still collapsed to a single underscore because the converter did not set PreserveMultipleUnderscores on the label namer. The gate now preserves them as intended.

  • processor/coralogix: Only start a new transaction for SERVER/CONSUMER spans when they cross into a different service from their parent, instead of unconditionally, so in-process phases (e.g. a queue-wait span) are no longer misclassified as separate transaction roots. (#50048)
    Previously any SERVER or CONSUMER span nested under an existing local transaction was always
    split off into its own transaction root, even when it came from the same service as its parent.
    Root detection now compares the span's resource service.name against its parent's, and only
    treats the SERVER/CONSUMER span as a new entry point when the service actually changes.

  • processor/isolationforest: Produce differentiated anomaly scores and honor the configured contamination_rate. (#46988)
    The online isolation forest trees never split, so every record received a
    near-identical anomaly score and nothing was ever flagged. Trees now grow once
    they accumulate enough samples. The adaptive threshold also ignored
    contamination_rate (the percentile was hardcoded to 0.9); it is now derived as
    1 - contamination_rate. A contamination_rate of exactly 0.0 or 1.0 is now
    rejected during configuration validation instead of being silently replaced with
    a default.

  • processor/k8s_attributes: Fix memory leak and incorrect deletion for custom association identifiers (labels, annotations) that go through active->stale->active transitions. (#48588)

  • processor/metrics_transform: combine action no longer silently drops data points when a single Summary metric matches the transform. The operation is now skipped with a warning log instead. (#49693)

  • processor/tail_sampling: Drop processor state when TailStorage.Take fails so failed fetches do not leave stranded traces or forward incomplete batches. (#49907)

  • processor/tail_sampling: In the composite policy, a sub-policy omitted from rate_allocation now receives its default equal share of the budget instead of a zero sampling rate that permanently blocked it from sampling. (#49828)

  • receiver/datadog: Set the datadog.metric.as_type datapoint attribute on series submitted with type rate (#50120)
    A Datadog rate series is translated to a delta Sum, which was previously indistinguishable
    from one produced by a count series, making the original type unrecoverable downstream.
    Datapoints from rate series now carry datadog.metric.as_type: rate, the attribute the
    Datadog exporter reads to map such a Sum back to a Datadog rate. Other metric types are
    unchanged.

  • receiver/elasticsearch: Record deleted document counts for the index-level elasticsearch.index.documents metric, matching existing node-level behavior. (#49996)

  • receiver/icmpcheckreceiver: Enable privileged ICMP mode on Windows so pings succeed without requiring elevated privileges. (#50215)

  • receiver/postgresql: Fix EXPLAIN failing on queries with a repeated placeholder or a $N-looking string literal, by counting real bind parameters from pg_prepared_statements instead of regex-matching $N in the query text. (#50054)

  • receiver/postgresql: Fix postgresql.total_exec_time and postgresql.total_plan_time docs on the db.server.top_query event to correctly state seconds instead of milliseconds. (#50113)
    pg_stat_statements reports these columns in milliseconds, and the receiver correctly converts
    to seconds before emitting them, per OTel semantic conventions (durations SHOULD use seconds).
    metadata.yaml incorrectly documented the emitted unit as milliseconds; this updates the docs
    to match the actual (and semconv-compliant) behavior. No emitted values change.

  • receiver/prometheus: Prevent the Prometheus receiver from dropping classic histograms without explicit bucket boundaries when convert_classic_histograms_to_nhcb is enabled and classic histograms are not retained. (#49893)

  • receiver/snowflake: Close sql.Rows in all Fetch* methods so the underlying driver connection is released back to the pool. (#49707)
    Previously, none of the 8 Fetch* methods in client.go called rows.Close() after iterating sql.Rows returned by readDB(). This leaked a database connection per query per scrape interval, eventually exhausting the connection pool. Also adds rows.Err() checks after each rows.Next() loop to surface iteration errors.

  • receiver/sqlserver: Fix query sample events silently omitting sessions blocked on schema locks. (#49983)

  • receiver/sqlserver: Fix the receiver dropping the entire query plan when obfuscating a single attribute fails (#50065)
    All Unicode format characters (Cf category, e.g. zero-width space U+200B) are stripped from SQL before obfuscation so queries containing them are not dropped.

  • receiver/yang_grpc: Fix walking the value tree and recording metrics (#50109)

API Changelog

🛑 Breaking changes 🛑

  • extension/observer: Removes the kafka.topics endpoint type along with the kafkatopicsobserver extension (#48186)
    The observer.KafkaTopicType endpoint type and its observer.KafkaTopic details struct are
    removed, as the kafkatopicsobserver was the only observer emitting them. The receivercreator
    no longer accepts type == "kafka.topics" rules or resource attributes for that endpoint type.

  • pkg/fileconsumer: matcher.OrderingCriteria.TopN is now a *int instead of int, so the matcher can distinguish an unset value from an explicit zero. (#47444)

  • pkg/ottl: Remove the deprecated NewIsRootSpanFactory and rename NewIsRootSpanFactoryNew to NewIsRootSpanFactory. (#50093)

🚩 Deprecations 🚩

  • receiver/signalfx: Deprecate the signalfxreceiver package and module (#50201)
    The receiver is deprecated and will be removed in the next release.

  • testbed: Deprecate testbed.signalfxdatareceiver (#50200)

💡 Enhancements 💡

  • exporter/awscloudwatchlogs: Add max_event_payload_bytes config option to opt in to the CloudWatch Logs 1 MiB per-event limit (previously hardcoded to 256 KiB). (#48559)
    The CloudWatch Logs PutLogEvents API began accepting events up to 1 MiB on
    2025-04-02. The exporter previously truncated every event at 256 KiB (the
    pre-2025 service limit) via a hardcoded package constant. The default stays
    at 256 KiB for backwards compatibility; set max_event_payload_bytes: 1048576
    to take advantage of the new ceiling. A new cwlogs.WithMaxEventPayloadBytes
    pusher option exposes the same knob to direct callers of the internal package.

  • extension/storage: Implement the storage.Walker interface for storagetest (#49969)

  • pkg/datadog: Add the datadog.EnableScopeConvention feature gate to control the otel.scope name and version conventions in the Datadog exporter. (#49001)
    When the datadog.EnableScopeConvention feature gate is enabled, spans additionally
    carry the otel.scope.name and otel.scope.version attributes. The deprecated
    otel.library.name and otel.library.version attributes are still emitted with the
    same values for backward compatibility, so existing dashboards and monitors keyed on
    them keep working.

  • pkg/ottl: pcommon.Value is now comparable using all comparison operators (==, !=, <, <=, >=, >) in OTTL expressions (#49170)

  • pkg/pdatatest: Support /exists and /regex operators on the scope version field in pmetricassert assertion files. (#48393)
    The assertion-file equivalent of pmetrictest.IgnoreScopeVersion: version/exists
    requires a version without pinning its value, version/regex matches a full-string pattern.

  • pkg/pdatatest: Add empty container validation logic to pmetrictest.ValidateMetrics (#49072)

  • pkg/pdatatest: Update pmetricassert assertion schema to use strongly typed int_value and double_value fields instead of a generic value field. (#48473)

We are thrilled to welcome our first-time contributors to this project. Thank you for your contributions @SrikarChittemsetty, @tombiddulph, @josepdaniel, @Atishyy27, @SSOHEB, @pujitha24, @dmfallak, @janweinkauff, @raunakmandaokar, @Alexpedone, @vijaynandwani, @iypetrov, @danielcbright, @challahc, @darkknight8670, @theycallmeloki, @pathcl, @PragalvaXFREZ, @rkhoriander, @charanck9, @sairaj18, @shubhgupta2104 ! 🎉