This Splunk OpenTelemetry Collector release includes changes from the opentelemetry-collector v0.164.0
and the opentelemetry-collector-contrib v0.164.0 releases where appropriate.
🛑 Breaking changes 🛑
- (Splunk)
fluentforwardreceiver: Remove thefluent_forwardreceiver from the default configurations (#8352)
The receiver is still part of the distribution and can be added back to a custom configuration. - (Splunk)
splunk_inputs: Remove thesplunk_inputsreceiver. Reading a Splunk.conftree is now thesplunkconfconfig provider's job. (#8330) - (Splunk)
splunk_outputs: Remove thesplunk_outputsexporter. The forwarding destination now comes from thesplunkconfconfig provider readingoutputs.conf. (#8331) - (Contrib)
exporter/prometheus_remote_write: Always preserve leading and consecutive underscores in label names. (#50429)
Remove-pkg.translator.prometheus.PermissiveLabelSanitizationfrom--feature-gates; disabling this gate now causes a startup error. - (Contrib)
pkg/azurelogs: Promote thepkg.translator.azurelogs.EmitV1LogConventionsandpkg.translator.azurelogs.DontEmitV0LogConventionsfeature gates to beta. (#52096)
code.function.nameandcode.file.pathare now emitted instead ofcode.functionandcode.filepathby default.
The gates no longer control theevent.nameresource attribute, which is always emitted. - (Contrib)
pkg/ottl: Remove the stableottl.set.allowNilfeature gate. (#48714) - (Contrib)
pkg/translator/pprof: Return an error instead of panicking when profiling data contains invalid profile references. (#51908) - (Contrib)
pkg/zipkin: Promote "pkg.translator.zipkin.EmitV1HttpConventions", "pkg.translator.zipkin.DontEmitV0HttpConventions", "pkg.translator.zipkin.EmitV1ScopeConventions", and "pkg.translator.zipkin.DontEmitV0ScopeConventions" feature gates to Beta. (#50909)
This changes the default behavior to emit the new semantic convention attributes instead of the old deprecated ones.
The Zipkin translator will now usehttp.response.status_code(replacinghttp.status_code),otel.scope.name
(replacingotel.library.name), andotel.scope.version(replacingotel.library.version) by default when emitting spans. - (Contrib)
processor/filter: remove stable processor.filter.defaultErrorModeIgnore gate (#52238) - (Contrib)
receiver/file_log: Promote thefilelog.protobufCheckpointEncodingfeature gate to stable. Checkpoints are always written as protobuf. (#43266, #52037)
The feature gate can no longer be disabled and will be removed in v0.165.0.
Existing JSON checkpoints are still read and are rewritten as protobuf on the next save. - (Contrib)
receiver/kubelet_stats: Remove the deprecatedaws.volume.id,fs.type,gce.pd.name,glusterfs.endpoints.name,glusterfs.pathandpartitionresource attributes. (#40477) - (Contrib)
receiver/mongodb: Changemongodb.operation.latency.timefrom a gauge to a monotonic cumulative sum (#51909)
opLatencies.*.latencyis a cumulative total, so the metric is now a monotonic sum like every
other cumulative duration in the receiver. It isenabled: falseandstability: development. - (Contrib)
receiver/prometheus: Remove the stablereceiver.prometheusreceiver.IgnoreScopeInfoMetricfeature gate. (#47312) - (Contrib)
processor/probabilistic_sampler: Add theotelcol_processor_probabilistic_sampler_count_spans_processedmetric and deprecateotelcol_processor_probabilistic_sampler_count_traces_sampledin favor of it. (#50954)
The deprecated metric remains available for compatibility.
NOTE: Marked as breaking only because new metrics are enabled by default, potentially impacting resource usage and billing. - (Contrib)
receiver/prometheus_remote_write: Add theotelcol_receiver_prometheusremotewrite_resource_cache_evictionsinternal metric counting evictions from the resource metrics cache. (#52195)
NOTE: Marked as breaking only because new metrics are enabled by default, potentially impacting resource usage and billing. - (Contrib)
receiver/sql_server: Addsqlserver.tempdb.file.sizeandsqlserver.tempdb.allocation.waiters.countmetrics, and extendsqlserver.database.tempdb.space. (#52057)
The two new metrics are disabled by default.
For configurations enablingsqlserver.database.tempdb.space,tempdb.state=usedis replaced by
user_objects,internal_objects,version_store, andmixed_extents. Update queries and dashboards
that use theusedseries; sum the replacement states to obtain total used space.
🚩 Deprecations 🚩
- (Splunk)
receiver/smartagent: Deprecate ten Smart Agent monitors and provide replacement receivers (#22803)
Thecpu,memory,vmem,load,filesystems, andprocessmonitors are deprecated in favor of thehost_metricsreceiver. Usedocker_statsinstead ofdocker-container-stats,iisinstead ofwindows-iis,k8s_eventsinstead ofkubernetes-events, andelasticsearchinstead of the Smart Agentelasticsearchmonitor. These monitors will be removed on or after December 2026. - (Splunk)
receiver/smartagent: Require thereceiver.smartagentreceiver.TelegrafExecfeature gate to use the Smart Agenttelegraf/execmonitor. (#8274)
Configurations using this monitor fail validation unless the gate is enabled with--feature-gates=+receiver.smartagentreceiver.TelegrafExec. The monitor is planned for removal in December 2026. - (Contrib)
processor/transform: Deprecate theflatten_dataoption in favor of the newflatten.logoption. (#51766)
Replaceflatten_data: truewithflatten: {log: true}.flatten_datawill be removed in a future release. - (Contrib)
receiver/kafka: Deprecate the built-injaeger_protoandjaeger_jsonencodings in favour ofjaegerencodingextension. (#39113) - (Contrib)
receiver/kafka: Deprecatepartition_processing.max_buffered_batchesin favour ofpartition_processing.max_prefetch.batches. It will be removed in v0.166.0. (#52253) - (Contrib)
receiver/kafka: Deprecate the built-injsonlogs encoding in favour ofjsonlogencodingextension. (#39113)
💡 Enhancements 💡
- (Splunk)
otelcollauncher: Introduce process health check CLI command tootelcollauncher(#8358)
Adds ahealthsubcommand tootelcollauncher, which queries the collector's healthcheckv2 endpoint
and prints the results. The command accepts--hostand--portflags to specify the target address,
and a--componentflag to filter the results by component name.
Note: This requires the healthcheckv2 extension to be enabled in the collector configuration. - (Splunk)
msi: Mark a few MSI properties as hidden so their values are not written to the installer log. (#8350) - (Splunk)
msi: Validate Splunk Platform properties the same way install.sh does. (#8351)
The installation now fails ifSPLUNK_PLATFORM_LOGS_INDEXorSPLUNK_PLATFORM_METRICS_INDEXis set without
SPLUNK_PLATFORM_URL, or ifSPLUNK_PLATFORM_URLis set withSPLUNK_SETUP_COLLECTOR_MODE=gateway. - (Splunk)
otelcollauncher: Add an internal command-family dispatch framework tootelcollauncher(#8125)
Introducescmd/otelcollauncher/cli, an extensibility point for futureotelcollauncher
subcommands, along with ahelpcommand listing registered subcommands and per-command
help viahelp <command>or<command> --help/-h.--help/-hwith no command still
pass through to the collector or supervisor, matching existing launcher behavior when no
subcommand is passed. - (Splunk)
otelcollauncher: Introduce process lifecycle CLI commands tootelcollauncher(#8121)
Addsstart,stop,status, andrestartsubcommands tootelcollauncher, proxying to
systemd on Linux (systemctl) or the Service Control Manager on Windows. These commands
require the collector to be installed as a system service; existing behavior when no
subcommand is passed is unchanged. - (Splunk)
packaging: Update Splunk OpenTelemetry Java agent to v2.33.1 (#8362) - (Contrib)
cmd/opampsupervisor: Add anagent::stop_grace_periodconfig option to control how long the Supervisor waits for the Collector to exit after a graceful shutdown signal before forcibly killing it. (#50000)
Defaults to 10s when unset. - (Contrib)
exporter/awss3: Addaccess_keyandsecret_keyoptions to configure static AWS credentials (#52140) - (Contrib)
extension/opamp: Report component status attributes in OpAMP health messages. (#50330) - (Contrib)
extension/opamp: Addreports_heartbeatcapability, enabled by default, to allow the OpAMP server to configure the agent's heartbeat interval (#51427) - (Contrib)
pkg/kafka/configkafka: Adddial_timeoutconfiguration option to control the timeout for establishing connections to Kafka brokers. (#51910) - (Contrib)
pkg/ottl: Promote traces, metrics, and logs signals from beta to stable. (#51068, #47305) - (Contrib)
processor/k8s_attributes: Add experimental kubelet/podspolling as an opt-in pod metadata source. (#14475) - (Contrib)
processor/resource_detection: Addattributes.includedandattributes.excludedoptions to theenvdetector to filter which attribute keys fromOTEL_RESOURCE_ATTRIBUTESare emitted. Both lists support*and?as wildcards, andexcludedis applied afterincluded. (#49970) - (Contrib)
receiver/k8s_objects: Add an opt-in informer-based observer behind thereceiver.k8sobjects.useInformerObserverfeature gate. (#43602) - (Contrib)
receiver/kafka: Makemax_decompress_batch_bytesconfigurable in the Kafka receiver consumer configuration. (#51845) - (Contrib)
receiver/kafka: Addpartition_processing.max_in_flight.window. Set it tocross_fetchso exporters that wait to fill a batch, for example withsending_queue.wait_for_resultandbatch.min_size, get records from more than one fetch instead of sending small batches on the flush timeout. (#51804) - (Contrib)
receiver/kafka: Addpartition_processing.max_in_flight.bytesto limit the record bytes each partition holds while it processes records concurrently. Use it to bound memory when record sizes vary. (#51804) - (Contrib)
receiver/kafka: Addpartition_processing.max_prefetch.bytesto cap the bytes of fetched batches waiting for each partition worker. Use it to bound memory when batch sizes vary. (#52253) - (Contrib)
receiver/kubelet_stats: Promotecontainer.cpu.timeto beta stability and align it with Semantic Conventions v1.43.0. (#52197) - (Contrib)
receiver/mongodb: Add operation latency count and non-tailable collection scan metrics (#51909)
Addsmongodb.operation.latency.countand
mongodb.query_executor.collection_scan.non_tailable.count, both disabled by default. - (Contrib)
receiver/mysql: Addmysql.client.nametodb.server.query_sample, the client driver's self-reported identity. (#51317) - (Contrib)
receiver/prometheus_remote_write: Addresource_cache_sizeto configure the number of job/instance pairs kept in the resource metrics cache. (#52195)
The default remains 1000. - (Contrib)
receiver/prometheus_simple:headersandproxy_urlare now applied to the scrape. Reserved header names andproxy_urlcredentials are rejected at validation. (#52081) - (Contrib)
receiver/prometheus_simple:timeoutnow sets the scrape timeout, capped atcollection_interval. Previously it had no effect. (#52081) - (Contrib)
receiver/sql_server: Adddb.server.procedure_definitionevent to capture the DDL definition of stored procedures observed indb.server.top_procedure. (#51946)
🧰 Bug fixes 🧰
- (Splunk)
receiver/gnmi: Fix Shutdown to wait for in-flight client goroutines when no gNMIReverse server is configured, preventing a goroutine leak on receiver shutdown.
(#8357) - (Splunk)
msi: Allow Splunk Platform logs and metrics configurations to be merged when SPLUNK_CONFIG is set. (#8351) - (Core)
exporter/otlp_http: Report the URL the request was actually sent to in HTTP status error messages when a middleware rewrites the request URL. (#14673)
Middleware RoundTrippers that clone the request before rewriting its URL left
the configured placeholder URL in 4xx/5xx error messages. The exporter now
reads the destination from the response instead. - (Core)
pkg/otelcol: Redact non-empty literal defaults in unexpanded env provider references such as${env:NAME:-literal}in the raw config reported by the OpAMP extension whenreports_raw_configis enabled (#16141)
Empty defaults such as${env:NAME:-}stay visible. Other provider schemes are unchanged. - (Contrib)
exporter/prometheus_remote_write: Drop exponential histogram data points without a sum instead of exporting a zero sum. (#52232) - (Contrib)
exporter/prometheus_remote_write: Apply thetimeoutto each attempt to send a request instead of to the whole retry loop, so that failed requests are retried untilretry_on_failure.max_elapsed_timeinstead of being dropped aftertimeout. (#51983)
Previously a backend outage longer thantimeout(5s by default) dropped all the data, as the exporter retried a request only for the duration of thetimeout.
The retry delay now also grows up toretry_on_failure.max_interval. It was not passed to the backoff and stayed atretry_on_failure.initial_interval, which would send a request every 50ms by default for the wholemax_elapsed_time. The retries are also interrupted when the exporter shuts down.
retry_on_failure.max_elapsed_timebounds the export of a batch of metrics as a whole, also when the batch is split into several requests (max_batch_size_bytes), and the deadline of the shutdown bounds the flush of the queue.
When only one oftimeoutandhttp.timeoutis set, the other one now takes the same value instead of staying at its5sdefault, which would otherwise cap every attempt at5s. - (Contrib)
exporter/signalfx: Treat non-retryable 4xx responses as permanent errors instead of retrying them indefinitely (#51389)
The SignalFx exporter shares theHandleHTTPCodehelper with the Splunk HEC
exporter. Previously only 400, 401, and 403 were classified as permanent; every
other 4xx (404, 405, 410, 413, 414, 415, 422, ...) fell through and was
retried forever even though retrying an identical request cannot succeed. Those
4xx responses are now permanent, except 408 Request Timeout and 409 Conflict
(transient) and 429 Too Many Requests (throttle). 5xx responses remain
retryable, and 503 continues to honor Retry-After. - (Contrib)
exporter/splunk_hec: Fix inverted condition in multi-metric batching that prematurely terminated batching and dropped valid metrics when encountering an oversized event. (#52142) - (Contrib)
exporter/splunk_hec: Treat non-retryable 4xx responses as permanent errors instead of retrying them indefinitely (#51389)
Previously only 400, 401, and 403 were classified as permanent; every other
4xx (404, 405, 410, 413, 414, 415, 422, ...) fell through and was retried
forever even though retrying an identical request cannot succeed. The shared
HandleHTTPCodehelper now treats all 4xx as permanent except 408 Request
Timeout and 409 Conflict (transient) and 429 Too Many Requests (throttle).
5xx responses remain retryable, and 503 continues to honor Retry-After. This
helper is shared with the SignalFx exporter, whose retry classification
changes in the same way. - (Contrib)
extension/docker_observer: Fix endpoint flapping by selecting a stable IP address for containers attached to multiple networks. (#51726) - (Contrib)
extension/google_cloud_logentry_encoding: Do not drop log entries with an unparsablehttpRequest.requestUrl. (#52044)
The raw value is kept inurl.full;url.path,url.queryandurl.domainare omitted. - (Contrib)
internal/kafka: Reject extensions that do not implement Token(context.Context) during OAUTHBEARER SASL configuration instead of panicking at runtime. (#51958) - (Contrib)
pkg/ottl: Fix context inference for statements that pass an all-uppercase converter name, such asSHA256, as a function argument. (#52192) - (Contrib)
pkg/winperfcounters: Close the PDH query when adding the counter fails, preventing a handle leak on counter initialization errors. (#51048) - (Contrib)
processor/cumulative_to_delta: Handle NaN sums on exponential histograms like on histograms, so the next sum is no longer emitted as a NaN delta (#51965) - (Contrib)
processor/cumulative_to_delta: Include the scope attributes in the identity of a stream, so scopes that only differ in their attributes are no longer converted as one stream (#52162) - (Contrib)
processor/resource_detection: Fix a panic in the ECS detector when the task ARN has only 5 colon-separated parts (#52074)
parseTaskARNchecked for at least 5 parts but read the 6th one, so a task ARN without a resource part
caused an index out of range panic during detection. - (Contrib)
processor/resource_detection: Bypass environment proxies for EKS detector requests to the in-cluster Kubernetes API. (#52301)
Besides this, the EKS detector configuration now accepts API server configuration to control
how it connections to the Kubernetes API server. - (Contrib)
receiver/aws_cloudwatch: Persist acknowledged log checkpoints so failed polls can retry unread logs after a restart when storage is enabled. (#51944) - (Contrib)
receiver/mongodb: Skip top command when mongodb.operation.time is disabled and log warning on BSONObjectTooLarge error (#50712) - (Contrib)
receiver/postgresql: Fix a scrape error that discarded every metric for a table or index dropped while the receiver was collecting (#52041) - (Contrib)
receiver/prometheus: Fix config reload failing for multi-line secrets such as an inlinetls_config.key(#52080) - (Contrib)
receiver/prometheus_remote_write: Refuse an out of range symbol reference on a target_info series, as on every other metric name. (#52070)
A request carrying one now gets a 400 where it used to get a 204 with the
sample counted as written. - (Contrib)
receiver/prometheus_simple: Forward inline TLS PEM (ca_pem,cert_pem,key_pem) andserver_name_overrideto the underlying Prometheus receiver instead of silently dropping them. (#52029) - (Contrib)
receiver/prometheus_simple: Forward thetlsmin_versionandmax_versionsettings to the scrape config; previously they had no effect. (#52081) - (Contrib)
receiver/snmp: Create the datapoint with an empty attribute when an indexed attribute column returns an empty value, instead of failing the scrape. (#51875)
An empty OCTET STRING, such as ifPhysAddress on a loopback or null interface, is a valid value.
Previously every scrape of such a device reported "metric OID attribute value is blank" and dropped those datapoints.
A row the attribute column does not return at all still fails as before. - (Contrib)
receiver/snmp: Addmax_repetitionsconfiguration option (defaulting to 25) for GETBULK requests to prevent request timeouts on MTU boundaries. (#51925) - (Contrib)
receiver/splunk_enterprise: Send the search job TTL to Splunk in seconds instead of nanoseconds (#50940)
The receiver sets a TTL on every search job it dispatches, derived from the configured
timeout. The value was formatted from a Go duration with%d, which emits its raw
nanosecond count, and Splunk'ssetttlaction reads the argument as seconds. A default
timeout: 60stherefore asked Splunk to retain each dispatched job for roughly 1900 years,
so search artifacts accumulated until the search dispatch directory filled and Splunk
reported extreme search lag. The duration is now converted to whole seconds. - (Contrib)
receiver/yang_grpc: Log a warning when duplicate YANG module definitions are loaded, identifying conflicting source paths. (#50917)
Docker Image Manifests:
- Linux (amd64, arm64, ppc64le) and Windows (2019 amd64, 2022 amd64):
quay.io/signalfx/splunk-otel-collector:0.164.0- digest:
sha256:b47bb5e100eee4b68c450b29e711a150f6ade7d441a6e4593ca9c74e72252c7c