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 馃洃
-
cmd/opampsupervisor: Remove thereports_package_statusescapability config option. Theaccepts_packagesoption now enables both the AcceptsPackages and ReportsPackageStatuses OpAMP capabilities. (#49762)
Neither capability was functional; the supervisor exits with an error at startup when configured, so no working configuration is affected. -
processor/drain: Add masking rules for named parameter extraction. Removes theextract_parametersandparams_attributeconfig fields released in v0.157.0. (#48914)
Addsmasking_rules, an ordered list of{name, pattern}regex substitutions applied to a copy
of the log body before it is fed to the Drain tree. Matched substrings become named mask tokens
in derived templates (for example<ip>), stabilising the tree on high-cardinality values.
Each masked position writes a dynamic attribute at
<parameter_key_prefix>.<mask name>(default prefixlog.record.template.parameter), matching
the OTel semantic-convention pattern used byhttp.request.header.<key>and
db.query.parameter.<key>.Adds
emit_wildcards(default false): when true, Drain's own<*>positions are written to a
positional string slice attribute atwildcards_attribute(default
log.record.template.wildcards). Independent ofmasking_rules, so users can enable it without
any rules to see raw variable values before deciding what to mask.When a mask name matches multiple positions in the same template, first-match wins and the
losing values are dropped. Theotelcol_processor_drain_masks_duplicatescounter is incremented
once per record per duplicated mask name, tagged with amaskattribute for observability.Breaking: the positional-only
extract_parametersandparams_attributefields released in
v0.157.0 are removed. Collectors with either field set will fail to start after upgrading.
To migrate, replaceextract_parameters: truewithemit_wildcards: true, and rename
params_attributetowildcards_attribute. The behaviour is identical; only the field names
change. Note the default output attribute also renames fromlog.record.template.paramsto
log.record.template.wildcards, so downstream consumers of the old attribute key should either
update their references or setwildcards_attribute: log.record.template.paramsto keep the
old key. -
processor/dynamic_sampling: Flatten sampler config, renamekey_fieldstokey_attributes, dropinitial_sampling_rate. (#49311)
Sampler fields no longer live under a per-type sub-block (sampler.<type>.<field>);
they move up one level undersampler:withtypeacting as the discriminator.
key_fieldsis renamed tokey_attributesto match OTel attribute vocabulary used
elsewhere in the processor. The rarely-usedinitial_sampling_rateon
ema_throughputis removed; dynsampler-go's default applies.goal_throughput_per_sec
is nowintfor both throughput samplers. Fields set for a sampler type that does
not use them are rejected at config validation. -
processor/dynamic_sampling: Replace the custom rule condition parser with OTTL expressions and add amatchfield to control same-span vs any-span semantics. (#49311)
Ruleconditions:are now OTTL boolean expressions evaluated in the ottlspan
context. Path expressions must be qualified with a context prefix
(span.attributes["k"],resource.attributes["k"],span.status.code, etc).
A new per-rulematch:field selectsany_span(default, each condition
satisfied by some span) orsame_span(some single span satisfies all
conditions). A new counter,
otelcol_processor_dynamic_sampling_ottl_eval_errors, is labelled by rule
and tracks runtime OTTL evaluation errors. -
receiver/icmpcheckreceiver: Change RTT metric value type from int to double for sub-millisecond precision (#49960) -
receiver/oracledb:oracle.db.pdbis now a data-point attribute (opt-in) instead of a resource attribute. (#48643)
oracle.db.pdbhas moved from a resource attribute to an opt-in data point attribute.
Downstream pipelines that grouped, routed, or filtered onoracle.db.pdbat resource scope
must be updated to read it from data point attributes, and it must be explicitly enabled on
each metric that should carry it viametrics.<name>.attributes: [oracle.db.pdb]. Existing
CDB deployments that do not enable the attribute or add the grants needed for per-PDB
collection keep working unchanged; the receiver falls back to the single-container queries. -
receiver/postgresql: Collectpostgresql.database.locksfrom each configured database instead of only the defaultpostgresdatabase. (#49206)
Previously the metric was collected once against the defaultpostgresdatabase, so locks on relations
belonging to other configured databases were silently dropped, and all data points were emitted on the
instance-level resource withoutpostgresql.database.name. Lock data points for database-local relations
are now emitted on the corresponding per-database resource with thepostgresql.database.nameresource
attribute. Locks on shared system catalogs (e.g.pg_database) are reported once at the instance level.
When thereceiver.postgresql.useOTelSemconvfeature gate is enabled there is a single server-level
resource, so the data points instead carry adb.namespaceattribute to identify the database. Without it
relations that exist in more than one database (any system catalog, or user tables sharing a name) would
collapse into a single series. Locks on shared system catalogs carry an emptydb.namespace, since they
are server-scoped rather than database-scoped.
The lock count now usesCOUNT(*)instead ofCOUNT(pid), so locks held by prepared transactions
(which have a NULLpidinpg_locks) are counted instead of being reported as zero.
The metric is disabled by default and has development stability, so no feature gate is provided for this
behavior change.
馃毄 Deprecations 馃毄
-
exporter/mezmo: Deprecate the mezmo exporter (#49953)
Mezmo now supports ingesting OpenTelemetry data directly via OTLP. Use the OTLP/HTTP
exporter instead. See https://docs.mezmo.com/telemetry-pipelines/otel-collector and
https://docs.mezmo.com/telemetry-pipelines/open-telemetry-source for migration guidance. -
processor/alibabaecsdetector: Deprecate per-detectorfail_on_missing_metadatain thealibaba_ecsdetector config (#46579)
Use the top-levelfail_on_missing_metadatain the processor config instead.
The field continues to work but will emit a deprecation warning in the logs when set and
code will be removed later. -
processor/delta_to_cumulative: Rename the 'deltatocumulative' processor to 'delta_to_cumulative'. The old 'deltatocumulative' type remains available as a deprecated alias. (#45339) -
processor/delta_to_rate: Rename the 'deltatorate' processor to 'delta_to_rate'. The old 'deltatorate' type remains available as a deprecated alias. (#45339) -
processor/novadetector: Deprecate per-detectorfail_on_missing_metadatain thenova(OpenStack) detector config (#46579)
Use the top-levelfail_on_missing_metadatain the processor config instead.
The field continues to work but will emit a deprecation warning in the logs when set and
code will be removed later. -
processor/resource_detection: Deprecate per-detectorfail_on_missing_metadatain theec2detector config (#46579)
Use the top-levelfail_on_missing_metadatain the processor config instead.
The field continues to work but will emit a deprecation warning in the logs when set and
code will be removed later. -
processor/tencentcvmdetector: Deprecate per-detectorfail_on_missing_metadatain thetencent_cvmdetector config (#46579)
Use the top-levelfail_on_missing_metadatain the processor config instead.
The field continues to work but will emit a deprecation warning in the logs when set and
code will be removed later. -
processor/upclouddetector: Deprecate per-detectorfail_on_missing_metadatain theupclouddetector config (#46579)
Use the top-levelfail_on_missing_metadatain the processor config instead.
The field continues to work but will emit a deprecation warning in the logs when set and
code will be removed later. -
processor/vultrdetector: Deprecate per-detectorfail_on_missing_metadatain thevultrdetector config (#46579)
Use the top-levelfail_on_missing_metadatain the processor config instead.
The field continues to work but will emit a deprecation warning in the logs when set and
code will be removed later.
馃殌 New components 馃殌
extension/aws_iam_db_auth: Add an extension awsiamdbauthextension that implementsdbauth. (#49044)receiver/dns_check: Add initial skeleton of DNS Check receiver (README, config, factory, metadata) with In Development stability. (#49561)
馃挕 Enhancements 馃挕
-
exporter/datadog: Addexporter.datadogexporter.AddUnitsfeature gate that maps OTLP (UCUM) metric units to their Datadog equivalents. (#15280) -
exporter/elasticsearch: Allowtraces,profiles, andsyntheticsas validdata_stream.typevalues when overriding via attributes inbodymapmapping mode, in addition to the existinglogsandmetrics. (#49337) -
exporter/prometheus_remote_write: Addconvert_explicit_histograms_to_nhcbto convert explicit-bucket (classic) histograms into Native Histograms with Custom Buckets (NHCB) on export, withkeep_classic_histogramsto emit both representations during migration. (#33661)
Whenconvert_explicit_histograms_to_nhcbis set, each OTLP explicit-bucket histogram
is converted to a single NHCB series (schema -53) carrying the bounds as
CustomValues, instead of the classic_bucket/_sum/_countfan-out. Setting
keep_classic_histograms: trueadditionally emits the classic series so a
migration can run both in parallel. Implemented for both the RW1 and RW2 write
paths; reuses Prometheus'util/convertnhcbconverter for wire-compatible
encoding. -
exporter/prometheus_remote_write: Addinclude_metadata_keystoremote_write_queueconfiguration to forward client metadata as HTTP headers. (#47317) -
pkg/jaeger: Migrate http.status_code (v1.25.0) semantic convention to http.response.status_code (v1.40.0) (#45036)
The migration is gated behind two alpha (disabled by default) feature gates:
enablepkg.translator.jaeger.EmitV1HttpConventionsto emithttp.response.status_code, and
additionally enablepkg.translator.jaeger.DontEmitV0HttpConventionsto stop emitting the
deprecatedhttp.status_code.
Both gates will graduate to beta (enabled by default) and eventually be removed, after which the
translator will only emithttp.response.status_code. That removal is a breaking change for
anything still relying onhttp.status_code, so please migrate your dashboards, alerts and
queries now. -
pkg/stanza: Changeconnection_idle_timeouton thetcp_inputoperator to a duration field that defaults to no idle timeout, apply it independently ofmax_connections, and add atcp_input_refused_connectionsmetric. (#49610) -
pkg/stanza: Addmax_connectionsandconnection_idle_timeoutoptions to thetcp_inputoperator to limit the number of concurrent TCP connections. (#49610) -
processor/dynamic_sampling: Evicted traces now receive a real sampling decision instead of being dropped silently, with a configurableevictionpolicy. (#49311)
Whennum_tracesis full the oldest pending trace is evicted and decided immediately.
eviction.policy: evaluate(default) runs the normal rules on the spans seen so far;
eviction.policy: probabilisticdecides with a threshold derived from
eviction.sampling_percentagein constant time, shedding load under pressure. Both modes
record the decision for late spans and stamp kept traces with a correctot=th. -
processor/dynamic_sampling: Add configurableroot_span_conditionOTTL expression to control which spans trigger the trace decision. (#49311)
Defaults toIsRootSpan(), preserving prior behaviour. Operators can override with any OTTL boolean
expression evaluated in theottlspancontext (e.g. accepting a producer-supplied hint attribute or a
cross-process server span). Evaluation errors are counted onprocessor_dynamic_sampling_ottl_eval_errors
under the sentinelrule="_root_span_condition"label. -
processor/oracleclouddetector: Addcloud.resource_idresource attribute to the Oracle Cloud detector, set to the compute instance OCID. (#49832) -
processor/resource_detection: Add top-levelfail_on_missing_metadatato make unreachable metadata services a hard failure (#46579)
Whentrue, network-based detectors return an error instead of silently returning an empty
resource when their metadata service is unreachable.
Supersedes the per-detectorfail_on_missing_metadatafields, which are now deprecated. -
processor/resource_detection: Add cloud.region to GKE resource detection by deriving it from cloud.availability_zone (#49694) -
processor/span_pruning: Preserve whole outlier subtrees instead of individual spans and detect outliers at every aggregation level, so a slow interior span (e.g. one slow handler among many) keeps its entire subtree. (#49324) -
processor/span_pruning: Add optional OTTLconditionsfiltering so span pruning only applies to traces with at least one matching span (empty conditions still prune all traces), and add theotelcol_processor_spanpruning_traces_skippedmetric for traces skipped when no conditions match. (#49026) -
processor/transform: AddParseELFfunction to parse W3C Extended Log Format (ELF) log blocks into structured maps. (#48352)
ParseELF(target)parses a complete ELF text block and returns apcommon.Mapwith
directive metadata (version, software, date, start_date, end_date, remark), a fields
slice, and an entries slice keyed by field name. Multiple #Fields directives and
double-quoted values (IIS-style) are supported. -
receiver/awsxray: Migrates v1.20.0 (http.client_ip) semantic convention to v1.42.0 (client.address) (#45085) -
receiver/awsxray: Migrated HTTP semantic conventions from v1.25.0 to v1.42.0 (#45084) -
receiver/kafka_metrics: Addkafka.cluster.idresource attribute, auto-discovered from cluster metadata. Disabled by default; opt in viaresource_attributes. (#48892)
The attribute is disabled by default. When enabled, it complements the existing user-configuredkafka.cluster.aliasresource attribute. -
receiver/kubelet_stats: Add thereceiver.kubeletstats.cpuUsageScrapeBasedfeature gate. When enabled,container.cpu.usage,k8s.pod.cpu.usageandk8s.node.cpu.usage(and the cpu utilization metrics derived from them) are calculated as the rate of the corresponding*.cpu.timecounter between consecutive scrapes, instead of being read directly from the kubelet'sUsageNanoCoresvalue. (#49477) -
receiver/memcached: Addtlsconfiguration to support connecting to memcached over TLS. (#49146)
TLS is disabled by default (insecure: true), so existing plaintext configurations are unaffected. -
receiver/mongodb: Adddb.server.top_queryslow query event collection to the MongoDB receiver. (#49623)
Emits the top N slowest query executions per scrape window asdb.server.top_querylog events,
including obfuscated query text, execution stats, and optional explain plans. Configurable via
the newtop_query_collectionconfig block. Thelogssignal is atdevelopmentstability;
attribute names may change until OTeldb.server.top_queryconventions stabilize. -
receiver/mongodb: Addservice.nameandservice.namespaceopt-in resource attributes and allow overriding any resource attribute viaoverride_value. (#49812)
Whenservice.nameis enabled, the receiver sets it tounknown_service:mongodbper OTel specification.
Whenservice.namespaceis enabled, it defaults to an empty string until set via configuration.
Each resource attribute now accepts anoverride_valueunderresource_attributes, letting users pin
values such asservice.name,service.namespace, orservice.instance.idto uniquely identify
database instances across environments. -
receiver/netflow: Add interface, IP header, L2, ICMP, routing, and IPFIX observation attributes to parsed flow log records (#49946)
Added the following attributes decoded by goflow2 but previously not included in log records:
flow.in_if, flow.out_if, flow.ip_tos, flow.ip_ttl, flow.ip_flags, flow.fragment_id,
flow.fragment_offset, flow.ipv6_flow_label, flow.icmp_type, flow.icmp_code,
flow.src_mac, flow.dst_mac, flow.src_vlan, flow.dst_vlan, flow.vlan_id,
flow.next_hop, flow.next_hop_as, flow.src_as, flow.dst_as, flow.bgp_next_hop,
flow.src_net, flow.dst_net, flow.forwarding_status, flow.observation_domain_id,
flow.observation_point_id. -
receiver/oracledb: Add real-time workload rate metrics. (#49749) -
receiver/oracledb: Speed up query-sample collection by splitting it into two queries so the SQL text/plan lookup no longer joins V$SESSION against the entire cursor cache. (#49874)
The session query no longer joins V$SQL (which forced Oracle to scan the whole
shared-pool cursor cache and materialize SQL_FULLTEXT for every cursor). Instead,
the receiver collects the active sessions first, then fetches SQL_FULLTEXT /
CHILD_ADDRESS / PLAN_HASH_VALUE from V$SQL for only those sql_ids via
WHERE SQL_ID IN (...), and joins the results in the collector. Sessions whose
cursor has aged out of the shared pool are skipped, preserving the previous
inner-join semantics. Note: the two queries are issued at slightly different SCNs;
for actively-executing cursors this is immaterial (they are pinned in the shared
pool), but cursors that age out between Pass-1 and Pass-2 will not appear in the
output, which matches the previous inner-join semantics. -
receiver/oracledb: Add PDB auto-discovery and per-PDB metrics for Oracle multitenant (CDB) deployments via a single CDB root connection. (#48643)
When connected to an Oracle CDB root (Oracle 12c+), the receiver automatically detects all PDBs
and tags per-PDB metrics with the opt-inoracle.db.pdbdata point attribute. The attribute is
also populated for direct-PDB connections so the metric hierarchy is consistent regardless of how
the collector connects. Non-CDB instances and Oracle <12c are unaffected (the attribute is left
empty). -
receiver/oracledb: Add real-time I/O rate metrics. (#49748)
All metrics are disabled by default with development stability. -
receiver/postgresql: Add the optionalpostgresql.query.execution.timemetric. (#49822) -
receiver/postgresql: Adoptdbauthconfig in postgresql receiver. (#49044) -
receiver/postgresql: Add opt-in pgvector metrics. (#49576)
Adds opt-in metrics for pgvector similarity-search and insert activity, all disabled by default. -
receiver/receiver_creator: Add support for os detection in rules (#49975)receiver_creator: watch_observers: [host_observer] receivers: windows_service: # Enable this receiver if the OS is Windows. rule: type == "hostport" && os == "windows" config: include_services: - MSSQLSERVER collection_interval: 10s -
receiver/redis: Add pub/sub metrics (redis.pubsub.channels, redis.pubsub.patterns, redis.pubsub.shard_channels, redis.pubsub.clients) scraped from Redis INFO stats fields. (#49147) -
receiver/sqlserver: Add opt-in metrics for monitoring SQL Server Always On Availability Group database replicas. (#49633)sqlserver.availability_group.database_replica.secondary_lagsqlserver.availability_group.database_replica.queue.sizesqlserver.availability_group.database_replica.queue.rate
-
receiver/sqlserver: Add opt-in metrics for monitoring host-level CPU, memory, and disk I/O as observed by SQL Server. (#49862)sqlserver.cpu.utilizationsqlserver.host.memory.limitsqlserver.host.memory.usagesqlserver.disk.iosqlserver.disk.operations
-
receiver/sqlserver: Support server properties query on Azure SQL Managed Instance (#49444) -
receiver/udp_log: Add thestanza.udp.useStableNetworkAttributesfeature gate to emit stable network semantic convention attributes whenadd_attributesis enabled. (#49050)
When thestanza.udp.useStableNetworkAttributesfeature gate is enabled, theadd_attributesoption
emits the stable network attributes (network.transport,network.local.address,server.port,
server.address,network.peer.address,client.port,client.address) instead of the
deprecated ones (net.transport,net.host.ip,net.host.port,net.host.name,net.peer.ip,
net.peer.port,net.peer.name).
馃О Bug fixes 馃О
-
exporter/elasticsearch: Fix Elasticsearch retry attempts incorrectly sharing a singletimeoutdeadline (#45747)
The configured timeout now applies independently to each HTTP request attempt. -
exporter/load_balancing: Fix a memory leak in the Kubernetes resolver where pod hostnames were retained indefinitely after pods churned whenreturn_hostnamesis enabled. (#49757)
During a rolling update a pod frequently appears in an EndpointSlice a moment
before its Hostname field is populated. Withreturn_hostnames: true, the
resolver previously discarded the entire update whenever any endpoint in the
slice lacked a hostname, so pods that churned out in that same event were never
removed from the endpoint store. Over many pod rolls the store, the hash ring,
and the per-endpoint exporter map grew without bound. Endpoints missing a
hostname are now skipped individually while the rest of the slice is still
processed, so churned-out pods are removed promptly. -
extension/text_encoding: Fix a bug in the text encoding extension where logs were silently truncated if the input had more than 1000 records. (#49818) -
pkg/datadog: Fixagentcomponents.WithAPIConfigsilently discarding its configuredapi_key/sitein favor ofDD_API_KEY/DD_SITEenvironment variables when they are present in the process environment. (#49957) -
pkg/stanza: Discard partial log lines instead of emitting them as truncated entries when the TCP input is shut down mid-transmission. (#49622)
On graceful shutdown the operator force-closes in-flight connections. Previously any partial
(non-delimited) data left in the receive buffer was flushed as a complete log entry, producing
truncated records. It is now discarded, while a final line without a trailing delimiter is still
emitted when the client closes the connection cleanly. -
pkg/winperfcounters: Fix batch scrape failures caused by transient PDH errors during wildcard queries. (#49416)
Skips performance counter instances that return PDH_INVALID_DATA, PDH_NO_DATA, or PDH_CALC_NEGATIVE_DENOMINATOR instead of failing the entire metric batch. This prevents errors when monitoring ephemeral processes. -
processor/redaction: Applyblocked_valuespatterns in the order they are listed in the configuration instead of a nondeterministic order (#49858)
Previously the patterns were applied in Go map iteration order. When two patterns
could match overlapping parts of the same value, the result changed from run to run,
and some orders left data unmasked that another order would have redacted. -
receiver/azure_monitor: Fix metric data loss and incorrect timestamps (#49532) -
receiver/datadog: Add support for the v3 series intake (/api/intake/metrics/v3/series), the default metrics endpoint for Datadog Agent 7.81.0+ (#49698)
Datadog Agent 7.81.0 and 7.81.1 submit series metrics to/api/intake/metrics/v3/seriesby default.
The receiver had no handler for that path, so series from those agents fell through to the catch-all
route and were acknowledged with 200 OK but silently discarded. The v3 payload is a columnar,
dictionary-encoded protobuf format distinct from v2; it is now decoded and translated to OTLP through
the same path as v2 series. The v3beta route used by shadow/validation traffic is also handled. -
receiver/elasticsearch: Reportelasticsearch.cluster.state_queuewithstate: pendingusing the pending count instead of the committed count (#49652)
The data point for thependingstate was recorded from the committed queue count, so it always
mirrored thecommitteddata point. It now uses the pending count from the node discovery stats. -
receiver/fluent_forward: Delay Fluent Forward chunk acknowledgments until logs are successfully consumed downstream. (#46973) -
receiver/googlecloudmonitoring: CUMULATIVE metrics from Cloud Monitoring will now be properly marked as monotonic upon conversion (#49804) -
receiver/postgresql: Fixes a bug inexplainQueryso that it honors context cancellation (#49632)
The DEALLOCATE PREPARE cleanup now runs on a detached, time-bounded context so
prepared statements are still released from pooled connections even when the
scrape context is canceled. -
receiver/sqlserver: Populateservice.instance.idin Windows Performance Counter mode. (#49878)
Previously,service.instance.idwas only set by the direct connection scraper and was absent from all
metrics emitted in Windows Performance Counter mode, despite beingenabled: truein the default config.
The Windows PC scraper now computesservice.instance.idat initialization using the same logic as the
direct connection scraper:<computer_name>:1433whencomputer_nameis configured (remote monitoring),
or<os.Hostname()>:1433when monitoring the local machine. Port 1433 is used as a default since
Windows Performance Counter mode does not establish a TCP connection. -
scraper/nfs: Linux implementation no longer errors if NFS /proc files are unavailable, as this is expected when the client and/or server is inactive (#49688)
API Changelog
馃洃 Breaking changes 馃洃
-
all: Stops embedding all configuration fields (#49797, #49913, #49914, #49915, #49965, #49966, #49972, #49973, #49974)- Embedded fields do not work well with tooling and libraries such as mapstructure and should be avoided.
-
pkg/ottl: OTTL context path setters now handle nil values based on the path type (#49728)
We are thrilled to welcome our first-time contributors to this project. Thank you for your contributions @bgola-signalfx, @nmromero4792, @srstrickland, @rajrohanyadav, @skreuzer, @LucasHocker, @avadla, @somaz94, @MenakaDev, @krshn-ptl, @yamoyamoto, @gizas, @sarika-03, @Krishnachaitanyakc, @swapnil-signoz ! 馃帀