This Splunk OpenTelemetry Collector release includes changes from the opentelemetry-collector v0.155.0
and the opentelemetry-collector-contrib v0.155.0 releases where appropriate.
🛑 Breaking changes 🛑
- (Splunk)
signalfx-forwarder: Remove thesignalfx-forwarderandtrace-forwardermonitors after their deprecation period. (#7698)
Thesignalfx-forwarderandtrace-forwardermonitors have been removed.
Please use the
signalfxreceiver
instead. - (Core)
processor/memory_limiter: Rename deprecated memory limiter metrics to include thememory_limiterprefix (e.g.otelcol_processor_memory_limiter_*) to clarify they are specific to this processor. (#11203) - (Contrib)
exporter/signalfx: Stop calculating per-corecpu.*metrics disabled by default. (#49247)
The default transformations still create aggregate CPU metrics. However, per-corecpu.*metrics which are disabled by default aren't produced by the default transformations anymore.
This change doesn't have any impact unless any ofcpu.*metrics are explicitly enabled with thecpuattribute in signalfx exporter with configuration like this:In that case, the same metrics can be restore by applying the transform processor the following way:exporters: signalfx: include_metrics: - metric_name: cpu.idle dimensions: cpu: ["*"]
receivers: hostmetrics: scrapers: cpu: metrics: system.cpu.time: enabled: true attributes: [cpu, state] processors: transform/cpu_idle_per_core: error_mode: ignore metric_statements: - context: metric statements: - copy_metric(name="cpu.idle") where metric.name == "system.cpu.time" - context: datapoint statements: - set(datapoint.value_double, 0.0) where metric.name == "cpu.idle" and datapoint.attributes["state"] != "idle" - context: metric statements: - aggregate_on_attributes("sum", ["cpu"]) where metric.name == "cpu.idle" - scale_metric(100.0) where metric.name == "cpu.idle" - context: datapoint statements: - set(datapoint.value_int, Int(datapoint.value_double)) where metric.name == "cpu.idle" service: pipelines: metrics: receivers: [hostmetrics] processors: [transform/cpu_idle_per_core] exporters: [signalfx]
- (Contrib)
exporter/signalfx: Stop calculatingcpu.utilization_per_coredisabled by default. (#49243)
The exporter still creates the aggregatecpu.utilizationmetric by default. However,cpu.utilization_per_corewhich is disabled by default isn't produced by the default transformations anymore.
This change doesn't have any impact unlesscpu.utilization_per_coremetric is explicitly enabled in signalfx exporter with configuration like this:In that case, the same metric can be restore by applying the transform processor the following way:exporters: signalfx: include_metrics: - metric_name: cpu.utilization_per_core
receivers: hostmetrics: scrapers: cpu: metrics: system.cpu.utilization: enabled: true attributes: [cpu, state] processors: transform/cpu_utilization_per_core: error_mode: ignore metric_statements: - context: metric statements: - set(metric.name, "cpu.utilization_per_core") where metric.name == "system.cpu.utilization" - context: datapoint statements: - set(datapoint.value_double, 0.0) where metric.name == "cpu.utilization_per_core" and datapoint.attributes["state"] == "idle" - context: metric statements: - aggregate_on_attributes("sum", ["cpu"]) where metric.name == "cpu.utilization_per_core" service: pipelines: metrics: receivers: [hostmetrics] processors: [transform/cpu_utilization_per_core] exporters: [signalfx]
- (Contrib)
processor/k8s_attributes: Remove deprecated gate k8sattr.labelsAnnotationsSingular.allow (#48977) - (Contrib)
processor/tail_sampling: Remove stable gate processor.tailsamplingprocessor.disableinvertdecisions (#48976) - (Contrib)
receiver/oracledb: Setdb.namespaceto database name and addoracle.db.serviceattribute on query sample and top query events. (#48996)
Ondb.server.query_sampleanddb.server.top_queryevents,db.namespace
now reports the database name instead of the Oracle service
name. The service name moves to the neworacle.db.serviceattribute.
🚩 Deprecations 🚩
- (Contrib)
receiver/splunk_enterprise: Rename receiver type fromsplunkenterprisetosplunk_enterprise(#45339)
💡 Enhancements 💡
- (Splunk)
config: Add AWS Secrets Manager (secretsmanager:) and Google Secret Manager (googlesecretmanager:) confmap providers (#7682)
Collector configurations can now reference secrets directly using the new URI schemes:secretsmanager:NAME_OR_ARN[#json_key][:-default]for AWS Secrets Managergooglesecretmanager:projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSIONfor Google Secret Manager
- (Splunk)
packaging: Update Splunk OpenTelemetry Java agent to v2.29.0 (#7687) - (Splunk)
packaging: Update JMX metrics gatherer to v1.58.0 (#7688) - (Splunk)
packaging: Update Splunk OpenTelemetry Node.js agent to v4.9.0 (#7681) - (Contrib)
connector/routing: Addconnector.routing.defaultErrorModeIgnorefeature gate to change defaulterror_modefrompropagatetoignore(#48418) - (Contrib)
exporter/file: Add feature gate for native file-level compression in file exporter (#44077)
A new alpha feature gateexporter.file.nativeCompressionenables native file-level zstd compression.
When enabled, the exporter produces standard.zstfiles that can be decompressed withzstd -d,
unlike the legacy per-message compression format which requires custom tooling. - (Contrib)
exporter/google_cloud_storage: Adduniverse_domainconfig option to support Sovereign Google Cloud regions. Setting this field passesoption.WithUniverseDomainto the underlying Google API client. (#48924) - (Contrib)
exporter/google_cloud_storage: Addresource_attrs_to_gcsto partition objects by a resource attribute value. (#49136)
Whenresource_attrs_to_gcs.prefixis set, the value of the given resource attribute
(read from the first resource of each batch) is inserted as a partition path segment
betweenbucket.partition.prefixand the time-basedbucket.partition.format, mirroring
theawss3exporterresource_attrs_to_s3behavior. - (Contrib)
exporter/kafka: Addproducer.max_broker_write_bytesconfig (#47492)
The maximum size of a single write to a broker was previously fixed at the underlying
franz-go default of 100 MiB and could not be configured. As a result, setting
producer.max_message_bytesabove 100 MiB passed configuration validation but caused the
collector to fail on startup with an unrecoverable error ("max broker write bytes ... is
erroneously less than max record batch bytes ...").
The newproducer.max_broker_write_bytessetting (default 104857600, i.e. 100 MiB) exposes
this limit. To send messages larger than 100 MiB, raise it so it is greater than or equal to
max_message_bytes. Configuration is now validated up front: the collector reports a clear
error ifmax_broker_write_bytesis below the 100 MiB minimum or smaller than
max_message_bytes, rather than failing at runtime. - (Contrib)
exporter/load_balancing: Reduce CPU usage and memory allocations when routing traces bytraceID(the default routing key) (#48983)
Routing decisions are unchanged. Spans are now regrouped per backend, so the exact
ResourceSpans/ScopeSpans grouping of exported traces may differ from the input. If a downstream
consumer is sensitive to this, a groupbyattrsprocessor on the receiving end can recompact the
ResourceSpans. - (Contrib)
exporter/splunk_hec: Support exporting profiles (#48598) - (Contrib)
processor/resource_detection: Add GCP Cloud Run Worker Pool detector to the resource detection processor (#48931) - (Contrib)
processor/transform: Improvemerge_histogram_bucketswithmethod="limit_buckets"to compact buckets closer to the configured limit. (#49020) - (Contrib)
receiver/awscloudwatch: Adds a new configuration optioninitial_lookbackto the AWS CloudWatch Logs receiver for specifying how far back from the collector's startup time to begin collecting logs. (#47754) - (Contrib)
receiver/azure_event_hub: Add the ability to use encoding extensions to the Azure Event Hub receiver. (#48753) - (Contrib)
receiver/file_log: Improve polling performance when watching many files by indexing fingerprint matching. (#27404) - (Contrib)
receiver/googlecloudpubsub: Adduniverse_domainconfig option to support Sovereign Google Cloud regions. Setting this field passesoption.WithUniverseDomainto the underlying Google API client. (#48924) - (Contrib)
receiver/host_metrics: Enable the Android platform in theprocessscraper. (#47296) - (Contrib)
receiver/host_metrics: Add AIX-specific process scraper implementation. (#47095)
Implements AIX versions of the platform-specific process scraper hooks
(CPU time/utilization recording, process name, executable, and command
extraction), replacing the previous empty stubs that the "others"
fallback provided. - (Contrib)
receiver/oracledb: Enhance SQL obfuscation to anonymize comments while preserving query structure (#48508)- Query structure, formatting, and whitespace are now preserved during obfuscation for improved readability.
- (Contrib)
receiver/oracledb: Add additional attributes to the Oracle query execution plan. (#48965)
Extend the execution plan with five additional attributes:OBJECT_NAME: Name of the object referenced by the plan stepOBJECT_TYPE: Type of the referenced object (e.g., table, index)FILTER_PREDICATES: Predicates applied as a filter during the stepPARTITION_START: Starting partition for partitioned accessPARTITION_STOP: Ending partition for partitioned access
- (Contrib)
receiver/oracledb: Addoracledb.plan.first_loadattribute to thedb.server.top_queryevent (#48998) - (Contrib)
receiver/oracledb: Add SQL comment extraction support. Users can now configureallowed_comment_keysto extract key-value pairs from leading SQL block comments and include them as thedb.query.comment_tagstelemetry attribute. (#48338) - (Contrib)
receiver/prometheus: Addscrape_on_shutdown,discovery_reload_on_startup, andinitial_scrape_offsetconfiguration options to allow tuning startup and shutdown scrape behavior in serverless environments. (#48979)scrape_on_shutdown(default: false): Enables a final scrape before the receiver closes.discovery_reload_on_startup(default: false): Enables discovering targets immediately on startup.initial_scrape_offset(default: 0s): Adds a fixed delay before the initial scrape of targets.
- (Contrib)
receiver/sqlserver: Addsqlserver.query.plan.creation_timeattribute to thedb.server.top_queryevent. (#49018) - (Contrib)
receiver/sqlserver: Addservice.nameandservice.namespaceopt-in resource attributes and allow overriding any resource attribute viaoverride_value. (#46176)
Whenservice.nameis enabled, the receiver sets it tounknown_service:microsoft.sql_serverper 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.
🧰 Bug fixes 🧰
- (Splunk)
installer: Fix Windows installation script to not overwrite custom properties passed to the MSI (#7700) - (Splunk)
installer: Fix the Windows MSI so the collector service starts whenSPLUNK_CONFIGis provided as an install property. (#7701)
Since v0.154.0, tooling that passesSPLUNK_CONFIGas an MSI property (e.g. the Puppet and Ansible
modules) produced a service with no config, so it failed to start. The MSI now routes a supplied
SPLUNK_CONFIGintoCOLLECTOR_SVC_ARGSas a--config "<path>"argument. - (Contrib)
exporter/load_balancing: Fix Kubernetes resolver initialization to allow exporter creation outside k8s cluster by deferring client creation to start time (#42293) - (Contrib)
exporter/load_balancing: Fix a wait-group leak on the trace routing path that could cause Shutdown to hang when backend resolution fails partway through a batch (#48983) - (Contrib)
extension/google_cloud_logentry_encoding: Accept short ALPN protocol tokens (e.g.h2,h3) inhttpRequest.protocolthat do not contain a/; previously any protocol string without a slash was rejected with an error, causing log entries from Google Cloud Load Balancers that switched to reportingh2for HTTP/2 to be silently dropped. (#45214) - (Contrib)
processor/k8s_attributes: Prevent unbounded memory growth by cleaning up stale pod identifiers, including container.id entries left behind after container restarts (#48398) - (Contrib)
processor/metrics_transform: Add required-field validation forcombineaction: return an error ifnew_nameoraggregation_typeis missing, preventing silent data loss and empty metric names. (#48871) - (Contrib)
processor/redaction: Fix a panic in database attribute sanitization when traces are processed concurrently. (#49048) - (Contrib)
processor/transform: Fix transform processor config unmarshaling to return an error for empty statement list items instead of panicking. (#49245) - (Contrib)
receiver/azure_monitor: Fix discovery and collection of custom metric namespace definitions (e.g.azure.vm.linux.guestmetricspublished by Azure Monitor Agent / MetricsExtension) (#40989)
The MetricDefinitions API only returns custom namespace metrics when themetricnamespacequery parameter is explicitly set. Previously, metrics configured underreceiver::metricsfor a custom namespace were silently dropped because the API call used no filter and only returned the resource's default namespace. The receiver now makes an additional namespace-filtered call for each custom namespace in themetricsconfig that was not returned by the default call. - (Contrib)
receiver/http_check: Stop emitting two httpcheck.tls.cert_remaining data points per scrape (#47740) - (Contrib)
receiver/kafka_metrics: use kadm.Client.Lag and do not record negative values (#48701) - (Contrib)
receiver/oracledb: Clamp negativeDURATION_SECandSESSION_DURATION_SECvalues in the query sample to zero. (#48901)
Fix negative duration values in query sample metrics by clamping DURATION_SEC and SESSION_DURATION_SEC to zero minimum. - (Contrib)
receiver/purefa: Fix the receiver failing to start due to an invalid internal Prometheus scrape configuration. (#48847)
The receiver used a*discovery.StaticConfigpointer when building the Prometheus scrape
configs. Only the value typediscovery.StaticConfigis registered for YAML marshaling, so
the prometheus receiver failed on startup with "cannot marshal unregistered Config type:
*discovery.StaticConfig". The config now uses the value type. - (Contrib)
receiver/statsd: Clean up stale unix socket file on startup to prevent "address already in use" errors after unclean shutdown. (#44866) - (Contrib)
receiver/statsd: Skip empty tag entries instead of aborting the tag parse loop, so valid tags after an empty entry are no longer dropped. (#48483)
Previously, tags containing an empty entry (e.g. from consecutive commas like|#,,key:value) caused the
parser to exit the loop on the first empty entry, silently dropping all subsequent valid tags. Empty entries
are now skipped, matching the permissive behavior of the Datadog agent.
Docker Image Manifests:
- Linux (amd64, arm64, ppc64le) and Windows (2019 amd64, 2022 amd64):
quay.io/signalfx/splunk-otel-collector:0.155.0- digest:
sha256:df3c302ca23928d7fb5031e52a174b253b44b14c325bbad9fe4dcab36b7e8efa