This Splunk OpenTelemetry Collector release includes changes from the opentelemetry-collector v0.157.0
and the opentelemetry-collector-contrib v0.157.0 releases where appropriate.
🛑 Breaking changes 🛑
- (Splunk)
receiver/jmx: Remove thejmxreceiver, which has been deprecated upstream. This also removes thejmx/cassandraauto-discovery integration and the bundled JMX Metrics Gatherer JAR from all packaging artifacts (Docker images, MSI, DEB, RPM, tar). (#7798)
This change removes thejmxreceiver, which has been deprecated upstream. As a result,
thejmx/cassandraauto-discovery integration and the bundled JMX Metrics Gatherer JAR
are also removed from all packaging artifacts (Docker images, MSI, DEB, RPM, tar).
To continue monitoring a Cassandra instance (or any other JMX target) via JMX, use the standalone
jmx-scraper
from opentelemetry-java-contrib instead. Point it at the collector's OTLP receiver by setting
OTEL_EXPORTER_OTLP_ENDPOINT(orotel.exporter.otlp.endpoint) to the collector's listening OTLP
gRPC interface (defaults to port 4317), and setotel.jmx.target.systemtocassandra. - (Core)
pkg/exporterhelper: Replace histogram bucket boundaries forotelcol_exporter_queue_batch_send_size_bytesandotelcol_processor_batch_batch_send_size_byteswith a power-of-2 byte-scale set spanning 128 B to 16 MiB. (#15535) - (Core)
processor/batch: Replace histogram bucket boundaries forotelcol_processor_batch_batch_send_size_byteswith a power-of-2 byte-scale set spanning 128 B to 16 MiB. (#15535) - (Contrib)
connector/routing: Promote theconnector.routing.defaultErrorModeIgnorefeature gate to beta. The defaulterror_modeis nowignoreinstead ofpropagate. (#48418) - (Contrib)
processor/filter: Promote theprocessor.filter.defaultErrorModeIgnorefeature gate to stable. The default top-levelerror_modeis now permanentlyignoreinstead ofpropagate. (#47232) - (Contrib)
processor/tail_sampling: Fix metric units to comply with the UCUM specification (#49453) - (Contrib)
processor/transform: Promote theprocessor.transform.defaultErrorModeIgnorefeature gate to stable. The default top-levelerror_modeis now permanentlyignoreinstead ofpropagate. (#47231) - (Contrib)
receiver/host_metrics: Make thecpuattribute opt-in for hostmetrics CPU time and utilization metrics. (#49161).
By default,system.cpu.timeandsystem.cpu.utilizationare now aggregated across logical CPUs and no longer include thecpuattribute.
To restore the previous per-logical-CPU output, configure:This change doesn't affect signalfx exporter.receivers: hostmetrics: scrapers: cpu: metrics: system.cpu.time: attributes: [cpu, state] system.cpu.utilization: attributes: [cpu, state]
- (Contrib)
receiver/host_metrics: Enable thesystem.cpu.logical.countmetric by default in the CPU scraper. (#49325)
To restore the previous behavior, disable the new metric by applying the following config:receivers: host_metrics: scrapers: cpu: metrics: system.cpu.logical.count: enabled: false
- (Contrib)
receiver/sqlserver: Changesqlserver.lock.timeout.rateto emit per-type data points (#48925)
sqlserver.lock.timeout.ratenow requires asqlserver.lock.timeout.typeattribute
(all,nonzero) and emits one data point per type. Users who enable this metric
will receive two data points per scrape instead of one. The metric stays
enabled: falseandstability: development. - (Contrib)
processor/resource_detection: Add internal telemetry to observe resource detection. (#44595)
Addsotelcol.resourcedetection.detector.results,otelcol.resourcedetection.detector.duration,
andotelcol.resourcedetection.attributes.detectedmetrics. - (Contrib)
exporter/signalfx: Exportsystem.cpu.timeandsystem.disk.ioby default (#49738)
🚩 Deprecations 🚩
- (Contrib)
processor/cumulative_to_delta: Rename the 'cumulativetodelta' processor to 'cumulative_to_delta'. The old 'cumulativetodelta' type remains available as a deprecated alias. (#45339)
💡 Enhancements 💡
- (Splunk)
Splunk_TA_otel: Support the use of configuration providers in theSplunk Add-on for OpenTelemetry Collectorconfiguration (#7782)
The Splunk Add-on for OpenTelemetry Collector will only treat values like
$VAR_NAMEand${VAR_NAME}as environment variables. This way configuration settings can specify
configuration providers
with values like${file:./my-text-file}and have them resolved when the collector is running. - (Splunk)
installer: Add Splunk Platform metrics collection support for Windows. (#7673)
The new MSI install parameterSPLUNK_PLATFORM_METRICS_INDEXenables forwarding host metrics
to Splunk Platform via HEC. A newsplunk_metrics_config_windows.yamlconfig file is installed
with Windows Performance Counters receivers. - (Splunk)
packaging: Run Windows Collector container images as ContainerUser by default. (#7788)
Use--user ContainerAdministratorwhen running the container if administrator privileges are required. - (Core)
pkg/service: Apply experimentalservice::telemetry::resource::detection/developmentresource detection to the Collector's internal telemetry resource. (#14311)
This follows the OpenTelemetry configuration schema by treating
service::telemetry::resource::detection/development::detectorsas detector selection.
Currently supported detector entries arecontainer,host,process, andservice.
See the OpenTelemetry Configuration Go support table and search for
ExperimentalResourceDetectorfor current detector support:
https://github.com/open-telemetry/opentelemetry-configuration/blob/main/language-support-status.md#go
Example:service: telemetry: resource: attributes: - name: foo value: bar detection/development: detectors: - host: {}
- (Core)
pkg/service: Addservice.partialReloadfeature gate (Alpha) andservice.partialReloadReceiversfeature gate (Beta) that together restart only receivers on config reload when non-receiver config sections are unchanged, avoiding unnecessary disruption to processors, exporters, and extensions. Enable with--feature-gates=service.partialReload. (#5966) - (Contrib)
exporter/kafka: Addexporter.kafka.useRequestTypealpha feature gate that routes all signals through a custom exporterhelper.Request (#48090)
When the gate is enabled, traces, metrics, logs, and profiles all convert
pdata into Kafka records at request-creation time and use a custom
Request for queue/batch sizing.queue_batch.sizer: itemsthen counts
Kafka records, not OTLP items. The persistent queue (sending_queue.storage)
is not supported with this gate; configuring both produces an error at
startup. Default OFF. - (Contrib)
exporter/signalfx: Translatecpu.num_processorsfromsystem.cpu.logical.count. (#49296)
The exporter no longer derivescpu.num_processorsby counting per-coresystem.cpu.timeseries. - (Contrib)
exporter/signalfx: Simplifysystem.cpudefault translations now that hostmetrics CPU metrics are state-aggregated by default. (#49589)
The default translations no longer aggregate translated CPU metrics across thecpuattribute. If that attribute is explicitly re-enabled onsystem.cpu.time, translatedcpu.*andcpu.utilizationdatapoints keep it. - (Contrib)
extension/google_cloud_logentry_encoding: Add feature gate to stop emitting deprecated rpc.jsonrpc.error_code and rpc.jsonrpc.error_message attributes (#22095)
The feature gate extension.encoding.googlecloudlogentryencoding.DontEmitV0RPCConventions
(disabled by default) allows users to opt out of the deprecated semconv v1.38.0 attributes.
The new attribute rpc.response.status_code is always emitted regardless of the gate. - (Contrib)
pkg/ottl: Add theWhenOTTL converter for selecting a value based on a lambda condition. (#49356) - (Contrib)
pkg/ottl: Add theMapKeysOTTL converter for transforming map keys with a lambda key mapper. (#49187) - (Contrib)
pkg/ottl: AddIsEmptyconverter that returnstruewhen the given value is nil or an empty value. (#49635) - (Contrib)
pkg/ottl: Add theAllOTTL converter for testing whether every slice or map element matches a lambda predicate. (#49188) - (Contrib)
pkg/ottl: Add theAnyOTTL converter for testing whether any slice or map element matches a lambda predicate. (#49188) - (Contrib)
pkg/ottl: Add theFilterOTTL converter for filtering slice and map values with a lambda predicate. (#49184) - (Contrib)
pkg/ottl: Add theReduceOTTL converter for folding slice and map values with a lambda accumulator. (#49191) - (Contrib)
pkg/ottl: Add an optionaltruncation_markerargument to thetruncate_allfunction to append a marker to truncated values (#49319) - (Contrib)
pkg/ottl: Add theFindOTTL converter for returning the first matching slice or map value from a lambda predicate, with an optional mapper to transform the result. (#49190) - (Contrib)
pkg/ottl: Add theMapEachOTTL converter for transforming slice and map values with a lambda mapper. (#49186) - (Contrib)
pkg/stanza: Thecsv_parseroperator now processes batches of entries without splitting them, improving performance. (#42390) - (Contrib)
processor/tail_sampling: Add theprocessor.tailsamplingprocessor.usetracestatealpha feature gate, which makes theprobabilisticpolicy use W3Ctracestaterandomness for its sampling decision and rewrites the outgoingthto the effective sampling threshold across matched policies. (#48865) - (Contrib)
processor/transform: AddParseCEFfunction for parsing Common Event Format (CEF) security event data. (#48351) - (Contrib)
receiver/awsecscontainermetrics: Migrate container.image.tag (v1.21.0) semantic convention to container.image.tags (v1.42.0) (#45087) - (Contrib)
receiver/file_stats: Add an opt-infile.includeattribute to thefile.countmetric (#49556) - (Contrib)
receiver/journald: Add the 'include_log_record_original' configuration option to allow adding the raw data read from journalctl as the 'log.record.original' attribute. (#47921) - (Contrib)
receiver/mysql: Addservice.instance.id,service.name, andservice.namespaceresource attributes to metrics and logs (#46605)
service.instance.idis a deterministic UUID v5 derived from the endpoint and is enabled by default.
service.name(defaults tounknown_service:mysql) andservice.namespaceare disabled by default
and can be enabled and overridden via theresource_attributesconfiguration. - (Contrib)
receiver/mysql: Add db.system.version and db.system.name as optional resource attributes (#47414) - (Contrib)
receiver/oracledb: Add OS-level metrics for the Oracle server (#48458)
Adds the opt-in metricsoracledb.system.cpu.count,
oracledb.system.memory.limit, andoracledb.system.process.count. - (Contrib)
receiver/oracledb: Add transaction, lock, and recovery metrics (#49064)
The new metrics are disabled by default and add no new database queries. - (Contrib)
receiver/oracledb: Adddb.namespaceattribute todb.server.session.wait_sampleevent (#49603) - (Contrib)
receiver/oracledb: Add real-time database health and efficiency indicator metrics. (#49087)
All metrics are disabled by default with development stability. - (Contrib)
receiver/oracledb: Add SGA component memory metrics (#48540)
Adds the opt-in metricsoracledb.sga.usageandoracledb.sga.limit. - (Contrib)
receiver/oracledb: Add session, in-database JVM, and OS resource metrics (#49065)
The new metrics are disabled by default and add no new database queries. - (Contrib)
receiver/postgresql: Add the postgresql.query.conflicts metric reporting queries canceled due to recovery conflicts on standby servers. (#49303)
The metric is disabled by default. Conflicts only occur on standby servers;
the metric will be zero on primary servers. - (Contrib)
receiver/postgresql: Align resource and metric attributes with OpenTelemetry semantic conventions behind the
receiver.postgresql.useOTelSemconvfeature gate (alpha, disabled by default). (#45347)- When gate enabled: single resource per server with server.address, server.port, service.instance.id (UUID v5)
- When gate enabled: db.namespace, db.collection.name, postgresql.index.name added as metric-level attributes
- When gate disabled (default): legacy per-entity resource model with postgresql.database.name, etc.
- receiver.postgresql.separateSchemaAttr kept at StageAlpha; mutually exclusive with useOTelSemconv
- (Contrib)
receiver/rabbitmq: Add exchange-level metrics (rabbitmq.exchange.messages.published_inandrabbitmq.exchange.messages.published_out) scraped from the/api/exchangesendpoint, withrabbitmq.exchange.nameandrabbitmq.exchange.typeresource attributes. These metrics are disabled by default. (#49552) - (Contrib)
receiver/sqlquery: Honor thetimeoutsetting for the logs collection path so that a slow or blocked query no longer waits indefinitely. (#47114)
The metrics path already appliedtimeoutthrough the scraper controller; the logs path previously ignored it and
used an unbounded context. Settingtimeoutto a positive duration now bounds each log query execution. - (Contrib)
receiver/sqlserver: Add more lock and connection management metrics (#48925)
Adds the following metrics, all disabled by default:sqlserver.connection.reset.ratesqlserver.error.ratesqlserver.lock.block.countsqlserver.lock.escalation.ratesqlserver.lock.memorysqlserver.lock.request.ratesqlserver.lock.wait_time.total
- (Contrib)
receiver/sqlserver: Add index physical stats metrics (#49350)
Adds the following metrics, all disabled by default:sqlserver.index.fragmentation,
sqlserver.index.page.count,sqlserver.index.size,sqlserver.index.page.utilization,
andsqlserver.index.record.count. Collecting these metrics requires theCONNECT ANY DATABASEandVIEW ANY DEFINITIONpermissions in addition to the existing direct-connection
permissions. - (Contrib)
receiver/sqlserver: Add 10 new opt-in metrics for cursor management, worker threads, CLR execution, Service Broker task activation, and stored procedure monitoring. (#49257)sqlserver.cursor.countsqlserver.cursor.memory.usagesqlserver.cursor.plan.countsqlserver.cursor.request.ratesqlserver.worker.thread.countsqlserver.worker.request.countsqlserver.clr.execution.timesqlserver.task.countsqlserver.task.ratesqlserver.stored_procedure.invocation.rate
🧰 Bug fixes 🧰
- (Splunk)
packaging: Fix Linux packaging to preserve the config directory ownership when running with a custom service user/group, instead of changing back to the default user/group. (#7789) - (Core)
exporter/debug: Fix the scope index printed by thenormalverbosity marshaler; each scope was labelled with its parent resource's index instead of its own position (#15541)
Affected all four signals (logs, traces, metrics, profiles) — e.g. the second scope under a resource printed#0instead of#1. - (Core)
pkg/config/configgrpc: FixWaitForReadyoption not being applied to gRPC client connections. (#15615) - (Core)
pkg/featuregate: Fix panic when a--feature-gatesvalue contains an empty comma-separated element (e.g.--feature-gates=alpha,) (#15536)
An empty identifier now produces a returned error instead of an index-out-of-range panic during flag parsing. - (Core)
pkg/service: Fix collector startup panic when a resource detector emits a slice-valued attribute (e.g. theprocessdetector'sprocess.command_args) (#15571)
createResourcepassed the OTel SDK attribute value straight intopcommon.Value.FromRaw, which
only accepts[]anyfor slices, so any string, int, float, or bool slice resource attribute produced
an<Invalid value type>error and abortedservice.New. Slice-typed attributes are now converted
element-wise. - (Core)
pkg/service: Record status events reported by extensions (#15557) - (Contrib)
receiver/chrony: Fix metric units to comply with the UCUM specification (#49453) - (Contrib)
receiver/haproxy: Fix metric units to comply with the UCUM specification (#49453) - (Contrib)
receiver/memcached: Fix metric units to comply with the UCUM specification (#49453) - (Contrib)
receiver/mongodb: Fix metric units to comply with the UCUM specification (#49453) - (Contrib)
receiver/nginx: Fix metric units to comply with the UCUM specification (#49453) - (Contrib)
receiver/splunk_enterprise: Fix metric units to comply with the UCUM specification (#49453) - (Contrib)
receiver/sqlserver: Fix metric units to comply with the UCUM specification (#49453) - (Contrib)
exporter/file: Added 0644 permissions to created export files when rotation is enabled. (#49677)
When rotation is enabled, files are created with 0640 permissions as we did not pass FileMode to TimberJack (defaults to 0640). After this change, file creation for both rotation enabled or disabled is done with 0644 permissions. - (Contrib)
exporter/file: Migrate lumberjack-format rotated backup files to timberjack naming convention on startup to prevent unbounded disk usage after upgrade. (#47674)
After the migration from natefinch/lumberjack to DeRuina/timberjack (#45900), rotated backup
files created by the previous lumberjack-based exporter used a different filename pattern
(name-timestamp.ext) that timberjack does not recognise, causing them to be excluded from
max_backups and max_days enforcement and accumulate indefinitely on disk.
On startup, the file exporter now scans the log directory and renames any lumberjack-format
backup files to the timberjack convention (name-timestamp-size.ext), after which timberjack
manages their lifecycle normally. - (Contrib)
exporter/load_balancing: Improve endpoint distribution across large backend sets by increasing hash ring size, virtual node count, and removing endpoint-order bias during ring construction. (#41200)
This update raises the default virtual node count from 100 to 200 and the ring coordinate space from 36000 to 131071.
It also changes ring construction so all virtual points are generated first and assigned globally,
instead of letting earlier endpoints claim scarce positions before later endpoints are processed.
Together with the existing linear-probing collision handling, this reduces skew for large endpoint
sets and keeps ring assignment stable when the same endpoints are provided in a different order. - (Contrib)
exporter/splunk_hec: UsebuildInfo.Versionas fallback for__splunk_app_versionheader whensplunk_app_versionis not configured. (#49511) - (Contrib)
internal/sqlquery: Close sql.Rows in QueryRows so the underlying driver connection is released on early-return and error paths. (#49462)
Fixes a memory leak in consumers of internal/sqlquery (sqlserver, postgresql, mysql, oracledb, sqlquery receivers). Previously, when ColumnTypes or row scanning returned early with an error, or when the context was cancelled mid-iteration, sql.Rows was never closed, so the underlying connection stayed marked in-use in the *sql.DB pool. On drivers that allocate per-connection buffers (e.g. go-mssqldb's 64 KiB TDS buffer), this manifested as steady RSS growth under long-running scrapes. - (Contrib)
pkg/azurelogs: Add support for additional time and property fields in Azure Resource Logs (#46162)
Azure resource logs are not standard. This change expands support for different resource types by adding support
for additional time and property fields that are less commonly used in Azure resource logs. - (Contrib)
pkg/fileconsumer: Fix fingerprint generation for gzip-compressed files when the file descriptor is positioned at a non-zero offset. (#49473) - (Contrib)
pkg/translator/jaeger: Preserve the sampled flag when translating spans between Jaeger and OTLP. (#48247)
The Jaeger to OTLP translators (proto and thrift) now map the Jaeger SampledFlag to bit 0 of the OTLP Span.flags field (the W3C Trace Context sampled bit), and the OTLP to Jaeger translator maps it back. Previously the sampled bit was always dropped in both directions, so downstream sampling-aware components lost that information whenever a Jaeger receiver or exporter was in the pipeline. - (Contrib)
processor/metrics_transform: Fix submatch_case config option having no effect at runtime by copying the field into the internal transform struct during config building. (#49171) - (Contrib)
processor/metrics_transform: aggregate_labels and aggregate_label_values operations no longer silently drop all data points when applied to Summary metrics. The operation is now skipped with a warning log instead. (#49456) - (Contrib)
processor/tail_sampling: Fix race condition where SetMaximumTraceSizeBytes updates could be applied after incoming traces are evaluated, causing traces to be incorrectly dropped as too large. (#48887)
In the iter loop, pending configuration updates (SetMaximumTraceSizeBytes and
SetSamplingPolicy) are now drained before processing incoming trace batches.
This prevents a non-deterministic Go select from picking the workChan case
before a config update channel, which previously caused TestDropLargeTraces
to fail flakily on CI. - (Contrib)
processor/tail_sampling: Treatthreshold_msas an exclusive lower bound whenupper_threshold_msis not set. (#49593) - (Contrib)
receiver/k8s_objects: Fix panic and data race in stopperChanList during leader election re-acquisition (#49601) - (Contrib)
receiver/mongodb: Ignore the$indexStatsscrape error that occurs when scraping views (#49494) - (Contrib)
receiver/postgresql: Prevent table and index metrics collection from blocking when a PostgreSQL relation has an AccessExclusiveLock. (#49351) - (Contrib)
receiver/splunk_hec: Fix the receiver silently ignoring theread_header_timeoutandwrite_timeoutsettings, which were overridden by a hard-coded 20s timeout (#49483) - (Contrib)
receiver/statsd: Fix explicit bucket histogram mapping for StatsD timing metrics. (#49747) - (Contrib)
receiver/vcenter: Fixvcenter.vm.cpu.readinessalways reporting 0 by adding the missingsummary.quickStats.overallCpuReadinessproperty to the vSphere Retrieve call inVMs()(#48487)
Docker Image Manifests:
- Linux (amd64, arm64, ppc64le) and Windows (2019 amd64, 2022 amd64):
quay.io/signalfx/splunk-otel-collector:0.157.0- digest:
sha256:664603ec25c949e98e54b3e800b79a6fa22c91a46b02cccf5bdbb6d047be1c53