This Splunk OpenTelemetry Collector release includes changes from the OpenTelemetry Collector v0.161.0
and the OpenTelemetry Collector Contrib v0.161.0 releases where appropriate.
🛑 Breaking changes 🛑
- (Core)
pkg/service: Remove deprecated ZapOptions (#15935) - (Contrib)
extension/google_cloud_logentry_encoding: Promote extension.encoding.googlecloudlogentryencoding.DontEmitV0RPCConventions feature gate to Beta (#50879)
The gate is now enabled by default, so the audit log parser no longer emits the deprecated semconv v1.38.0 attributes rpc.jsonrpc.error_code and rpc.jsonrpc.error_message. It can be disabled to restore the previous behavior. - (Contrib)
processor/k8s_attributes: Promote logs, metrics, and traces signals from beta to stable. (#49152)
Promote the following feature gates from alpha to beta (enabled by default):processor.k8sattributes.EmitV1K8sConventions: emits stable semconv attribute names (e.g.k8s.pod.label.*singular form).processor.k8sattributes.DontEmitV0K8sConventions: disables legacy semconv attribute names (e.g.k8s.pod.labels.*plural form).
Users relying on the legacy names should disable these gates or migrate to the stable names.
It is advised that dual emission is used for the migration period. This can be achieved through the feature gates:
--feature-gates=-processor.k8sattributes.DontEmitV0K8sConventions,processor.k8sattributes.EmitV1K8sConventions.
More information can be found at the respective documentation section.
- (Contrib)
receiver/kubelet_stats: Promote thereceiver.kubeletstats.cpuUsageScrapeBasedfeature gate to beta (enabled by default). (#49477)
container.cpu.usage,k8s.pod.cpu.usageandk8s.node.cpu.usage(and the cpu utilization
metrics derived from them) are now calculated as the rate of the corresponding*.cpu.time
counter between consecutive scrapes, instead of being read from the kubelet'sUsageNanoCores
value. As a result these metrics are not reported on the first scrape after startup.
To restore the previous behavior, run the collector with
--feature-gates=-receiver.kubeletstats.cpuUsageScrapeBased. - (Contrib)
receiver/sqlserver: Removeserver.addressandserver.portfromdb.server.top_querylog record attributes
(#50384)
Removeserver.addressandserver.portfromdb.server.top_querylog record attributes as they duplicate the resource-level attributes and cause inconsistency when overridden via a processor. Both attributes are now enabled by default at the resource level. Thereceiver.sqlserver.RemoveServerResourceAttributefeature gate has been removed.
💡 Enhancements 💡
- (Splunk)
splunk_outputs: Hot-reloadsplunk_outputsexporter whenoutputs.confchanges underetc/system/defaultoretc/system/local. (#8057) - (Splunk)
receiver/splunk_inputs: Reconcile TA input stanzas independently during configuration reloads. (#8092)
Unchanged TA input receivers remain running while only added, removed, or changed stanzas are rebuilt. - (Core)
pkg/pdata: avoid allocations in WriteInt64 and WriteUint64 (#15629) - (Contrib)
extension/opamp: Add an opt-inreports_raw_configsetting to additionally report the raw, unexpanded configuration alongside the effective configuration (#44341)
Whenreports_raw_configis enabled (default: false, and requires the
reports_effective_configcapability), the extension reports the raw
configuration as authored, before environment variable and other provider
references are expanded, under therawkey of the effective config map. The
fully expanded effective configuration is unchanged and remains under the
""(empty) key. This is disabled by default because raw configuration files
may contain secrets written directly into them. Values sourced from provider
references such as${env:TOKEN}retain their unexpanded form in the raw
configuration, so they are not exposed, and fields using types meant for
opaque information (such asconfigopaque.String, commonly used for password
fields) are redacted; consult your components' documentation or source to
verify which fields are automatically redacted. - (Contrib)
processor/resource_detection: Populatehost.typeon GKE in thegcpdetector via the Compute API when thehost.typeresource attribute is enabled. (#50662)
The machine type is not available from the GKE metadata server, so fetching it requires
a Compute API call and thecompute.instances.getpermission (covered byroles/compute.viewer).
If the permission is missing, the attribute is skipped and the failure is logged. Disable the
host.typeresource attribute to avoid the API call. - (Contrib)
receiver/k8s_cluster: Add thek8s.statefulset.pod.availablemetric reporting the number of available pods (StatefulSetStatus.availableReplicas) per stateful set. (#50345) - (Contrib)
receiver/mongodb: Add db.system.version resource attribute (#50710)
The mongodbreceiver now exposes the MongoDB version as a resource attribute (db.system.version).
This follows the pattern used by mysqlreceiver and is disabled by default.
The version is already fetched during connection initialization and is now included in resource attributes. - (Contrib)
receiver/mysql: Add InnoDB redo log lsn and checkpoint-age metrics to the mysqlreceiver. (#50650) - (Contrib)
receiver/mysql: Add MySQL health, query execution time, and active session count metrics. (#50726) - (Contrib)
receiver/mysql: Add disabled-by-default InnoDB history list and active transaction metrics. (#50380) - (Contrib)
receiver/mysql: Add support for AWS IAM authentication (#49044) - (Contrib)
receiver/oracledb: Add thedb.server.top_procedureevent, reporting aggregated stored procedure performance metrics. (#50796)
Derived fromV$SQLgrouped byPROGRAM_IDand joined toDBA_PROCEDURES, with deltas computed
across scrapes. Disabled by default; configure via the newtop_procedure_collectionblock
(max_procedure_sample_count,top_procedure_count,collection_interval). Rows are fetched up to
max_procedure_sample_countand ranked in the collector by elapsed-time delta, so a procedure that
is hot only in the current interval can reach the report even when its lifetime totals are modest.
Correlates withdb.server.top_queryanddb.server.query_samplethrough theoracledb.procedure_id
attribute. - (Contrib)
receiver/oracledb: Addserver.addressandserver.portresource attributes (#50724)
server.addressandserver.portare now emitted by default, so that the monitored instance's network
location is available without extra configuration. When the receiver connects over loopback (for example
localhostor127.0.0.1),server.addressreports the host name of the machine running the collector
rather thanlocalhost, since the monitored instance is co-located with the collector. This matches how
service.instance.idalready resolves its host, and both attributes now share one resolution path.
host.nameis unchanged.
A target whose port is absent or unparsable now resolvesservice.instance.idtohost:1521/service
instead ofunknown:1521/service. Connection strings with no parseable host at all, such as TNS
descriptors, still reportunknown:1521/serviceand omitserver.address, since the instance's
location cannot be determined.
To stop emitting the server attributes, disable them viaresource_attributes.server.address.enabled: false
andresource_attributes.server.port.enabled: false. - (Contrib)
receiver/postgresql: Report non-relation locks in thepostgresql.database.locksmetric (#49733)
Locks with alock_typeoftransactionid,virtualxid,objectoradvisorywere dropped and are
now reported with an emptyrelation. Those on a transaction ID belong to no database, so they carry
an emptydb.namespace.
This adds data points to a metric that is disabled by default. Every backend holds onevirtualxid
lock, so a sum over this metric grows by about the number of open connections. Check any dashboard or
alert that totals this metric. - (Contrib)
receiver/sqlserver: Add a newdb.server.query_planevent that carriessqlserver.query_planon its own record, so an oversized execution plan no longer risks dropping the lightweight query statistics alongside it. (#50629)
db.server.query_planis disabled by default, and while it is disableddb.server.top_query
keeps carryingsqlserver.query_planexactly as before. Enabling it moves the plan off
db.server.top_queryand onto the new event, joined back viasqlserver.query_hash+
sqlserver.query_plan_hash. It is collected as part of top query collection, so it does nothing
unlessdb.server.top_queryis also enabled. - (Contrib)
receiver/sqlserver: Report a loopback target as the collector's host name in theserver.addressresource attribute. (#49885)
When the receiver connects over loopback (for exampleserver: localhostorserver: 127.0.0.1),
server.addressnow reports the host name of the machine running the collector rather thanlocalhost.
A loopback target is only reachable when the monitored instance is co-located with the collector, so the
collector host's name identifies the instance, whereaslocalhostwould be shared by every monitored host.
This matches howservice.instance.idalready resolves its host, and the two now share one resolution
path, so they cannot disagree.host.nameandservice.instance.idare otherwise unchanged, including
thehost\instanceform used for a named instance. - (Contrib)
receiver/sqlserver: Add thedb.server.top_procedureevent, reporting aggregated stored procedure statistics. (#50799)
Reports per-scrape deltas on cumulative stored procedure statistics, ranked by the elapsed time
each procedure accrued since the previous scrape. Disabled by default;
configure via the newtop_procedure_collectionblock (max_procedure_sample_count,
top_procedure_count,collection_interval). The event is throttled by its own
collection_interval(default60s) rather than the receiver's global one, which also sets the
window the deltas cover. Candidates are pre-filtered to procedures that actually ran within that
window, rather than by lifetime totals, so the sample reflects recent activity instead of being
skewed by long-lived plans. Correlates withdb.server.top_queryanddb.server.query_sample
through thesqlserver.procedure_idattribute. RequiresVIEW ANY DEFINITION, and reports
sqlserver.procedure.tempdb.spilled_pagesonly on SQL Server 2017 CU3 or later. - (Contrib)
receiver/tls_check: Add a "scrape_all_certs" option to TLS Check Receiver to record metrics for all certificates found on an endpoint or in a file, and a "tlscheck.x509.fingerprint" metric attribute to identify each certificate. (#48520)
This can be useful for monitoring intermediate certificates on an endpoint, or monitoring several CA certificates in a PEM bundle file.
🧰 Bug fixes 🧰
- (Contrib)
exporter/load_balancing: Remove stale Kubernetes endpoints when a relist recovers a missed watch deletion. (#50741) - (Contrib)
exporter/load_balancing: Skip endpoints whoseEndpointSliceconditions.readyis explicitlyfalsein the kubernetes resolver, so traffic is not routed to them. (#50436)
The Kubernetes resolver now excludesEndpointSliceendpoints whoseconditions.readyfield isfalse. To preserve the previous behaviour and keep not-ready endpoints in the routing ring, setpublishNotReadyAddresses: trueon the Service. - (Contrib)
receiver/docker_stats: Stop restarting the docker stats stream on every scrape for containers that have a healthcheck. (#50779)
When stream_stats is enabled, a container with a healthcheck was looked up again on each scrape.
That closed its open stats stream and opened a new one, and logged a warning each time.
The stream is now left open if one is already running. - (Contrib)
receiver/oracledb: Format theoracledb.plan.first_loadandoracledb.plan.last_loadattributes ondb.server.top_queryevents as ISO 8601 UTC timestamps, consistent withoracledb.query.startedandoracledb.session.started, instead of Oracle's native non-standard format. (#50882) - (Contrib)
receiver/oracledb: Qualify dictionary joins byCON_IDon CDB-root connections so procedure metadata is attributed to the correct container. (#50797)
DBA_*views only expose the connected container whileV$views report every container, and
object ids are unique only within a container. From a CDB root,db.server.top_queryand
db.server.query_samplecould therefore report a wrong or emptyoracledb.procedure_nameand
blocked-object owner/name, and merge procedure execution counts across PDBs. These events now read
CDB_PROCEDURES/CDB_OBJECTSmatched onCON_IDwhen the grants for those views are present.
The grants are probed once at startup; when they are missing the receiver warns and keeps using the
DBA_*views, so no existing deployment needs new grants to keep working. Non-CDB and direct-PDB
connections are unchanged. - (Contrib)
receiver/oracledb: Format theoracledb.plan.first_loadandoracledb.plan.last_loadattributes ondb.server.top_queryevents as ISO 8601 UTC timestamps when connected to a CDB root, matching the fix already applied to the non-CDB query path. (#50951) - (Contrib)
receiver/postgresql: Fixpostgresql.table.sizeto report total disk space used by a table, including its indexes and TOAST data (#50914) - (Contrib)
receiver/postgresql: Disabling a per-table or per-index metric now also skips the query that fed it, instead of still running the query and discarding the result. Whenpostgresql.table.countis the only enabled table metric, it is now satisfied with a cheapCOUNT(*)instead of the full per-table query. (#49083) - (Contrib)
receiver/postgresql: Guard top-query collection against pg_stat_statements entries whose database has been dropped (#45713)
When a database is dropped while its statistics linger in pg_stat_statements,
the top-query row surfaces with a nil db.namespace, which panicked on a string
type assertion in collectTopQuery. The pg_database join is now an INNER JOIN so
such rows are excluded at query time, and the scraper skips any row with a nil
db.namespace as a defense-in-depth guard against re-triggering the panic. - (Contrib)
receiver/postgresql: Collect query plans for top queries that useEXTRACT(field FROM ...)or a typed literal such asinterval '1 day'ortimestamp with time zone '2024-01-01'(#50670)
TheEXTRACTcase requires PostgreSQL 14 or later. - (Contrib)
receiver/prometheus: Only convert exemplartrace_idandspan_idlabels that are valid IDs, and keep the rest as filtered attributes (#50598)
Atrace_idorspan_idlabel with an invalid length was previously zero padded
or truncated before being stored in the exemplar. This could create an ID that
the sender never wrote, while the original value was lost. The receiver now
converts only valid IDs with the expected OpenTelemetry width and preserves an
invalid value unchanged as a filtered attribute. - (Contrib)
receiver/receiver_creator: Log configuration annotations are no longer applied to subsequently discovered pods (#50818) - (Contrib)
receiver/vcenter: Skip vSAN entities that report an emptySampleInfoinstead of failing the entire scrape cycle. (#47917)
The vSAN performance API returns an emptySampleInfowhen an entity has no recent
performance data (for example a freshly provisioned cluster, or while the vSAN
performance service is temporarily unavailable). Previously this produced a timestamp
parse error that aborted collection of all vcenter metrics for that scrape cycle.
Docker Image Manifests:
- Linux (amd64, arm64, ppc64le) and Windows (2019 amd64, 2022 amd64):
quay.io/signalfx/splunk-otel-collector:0.161.0- digest:
sha256:3936ffd07bcbcec93b39852913c2502742aeda6434afb9824aaf0d6329402aee