This Splunk OpenTelemetry Collector release includes changes from the opentelemetry-collector v0.163.0
and the opentelemetry-collector-contrib v0.163.0 releases where appropriate.
🛑 Breaking changes 🛑
- (Splunk)
all: Dropped support for Debian 11 (Bullseye) (#8197)
Debian 11 has reached its EOL date. - (Splunk)
featuregates: remove thecookfeature gate (#8267)
--feature-gates +cookno longer works. Thesplunk_*receivers always apply
props.conf now, and remain gated behindenableTARunner. - (Splunk)
receiver/signalfxgatewayprometheusremotewrite: Remove the deprecated SignalFx Gateway Prometheus remote write receiver from the distribution. (#8235) - (Contrib)
exporter/signalfx: Exclude generatedcontainer_cpu_utilizationmetric by default (#51906)
This metric has been deprecated in favor ofcontainer.cpu.usage. Ifcontainer_cpu_utilization
is still required, please add it to the exporter'sinclude_metricsconfiguration option as shown below.signalfx: include_metrics: - metric_name: container_cpu_utilization - (Contrib)
extension/google_cloud_logentry_encoding: Fix Cloud DNS query logs failing to decode whenvmInstanceIdis in exponent notation.host.idis now a string taken fromvmInstanceIdStringinstead of an int taken fromvmInstanceId. (#51552) - (Contrib)
processor/redaction: Keep every redaction summary attribute intact when data re-enters the processor (#50770)
Only five of the fourteen summary attributes the processor writes survived a second redaction processor. When data
passed through one,redaction.allowed.keys,redaction.allowed.countand the sevenredaction.body.*attributes
were treated as unknown keys, deleted, and reported inredaction.redacted.keys.
The processor now treats all fourteen as its own bookkeeping rather than as user data, so they are no longer deleted,
masked, obfuscated or counted as redacted, and the summary accumulates across chained processors as intended.
Previously ablocked_key_patternsorblocked_valuesrule matching one of these attributes replaced the summary
with a masked value, and withredact_all_typesenabled it rewrote the*.countintegers as strings, which made the
running totals read back as zero at the next hop.
Chaining two processors also reported the same attribute more than once: the allowed and ignored summaries
describe the record as it currently stands, which every processor re-derives in full, so merging them with an
upstream value counted one attribute twice.redaction.allowed.keysreademail,emailwith
redaction.allowed.countof 2 for a single allowed attribute. Those two outcomes now replace the upstream
value, while the redacted and masked outcomes keep accumulating, because a removed key and an already masked
value cannot be detected again.
Two behaviour changes come with this, both of which can affect an existing chained configuration.
A processor whosesummaryis notdebugorinfonow claims no ownership of a summary it finds, so the ordinary
allow list decides whether it survives. This lets a strict egress processor strip an upstream audit trail, which it
could not do before. It also means a downstream processor withallow_all_keys: falsenow removes the five summary
attributes it previously kept unconditionally, unless they are named inallowed_keysorallow_all_keysis set.
summaryis unset by default, which counts as silent, so a chained configuration that never sets it is affected.
A key inside a log body named after a summary attribute is now redacted like any other unknown key. The processor
only ever writes its summary to the record attributes, so such a key in a body carries user data. - (Contrib)
receiver/mongodb: Report a loopbackserver.addressas the collector host name, and enableserver.portby default (#51633)
When a scraped node reports a loopback address (localhost,127.0.0.1or::1),server.addressnow
reports the host name of the machine running the collector.service.instance.idis seeded from the same
value and changes for those deployments.server.portwas previously disabled by default; disable it with
resource_attributes.server.port.enabled: false.
NOTE: Marked as breaking only because a resource attribute is now enabled by default and
server.addresschanges for loopback deployments, which alters series identity and can
potentially impact resource usage and billing. - (Contrib)
receiver/postgresql: Set the default scrape timeout to 60s to cancel blocked PostgreSQL queries. (#50757)
Increasetimeoutfor longer scrapes, or settimeout: 0to restore the unbounded behavior. - (Contrib)
receiver/prometheus_simple: Remove the long-deprecatedtls_enabledandtls_configsettings; usetlsinstead (#51895)
tls_enabled/tls_configwere deprecated in v0.55.0 in favor of the standard
tlsblock (confighttp's TLS settings). Besides being long overdue, keeping both
was a footgun: settingtls_enabled: truesilently overrode anytlsblock.
Migratetls_config(ca_file/cert_file/key_file/insecure_skip_verify) to
the equivalent fields undertls. - (Contrib)
receiver/sql_server: Performance counters read from the SQL ServerDatabasesobject on a direct database connection now carry thesqlserver.database.nameresource attribute and no longer emit an unlabeled_Totalaggregate, which changes the series identity ofsqlserver.database.backup_or_restore.rate. (#51384)
sqlserver.database.backup_or_restore.ratesplits from one series into one per database, and the
unlabeled series it previously reported is gone. Aggregate acrosssqlserver.database.nameinstead.
This brings the direct database connection in line with the Windows performance counter path, which
already discards the aggregate instance before recording.
🚩 Deprecations 🚩
- (Contrib)
receiver/sql_server: Rename thesqlserverreceiver tosql_server. The oldsqlservertype remains available as a deprecated alias. (#45339)
🚀 New components 🚀
- (Splunk)
healthcheckv2extension: Added thehealthcheckv2extension to the Splunk distribution of the OpenTelemetry Collector. (#8222)
Thehealthcheckv2extension
allows users to monitor the health of the collector and its components, ensuring that it is functioning correctly and efficiently. - (Splunk)
receiver/ptp: Add an experimental PTP receiver for collecting clock, grandmaster, offset, path delay, and port status from a local linuxptp daemon. (#8171) - (Contrib)
processor/rolling_span_latency: Promote the rolling_span_latency processor to alpha stability and include it in the contrib distribution. (#50260)
💡 Enhancements 💡
- (Splunk)
collector: Add an AIX PPC64 experimental binary to the release artifacts. (#8273)
AIX support is experimental and may have issues; issue-free operation is not guaranteed. - (Splunk)
msi: Add the SPLUNK_ENVIRONMENT_VARIABLES MSI property to set arbitrary Collector service environment variables. (#8284)
Use comma-separated KEY=VALUE entries and percent encode commas in values as %2C.
Custom entries override predefined service environment variables with the same name. - (Splunk)
splunk-connect-for-otlp: Add new configuration to optionally redirect metrics and traces and send them to a Splunk Observability instead.
(#8214) - (Splunk)
packaging: Update Splunk OpenTelemetry Java agent to v2.32.0 (#8264) - (Splunk)
packaging: Update Splunk OpenTelemetry Node.js agent to v4.12.1 (#8263) - (Core)
pkg/pprofile: Implement Profiles development-version metadata in the OTLP receiver and exporters. (#16147, #16009)
The receiver rejects malformed, repeated, or unsupported versions before decoding.
OTLP exporters send the version associated with their compiled-in Profiles schema.
The version is not configurable, and existing clients without metadata identify
the initial development version. - (Contrib)
connector/routing: Validate OTTL conditions and statements during configuration. (#51748) - (Contrib)
exporter/kafka: Add the trace context to Kafka record headers using the propagators configured inservice::telemetry::traces::propagators. (#51078) - (Contrib)
exporter/splunk_hec: Define the exporter's heartbeat metrics in metadata.yaml and generate them via mdatagen. (#49009) - (Contrib)
extension/basicauth: Support sourcing credentials from secret provider extensions, with rotation that does not restart the collector. (#48277)
Configure withhtpasswd.secret_provider(server) orclient_auth.secret_provider(client).
The referenced extension must implement theSecretProviderinterface (GetSecretandOnChange). - (Contrib)
extension/opamp: Add asocketoption underserver.wsandserver.httpto dial the OpAMP server over a Unix domain socket (transport: unix) or Windows named pipe (transport: npipe). (#50603)
Whensocketis set, theendpointonly supplies the URL scheme, request path, and Host
header; its host and port are ignored. - (Contrib)
pkg/ottl: Add thepkg.ottl.functions.enableExperimentalfeature gate, which must be enabled to use experimental OTTL functions. (#51564) - (Contrib)
pkg/ottl: Allowkeep_keysto accept slice values from paths and converter expressions when thepkg.ottl.functions.enableDynamicSliceArgumentsfeature gate is enabled. (#45980) - (Contrib)
pkg/ottl: Improve OTTL parse error diagnostics by reporting the line and column of the input where available. (#51680)
Not all parse errors carry a position: errors that aggregate multiple statements, and some
inner errors that didn't already carry one, are still returned without one. The exact
wording and position of statement, condition, and value expression parse error messages
has changed as a result. The position is exposed programmatically via the new experimental
xottl.Errortype. - (Contrib)
pkg/ottl: Add the betapkg.ottl.functions.enableDynamicSliceArgumentsfeature gate, which controls whether slice arguments of stable functions such asConcataccept paths and converters. (#51565) - (Contrib)
pkg/stanza: Optimize container parser operator by replacing CRI line and File path regexes with a hand-written parsers and caching log filepath metadata extraction, reducing CPU usage by ~70% on the container parser hot path (#41672) - (Contrib)
pkg/stanza: Add default scope name and version for stanza log entries without scope name (#51084)
This introduces thepkg.stanza.addDefaultScopeNamefeature gate (currently in beta) to ensure Stanza log entries are assigned a default scope name and version when not explicitly provided. - (Contrib)
processor/resource_detection: Addomit_detector_systemgo build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_aws_ec2go build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_envgo build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_azure_functionsgo build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_azure_containerappsgo build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_dockergo build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_azure_appservicego build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_consulgo build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_azure_aksgo build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_k8s_apigo build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_kubeadmgo build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_openshiftgo build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_aws_lambdago build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_gcpgo build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_herokugo build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_aws_eksgo build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_aws_elastic_beanstalkgo build tag to omit detector at build time. (#47218) - (Contrib)
processor/resource_detection: Addomit_detector_aws_ecsgo build tag to omit detector at build time. (#47218) - (Contrib)
processor/tail_sampling: Move spans out of incoming batches instead of copying them, and declare that the processor mutates data. (#51920) - (Contrib)
receiver/aws_cloudwatch: Addscope.nameandscope.versionto logs and metrics. (#51333) - (Contrib)
receiver/azure_blob: Add acompressionoption to read gzip compressed blobs (#51412) - (Contrib)
receiver/azure_monitor: Add per-metric time grain overrides for Azure Monitor metric queries. (#51295) - (Contrib)
receiver/kafka: Addpartition_processing.max_in_flight.recordsto run concurrent unmarshal-plus-Consume calls on one independent partition worker. (#51080)
Whenmax_in_flight.recordsis above 1, the worker always marks after processing.message_marking.after: falsedoes not mark before Consume. - (Contrib)
receiver/kubelet_stats: Add optional k8s node pid limit and usage metrics. (#48926)
Adds the following optional metrics to kubeletstatsreceiver:- k8s.node.pid.limit
- k8s.node.pid.usage
- (Contrib)
receiver/mongodb: Add assert, global lock queue, and write concern metrics (#51418)
Addsmongodb.assert.count,mongodb.global_lock.queue.countand
mongodb.write_concern.wait.time, all disabled by default. - (Contrib)
receiver/mongodb: Add query executor scan and collection scan metrics (#51060)
Addsmongodb.query_executor.index_key.scanned.count,
mongodb.query_executor.document.scanned.countand
mongodb.query_executor.collection_scan.count, all disabled by default. - (Contrib)
receiver/mysql: Add row-count and database namespace context to the top query event (#51312) - (Contrib)
receiver/oracledb: Add support for Kerberos authentication via a newauth_typeoption andkerberosconfiguration block. (#50401)
Setauth_type: kerberosand configure thekerberosblock to authenticate using a keytab,
credential cache, or password. Kerberos support is implemented in pure Go and requires no external
libraries. - (Contrib)
receiver/postgresql: Addconnect_databaseto configure which database the receiver connects to for cluster-wide statistics collection. (#50920) - (Contrib)
receiver/prometheus_simple: Restore the stability of the receiver fromunmaintainedtobeta(#11504) - (Contrib)
receiver/prometheus_simple: Validate thatendpointis set andcollection_intervalis positive, so an invalid configuration is rejected at startup instead of failing later (#11504) - (Contrib)
receiver/sql_server: Addsqlserver.db.editionresource attribute. (#51414)
Disabled by default. Opt in by settingresource_attributes.sqlserver.db.edition.enabled: truein the receiver config. - (Contrib)
receiver/windows_event_log: Promote Windows Event Log receiver to beta stability (#42167)
🧰 Bug fixes 🧰
- (Splunk)
splunk-connect-for-otlp: Reject authentication with disabled HEC tokens. (#8282) - (Splunk)
splunk-connect-for-otlp: Retrieve all HEC tokens using paginated Splunk REST requests so tokens beyond the first page can authenticate. (#8278) - (Splunk)
splunk-connect-for-otlp: Refresh HEC tokens and index permissions, every three minutes by default, without restarting the OTLP input. (#8285)
Reject authentication when the token snapshot reaches ten minutes old,
and bound each retrieval to 30 seconds. Configurerefresh_interval,
refresh_timeout, andmax_stalenessin inputs.conf to override these defaults. - (Splunk)
receiver/splunk_inputs: Apply supported TA monitor whitelist and blacklist expressions during file discovery to avoid opening files that the filters would discard. (#8218)
The original regular expressions remain as entry filters, and expressions that cannot be safely converted to file globs retain the existing fallback behavior. - (Splunk)
splunk-connect-for-otlp: Allow Splunk management REST calls to use loopback endpoints when the management certificate does not include loopback IP SANs. (#8232)
TLS verification is skipped for literal loopback HTTPS endpoints wheninsecure_skip_verifyis
left unset, since there is no reliable hostname to verify the certificate against in that case.
TLS verification remains enabled for non-loopback endpoints, and an explicit
insecure_skip_verify: falseis honored even on loopback endpoints. - (Core)
pkg/exporterhelper: Fix sending queue deadlocks when blocked offers are cancelled with block_on_overflow enabled. (#15700) - (Core)
pkg/exporterhelper: Drop only the oversized profile when splitting a profiles batch, instead of discarding every profile queued behind it (#16087)
Same fix as - (Core)
pkg/exporterhelper: Drop only the oversized span when splitting a traces batch, instead of discarding every span queued behind it (#16087)
Same fix as - (Core)
pkg/pprofile: Use the profiles dictionary for resource and scope attribute strings sent over OTLP/gRPC. (#15861)
The OTLP/gRPC profiles client now interns attribute strings before transmission, matching the OTLP/HTTP path. The server resolves the references before exposing pdata to consumers. - (Core)
pkg/xpdata: Fixxhashproducing the same hash for different maps by length-prefixing keys, strings and bytes. (#16048)
All hash values produced byxhashchange. - (Contrib)
exporter/file: Fix race condition where a writer could be closed while still in use, causing data to be silently lost. (#49228)
This will happen ingroup_bymode whenrotationis not set. - (Contrib)
exporter/file: Rejectgroup_by.max_open_files<= 0 and negativerotationvalues during config validation. (#51515) - (Contrib)
extension/docker_observer: Discover IPv6-only Docker endpoints and format their port targets correctly. (#50972) - (Contrib)
extension/google_cloud_logentry_encoding: Do not drop log entries with an unparsabletraceorspanId, and accept a bare trace ID without theprojects/<project>/traces/prefix. (#51666)
Unparsable values are kept as thegcp.traceandgcp.span_idlog record attributes. - (Contrib)
pkg/ottl:Timeno longer treats a trailing strptime%Zas Zulu (UTC) when no location is given (#51416) - (Contrib)
pkg/ottl: Reject literal values that are not lists for slice arguments, such askeep_keys(attributes, "http.method")orConcat("a", "-"), at parse time instead of failing on every execution (#51833) - (Contrib)
pkg/stanza: Fix thecontainerparser rejecting containerd logs whose timestamps use a UTC offset instead ofZwhenformat: containerdis set. (#51284) - (Contrib)
processor/cumulative_to_delta: Fix ExponentialBuckets.Diff missing reset when old buckets precede current histogram offset (#51303) - (Contrib)
processor/resource_detection: Honorfail_on_missing_metadataalso for the instance identity document and hostname lookups of theec2detector (#50826)
Theec2detector guarded only its initialinstance-idlookup withfail_on_missing_metadata. The
subsequent instance identity document and hostname lookups always returned their respective errors,
regardless of the fail_on_missing_metadata setting.
On clusters where the metadata service implements the EC2-compatiblemeta-datatree, but not the AWS-specific
dynamic/instance-identityendpoints, this would lead to a crash on startup even with
fail_on_missing_metadata: false. Theinstance-idlookup would succeed and then the identity document lookup would
fail with HTTP 404. OpenStack Nova based clusters behave this way, so a collector configured with theec2detector and
fail_on_missing_metadata: falsefailed to start on those hosts rather than skipping the detector.
The identity document lookup now honors the flag: whenfail_on_missing_metadataisfalseand the endpoint
responds with HTTP 404, the detector logs at debug level and returns an empty resource. Any other error is still
returned, since it might be transient. When the flag istruethe error is returned as before.
The hostname lookup honors the flag as well: whenfail_on_missing_metadataisfalse, the detector logs at
debug level and returns the resource without thehost.nameattribute, instead of failing the detection or skipping
the instance tags. When it istrue, the error is returned. - (Contrib)
receiver/azure_blob: Return an error instead of panicking when an Event Hub message has no events or an unexpected blob subject (#51474)
A malformed or unexpected Event Hub message could crash the collector. Such messages are now
logged as errors and skipped, and events other than blob creation are ignored without being parsed. - (Contrib)
receiver/azure_event_hub: Do not emit 0-valued timeseries for aggregates (total, count, minimum, maximum, average) that are missing from the source Azure record (#50485)
Diagnostic settings only export the aggregates a resource supports, e.g. a Standard
Load Balancer exports total and count but no minimum/maximum. Missing aggregates are
now skipped instead of being coerced to 0. - (Contrib)
receiver/azure_event_hub: Recreate the partition client after anownershiplosterror instead of polling a permanently detached link. (#51463)
When another receiver with a higher epoch attached to the same partition and consumer group, the
receiver loggederror receiving eventson every poll forever and never received data again.
The partition client is now closed and reopened from the last received sequence number with exponential backoff. - (Contrib)
receiver/cloud_foundry: Do not emit partially initialized log records for unsupported log types. (#51517) - (Contrib)
receiver/host_metrics: Reject negativemetadata_collection_intervalvalues during configuration validation. (#51640) - (Contrib)
receiver/kafka: Fix records from healthy partitions being dropped when a poll also contains a fetch error. (#51852) - (Contrib)
receiver/mysql: Reportmysql.index.io.wait.countandmysql.index.io.wait.timeunder the correctoperationattribute (#49597)
Themysql.index.io.wait.countandmysql.index.io.wait.timemetrics were reported under the
wrongoperationattribute (for example, delete counts appeared underoperation=update). Each
datapoint is now reported under its correct operation. - (Contrib)
receiver/postgresql: Addpostgresql.useridtodb.server.top_queryanddb.server.query_plan, and key the top-query counter cache and EXPLAIN plan cache on it instead ofpostgresql.rolname. Fixes a case where two dropped database roles could be reported under each other's counters or query plan, and keeps counter deltas continuous across a role rename. (#51319) - (Contrib)
receiver/prometheus_remote_write: Attach exemplars once, to the series that sent them, rather than to every metric built from the same labels. (#50334, #50546) - (Contrib)
receiver/splunk_enterprise: Fixes recorded value for RollingRestartStatus metric (#51866) - (Contrib)
receiver/sql_server: Fix missing metrics when using direct SQL Server connection -sqlserver.lock.wait_time.avg,sqlserver.transaction.rate,sqlserver.page.operation.rate,sqlserver.page.lazy_write.rate, andsqlserver.transaction_log.growth.countnow emit values on non-Windows platforms and when the receiver is configured with a direct database connection. (#51384)
All of these exceptsqlserver.transaction_log.growth.countreport no
data point on the first scrape, since they are calculated from the change in their counters between scrapes. - (Contrib)
receiver/sql_server:sqlserver.session.durationnow reports whole seconds since login instead of milliseconds, fixing a 25-day overflow intotal_elapsed_time. (#51419) - (Contrib)
receiver/sql_server: Fix direct connection queries returning no data wheninstance_nameis set to a named instance (#50773)
The direct connection queries filtered rows with@@SERVERNAME = '<instance_name>'. On a named
instance@@SERVERNAMEreturns<host>\<instance>, which never matches the bare instance name,
so every query returned zero rows and no metrics were emitted. The filter was also redundant:
a connection is scoped to a single instance and its DMVs only expose that instance. It has been
removed.instance_nameremains in use for the Windows performance counter collection path. - (Contrib)
receiver/sql_server: Fix direct-connection performance counter rate metrics to emit per-second rates instead of cumulative counter values. (#50772)
Thesqlserver.page.buffer_cache.free_list.stalls.ratemetric value type changes from int to double so fractional rates can be represented. - (Contrib)
receiver/statsd: Close the TCP connection when the client disconnects and bound the size of an unterminated line, fixing a per-connection file descriptor leak and an unbounded memory growth path in the TCP transport. (#50123) - (Contrib)
receiver/yang_grpc: Apply the configuredsecurity.allowed_clientsandsecurity.rate_limitingsettings to theMdtDialoutstreaming RPC, which previously did not enforce either. (#0)
Docker Image Manifests:
- Linux (amd64, arm64, ppc64le) and Windows (2019 amd64, 2022 amd64):
quay.io/signalfx/splunk-otel-collector:0.163.0- digest:
sha256:e1192a0ef85a6094b939b873dbad099f5f926feae402f4ce949e435c3e5cc5a9