This Splunk OpenTelemetry Collector release includes changes from the opentelemetry-collector v0.156.0
and the opentelemetry-collector-contrib v0.156.0 releases where appropriate.
🛑 Breaking changes 🛑
- (Contrib)
receiver/oracledb: Enhanced Oracle SQL query plan details with runtime execution statistics. (#49329)
This change requires the collector user to have access to V$SQL_PLAN_STATISTICS_ALL. Existing deployments that only grant access to V$SQL_PLAN
may experience query plan collection failures until the appropriate privileges are granted.
SQL query plan details are now retrieved from V$SQL_PLAN_STATISTICS_ALL instead of V$SQL_PLAN. Since V$SQL_PLAN_STATISTICS_ALL is a superset of V$SQL_PLAN,
this change is backward compatible with respect to the emitted plan detail fields while enabling collection of additional runtime execution statistics,
including OUTPUT_ROWS, LAST_OUTPUT_ROWS, LAST_ELAPSED_TIME, LAST_CR_BUFFER_GETS, LAST_CU_BUFFER_GETS, STARTS, and LAST_STARTS.
🚩 Deprecations 🚩
- (Splunk)
timestampprocessor: Deprecate the Splunktimestampprocessor in favor of the upstreamtransformprocessor. (#7707)
Use OTTL statements in thetransformprocessor to apply timestamp offsets. Seedocs/deprecations/timestampprocessor.mdfor migration examples. - (Contrib)
connector/routing: Deprecate therequestcontext in favor ofotelcol.*OTTL paths. (#44762)
The routing connectorrequestcontext andrequest["key"]condition syntax are deprecated in favor of
otelcol.client.metadata["key"][0]for HTTP/client metadata andotelcol.grpc.metadata["key"][0]for gRPC metadata.
These paths work in all signal contexts and are documented in the OTelCol OTTL context.
A warning is logged when therequestcontext is still configured. - (Contrib)
receiver/aws_cloudwatch: Rename toaws_cloudwatchwith deprecated aliasawscloudwatch(#45339)
💡 Enhancements 💡
- (Splunk)
config: Add the Splunk access token header to the default OpAMP HTTP forwarder egress config. (#7765) - (Core)
processor/memory_limiter: Add health events for the memory limiter (#14700)
Publish a health event from the memory limiter usingcomponentstatus.ReportStatus. - (Contrib)
connector/routing: Add OTTL context inference support to routing connector. (#38080)
The routing connector now supports OTTL context inference, allowing users to write clearer routing conditions using
context-qualified paths. Instead of relying on implicit context resolution, users can explicitly specify which
context's attributes they want to access (e.g.,resource.attributes["env"]orspan.attributes["http.method"]).
Unqualified paths likeattributes["key"]continue to work and default to the resource context for backward compatibility. - (Contrib)
exporter/elasticsearch: Support routing from data_stream attributes defined as scope attributes (#49306) - (Contrib)
extension/file_storage: Addmax_sizesupport to the file storage extension to cap per-component database growth. (#38620) - (Contrib)
processor/transform: Addexemplarcontext support to the transform processor, allowingmetric_statementsto read and modify exemplar fields on metric datapoints. (#49022) - (Contrib)
receiver/mongodb: Add Query Sample collection to the MongoDB receiver, emitting adb.server.query_samplelog event for each currently executing operation. (#48573)
Samples are collected via$currentOp, with idle connections and administrative commands
filtered out. Each event includes obfuscated query text and operation metadata.
Thelogssignal is atdevelopmentstability; attribute names may change until OTel
db.server.query_sampleconventions stabilize. Themetricssignal remains atbeta. - (Contrib)
receiver/oracledb: Addservice.nameandservice.namespaceopt-in resource attributes and allow overriding any resource attribute viaoverride_value. (#47088) - (Contrib)
receiver/oracledb: Add workload analysis metrics related to scans, enqueue, LOB, parse, sort, cursor, and session activity (#48808)
Adds fourteen new opt-in metrics (disabled by default):oracledb.call.count,oracledb.call.recursive.cpu.timeoracledb.cursor.cache.hits,oracledb.cursor.cache.size,oracledb.cursor.openoracledb.db.timeoracledb.enqueue.operationsoracledb.lob.operationsoracledb.parse.cpu.time,oracledb.parse.elapsed.timeoracledb.scan.count,oracledb.scan.table.rowsoracledb.sort.operations,oracledb.sort.rows
No new SQL queries are issued; the existing v$sysstat scrape already returns
all required rows, so the receiver adds no additional load on the monitored
Oracle instance.
- (Contrib)
receiver/oracledb: Add buffer cache and Database Writer (DBWR) metrics (#49061)
The new metrics are disabled by default. - (Contrib)
receiver/oracledb: Add redo log metrics (#49060)
The new metrics are disabled by default. - (Contrib)
receiver/postgresql: Add default service.name and service.namespace resource attributes (#47087)
Both attributes default to enabled: false. When enabled, service.name
defaults to unknown_service:postgresql and service.namespace defaults
to an empty string. Additionally, override_value is enabled for all
resource attributes, allowing users to set custom values via
override_value in the collector configuration. - (Contrib)
receiver/postgresql: Add blocking session and lock attributes todb.server.query_sampleevents for PostgreSQL blocking session detection. Blocking attributes are always emitted (empty string / 0 when not blocked). (#49028)
New attributes under postgresql.blocking.*: postgresql.blocking.pids, postgresql.blocking.start_time,
postgresql.blocking.wait_duration, postgresql.blocking.lock.mode, postgresql.blocking.lock.type,
postgresql.blocking.lock.relation, postgresql.blocking.transaction.start_time.
postgresql.blocking.pids contains the full array of blocking PIDs from pg_blocking_pids() (e.g. {5121,5122}).
postgresql.blocking.start_time uses pg_locks.waitstart (PostgreSQL 14+) to record when the lock wait began. waitstart is stable for the full duration of the wait — it is set once when the lock wait starts and is not affected by blockers joining or leaving.
postgresql.blocking.transaction.start_time provides a UTC timestamp (RFC3339) from xact_start representing when the transaction started, predating the lock contention itself.
Idle-in-transaction blocker sessions (holding locks without an active request) are captured via pg_blocking_pids subquery in the WHERE clause.
All blocking attributes are always present on every db.server.query_sample event; empty string / 0 values indicate no active blocking.
Requires PostgreSQL 14 or later. - (Contrib)
receiver/prometheus: Promotereceiver.prometheusreceiver.IgnoreScopeInfoMetricfeature gate to beta. (#47312)
Theotel_scope_infometric is now ignored for scope attribute extraction by default.
To temporarily restore the previous behavior, disable the feature gate with--feature-gates=-receiver.prometheusreceiver.IgnoreScopeInfoMetric. - (Contrib)
receiver/sqlserver: Add access methods and buffer pool metrics (#49182)
Adds the following metrics, all disabled by default:sqlserver.access.scan.ratesqlserver.extent.operation.ratesqlserver.ghost_record.skipped.ratesqlserver.page.allocation.ratesqlserver.page.compression.ratesqlserver.page.read_ahead.ratesqlserver.scan_point.revalidation.ratesqlserver.worktable.cache.hit_ratio
- (Contrib)
receiver/syslog: Add support for RFC6587 Octet Counting framing with RFC3164 message format. (#45216)
🧰 Bug fixes 🧰
- (Core)
exporter/otlp_http: Treat errors parsing successful (2xx) HTTP response bodies as permanent errors to prevent retrying already-accepted data. (#15386)
When a server returns a 2xx status but the response body exceeds the 64kB read limit,
the body is truncated and proto unmarshaling fails. Previously this was treated as a
retryable error, causing duplicate data to be exported. Now it is marked as a permanent
error so the retry logic will not re-send data that was already accepted by the server. - (Core)
pkg/service: Ensure receivers always start after all other components (#15495)
There was previously a race condition where multiple receivers using a shared internal implementation,
such as the OTLP receiver, could start sending telemetry into a pipeline before all its components had fully started. - (Core)
processor/memory_limiter: Fix degenerate collector performance when exporter has problems causing permanent CPU-burning GC loop (#4981)
Forced GC runs now use exponential backoff when deemed ineffective
(still above soft limit and less than 5% reclaimed) to avoid preventing
recovery by overloading CPU with excessive GC runs. The cap on the
backoff interval is exposed viamax_gc_interval_when_soft_limitedand
max_gc_interval_when_hard_limited(both default30s); set either to
0to disable backoff on that path. - (Contrib)
connector/routing: Fix duplicate routing table entry handling to correctly ignore duplicates instead of overwriting the original route (#44762)
Previously, when duplicate routing table entries were encountered, the warning message indicated that the duplicate
would be ignored, but in fact the original entry was being overwritten by the duplicate.
This fix ensures that duplicates are properly ignored and the original route's consumer is preserved. - (Contrib)
exporter/file: Fix path traversal vulnerability on Windows when using grouping file exporter (#49194) - (Contrib)
processor/cumulativetodelta: Align reset detection and dropping on histograms and exponential histograms (#48278)
Histograms and exponential histograms where there is a drop in total count or on any bucket counts are now treated as a reset and dropped. - (Contrib)
processor/cumulativetodelta: Fix non-deterministic order of valid metric types in error messages for invalidmetric_typesconfig values. (#49120) - (Contrib)
processor/k8s_attributes: Fix cache key memory leak in k8sattributesprocessor when a Pod's IP is missing or cleared from the delete event (#48986)
When a Pod is deleted, if its IP address is missing or already cleared from the delete event status,
the processor now looks up the cached pod by its UID to retrieve the stored IP and correctly queue
all associated keys for deletion. - (Contrib)
processor/resource_detection: Fix Docker resource detection failing to start when optional resource attributes are disabled, including container attributes when the hostname does not match a Docker container name. (#46275) - (Contrib)
receiver/aws_cloudwatch: Fix logs being skipped when AWS pagination returns an empty page (#48577) - (Contrib)
receiver/prometheus: Prometheus API server config/targets stay in sync with Target Allocator changing it if both are enabled. (#48040)
Previously, the API server config and targets did not get the updates from the Target Allocator. - (Contrib)
receiver/tcp_log: Fix TCP input operator emitting partial log data after a connection read error whenone_log_per_packetis enabled (#49199)
Previously, if a TCP connection was reset mid-read whileone_log_per_packet
was set to true, the partial buffer was still processed and emitted as a log
entry. Now the read error causes the message to be discarded instead.
Docker Image Manifests:
- Linux (amd64, arm64, ppc64le) and Windows (2019 amd64, 2022 amd64):
quay.io/signalfx/splunk-otel-collector:0.156.0- digest:
sha256:896d8fd4aa4ec76dfb45342adbc61e713626467705d1f59724b25a554949003f