enhancement(dogstatsd): Default ADP dogstatsd pipeline enabled to true#49891
Conversation
Adds exhaustive 21-row truth-table coverage for Enabled(), EnabledInternal(), and enabledDataPlane() against the combinations of use_dogstatsd, data_plane.enabled, and data_plane.dogstatsd.enabled. Refs DataDog/saluki#1334
When data_plane.enabled is on, ADP takes ownership of DogStatsD by default, matching the truth table at DataDog/saluki#1334 (comment). data_plane.enabled still defaults to false, so this is a no-op for users who have not opted into ADP. Refs DataDog/saluki#1334
…d=false Adds applyUseDogstatsdSuppression as a post-load override that forces data_plane.dogstatsd.enabled to false when the global use_dogstatsd master toggle is false. This guarantees the Agent Data Plane — which reads the resolved value via the config stream — skips its DogStatsD source, preserving the truth table's "off everywhere when use_dogstatsd=false" rows. data_plane.enabled is not touched, so non-DSD ADP pipelines (OTLP, etc.) continue to honor their own toggles. Refs DataDog/saluki#1334
Emits a single INFO line summarizing the effective DogStatsD routing decision (off / core-agent / agent-data-plane) and the three toggles that drive it, so operators can confirm their configuration from agent logs. Refs DataDog/saluki#1334
DD_ADP_ENABLED remains honored for back-compat but now emits a single deprecation warning per process so operators discover the replacement settings (data_plane.enabled, data_plane.dogstatsd.enabled). Refs DataDog/saluki#1334
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cb8f0a943f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Removes the sync.Once-guarded deprecation warning for the legacy DD_ADP_ENABLED env var — the fallback behavior stays, but the log line was only noise for reviewers. Also renames the "core-agent" routing label emitted by LogResolvedMode to just "agent" for consistency with other log surfaces. Refs DataDog/saluki#1334
Replaces the ad-hoc tri{set,val} struct with plain *bool to encode
the "not set by the user" third state. Removes the nonsense
tri{false,true} failure mode and reads more cleanly at the row
literals.
Refs DataDog/saluki#1334
Switches TestApplyUseDogstatsdSuppression from direct SetWithoutSource calls to confFromYAML so the test exercises the same config-load path users hit in production, matching the surrounding test file's style. Refs DataDog/saluki#1334
Removes the startup log that summarized the resolved DogStatsD routing decision. The extra surface area distracted reviewers and the same information is reachable via existing config-dump tooling. Refs DataDog/saluki#1334
Collapses the two early-return guards in applyUseDogstatsdSuppression into one if-statement that wraps the log and Set calls. Behaviorally equivalent; reads more directly. Refs DataDog/saluki#1334
|
🎯 Code Coverage (details) 🔗 Commit SHA: 05f0a7d | Docs | Datadog PR Page | Give us feedback! |
Mirrors the runtime default flip in pkg/config/setup/common_settings.go so schema consumers and generated config docs advertise the new behavior. Refs DataDog/saluki#1334
Files inventory check summaryFile checks results against ancestor d94932f5: Results for datadog-agent_7.80.0~devel.git.417.05f0a7d.pipeline.110817448-1_amd64.deb:No change detected |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fd00635188
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Static quality checks✅ Please find below the results from static quality gates Successful checksInfo
21 successful checks with minimal change (< 2 KiB)
On-wire sizes (compressed)
|
Regression DetectorRegression Detector ResultsMetrics dashboard Baseline: 9b982e1 Optimization Goals: ✅ No significant changes detected
|
| perf | experiment | goal | Δ mean % | Δ mean % CI | trials | links |
|---|---|---|---|---|---|---|
| ➖ | docker_containers_cpu | % cpu utilization | +2.25 | [-0.70, +5.21] | 1 | Logs |
Fine details of change detection per experiment
| perf | experiment | goal | Δ mean % | Δ mean % CI | trials | links |
|---|---|---|---|---|---|---|
| ➖ | docker_containers_cpu | % cpu utilization | +2.25 | [-0.70, +5.21] | 1 | Logs |
| ➖ | quality_gate_logs | % cpu utilization | +1.19 | [+0.21, +2.17] | 1 | Logs bounds checks dashboard |
| ➖ | quality_gate_metrics_logs | memory utilization | +0.63 | [+0.39, +0.88] | 1 | Logs bounds checks dashboard |
| ➖ | ddot_metrics | memory utilization | +0.56 | [+0.36, +0.76] | 1 | Logs |
| ➖ | otlp_ingest_logs | memory utilization | +0.49 | [+0.40, +0.59] | 1 | Logs |
| ➖ | ddot_metrics_sum_delta | memory utilization | +0.37 | [+0.18, +0.55] | 1 | Logs |
| ➖ | quality_gate_idle | memory utilization | +0.31 | [+0.26, +0.36] | 1 | Logs bounds checks dashboard |
| ➖ | ddot_metrics_sum_cumulative | memory utilization | +0.28 | [+0.13, +0.44] | 1 | Logs |
| ➖ | docker_containers_memory | memory utilization | +0.20 | [+0.07, +0.34] | 1 | Logs |
| ➖ | ddot_metrics_sum_cumulativetodelta_exporter | memory utilization | +0.14 | [-0.10, +0.38] | 1 | Logs |
| ➖ | file_to_blackhole_500ms_latency | egress throughput | +0.06 | [-0.33, +0.45] | 1 | Logs |
| ➖ | file_to_blackhole_0ms_latency | egress throughput | +0.02 | [-0.48, +0.51] | 1 | Logs |
| ➖ | quality_gate_idle_all_features | memory utilization | +0.01 | [-0.03, +0.06] | 1 | Logs bounds checks dashboard |
| ➖ | uds_dogstatsd_to_api_v3 | ingress throughput | +0.01 | [-0.19, +0.22] | 1 | Logs |
| ➖ | tcp_dd_logs_filter_exclude | ingress throughput | +0.01 | [-0.08, +0.09] | 1 | Logs |
| ➖ | file_to_blackhole_100ms_latency | egress throughput | +0.00 | [-0.10, +0.10] | 1 | Logs |
| ➖ | uds_dogstatsd_to_api | ingress throughput | -0.01 | [-0.21, +0.19] | 1 | Logs |
| ➖ | file_to_blackhole_1000ms_latency | egress throughput | -0.05 | [-0.49, +0.38] | 1 | Logs |
| ➖ | uds_dogstatsd_20mb_12k_contexts_20_senders | memory utilization | -0.07 | [-0.13, -0.02] | 1 | Logs |
| ➖ | ddot_logs | memory utilization | -0.13 | [-0.19, -0.07] | 1 | Logs |
| ➖ | file_tree | memory utilization | -0.39 | [-0.44, -0.35] | 1 | Logs |
| ➖ | otlp_ingest_metrics | memory utilization | -0.59 | [-0.75, -0.44] | 1 | Logs |
| ➖ | tcp_syslog_to_blackhole | ingress throughput | -0.66 | [-0.81, -0.52] | 1 | Logs |
Bounds Checks: ✅ Passed
| perf | experiment | bounds_check_name | replicates_passed | observed_value | links |
|---|---|---|---|---|---|
| ✅ | docker_containers_cpu | simple_check_run | 10/10 | 695 ≥ 26 | |
| ✅ | docker_containers_memory | memory_usage | 10/10 | 243.59MiB ≤ 370MiB | |
| ✅ | docker_containers_memory | simple_check_run | 10/10 | 683 ≥ 26 | |
| ✅ | file_to_blackhole_0ms_latency | memory_usage | 10/10 | 0.16GiB ≤ 1.20GiB | |
| ✅ | file_to_blackhole_0ms_latency | missed_bytes | 10/10 | 0B = 0B | |
| ✅ | file_to_blackhole_1000ms_latency | memory_usage | 10/10 | 0.21GiB ≤ 1.20GiB | |
| ✅ | file_to_blackhole_1000ms_latency | missed_bytes | 10/10 | 0B = 0B | |
| ✅ | file_to_blackhole_100ms_latency | memory_usage | 10/10 | 0.17GiB ≤ 1.20GiB | |
| ✅ | file_to_blackhole_100ms_latency | missed_bytes | 10/10 | 0B = 0B | |
| ✅ | file_to_blackhole_500ms_latency | memory_usage | 10/10 | 0.18GiB ≤ 1.20GiB | |
| ✅ | file_to_blackhole_500ms_latency | missed_bytes | 10/10 | 0B = 0B | |
| ✅ | quality_gate_idle | intake_connections | 10/10 | 3 ≤ 4 | bounds checks dashboard |
| ✅ | quality_gate_idle | memory_usage | 10/10 | 142.29MiB ≤ 147MiB | bounds checks dashboard |
| ✅ | quality_gate_idle_all_features | intake_connections | 10/10 | 3 ≤ 4 | bounds checks dashboard |
| ✅ | quality_gate_idle_all_features | memory_usage | 10/10 | 469.55MiB ≤ 495MiB | bounds checks dashboard |
| ✅ | quality_gate_logs | intake_connections | 10/10 | 4 ≤ 6 | bounds checks dashboard |
| ✅ | quality_gate_logs | memory_usage | 10/10 | 178.44MiB ≤ 195MiB | bounds checks dashboard |
| ✅ | quality_gate_logs | missed_bytes | 10/10 | 0B = 0B | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | cpu_usage | 10/10 | 352.76 ≤ 2000 | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | intake_connections | 10/10 | 4 ≤ 6 | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | memory_usage | 10/10 | 373.68MiB ≤ 430MiB | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | missed_bytes | 10/10 | 0B = 0B | bounds checks dashboard |
Explanation
Confidence level: 90.00%
Effect size tolerance: |Δ mean %| ≥ 5.00%
Performance changes are noted in the perf column of each table:
- ✅ = significantly better comparison variant performance
- ❌ = significantly worse comparison variant performance
- ➖ = no significant change in performance
A regression test is an A/B test of target performance in a repeatable rig, where "performance" is measured as "comparison variant minus baseline variant" for an optimization goal (e.g., ingress throughput). Due to intrinsic variability in measuring that goal, we can only estimate its mean value for each experiment; we report uncertainty in that value as a 90.00% confidence interval denoted "Δ mean % CI".
For each experiment, we decide whether a change in performance is a "regression" -- a change worth investigating further -- if all of the following criteria are true:
-
Its estimated |Δ mean %| ≥ 5.00%, indicating the change is big enough to merit a closer look.
-
Its 90.00% confidence interval "Δ mean % CI" does not contain zero, indicating that if our statistical model is accurate, there is at least a 90.00% chance there is a difference in performance between baseline and comparison variants.
-
Its configuration does not mark it "erratic".
CI Pass/Fail Decision
✅ Passed. All Quality Gates passed.
- quality_gate_idle, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_idle, bounds check intake_connections: 10/10 replicas passed. Gate passed.
- quality_gate_idle_all_features, bounds check intake_connections: 10/10 replicas passed. Gate passed.
- quality_gate_idle_all_features, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_logs, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_logs, bounds check missed_bytes: 10/10 replicas passed. Gate passed.
- quality_gate_logs, bounds check intake_connections: 10/10 replicas passed. Gate passed.
- quality_gate_metrics_logs, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
- quality_gate_metrics_logs, bounds check missed_bytes: 10/10 replicas passed. Gate passed.
- quality_gate_metrics_logs, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_metrics_logs, bounds check intake_connections: 10/10 replicas passed. Gate passed.
Fleet policies are merged after LoadDatadog's override pass, so use_dogstatsd=false delivered via fleet policy would not suppress data_plane.dogstatsd.enabled. Export ApplyUseDogstatsdSuppression and call it explicitly in setupConfig after MergeFleetPolicy. Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Gazelle generates this when run after the recent "Consolidate gazelle:exclude directives" change in main, since the broad `comp/dogstatsd` exclude was replaced by sibling-only excludes that no longer cover comp/dogstatsd/config. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
## Summary ADP (Agent Data Plane) is Linux-only, but `data_plane.enabled: true` was silently ignored on Windows and macOS with no feedback to the user. This PR adds a platform gate in the config loading path that emits a warning and resets `data_plane.enabled` to false on non-Linux platforms, ensuring every downstream consumer (dogstatsd ADP path, OTLP proxy) automatically sees the correct value without per-site guards. Follows up on review feedback from #49891. No changelog entry since ADP still is a "hidden feature". ## Test plan - [x] `dda inv test --targets=./pkg/config/setup/...` passes (291 tests) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: jesse.szwedko <[email protected]>
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…s DSD (#2965) dogstatsd: drop DD_USE_DOGSTATSD=false override when dataPlane handles DSD The Core Agent now observes data_plane.enabled and delegates DogStatsD to the Data Plane on its own (DataDog/datadog-agent#49891), so the operator no longer needs to set DD_USE_DOGSTATSD=false on the Core Agent (or on the single-container agent) when the dataPlane feature handles DSD. Combined with #2935 (which defaults dataPlane.dogstatsd.enabled to true), enabling dataPlane.enabled is sufficient to route DSD onto ADP. Address review: clarify comment, drop negative env-var assertions - Mention both data_plane.enabled and data_plane.dogstatsd.enabled in ManageNodeAgent's comment, since the Core Agent uses both to decide whether to run DogStatsD itself or delegate it to ADP. - Remove the now-superfluous DD_USE_DOGSTATSD assertions from the unit and e2e tests (no need to negatively assert the env var is unset), along with the assertContainerDoesNotHaveEnvVar helper. dogstatsd: gate DD_USE_DOGSTATSD=false removal on Agent >= 7.75 On Agent < 7.75, DD_DATA_PLANE_ENABLED / DD_DATA_PLANE_DOGSTATSD_ENABLED are unrecognised so the Core Agent starts DSD regardless, causing a bind conflict with ADP. Restore the explicit DD_USE_DOGSTATSD=false override for those agents while keeping the cleaner no-override path for >= 7.75. Uses the existing IsAboveMinVersion / GetAgentVersionFromImage machinery (same pattern as ProcessConfig, AppSec, KSM Core). Unknown / custom image tags fall back to AgentLatestVersion (7.77.2 > 7.75.0 → no override). fix lint: gci alignment in struct fields and const block Co-authored-by: jesse.szwedko <[email protected]>
Summary
Brings the Core Agent's routing between its in-process DogStatsD server and the Agent Data Plane (ADP) into line with the truth table defined in DataDog/saluki#1334 (comment). With this change, enabling ADP (
data_plane.enabled: true) is sufficient to move DogStatsD onto it by default, and settinguse_dogstatsd: falsenow reliably suppresses DogStatsD in both the Core Agent and ADP via the existing config stream — closing a gap where ADP ignored the global master toggle.No changelog entry since ADP is still a "hidden" feature.
Refs DataDog/saluki#1334
Test plan
go test -tags test ./comp/dogstatsd/config/... -count=1passesTestTruthTable(21 rows) andTestLogResolvedMode.go test -tags test ./pkg/config/setup/... -count=1passes, includingTestApplyUseDogstatsdSuppression.use_dogstatsd: false+data_plane.enabled: true+data_plane.dogstatsd.enabled: true, both the Core Agent and the ADP log confirm DogStatsD is off.data_plane.enabled: trueset (nodata_plane.dogstatsd.enabled), the Core Agent's startup log printsDogStatsD routing: ... -> agent-data-planeand the in-process server is not started.Tracked by DADP-38