Agent
Prelude
Released on: 2026-10-30
- Please refer to the 7.85.0 tag on integrations-core for the list of changes on the Core Checks
Upgrade Notes
-
For the Oracle integration, the minimum supported version of an externally installed Oracle client is now Oracle 19c. This applies to instances configured with
oracle_client: true(or its deprecated aliasesinstant_client: trueanduse_instant_client: true), as well as instances that settns_adminortns_alias, which also require an external Oracle client. Upgrade the Oracle client on hosts running the Agent to at least version 19c before upgrading the Agent. -
On Windows,
dd-procmgr-serviceis now installed and configured to run asLocalSysteminstead of the Agent user account. The installer no longer disables the service whenDDAGENTUSER_PASSWORDis omitted on upgrade. -
The 75 deprecated CIS Kubernetes 1.5.1 rules scoped to Kubernetes nodes are no longer shipped or evaluated, and stop producing findings. They covered control plane and worker node file permissions and ownership, and the command line flags of
kube-apiserver,kube-controller-manager,kube-scheduler,etcd,kube-proxyandkubelet(controls 1.1.x, 1.2.x, 1.3.x, 1.4.x, 2.x, 3.2.1, 4.1.x and 4.2.x). They were marked deprecated in March 2024 and reportedskippedon EKS, GKE and AKS, where the control plane files they read are not present on the node.Kubernetes node posture is now evaluated from the node configuration the Agent exports as a
kubernetes_master_node,kubernetes_worker_node,aws_eks_worker_node,gcp_gke_worker_nodeorazure_aks_worker_noderesource, against the CIS Kubernetes 1.9.0, CIS Amazon EKS, CIS GKE and CIS AKS benchmarks. Dashboards, monitors and suppressions keyed on acis-kubernetes-1.5.1-*rule ID need to be repointed at the equivalent rule in those benchmarks. -
AWS Lambda MicroVM lifecycle and heartbeat metrics now use the
aws.lambda.microvm.enhanced.*namespace instead ofaws.lambda.enhanced.microvm.*. Update any dashboards, monitors, or metric queries that use the previous names.
New Features
-
Added
k8seventsreceiver,kafkareceiver, andhttpcheckreceiverreceivers, anddeltatorateprocessorprocessor to the Datadog OpenTelemetry Collector (DDOT) manifest, enabling collection of Kubernetes events, telemetry transported over Kafka topics, HTTP health check status, and delta-to-rate metric conversion in standalone DDOT deployments. -
Add a Private Action Runner action that creates a compressed DogStatsD context dump in the Agent's runtime directory and returns its path for subsequent remote diagnostics.
-
Add a
gpu_mig_profiletag to GPU metrics. On a MIG instance it carries the NVIDIA MIG profile name of the device's GPU instance, lowercased, with+written as_(1g.35gb,1g.24gb_me,1g.24gb-me,4g.96gb_gfx), for every MIG instance regardless of how it was allocated (DRA, device plugin, or idle). Like the other device tags it is set on every GPU: devices that are not MIG instances, including MIG-enabled physical cards, carrynone. The profile is read from the device's own NVML name and needs no additional privileges. On drivers whose device names do not carry it, the agent falls back to the GPU instance handle, which requires a privileged agent; if that is unavailable the value isunknownand the reason is logged. -
The Agent now reports the state of each process it supervises (
starting,running,crashed,failed, and so on) as theruntime.procmgr_process_statemetric, tagged by process and state.Previously only a boolean
runtime.procmgr_process_runningwas sent, so a process that was deliberately stopped could not be told apart from one that was crash looping. -
Added four new configuration settings that override the global
log_levelfor a single Agent process:security_agent.log_level(DD_SECURITY_AGENT_LOG_LEVEL),process_config.log_level(DD_PROCESS_CONFIG_LOG_LEVEL,DD_PROCESS_AGENT_LOG_LEVEL),apm_config.log_level(DD_APM_LOG_LEVEL) andsystem_probe.log_level(DD_SYSTEM_PROBE_LOG_LEVEL). They default to an empty string, meaning no override. These per-Agent keys allow a distinct log level to be kept for each Agent process when configuration streaming makes the core Agent the source of truth for configuration. Because the core Agent streams them, each Agent's log level also becomes reconfigurable at runtime. -
Added a new
container_image_annotations_as_tagsconfiguration option that maps container image OCI annotations to tags. The resulting tags are attached to container image entities (appearing on the Container Images page) and are also propagated to the containers using the image, so they apply tocontainer.*metrics. Container image annotations (for example, thecontainerd.io/snapshot/nydus-*annotations) are exposed by the Containerd and CRI-O workloadmeta collectors, enabling fleet-wide tracking of alternative image formats such as Nydus. This option is not supported with the Docker runtime, which does not expose OCI image annotations. -
Capabilities monitoring now reports which capabilities a process used through checks that always target the initial user namespace, in the
capabilities.attempted_host_usernsandcapabilities.used_host_usernsevent fields and the matchingcaps_attempted_host_usernsandcaps_used_host_usernsprocess fields. Those capabilities stop being granted once the workload runs in its own user namespace, so they identify what would break when enabling user namespaces for a Kubernetes pod. This requiresevent_monitoring_config.capabilities_monitoring.enabled. -
CWS now captures the AWS credentials served by the EKS Pod Identity Agent, in addition to those served by the instance metadata service. The access key ID of a workload using EKS Pod Identity is attributed to the process that requested it, and the new
imds.credential_sourcefield reports which endpoint served animdsevent, eitherIMDSorEKS_POD_IDENTITY. The endpoint addresses can be changed with the newruntime_security_config.eks_pod_identity_ipv4andruntime_security_config.eks_pod_identity_ipv6settings, and setting one to an empty string disables the capture for that address. -
Add Agent Health issue detection for sustained payload drops reported by Go, Python, and Java DogStatsD clients using Unix domain sockets. Detection is enabled by default and can be disabled with
dogstatsd_client_drop_detection.enabled: false. The drop-ratio threshold defaults to 1% and can be configured withdogstatsd_client_drop_detection.dropped_ratio_threshold. Each issue provides client-specific remediation and resolves after the Agent observes sustained recovery. -
Enable basic Network Path Dynamic Tests by default in end-user-device mode. The Agent selects up to 20 eligible paths per device after an initial five-minute window and in each subsequent hour. Set
network_path.connections_monitoring.eudm_basic_tests_enabledtofalseto disable this behavior. The number of paths considered for selection can be adjusted withnetwork_path.connections_monitoring.eudm_basic_candidate_limit. -
Added a "Health Platform" section to
agent status, showing the number of active issues detected by the agent (broken down by severity) and the status of reporting to Datadog: whether it is working, the last successful send time, and the number of bytes sent. Runagent diagnosefor details on individual detected issues. -
Add support for configuring collection intervals on individual Oracle custom queries.
-
Add the
getPodLogsKubernetes private action. -
Private Action Runner: add experimental support for executing Datadog-authored script actions under
com.datadoghq.authoredscripts. The runner resolves versioned action packages from the Datadog catalog, downloads them, and executes their declared entrypoints. -
Adds new
scaleStatefulSetactions to scale statefulsets horizontally and vertically. -
Added a new Windows
powershellcheck that runs admin-allowlisted, read-only PowerShell cmdlets and maps their output objects to metrics and tags. -
The software inventory now reports the running operating system on Windows and macOS, and installed kernel-mode drivers on Windows. These are collected alongside installed applications and are identified by the
osanddriversoftware types.The operating system is reported as a single entry whose version carries the full patch level:
10.0.26100.4652on Windows, including the update build revision, and26.4.1 (25E253)on macOS, including the build that supplemental updates advance.Only OEM and third-party drivers are reported; the drivers that ship with Windows are excluded. Both software-only drivers, such as endpoint-protection filter drivers that are not bound to any hardware device, and driver packages that register no kernel service of their own are included.
-
Single Step Instrumentation can now be configured for particular workloads using a DatadogInstrumentation custom resource, making it easier to onboard new services to APM.
-
Adds support for preserving enrichment metadata on triggered Synthetics Network Path test results.
-
Add the Kubernetes
updateCronJobScheduleprivate action for updating a CronJob's schedule, time zone, and suspension state.
Enhancement Notes
-
The Agent's embedded Python has been upgraded from 3.13.15 to 3.13.17.
-
Add support for the
DD_INSTALL_ONLYflag to the Windows executable installer. Set$env:DD_INSTALL_ONLY = "1"or$env:DD_INSTALL_ONLY = "true"to install the Datadog Agent without starting its services. -
The OTel Datadog exporter now emits
otel.ddot_collector.metrics.runningwhen otel-agent is running standalone (DD_OTEL_STANDALONE=true), mirroring theotel.datadog_exporter.metrics.runningmetric already emitted for the OSS Collector. This metric is not emitted when otel-agent is connected to a core or cluster Agent, since that Agent already reports its own running state. -
Agent performance telemetry now includes a
container_nametag on container restart, termination, memory, and CPU metrics, so each container in an Agent pod can be analyzed separately. Container termination telemetry also includes anexit_codetag to help identify failures. -
APM : Expand the trace agent
/infoendpoint to report the effective obfuscation configuration. -
APM : The Agent no longer adds a
sql.querytag to SQL and Cassandra spans when the tracer did not send one, since it duplicated the span resource. When the tracer sends asql.querytag that differs from the resource, the Agent now keeps an obfuscated copy of that value instead of replacing it with the obfuscated resource. -
OTel mapping code now maps the
container.image.tagsresource attribute to theimage_tagtag, extracting the first element when an array-typed attribute is provided. -
Agents are now built with Go
1.26.10. -
CEL-based
cel_workload_excluderules can now match on Kubernetes labels in addition to annotations. Pod, service, and endpoint labels are exposed aspod.labels,kube_service.labels, andkube_endpoint.labelsrespectively, and are also reachable from container rules viacontainer.pod.labels. -
Add tags to container-lifecycle check events. Pod and container events now include the entity tags in the
dd_tagsfield of the event payload. -
Activity dumps and security profiles now record whether a capability was checked against, and obtained from, the initial user namespace, matching what capabilities events already report. This requires
event_monitoring_config.capabilities_monitoring.enabled. -
CWS: added an optional user-space dispatcher queue for the eBPF ring-buffer event stream. When enabled, events are handed off from the kernel read loop to a byte-bounded queue drained by a dedicated goroutine, decoupling kernel reads from user-space processing. It is disabled by default; when disabled, events are handled inline as before.
-
The
datasecuritycheck now also scans Postgresjsonb,hstore,bytea,uuid,inet,cidr, andmacaddrcolumns, as well as arrays of any supported type. -
The
datasecuritycheck now scans Postgresjson,xml, boolean, integer, and floating-point columns, in addition to text columns. -
All
datasecuritycheck scanning rule fields other thanidandlicenseare now scrubbed from flares,agent configcheck, and the reported integration configuration. -
The
datasecuritycheck scanning rule patterns are now scrubbed from logs, flares,agent configcheck, and the reported integration configuration. -
OTel Agent: the
ddprofilingextension can now send profiles directly to a trace agent listening on a unix socket, via theunix_socketconfig key or theDD_OTELCOLLECTOR_INTERNAL_PROFILING_UNIX_SOCKETenvironment variable. This matchesinternal_profiling.unix_socket, already supported by the other Agent processes, and makes the OTel Agent profileable in environments that expose a socket rather than HTTP egress to the profiling intake. The setting has no effect on Windows, where the Agent does not serve an APM unix socket; profiles are sent over HTTP there instead. -
Health Platform: the Docker socket health check now also reports a
docker_socket_unavailableissue when the socket exists but cannot be reached for a reason other than a permission error, such as the Docker daemon not running or a stale socket file. Previously such failures were silently ignored. The existing permission-denied detection is unchanged. -
Health Platform:
docker_socket_permissionanddocker_socket_unavailableissue ids are now scoped per host and by the specific set of affected sockets, so that a fleet of hosts hitting the same failure is no longer collapsed into a single reported issue. -
The Agent now resolves Dynamic Resource Allocation GPU devices to their real NVML UUID on the node, so GPU metrics keep their pod tags on DRA clusters -- including MIG instances, whose pool-scoped device names (
gpu-0-mig-1g18gb-19-0) could not previously be matched to a device. Resolution reads the claim's CDI specification and, for MIG, the kernel'smig-minorstable. The host CDI directory (/var/run/cdi) must be visible to the Agent container; without it the Agent falls back to the previous behavior. This also fixes GPU metrics losing their pod tags for every container on a node as soon as a single MIG device was allocated through DRA: container-to-device matching previously gave up entirely when any MIG device was present, which also affected containers holding whole cards. -
Automatically add the
dynamo_graph_deploymenttag to Kubernetes pod and container metrics from thenvidia.com/dynamo-graph-deployment-namepod label. -
Add a
hostidhost tag on macOS and Windows wheninfrastructure_modeisend_user_device. The tag currently uses the device serial number and is omitted when that value is unavailable. -
Expose a new metric
kube_apiserver.storage_objects, tagged byresource, that reports the number of objects of each resource type (including custom resources) currently held in the Kubernetes API server's underlying storage. -
Added support for the network check to read conntrack stats from the
/proc/net/stat/nf_conntrackprocfile via the configuration keyuse_conntrack_procfileon Linux systems. -
Flares now include a
certificates/tls_roots.txtfile describing how the agent resolves trusted TLS root certificates on the host: theSSL_CERT_FILEandSSL_CERT_DIRenvironment variables, the status of the system certificate bundle files, and a listing of the system certificate directories. This helps troubleshoot TLS certificate trust issues. Certificate file contents are not included in the flare. -
GPU: emit NVIDIA XID errors as events. When
gpu_monitoring.driver_events_enabledis enabled, include additional diagnostic information sourced from NVIDIA driver kernel logs. -
The
kubernetes_state_corecheck now tagskube_horizontalpodautoscaler_*metrics withkube_ownerref_kindandkube_ownerref_namewhen the HorizontalPodAutoscaler has an owner reference, for example one managed by KEDA'sScaledObject/ScaledJobor another custom controller. This makes it possible to identify and filter HPA metrics by the resource that controls them. No configuration is required, and this applies regardless of whether the cluster serves theautoscaling/v2orautoscaling/v2beta2API. -
Agent Health configuration errors now explain what type of value a setting needs, what type it received, and its default when known.
-
The host system info payload now includes the macOS
computer_namefield (the user-assigned device name from System Settings > Sharing), alongside the existing serial number and other hardware identity fields. -
On macOS, network connections collected by Cloud Network Monitoring are now tagged with
interface_nameandinterface_typewhen the connection is associated with an interface.interface_nameis the interface name, such asen0orutun3.interface_typeis a type name such asethernet_csmacdforeninterfaces, including Wi-Fi,tunnelfor interfaces such asutun3, orsoftware_loopbackforlo0. -
Enable
multi_region_failover.logs_service_allowlistconfiguration via Remote Config. -
The network check now collects mlx5_core RoCE/PFC ethtool counters on hosts with GPU monitoring enabled (
gpu.enabledindatadog.yaml). This adds per-priority PFC counters taggedprio:<0-7>(pause, pause duration, pause transitions, ECN marking, and buffer/congestion discards), link-level 802.3x pause counters, and device-wide PCIe health, FEC/cable health, pause storm, and module health counters. Pause durations are reported in microseconds.gpu.enabledis sufficient on its own -- the instance optioncollect_ethtool_metricsis not required, and enabling GPU monitoring does not turn it on. The two settings gate independent sets of counters: a host with onlygpu.enabledemits the RoCE counters above and nothing else new, and a host withoutgpu.enabledemits an unchanged set of metrics. -
Add
anomaly_detection.detectors.log_pattern_extractor.max_patternsto limit the total number of tracked log patterns across tag groups. The default is 3,000. At capacity, the least recently seen existing pattern is evicted along with its derived metric state. Non-positive values use the default, and existing per-group safeguards still apply. -
Reduce process collection overhead on Linux hosts with zombie processes by avoiding procfs reads for data that is unavailable after process exit.
-
The Private Action Runner now allows the read-only Datadog Agent diagnostic actions
getStatus,getConfig, andgetDiagnoseby default on node agent flavors. To opt out, setprivate_action_runner.default_actions_enabledtofalseindatadog.yaml. -
Enable split mode by default for the Private Action Runner on Linux and Windows host installations. Split mode requires the process manager and remains disabled by default in container deployments. Set
private_action_runner.split_enabledtofalseto retain monolithic execution on hosts. -
Apply configured global
mask_sequencesrules to logs returned by the KubernetesgetPodLogsprivate action. -
Flares now include
procmgr/state.json, a dump of the processes supervised bydd-procmgrd: their state, PID, spawn profile, user, restart count and last exit code, plus which supervisor owns each migratable agent service. The file is written even whendd-procmgrdcannot be reached, recording why, so a flare distinguishes a supervisor that is down from one that was never queried. -
On Windows, the flare's
servicestatus.jsonnow includes thedd-procmgr-servicesupervisor. Agent processes supervised bydd-procmgrdleave their legacy service registered and stopped, so previously a flare from a healthy host showed stopped services with no record of the service actually running them. -
dd-procmgr: Expose spawn profile and intended user in list and describe output. Describe also reports runtime_user for running processes.
-
Limit Kubernetes private action Pod logs to 9 MiB.
-
While the
nvidia.com/mig.config.statenode label reports an in-flight MIG reconfiguration (pending/rebooting, as written by nvidia-mig-manager), the Agent now releases NVML and pauses GPU collection, so the reconfiguration's GPU reset is no longer blocked by the Agent. Collection resumes when the label reaches a terminal state. -
Container image SBOMs now carry a
datadog:image:Createdproperty on their root component, holding thecreatedfield of the OCI image config in RFC 3339 form. -
Added the
datadog.agent.sbom_entities_sentagent telemetry counter, reporting the number of SBOM entities sent by the agent, bytype,status,heartbeatandenriched, the latter telling apart the SBOMs carrying runtime usage properties. -
Added the
datadog.runtime_security.sbom_resolver.enriched_sbom_forwardedanddatadog.runtime_security.sbom_resolver.enriched_sbom_forward_droppedmetrics, reporting the number of runtime enriched SBOMs that the runtime security SBOM resolver forwarded to the core agent, and the number it had to drop because the consumer could not keep up. -
Bumped the Security Agent policies to v0.85.0
-
Report enhanced CPU usage and CPU limit metrics for AWS Lambda MicroVMs even when cgroup CPU statistics are unavailable.
-
System-probe configuration issues now explain which setting has the wrong type, how to fix it, and its default when known. Invalid types in sensitive settings are no longer hidden by masking before validation.
-
Add a
conf.d/openmetrics.d/agent_stats.yaml.exampleconfiguration file that collects the Agent's internal telemetry from its OpenMetrics-style/telemetryendpoint, mirroring the metrics collected by the deprecatedconf.d/go_expvar.d/agent_stats.yaml.example. -
Add internal telemetry equivalents for Agent expvars that previously had none:
aggregator__flush_timeandaggregator__flush_count(tagged byflush_type) for the per-flush timings and counts,aggregator__number_of_flushfor the total number of aggregator flushes, andscheduler__queue_size(tagged byinterval) for the number of checks scheduled in each job queue. -
The Agent's
/telemetryendpoint now exposes all of the Agent's internal telemetry. A small number of metrics -- includingpoints__sent,points__dropped, andha_agent__integration_runs-- were previously held in a separate registry that the endpoint did not serve, so they were only visible asdatadog.agent.*metrics. They are now available on/telemetry(and in thetelemetry.logflare file) as well, in addition to still being submitted asdatadog.agent.*metrics. -
The forwarder's point counts are registered in the Agent's internal telemetry as
points__sentandpoints__dropped, so those are the names they appear under when scraping the/telemetryendpoint and in thetelemetry.logflare file. Thetelemetrycore check continues to submit them to Datadog under their original names,datadog.agent.point.sentanddatadog.agent.point.dropped, so existing dashboards and monitors are unaffected. -
On Windows, when
process_manager.enabledis true and the fleet installer writesprocesses.d/datadog-agent-process.yaml, the process-agent is supervised by dd-procmgr instead of the legacydatadog-process-agentWindows service. When the processes.d definition is absent or process manager is disabled, the Agent continues to start process-agent via SCM when process collection is enabled. The same applies to DDOT and the private action runner. Ifdd-procmgr-servicedoes not start, the Agent falls back to the legacy Windows service rather than leaving the workload unsupervised. -
On Windows, the core Agent now confirms that dd-procmgr-service has actually started before it skips a legacy Windows service that dd-procmgr is configured to supervise. If the process manager does not start, the Agent starts the legacy service instead, so the OpenTelemetry Collector (datadog-otel-agent) and the Private Action Runner (datadog-agent-action) keep running rather than being left unsupervised. This applies to installs where
process_manager.enabledis true and the fleet installer has written a matching process definition underprocesses.d. It does not cover the Private Action Runner in split mode (private_action_runner.split_enabled), which depends on dd-procmgr to run. -
On Windows, when
process_manager.enabledis true and the fleet installer writesprocesses.d/datadog-agent-sysprobe.yaml, system-probe is supervised by dd-procmgr instead of the legacydatadog-system-probeWindows service. When the processes.d definition is absent or process manager is disabled, the Agent continues to start system-probe via SCM when a system-probe module is enabled. Ifdd-procmgr-servicedoes not start, the Agent falls back to the legacy Windows service rather than leaving system-probe unsupervised. Settingsystem_probe_config.externalkeeps dd-procmgr from starting system-probe at all, matching the Agent behavior of leaving an externally managed system-probe alone. -
Process collection now reports, for each parent process, the number of zombie child processes it currently has and the net rate at which it creates or reaps them. Individual zombie processes continue to be collected. The
datadog-agent processchecks processoutput shows these values asZombie ChildrenandNet Rate.
Deprecation Notes
- When config streaming is enabled,
DD_*environment variables set directly on a remote Agent process (trace-agent, process-agent, security-agent, system-probe) are ignored: the core Agent is the source of truth and its streamed snapshot replaces the remote Agent's local environment layer. Set those variables on the core Agent instead. Remote Agents log a warning naming any setting a local environment variable tried to set. - Collecting the Agent's own internal telemetry with the
go_expvarcheck is deprecated.conf.d/go_expvar.d/agent_stats.yaml.exampleis marked as deprecated and will be removed in a future release; use the newconf.d/openmetrics.d/agent_stats.yaml.exampleinstead, which collects the equivalent metrics from the Agent's/telemetryendpoint. Thego_expvarcheck itself is not deprecated and remains supported for instrumenting your own Go applications.
Security Notes
- APM : The
db.statementanddb.query.texttags of SQL and Cassandra spans are now obfuscated, like the span resource. - Update Agent Data Plane to 1.7.2 to reject server certificate chains containing compromised eMudhra public keys for direct and proxied HTTPS connections, including FIPS builds.
- APM: The trace-agent now validates the index mapping of the DDSketch distributions it receives on the client stats intake, and rejects mappings whose bucket bounds cannot be re-mapped safely. A crafted payload could previously corrupt or crash the aggregation of client stats. Affected distributions are dropped while the request counts are kept.
- Data security PostgreSQL scans no longer log or report raw PostgreSQL error messages, which could contain scanned values. Server errors are reported by their SQLSTATE code and client errors by a generic message.
- Fix a memory-exhaustion vulnerability in the DDOT collector's
fluentforwardreceiver: a malicious message declaring a huge entry count could trigger an out-of-memory crash. Entry counts are now capped before allocation.
Bug Fixes
- APM : The
ignore_resourcesoption of thedatadogconnector in the Datadog Distribution of OpenTelemetry Collector (DDOT) now matches resource names as regular expressions, as documented, instead of exact names. Patterns are unanchored; use^and$to match a full resource name. - APM: Disable client side stats obfuscation when a non-default SQL obfuscation config is used.
- APM : Fix the telemetry proxy's in-flight memory accounting. Payload memory is now reserved before the payload is processed and is always released when a payload is dropped, so the proxy no longer loses capacity over time. Processing a payload is also faster and allocates less.
- Avoid modifying package-owned AppArmor base profiles when APM injection can use distro-provided drop-ins, preventing prompts during future AppArmor upgrades.
- Bump the embedded GoSNMP library to v1.45.0 to fix SNMP device scans failing when devices return zero-length encoded OIDs.
- Fix Cross-Org Agent Telemetry (COAT) undercounting the installed base for services supervised by dd-procmgr:
runtime.agent_service_installedis now reported for a service that dd-procmgrd supervises even when no install marker path matches the on-disk layout, matching the existing behavior for services supervised by systemd or the Windows SCM. Previously a service could reportruntime.agent_service_management_mode{mode:procmgr}whileruntime.agent_service_installedstayedfalse, which skewed procmgr adoption rates computed against the installed base (most visibly for DDOT on Windows). - APM: The container tags hash returned to tracers in the
Datadog-Container-Tags-Hashheader of the/infoendpoint no longer includes thekube_replica_setandkube_jobtags. Their values change on every rolling deploy or job run, which made the hash, and the Data Streams Monitoring pathway hashes tracers derive from it, change on every deploy. Their stable parent workloads,kube_deploymentandkube_cronjob, are hashed instead. The tags themselves are unchanged. - Fixed a memory leak that occurred when the containerd socket was unreachable. Each failed attempt to create a containerd client leaked a gRPC connection that was never closed and could not be garbage collected, causing the Agent's memory usage to grow until it was restarted.
- Fix a crash when generating the SBOM of a CRI-O image whose config lists fewer history entries than layers.
- CSPM: XCCDF compliance checks no longer leak a goroutine every time the
oscap-ioprocess exits, which made memory grow over time. - CSPM: On Linux hosts, the Ubuntu 22.04 and 24.04 benchmark rules whose checks run
ufw,nft,iptablesorip6tablesnow report the host firewall, where they failed on every host since 7.76.0.oscap-iokeeps theCAP_NET_ADMINandCAP_NET_RAWcapabilities for them. It keeps only the capabilities the agent holds, so XCCDF rules also run when the agent lacks one, such asCAP_SYS_CHROOTunder CRI-O. - CWS:
system-probeno longer starts a goroutine for every kernel event to track network namespaces, which caused goroutine and memory spikes on busy hosts. - The standalone DDOT Collector (
DD_OTEL_STANDALONE=true) no longer fails to start in Kubernetes withunable to reliably determine the host namewhenDD_HOSTNAMEis not set. The trace agent now uses the hostname resolved by the collector, and on EC2 nodes the collector falls back to the EC2 instance ID whenDD_KUBERNETES_KUBELET_HOSTis not set. - Health Platform: the Docker socket permission health issue now correctly describes a permission-denied error connecting to the Docker socket, and its remediation instructs adding
dd-agentto thedockergroup. Previously the issue's title, description, and remediation script described an unrelated Docker log-tailing ACL problem. - Release the executable that Dynamic Instrumentation opens to extract its symbols as soon as the extraction fails, rather than when the garbage collector reclaims it. An open descriptor keeps the file's blocks allocated, so a container image deleted in the meantime held disk space in system-probe.
- Fix Linux FIPS Agent upgrades failing to report their state or start a subsequent upgrade after removing the previous package-manager installation.
- Fix the forwarder health check (and the readiness probe that depends on it) reporting the Agent as unhealthy when
dd_urlpoints at a customer-specific Multi-Region Failover alias, such as<customer>.mrf.datadoghq.com. API keys were validated againstapi.datadoghq.comregardless of the organization's site, so keys from organizations on other sites were reported as invalid. API keys for these aliases are now validated against the alias itself. - Fix the Agent's internal profiling service name when running as a Cluster Check Runner (deployed as
datadog-agent-cluster-worker). Profiles are now reported underservice:datadog-agent-cluster-workerinstead ofservice:datadog-agent, so they can be filtered in the Profile Explorer without also filtering onpod_name. Profiles collected before this change remain under the old service name. Node Agent profiling is unaffected. - Fixed repeated config warnings when
infrastructure_modeis set tocloud_cost_only. The Agent no longer looks up the non-existentintegration.cloud_cost_only.allowedkey. Check tagging viaintegration.cloud_cost_only.taggedis unchanged. - Prevent the Fleet Automation installer daemon from hanging indefinitely when its Linux or macOS package-state subprocess does not exit.
- Validate configuration settings, including resolved secrets, without exposing configured values in Agent Health issues.
- Fix Data Streams Monitoring Kafka actions sent through Remote Configuration passing numeric fields such as
partition,start_offsetandn_messages_retrievedto thekafka_actionscheck as strings, which made those actions fail. - On Windows, fixed a crash of
system-probewhen the service is stopped while Network Performance Monitoring is collecting connections. The collection could outlive the shutdown of the HTTP monitoring interface and send on a closed channel, terminating the process before theddnpmandddprocmondrivers were stopped. - On Windows, fixed a deadlock that could prevent
system-probefrom stopping when Universal Service Monitoring is enabled. Shutting down the driver interface could leave the ETW reader blocked, so the service stop never completed and the service was killed once its stop timeout expired. - On Windows,
system-probeno longer waits for the HTTP transaction buffer to run dry before stopping. On a host with sustained HTTP traffic that could hold up the service stop for as long as requests kept arriving. - Fix a panic in the SQL obfuscation cache used by Python checks, such as Database Monitoring checks.
- Fix Oracle custom queries staying stuck with
sql: database is closedafter a connection loss when the check is connected to a PDB. The custom queries connection is now reset on check teardown, and the check reconnects when a custom query fails with a connection error, so custom queries recover on their own without restarting the Agent. - Fixed a crash in the OTLP metrics pipeline when an exponential histogram data point has bucket boundaries that cannot be represented as
float64, either becausescaleis small enough that2^(2^-scale)overflows or because the bucketoffsetplaces a populated bucket beyond thefloat64range. Converting such a data point into an Agent sketch used to panic in an exporter goroutine and bring the whole process down; the data point is now dropped with a debug log, like any other unconvertible point. Data points carrying only a zero count are unaffected and still reported, whatever theirscale. - Fix an issue where metrics with no hostname (e.g. serverless or task-scoped metrics submitted with an empty
host) incorrectly carried an emptyhostresource in the metrics payload. This could cause such metrics to be associated with a nonexistent host in Datadog. - Fix incorrect warning logs about unknown configuration settings when using system-probe.
- On Windows, the Agent now reports the operating system's major version, minor version, and build number from the
CurrentVersionregistry key rather than from the file version resource ofkernel32.dll. This avoids reporting an incorrect operating-system build on newer Windows releases. For example, a host runningWindows 11 Pro 10.0 Build 26200was previously reported asWindows 11 Pro 10.0 Build 26100. - Fixes intermittent Fleet Automation config experiment promotion failures on Windows when the experiment directory is temporarily in use or not empty.
- Fix Windows installation on a read-only domain controller when domain controller discovery selects a writable controller in another site.
- gpu: fix missing per-link NVLink error counters on NVIDIA Hopper and newer GPUs. The Agent now reports
gpu.nvlink.errors.replay,gpu.nvlink.errors.recovery,gpu.nvlink.errors.crc.flit, andgpu.nvlink.errors.eccusing the Hopper per-link error counter APIs, restoring coverage that legacy NVML field IDs no longer provide on these architectures. agent integration install --local-wheelnow resolves the check name for wheels published under thedd-internal-first-party namespace, so their configuration files are copied to the rightconf.ddirectory instead of failing the install.agent integration freezealso lists them.- Agent Health no longer reports misleading configuration type errors for unresolved secret references. Resolved secrets and other configuration values are still validated normally.
- The
kubernetes_state.cronjob.completeservice check now reports the status of the most recently started Job of a CronJob. Before, it picked the Job with the highest numeric name suffix, so a manually created Job (for example fromkubectl create job --from=cronjob/...or Argo CD) could hide the result of later scheduled runs. - Fixed an issue where changing the Multi-Region Failover logs settings could block indefinitely after the logs pipeline restarted (for example when switching from TCP to HTTP), which stopped Remote Configuration from applying further Multi-Region Failover updates and hung runtime settings changes.
- Fixed noisy
ERROR-level permission-denied logs emitted by the network tracer when reading the network namespace of a zombie process. Zombie PIDs are now skipped before the read is attempted. - The Go network check now applies
excluded_interfacesandexcluded_interface_reto thesystem.net.iface.*metrics (mtu,tx_queue_len,up,num_tx_queuesandnum_rx_queues). Previously these metrics were submitted for every interface under/sys/class/net, including excluded ones. - The Go network check no longer submits
system.net.iface.*metrics for regular files under/sys/class/net. Previously, on hosts with the bonding driver loaded,bonding_masterswas reported as an interface, withsystem.net.iface.up,system.net.iface.mtuandsystem.net.iface.tx_queue_lenalways set to 0. - OTLP: a histogram or exponential histogram data point whose buckets hold more than 268,431,360 observations together is no longer converted into a Datadog distribution. Such a point used to be converted anyway: every 65535 observations took a sketch bin of their own, enough to exhaust the Agent's memory, and past that count the lower percentiles were silently distorted. For cumulative histograms, the observations counted are the difference from the previous point, not the lifetime total. A warning naming the metric is logged the first time one of its points is dropped. Explicit bounds histograms are only checked in the
distributionshistogram mode, and keep their aggregation metrics; exponential histograms become distributions in every mode, and are dropped whole, aggregation metrics included. - OTLP: exponential histogram data points flagged as having no recorded value are now skipped, as explicit bounds histogram data points already were.
- OTLP: when a cumulative histogram's count goes down between two points without a new start timestamp, the later point no longer reports a meaningless count: its
.countand.sumaggregation metrics are skipped, as after any other reset, and its distribution keeps the count of the observations it holds. On amd64 hosts,.countused to report a value close to 1.8e19. - APM: OTLP: Fixes a bug where invalid OTLP traces wouldn't be normalized before stats were calculated in DDOT.
- PAR now exits when an API key is rejected during enrollment instead of retrying indefinitely.
- Fix missing action execution traces in split-mode Private Action Runner by starting the executor's telemetry sender and flushing completed spans on shutdown, including idle shutdown.
- The procmgr supervision telemetry no longer reports a migratable service as unsupervised when
dd-procmgrdstops answering. The per-service supervisor checks shared a timeout with the calls todd-procmgrd, so an unresponsive daemon consumed the whole budget and everysystemctl is-activecheck failed before it could run, reporting no supervisor for services systemd was still running. - Fix a process supervised by
dd-procmgrstaying stopped after a configuration change disabled it while it was restarting. Once the configuration re-enables the process,dd-procmgr reloadnow starts it again. Previously reload skipped such a process, and recovering it requireddd-procmgr startor an Agent restart. - When dd-procmgrd cannot deliver the graceful stop signal to a supervised process, it now force-kills the process after a short grace period instead of waiting out the full
stop_timeout(90 seconds by default). - dd-procmgrd keeps answering
dd-procmgr list,describe,statusandconfigwhile a process is stopping. Those commands used to wait on the same lock the stop held for its whole duration, so a slow stop made the daemon look unresponsive even though it was running normally. The same applied to areloadthat restarted a process whose configuration had changed. - On Windows, dd-procmgrd keeps serving IPC after a failed connection accept. A single accept error used to end the accept loop, which stopped the daemon listening on its named pipe:
dd-procmgr status,stopandreloadthen failed until the Agent service was restarted, and the reason was only written to the log once the daemon shut down. The affected pipe instance is now replaced and accepts continue, waiting between attempts up to a ceiling of 5 seconds and logging at error level once the failures stop looking transient. - The kubelet client no longer stays on HTTP after a temporary HTTPS failure at startup. It now retries HTTPS each time a component requests the kubelet client.
- Drop a container image SBOM scan as unsupported when the overlayfs direct scan finds a different number of layer paths than the image has layers. The view of a nydus image merges its layers into one directory, so the scan was retried every hour and failed the same way each time.
- Skip nydus images in the overlayfs direct scan before taking a containerd view. The view of a nydus image shows one tree for all its layers, so the scan failed every hour, or for an image of two layers reported an SBOM with no packages as a success, and each view started nydusd, which can prefetch the whole image.
- The
built_attime reported for a container image is now thecreatedfield of its OCI image config. It was the timestamp of the last layer history entry. An image config may omitcreated, and such an image reports an empty build time. - Fixed SBOM scans that enable the
languagesanalyzers (sbom.host.analyzersorsbom.container_image.analyzers) loggingUnable to collect additional infowarnings withlicense classify error: not implementedfor Python packages and Go modules. Python packages whose metadata names only a license file now carry an empty license list instead of the file path, such asfile:--LICENSE. - The Agent no longer logs
SBOM generation failed for imageat ERROR level for container images that cannot be scanned, such as nydus images. - Fix SNMP device scans for certain devices that reject requests starting at
.0.0by retrying from the.1.0subtree when the initial request fails. - APM: Fixed a potential memory leak in the trace-agent. If a tracer sent very high cardinality payload tags (language, language version, tracer version, endpoint version and service), these would accumulate over the lifetime of the trace-agent. Under normal tracer operation this should never occur.
- APM: Spans with a start time or duration far in the future (for example, from a client with a badly skewed clock, or a broken tracer integration) no longer create trace stats buckets in the future. Previously, such buckets were not flushed until the trace-agent's wall clock reached them, causing memory to accumulate over that entire period, which could look like a memory leak. Future buckets are now clamped to the current time bucket, aligning with the existing behavior of client stats. A debug log is emitted when the clamp occurs.
- Fix the battery check to report every Windows system battery instead of only the first one. On Windows, host aggregate metrics use
system.battery.*.totalnames, while macOS metrics retain their existingsystem.battery.*names. - When
process_config.ignore_zombie_processesis enabled, zombie processes are no longer reported in real-time process collection. Previously, zombie processes on macOS, and processes on Linux that became zombies after being collected, could still appear.
Other Notes
- Add metric origin mapping for the PowerShell integration.
- Register the amazon_vpc_cni, ravendb, and sglang metric origins for Agent-side serialization.
Datadog Cluster Agent
Prelude
Released on: 2026-10-30 Pinned to datadog-agent v7.85.0: CHANGELOG.
Upgrade Notes
- Six CIS Kubernetes 1.5.1 rules evaluated by the Cluster Agent are no longer shipped:
cis-kubernetes-1.5.1-5.1.5(default service account in use),cis-kubernetes-1.5.1-5.2.2through-5.2.5, which read PodSecurityPolicy objects, andcis-kubernetes-1.5.1-5.7.4(resources in the default namespace). On clusters at Kubernetes 1.25 or later, onlycis-kubernetes-1.5.1-5.1.5stops producing findings. Kubernetes removed PodSecurityPolicy in 1.25, so the four PodSecurityPolicy rules have reportedskippedon those clusters. On older clusters that still serve PodSecurityPolicy, the four rules stop producing findings as well.cis-kubernetes-1.5.1-5.7.4requested pods from thepolicy/v1beta1API group instead of the core group, so it has reportedskippedorerroron every cluster since Agent 7.33.0.cis-kubernetes-1.5.1-5.3.2is unchanged.
New Features
- Added opt-in instance-level sharding for cluster checks. When
cluster_checks.instance_sharding_enabledis set totrue, a cluster check config that defines multiple instances (for example, a single file monitoring 100 databases) is split into one config per instance, so instances are spread and rebalanced across cluster-check runners instead of always landing on a single runner. Specific checks can be excluded from this behavior withcluster_checks.instance_sharding_exclude_checks. - Added the
autoscaling.datadoghq.com/force-replicasannotation onDatadogPodAutoscalerobjects to pin the replica count of the target workload during an incident. The count is applied in one step, ignoringspec.constraints, scaling rules and stabilization windows. It is still suppressed by theautoscaling.datadoghq.com/pauseannotation and by thePreviewapply mode. While applied, it is reported by theHorizontalScalingLimitedstatus condition and thedatadog.cluster_agent.autoscaling.workload.force_replicasgauge. - Added the
autoscaling.datadoghq.com/force-resourcesannotation onDatadogPodAutoscalerobjects to override container resources on top of the vertical recommendation during an incident. The value is a JSON list of container resources, in the same format as theDatadogPodAutoscaler, for example[{"name": "app", "requests": {"cpu": "2", "memory": "200Mi"}, "limits": {"cpu": "4"}}]. Only the values that are set are forced; everything else keeps following the recommendation. Forced values are bounded byspec.constraintsand rolled out like a recommendation that raises limits. They are suppressed by theautoscaling.datadoghq.com/pauseannotation and by thePreviewapply mode. While applied, they are reported by theVerticalScalingLimitedstatus condition and thedatadog.cluster_agent.autoscaling.workload.force_resourcesgauge. - Added the
autoscaling.datadoghq.com/pauseandautoscaling.datadoghq.com/force-fallbackannotations onDatadogPodAutoscalerobjects, to act on an autoscaler during an incident without editing itsspec, whatever its owner.pausestops all actions of the autoscaler, andforce-fallbacktriggers the local fallback as if recommendations from Datadog were stale. - The
kubernetes_state_corecheck can now collect Dynamic Resource Allocation objects, reporting accelerator demand and supply askubernetes_state.resourceclaim.count(tagged bystate:pending,allocatedorin_use),kubernetes_state.resourceclaim.pending.age,kubernetes_state.resourceclaim.devices.allocated,kubernetes_state.resourceslice.devicesandkubernetes_state.resourceslice.capacity(tagged bycapacityname). On Kubernetes 1.37+, it also collects DeviceTaintRule objects askubernetes_state.dra.device_taint_rule(tagged bydevicetaintrule,driver,taint_key,taint_effect). Enable it by addingresourceclaims,resourceslicesanddevicetaintrulesto the check'scollectorslist, individually or together; they are not collected by default because theresource.k8s.ioAPI group is absent on most clusters. The check resolves each to the API version the cluster serves. As with other cluster-scoped resources, they are not collected in thenode_kubeletpod collection mode. Usedra_device_classesto restrict collection to specific DeviceClasses (for examplegpu.nvidia.com). Collection requireslistandwatchonresourceclaims,resourceslices, and (on 1.37+)devicetaintrulesin theresource.k8s.ioAPI group; the check registers nothing when the cluster serves no supported version of that group.
Enhancement Notes
- Collect KServe custom resources by default, including inference services, inference graphs, serving runtimes, storage containers, trained models, LLM inference services and configs, and local model resources, when the Cluster Agent has permission to access the
serving.kserve.ioAPI group. - Collect KubeAI
Modelcustom resources by default. - Kubernetes event collection reads the node of a Pod
Scheduledevent from the scheduler's message instead of fetching the Pod from the API server, removing one Pod GET per scheduled pod. - The
datadog-cluster-agent statusoutput has a new "Kubernetes Information" section with the cluster name, cluster ID, distribution, and Kubernetes server version. - The Private Action Runner Helm rollback action now detects the namespace and service account of its rollback Job, so you no longer need to provide them. It also tracks the rollback Job until it ends, and reports Jobs that fail, get stuck, or time out, with the reason.
Deprecation Notes
- Starting with Datadog Cluster Agent 7.86.0, Kubernetes versions older than v1.23 are no longer officially supported. The Cluster Agent keeps running on these versions, but its features are supported on a best-effort basis and might not work as expected. When the Cluster Agent detects such a version at startup, it logs a warning and shows it in the
datadog-cluster-agent statusoutput.
Security Notes
- The Cluster Agent external metrics provider now validates individual metric queries before batching them.
Bug Fixes
- Fix the Cluster Agent flare to collect pprof and goroutine dump data from the correct port (
metrics_port) instead ofexpvar_port. - Fix the Cluster Agent admission controller unintentionally removing custom fields from Kubernetes Pod specifications during mutation.
- Allow workloads selected for Agent sidecar injection to start when their
datadog-secretSecret or a required key is missing. The Cluster Agent skips sidecar injection and annotates the Pod with the reason instead of leaving it inCreateContainerConfigError.