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: Increase minimum Go version to 1.26 (#50394) -
exporter/kafka: Removes the deprecated auth.tls and auth.plain_text configurations. (#50202) -
exporter/signalfx: Datapoints that fail validation are no longer dropped in the exporter. This may increase the ingestsf.org.numDatapointsDroppedInvalidorg metric. No action required; (#50011) Previously, the SignalFx exporter dropped datapoints with an invalid metric name, dimension name, dimension value, or number of dimensions before sending them to the backend. The backend already enforces the same constraints and drops offending datapoints at ingest, so this exporter-side enforcement was redundant. With this change, the exporter no longer drops these datapoints itself and only logs a debug message; the backend will now drop them. As a result, these datapoints now count toward sf.org.numDatapointsDroppedInvalid. -
pkg/kafka/configkafka: Remove all previously deprecated Kafka client configuration options. (#50381) The following deprecated options are no longer accepted:resolve_canonical_bootstrap_servers_only(no-op since franz-go migration)auth.sasl.version(no-op since franz-go migration)group_rebalance_strategy(usegroup_rebalance_strategiesinstead)
-
processor/adaptive_tail_sampling: Restructure sampler configuration around intent-based types with an optional algorithm field, and standardise trace/span terminology (#49311) Sampler types are renamed to state intent:deterministicis nowprobabilistic(matching the probabilistic_sampler processor; same hash-consistent fixed fraction),ema_dynamicis nowadaptive_percentage, andema_throughput/windowed_throughputmerge intoadaptive_throughputwith an optionalalgorithmfield (ema, the default, orwindowed). Goal fields are renamed to match:goal_sampling_percentageis nowgoal_percentageandgoal_throughput_per_secis nowgoal_throughput(still spans per second). Docs now state the volume model explicitly: decisions are per trace, volume is measured in spans. Refinery migration mapping is included in the README. -
processor/adaptive_tail_sampling: Require fingerprint_attributes entries to be scoped attribute selectors (#49311) Entries now have the form<scope>.attributes["<name>"]where scope is one of resource, scope, span, root, or any. The resource/scope/span prefixes match OTTL's span-context path names; root reads from spans matching the configured root_span_condition and any searches resource, scope, and span attributes. Bare attribute names are rejected at validation with an error suggesting the scoped form. Migrating a bare name: use the scope the attribute actually lives at (e.g. resource.attributes["service.name"]), or any.attributes[""] to keep search-everywhere behaviour (which now also includes instrumentation-scope attributes). -
processor/adaptive_tail_sampling: Rename thedynamic_samplingprocessor toadaptive_tail_sampling. There is no alias, the old name stops working. (#50367) The rename covers every surface that carried the old name: the config id (dynamic_sampling->adaptive_tail_sampling), the sampler types (dynamic_percentage->adaptive_percentage,dynamic_throughput->adaptive_throughput), the metric prefix (otelcol_processor_dynamic_sampling_*->otelcol_processor_adaptive_tail_sampling_*), the span attribute namespace (otelcol.processor.dynamic_sampling.*->otelcol.processor.adaptive_tail_sampling.*), and the Go module path (processor/dynamicsamplingprocessor->processor/adaptivetailsamplingprocessor). -
processor/adaptive_tail_sampling: Rename the samplerkey_attributesfield tofingerprint_attributes(#49311) The fingerprint names the attributes that identify what kind of trace this is for sampling purposes. Semantics are unchanged: values are collected from resource attributes and from every span of the accumulated trace. The README documents the collection model and separators, and adds guidance on choosing fingerprint attributes that classify traffic rather than identify individual requests. -
processor/k8s_attributes: Promoteprocessor.k8sattributes.telemetry.*feature gates from alpha to beta (enabled by default). (#45871) The following feature gates are now enabled by default:processor.k8sattributes.telemetry.enableNewFormatMetrics: enables new-format internal telemetry metrics.processor.k8sattributes.telemetry.disableOldFormatMetrics: disables old-format internal telemetry metrics. Users relying on the old-format metrics should migrate to the new format before upgrading.
-
processor/k8s_attributes: Remove the deprecateddeployment_name_from_replicasetoption. (#45871) Thedeployment_name_from_replicasetkey must be removed from all configs entirely. Because confmap rejects unknown keys, any config that still contains this setting — whether set totrueorfalse— will cause a hard startup failure. Deployment names are always derived from the ReplicaSet name heuristic; the ReplicaSet informer still runs whenk8s.deployment.uidis enabled or deployment/replicaset labels/annotations are extracted. Users that had this setting asfalsecan get the same informer-based behaviour by following the respective documentation section. -
receiver/systemd: Add metrics for services' memory current and peak memory usage. (#50035)
🚩 Deprecations 🚩
-
exporter/awsemf: Deprecate legacyenabledandexclude_service_attributesfields inresource_to_telemetry_conversionin favor ofincludedandexcludedpatterns. (#48861) Introduces theexporter.awsemf.DisableLegacyResourceToTelemetryConversionfeature gate to disable the legacy fields. When migrating fromenabled: true, setincluded: ["*"]. -
exporter/prometheus: Deprecateresource_to_telemetry_conversionin favor ofresource_constant_labelsand add feature gateexporter.prometheus.DisableResourceToTelemetryConversion. (#48861) -
exporter/prometheus_remote_write: Deprecateresource_to_telemetry_conversionin favor ofresource_constant_labelsand add feature gateexporter.prometheusremotewrite.DisableResourceToTelemetryConversion. (#48862) -
receiver/icmp_check: Renameicmpcheckreceiverreceiver toicmp_checkwith deprecated aliasicmpcheckreceiver(#45339) -
receiver/windows_perf_counters: Rename the 'windowsperfcounters' receiver to 'windows_perf_counters'. The old 'windowsperfcounters' type remains available as a deprecated alias. (#45339)
🚀 New components 🚀
processor/signing: Addsigningprocessor, a new processor that computes a RFC 8785 (JCS) canonical hash and signs each log record, storing the base64-encoded signature asaudit.integrity.valueand settingaudit.integrity.algorithmandaudit.integrity.certificateas resource attributes. Supports RS256, RS512, ES256, EdDSA, and HMAC-SHA256. Designed for use with the OpenTelemetry Audit Logging signal to provide tamper-evident audit trails. (#50079, #50080) Key material can be loaded from a file, environment variables, a Kubernetes Secret, or an OpenBao (Vault-compatible) secret engine.
💡 Enhancements 💡
-
cmd/opampsupervisor: Add support fortelemetry.resource.detection/developmentin OpAMP Supervisor telemetry. (#45116) This follows the OpenTelemetry configuration schema by treatingtelemetry.resource.detection/development.detectorsas detector selection. Currently supported detector entries arecontainer,host,process, andservice. See the OpenTelemetry Configuration Go support table and search forExperimentalResourceDetectorfor current detector support: https://github.com/open-telemetry/opentelemetry-configuration/blob/main/language-support-status.md#goExample: telemetry: resource: attributes: - name: foo value: bar detection/development: detectors: - host: {}
-
exporter/awss3: Honor the S3 client's request checksum calculation setting (including theAWS_REQUEST_CHECKSUM_CALCULATIONenvironment variable) when uploading objects. (#50184) The transfer manager previously always defaulted to calculating a CRC32 checksum, which is sent as an aws-chunked trailer that some S3-compatible backends reject. It now inherits the setting from the configured S3 client. -
exporter/kafka: Allow sending more than one signal to the same Kafka topic withsignal_header. (#50244) Setsignal_header: trueand point each signal'stopicat the same name. You can enable the setting while topics stay separate. Existing receivers ignore the extra header, so current per-signal topics keep working. Do not write mixed signals to a receiver that does not havesignal_headerenabled. While this option is on,otelcol.signalcannot be set inrecord_headersorinclude_metadata_keys. -
exporter/load_balancing: Avoid quadratic re-hashing when assembling per-endpoint metric batches, most visible with the streamID routing key on high-cardinality workloads. (#49725) Merging N routed batches into an endpoint's payload re-computed the identity hash of every already-merged ResourceMetrics/ScopeMetrics/Metric on each merge, making a ConsumeMetrics call O(N^2) in the number of routed batches. The identities of the accumulated payload are now cached while merging, which makes the assembly O(N). With 1000 resources (2 metrics x 2 datapoints each) routed by streamID across 5 endpoints, ConsumeMetrics goes from ~50ms to ~12ms; in production CPU profiles of a streamID-keyed load balancer, this re-hashing accounted for the majority of total CPU time. -
exporter/opensearch: Add support for exporting metrics to OpenSearch in thess4oandotel-v1mapping modes. (#30556, #48587) Each metric data point is exported as one document. All OpenTelemetry metric types are supported (gauge, sum, histogram, exponential histogram and summary). Documents follow the Simple Schema for Observability metrics schema (ss4omode, default indexss4o_metrics-{dataset}-{namespace}) or the Data Prepper OTel v1 metrics schema (otel-v1mode, default indexotel-v1-metrics). The newmetrics_index,metrics_index_fallbackandmetrics_index_time_formatoptions control dynamic index naming, mirroring the existing logs and traces options. -
exporter/prometheus: Addresource_constant_labelsoption to transform OTLP resource attributes into Prometheus constant labels. (#48861) Supports specifying wildcard patterns viaincludedandexcludedlists to selectively transform resource attributes into labels in compliance with the OTel Prometheus specification. -
exporter/prometheus_remote_write: Send the start timestamp of cumulative sums, histograms and summaries asstart_timestampwhen using the Remote Write 2.0 protobuf message. (#50089) -
exporter/prometheus_remote_write: Addresource_constant_labelsoption to transform OTLP resource attributes into Prometheus constant labels. (#48862) Supports specifying wildcard patterns viaincludedandexcludedlists to selectively transform resource attributes into labels in compliance with the OTel Prometheus specification. -
extension/aws_logs_encoding: Promoteextension.encoding.awslogsencoding.EmitV1RPCConventionsfeature gate to beta. (#47549) The CloudTrail log unmarshaler now emits rpc.system.name (semconv v1.40.0) by default, alongside the deprecated rpc.system and rpc.service (semconv v1.38.0) attributes. The v1.38.0 attributes continue to be emitted while extension.encoding.awslogsencoding.DontEmitV0RPCConventions remains in alpha. -
extension/aws_logs_encoding: Emit a fully-qualifiedrpc.methodfor CloudTrail logs when theextension.encoding.awslogsencoding.EmitV1RPCConventionsfeature gate is enabled. (#47549) Per the semconv v1.40.0 deprecation of rpc.service, the CloudTrail eventSource is folded into rpc.method as a fully-qualified name (e.g. ec2.amazonaws.com/StartInstances) instead of being dropped. This keeps the AWS service queryable via rpc.method once rpc.service is no longer emitted (extension.encoding.awslogsencoding.DontEmitV0RPCConventions). -
extension/bearertokenauth: Addretry_on_failureandwait_for_token_fileconfig to retry reading the token file during startup when it is not yet available. (#50122) Useful when the token file (e.g. a Kubernetes-mounted secret) is provisioned shortly after the collector starts. Configureenabled,max_retries, andintervalunderretry_on_failure. Setwait_for_token_fileto block startup until the token file is read instead of retrying in the background. -
extension/opamp: Avoid sending duplicate health status updates to the OpAMP server (#50197) -
pkg/fileconsumer: Add opt-inskip_unmodified_filesconfig option that skips opening and fingerprinting a file when its path and mtime match a previously tracked reader. (#47861) Whenskip_unmodified_filesis set totrue, the matcher stats each candidate path up front and consults the existing reader state (previousPollFiles and theknownFilesgeneration window) for a match on path+mtime. On match the tracked metadata is promoted into the current generation and the file is skipped entirely for this poll: no open, no fingerprint, no read. This avoids wasted IO on files that haven't been modified since the last poll. The option defaults tofalse, preserving the existing fingerprint-based behavior. The retention of the newLastObservedPath/LastObservedMtimefields follows the same lifecycle as the reader itself, so the skip coherence cannot outlive the reader metadata it relies on. -
pkg/ottl: Improve syntax error messages to report the position and nearby source, and give odd-length byte literals a clearer error. (#50526) -
pkg/ottl: Adds the clear function to OTTL. (#48714) -
pkg/resourcetotelemetry: AddIncludedandExcludedpattern matching toSettings. (#48861, #48862) Supports wildcard patterns viaincludedandexcludedlists to selectively convert resource attributes to telemetry attributes, and deprecatesEnabledandExcludeServiceAttributes. -
processor/adaptive_tail_sampling: Addrecord_fingerprintto stamp the matched rule's fingerprint on kept spans, raw or hashed (#49311) Off by default.valuerecords the raw fingerprint,hashrecords the first 8 bytes of its SHA-256 as 16 hex characters (deterministic across instances, so grouping works fleet-wide). Recorded on every span of a kept trace, including late-arriving spans via the decision cache, under otelcol.processor.adaptive_tail_sampling.fingerprint. -
processor/adaptive_tail_sampling: Addspan_limit(default 10000) to bound per-trace buffering. A trace reaching the limit is decided immediately over the spans buffered so far, and later spans are stamped from the decision cache instead of being buffered. (#49311)num_tracesand eviction bound how many traces are buffered, not how large any one of them grows, so a single giant trace could previously exhaust memory. Setspan_limit: 0to disable the cap. Also adds decision observability: a newtrace_span_counthistogram records buffered span counts per trace at decision time (for sizingspan_limit), every kept span now carries anotelcol.processor.adaptive_tail_sampling.triggerattribute recording which event triggered the decision, and limit-triggered decisions are counted on the decision-triggers metric undertrigger="span_limit". -
processor/adaptive_tail_sampling: Addinitial_sampling_percentage(default 10) toadaptive_throughput, making the cold-start sampling rate visible and configurable instead of a hidden library default. (#50538) A throughput goal cannot be converted to a sample rate before any volume has been observed, so the pre-warmup rate is an explicit bootstrap. The default matches the previous behavior of theemaalgorithm (keep 10%).adaptive_percentageis unchanged: it already samples at the goal rate during cold start. -
processor/adaptive_tail_sampling: Add a fingerprint_duration histogram recording per-decision fingerprint extraction time by rule (#49311) -
processor/k8s_attributes: Add support for extracting labels and annotations from CronJobs. (#50386) -
processor/k8s_attributes: Add support for extracting labels and annotations from ReplicaSets. (#50386) -
processor/resource_detection: Add Azure App Service resource detector (#49616) -
processor/span_pruning: Add random exemplar sampling. When enabled, ceil(precision_multiplier * sqrt(N)) spans are sampled from the top-level group of each aggregation tree and kept as whole subtrees (siblings of the summary span) with their CPS sampling threshold updated so cross-trace consumers can extrapolate via adjusted counts. (#49167) -
processor/tail_sampling: Add Trace State support forrate_limitingandbytes_limitingpolicies. (#49710) -
processor/transform: Addshared_cacheoption to statement lists (#50563) This allows sharing caches between multiple sets of statements, which provides the ability to do coordinated operations across multiple passes over a set of data. -
receiver/aws_cloudwatch: add cloud.account.id to resource attributes (#45038) -
receiver/azure_functions: Add Event Hub metrics support to theazure_functionsreceiver with per-binding encodings undertriggers.event_hub.metrics. (#43507) -
receiver/docker_stats: Add new metriccontainer.state.statusthat reports number of containers in a given status. Disabled by default (#44428) -
receiver/docker_stats: Add a new metriccontainer.state.health.statusthat reports container health status with attributecontainer.state.health.statewhich can have values 'starting', 'healthy', or 'unhealthy'. Disabled by default. (#50063) -
receiver/elasticsearch: Addcluster_stats_master_onlyandindex_stats_master_onlyconfig options to optionally restrict cluster stats and index stats collection to the cluster's elected master node. (#49937) This is useful when running one receiver instance per node against the same cluster, to avoid every instance issuing the same cluster-wide calls on every collection interval. Both options default tofalse, preserving existing behavior. -
receiver/elasticsearch: Add an opt-inelasticsearch.cluster.uuidresource attribute that uniquely identifies the cluster. (#50263) The attribute is disabled by default to preserve backward compatibility. Unlikeelasticsearch.cluster.name, the cluster UUID is stable across restarts and unique across clusters, so it can be enabled to disambiguate clusters that share a name. -
receiver/host_metrics: Add feature gates to opt into Process Semantic Conventions RC in the Process scraper (#49708) Two feature gates control the migration during the transition period:scraper.process.EmitV1SystemConventions(disabled by default): when enabled, emits the metrics and attributes aligned with the latest semantic conventions.scraper.process.DontEmitV0SystemConventions(disabled by default): when enabled, stops emitting the legacy metrics and attributes. Affected metrics includeprocess.cpu.time,process.cpu.utilization,process.disk.io,process.context_switches,process.paging.faults,process.threads,process.open_file_descriptors, andprocess.handles.
-
receiver/host_metrics: Create receiver level feature gates for enabling v1 Semantic Conventions (#50252) Adds receiver-level feature gates to the host metrics receiver that enable all scrapers to emit v1 semantic conventions. These supersede the per-scraper v1 semantic convention feature gates. -
receiver/kafka: Add opt-in independent partition processing with bounded per-partition mailboxes. (#50030) Independent partition processing requiresautocommit.enableto be true. -
receiver/mongodb: Add WiredTiger log, fsync, and concurrent-transaction ticket metrics (#50208) Five opt-in metrics (disabled by default) read from serverStatus.wiredTiger: mongodb.wt.log.write, mongodb.wt.log.operation.count, mongodb.wt.log.sync.time, mongodb.wt.fsync.count, and mongodb.wt.concurrent_transactions.in_use. All emit only on the WiredTiger storage engine. -
receiver/mysql: Add MyISAM key cache metrics to the mysqlreceiver. (#50247) -
receiver/mysql: Add InnoDB row-lock wait count and wait time metrics. (#50172) -
receiver/oracledb: Add opt-in Automatic Storage Management (ASM) diskgroup and disk metrics (oracledb.asm.disk_group.*,oracledb.asm.disk.*). (#50487) All 5 metrics are disabled by default. Sourced fromV$ASM_DISKGROUP_STATandV$ASM_DISK_STAT, queried from the regular RDBMS connection (no+ASMinstance connection required). Both views return zero rows, not an error, on instances that don't use ASM. -
receiver/statsd: Add thereceiver.statsd.monotonicCounterDefaultfeature gate, which when enabled changes the default value ofis_monotonic_counterto true. (#14956) Most statsd counters are monotonic, but the receiver previously defaultedis_monotonic_counterto false, producing non-monotonic delta sums that some exporters (e.g. the Prometheus exporter) convert to gauges. Enabling this alpha feature gate makes counters monotonic by default; explicitly settingis_monotonic_counterin the receiver config always takes precedence over the gate. -
receiver/vcenter: Add host memory metrics vcenter.host.memory.granted, vcenter.host.memory.active, and vcenter.host.memory.ballooned, all disabled by default. (#48800) -
receiver/windows_perf_counters: Allow Windows performance counter wildcard queries to include their aggregation instance (#29054) Existinginstances: "*"configurations continue to omit_Total. Useinstances: ["*", "_Total"]to retain it. For a custom aggregate such as_Global_, setaggregation_nameand list that name beside the wildcard to retain it.
🧰 Bug fixes 🧰
-
cmd/opampsupervisor: Fix the OpAMP supervisor so that the full effective config map (all named config files) is forwarded to the OpAMP server instead of only the empty-string ("") key (#49902) -
cmd/opampsupervisor: Fix a data race in the commander when the agent process has to be killed after it ignores the graceful shutdown signal. (#49929) -
cmd/opampsupervisor: Fix Supervisor startup failing withcould not get bootstrap info from the Collectorwhen another process is already usinglocalhost:8888(#50608) The Collector started during bootstrap is only used to report its AgentDescription and is stopped immediately afterwards, but it applied the default internal telemetry configuration and bound a Prometheus reader onlocalhost:8888. When that port was already in use the Collector exited before connecting back to the Supervisor, and startup failed withcould not get bootstrap info from the Collector. The bootstrap Collector's internal metrics are never collected, so they are now disabled for that invocation only. -
cmd/opampsupervisor: Ignore non-positive HeartbeatIntervalSeconds from OpAMP connection settings and revert the heartbeat interval when reconnecting with new settings fails (#50268) Previously a ConnectionSettingsOffers message that left HeartbeatIntervalSeconds unset overwrote the supervisor's current interval with zero, which opamp-go rejects for HTTP transport and treats as "disable heartbeats" for WebSocket transport. On the HTTP path the subsequent reconnect failed, and because the old interval was not restored the fallback reconnect failed the same way, leaving the supervisor permanently disconnected. Non-positive intervals are now ignored and the previous interval is restored when reconnecting with new settings fails. -
cmd/opampsupervisor: Fix config validation so effective config cannot mask invalid remote configs. (#50153) -
connector/service_graph: Support span links for asynchronous messaging correlation in the service graph connector. (#48610) -
exporter/elasticsearch: FixtimeoutInterceptorimmediately cancelling all requests whentimeout=0(#50469) Added aperRequestTimeout <= 0guard to skip the timeout wrapping when no timeout is configured. -
exporter/elasticsearch: Sanitizeelasticsearch.indexattribute in dynamic router to prevent routing bypasses (#49219) -
exporter/elasticsearch: Fix ignoredtimeoutconfig regression (#50316, #50329, #50388) -
exporter/honeycomb_marker: Add start_time to Honeycomb marker requests (#50544) Honeycomb marker requests now use the log timestamp for start_time, falling back to the observed timestamp when the log timestamp is unset. The field is omitted when neither timestamp is available. -
exporter/prometheus: Preserve leading and consecutive underscores in metric and target_info label names whenPermissiveLabelSanitizationfeature gate is enabled. (#50435) -
exporter/prometheus_remote_write: Preserve UTF-8 characters inexternal_labelsnames when usingNoTranslationorNoUTF8EscapingWithSuffixes. (#50435) -
extension/file_storage: Fix nil pointer crash when bbolt database compaction fails during startup after database corruption (#49735) The file_storage extension now catches panics during on_start compaction and returns an error instead of crashing the collector. This allows the collector to continue operating with existing database recovery mechanisms. -
extension/oidc: Reloadpublic_keys_fileon any change in its parent directory so projected-secret style key rotations take effect without a collector restart. (#0) The JWKS file watcher previously only triggered a reload when an fsnotify event's name exactly matched the configuredpublic_keys_filepath. Kubernetes-style projected-secret rotations swap a..datasymlink target rather than rewriting the leaf file, so the leaf path never appears in any event and the verifier remained stale until the collector was restarted. As a result, tokens signed by a revoked or rotated key continued to be accepted across a rotation. The watcher now refreshes every provider whosepublic_keys_fileresides in a watched directory whenever any relevant filesystem event occurs in that directory, so symlink-based rotations are picked up immediately. Reloading also no longer mutates theoidc.Configshared with the verifier it replaces, which was a data race against in-flight token verification. -
extension/opamp: Avoid requiring host ID when building os.description so OpAMP can start on Windows containers. (#46965) getOSDescription now uses gopsutil PlatformInformation instead of host.Info, which fails on Windows containers when MachineGuid is unavailable. -
pkg/ottl: TheIntLikeGetternow returns an error when a string value cannot be parsed as an int (#50564) -
pkg/ottl: Reject malformed list literals that are missing commas between elements or have a leading comma. (#50530) -
pkg/translator/prometheusremotewrite: Fix target_info metric label name translation in PRW exporter to respect UTF-8 / NoTranslation settings. (#50435) -
processor/adaptive_tail_sampling: Re-read the stopped flag before forwarding evicted and late traces so a concurrent shutdown is honoured (#49311) -
processor/adaptive_tail_sampling:adaptive_throughputwithalgorithm: windowedkept 100% of traffic during cold start and for fingerprints it was not tracking (includingmax_keysoverflow); it now samples them atinitial_sampling_percentage. (#50538) The windowed sampler reports no rate for keys outside its computed window, and the processor previously treated that as keep-everything. Theemaalgorithms are unaffected; theirmax_keysoverflow behavior still keeps overflow traffic and needs upstream library support to change, tracked in the same issue. -
processor/k8s_attributes: Reject configurations with duplicatepod_associationrules during validation. (#49269) Two associations that resolve to the same set of sources (ignoring source order) now cause a validation error. This enforces the uniqueness ofPodIdentifiers that the cache relies on. -
receiver/cloudflare: Applymax_request_body_sizeto the decompressed size of gzip-encoded request bodies (#49232)max_request_body_sizewas enforced withhttp.MaxBytesReader, which bounds the compressed bytes only. A small gzip-encoded request could therefore still expand without limit while being buffered in memory. The decompressed stream is now bounded by the same setting, and a request whose decompressed body exceeds it is rejected with 422 rather than read in full. -
receiver/oracledb: Emitoracledb.plan_hash_valueas the raw value returned by Oracle rather than hex-encoding the string, making it directly correlatable withV$SQL.PLAN_HASH_VALUE. (#50307) Previously,oracledb.plan_hash_valuewas emitted as a hex-encoding of the ASCII bytes of the string value (e.g.4199919568became34313939393139353638), making it impossible to correlate directly withV$SQL.PLAN_HASH_VALUEin Oracle. -
receiver/postgresql: Honorexclude_databasesin the top query and query sample collectors (#50046) Previously only the metrics path appliedexclude_databases. Statements from excluded databases were still collected, and the top query collector connected to each one to run EXPLAIN -- which managed providers reject, for examplerdsadminon Amazon RDS, logging an error on every plan cache expiry. Both collectors now filter excluded databases server side and no longer connect to them to run EXPLAIN. -
receiver/prometheus_remote_write: Only convert exemplartrace_idandspan_idlabels that are valid IDs, and keep the rest as filtered attributes (#50547) Atrace_idorspan_idlabel with an invalid length was previously zero padded or truncated before being stored in the exemplar. This could create an ID that the sender never wrote, while the original value was lost. The receiver now converts only valid IDs with the expected OpenTelemetry width and preserves an invalid value unchanged as a filtered attribute. -
receiver/prometheus_remote_write: Stop native histogram bucket spans from driving unbounded memory and CPU use. (#50286) A remote write request could describe a gap of billions of histogram buckets in a few bytes, and the receiver reserved memory and iterated in proportion to that gap. Bucket spans are now validated before conversion, and a native histogram is dropped when its spans are invalid, when it would expand to more than 16384 buckets, or when a request has already used its budget of 4194304 buckets. -
receiver/prometheus_remote_write: Drop the Prometheus overflow bucket when converting native histograms, instead of translating it. (#50292) The last bucket that maps to a finite OpenTelemetry bucket is 1024*2^schema. The bucket above it is the Prometheus overflow bucket, which covers values past the IEEE float range, and the Prometheus compatibility specification requires overflow buckets to be dropped and left out of the count. It was previously translated as an ordinary bucket. Buckets above the overflow bucket are not allowed at all, and a histogram containing one is now dropped. -
receiver/sqlserver: Ensureservice.instance.iduniquely identifies SQL Server named instances when using dynamic ports. (#50535) -
receiver/sqlserver: Skip emitting query sample and top query events whose text is empty or a comment-only placeholder, except idle blocker query samples which are still emitted. (#50219) SQL Server returns a placeholder line comment (e.g.--*UPDATE----) in place of data-modifying OPENROWSET statements that carry inline credentials. The obfuscator strips line comments, leaving an empty query text, so these rows previously emitted empty query sample and top query events. Such rows are now skipped, with one exception: idle blocker query samples (command = IDLE_BLOCKER) are still emitted even when their query text is empty, so the blocking-session information they carry is preserved. -
receiver/vcenter: Emit VM CPU metrics for idle VMs instead of dropping them (#49643) A CPU usage of 0 MHz was treated as the VM being unavailable, sovcenter.vm.cpu.usage,vcenter.vm.cpu.utilizationandvcenter.vm.cpu.readinesswere silently dropped for every powered on but idle VM. 0 MHz is a valid reading for an idle VM, so availability is now determined by the VM power state instead. -
receiver/vcenter: added logic so that if a query fails due to a bad object it does not fail the entire scrape (#46977)
API Changelog
🛑 Breaking changes 🛑
-
pkg/datadog: Remove deprecated func: StaticAPIKeyCheck (#50599) -
pkg/ottl: Remove the deprecatedottlprofile.NewTransformContextandottlprofilesample.NewTransformContext. UseNewTransformContextPtrinstead. (#50399) -
pkg/ottl: Change the "Like" Getters to return a value and a bool instead of a pointer (#50564)StringLikeGetter,FloatLikeGetter,IntLikeGetter,BoolLikeGetter, andByteSliceLikeGetternow return the value by-value plus aboolthat istruewhen a value was found andfalsewhen the underlying value was nil, instead of returning a pointer. -
processor/adaptive_tail_sampling: Rename thedynamic_samplingprocessor toadaptive_tail_sampling. There is no alias, the old name stops working. (#50367) The rename covers every surface that carried the old name: the config id (dynamic_sampling->adaptive_tail_sampling), the sampler types (dynamic_percentage->adaptive_percentage,dynamic_throughput->adaptive_throughput), the metric prefix (otelcol_processor_dynamic_sampling_*->otelcol_processor_adaptive_tail_sampling_*), the span attribute namespace (otelcol.processor.dynamic_sampling.*->otelcol.processor.adaptive_tail_sampling.*), and the Go module path (processor/dynamicsamplingprocessor->processor/adaptivetailsamplingprocessor).
🚀 New components 🚀
pkg/semconvtest: Add pkg/semconvtest for validating component telemetry against OpenTelemetry Semantic Conventions using Weaver (#44905) Provides a Go testing API that spins up a Weaver container via testcontainers-go, sends logs/metrics/traces via OTLP gRPC, and parses live-check results for semconv violations. Includes a sample receiver demonstrating the intended usage pattern for component authors.
💡 Enhancements 💡
-
internal/k8sinventory: Add informer-based observer implementation (#43602) -
pkg/ottl: Addottl.SliceGetterso functions can take slice arguments as either static literals or dynamic expressions. (#49341) Unlike bare slice arguments,ottl.SliceGetteraccepts literal lists or a getter expression that resolves to a slice at runtime. Element type may be a typedottl.Getter(e.g.ottl.StringGetter) or a scalar. -
pkg/ottl: AddWithCacheoptions toTransformContextcreation functions (#50563) This enables passing in a custom cache, for example to allow sharing between contexts. -
pkg/pdatatest: add pmetricassert attribute include matcher (#48471) -
pkg/resourcetotelemetry: AddIncludedandExcludedpattern matching toSettings. (#48861, #48862) Supports wildcard patterns viaincludedandexcludedlists to selectively convert resource attributes to telemetry attributes, and deprecatesEnabledandExcludeServiceAttributes. -
pkg/translator/prometheusremotewrite:FromMetricsV2now translates the start timestamp of cumulative sums, histograms and summaries intostart_timestamp. (#50089) -
receiver/windows_perf_counters: Allow Windows performance counter wildcard queries to include their aggregation instance (#29054) Existinginstances: "*"configurations continue to omit_Total. Useinstances: ["*", "_Total"]to retain it. For a custom aggregate such as_Global_, setaggregation_nameand list that name beside the wildcard to retain it.
🧰 Bug fixes 🧰
pkg/ottl: TheIntLikeGetternow returns an error when a string value cannot be parsed as an int (#50564)