Repository: DataDog/datadog-agent
Pull request #36332: [EBPF] attacher: do not log unnecessary errors
Author: login: gjulianm
Labels: name: changelog/no-changelog
description: No changelog entry needed
name: component/system-probe
name: team/ebpf-platform
name: qa/done
description: QA done before merge and regressions are covered by tests
name: medium review
description: PR review might take time
name: ask-review
description: Ask required teams to review this PR
Created: 2025-04-21T12:56:45Z | Merged: 2025-04-22T17:09:45Z

<!--
* Contributors are encouraged to read our [CONTRIBUTING](/CONTRIBUTING.md) documentation.
* Both Contributor and Reviewer Checklists are available at https://datadoghq.dev/datadog-agent/guidelines/contributing/#pull-requests.
* The pull request:
  * Should only fix one issue or add one feature at a time.
  * Must update the test suite for the relevant functionality.
  * Should pass all status checks before being reviewed or merged.
* Commit titles should be prefixed with general area of pull request's change.
* Please fill the below sections if possible with relevant information or links.
-->
### What does this PR do?

Change how registry errors are logged by the uprobe attacher, to ensure that we don't report errors that aren't really errors and are instead part of the normal operation of the attacher.

### Motivation

Reduce log noise.

### Describe how you validated your changes
<!--
Validate your changes before merge, ensuring that:
* Your PR is tested by static / unit / integrations / e2e tests
* Your PR description details which e2e tests cover your changes, if any
* The PR description contains details of how you validated your changes. If you validated changes manually and not through automated tests, add context on why automated tests did not fit your changes validation.

If you want additional validation by a second person, you can ask reviewers to do it. Describe how to set up an environment for manual tests in the PR description. Manual validation is expected to happen on every commit before merge.

Any manual validation step should then map to an automated test. Manual validation should not substitute automation, minus exceptions not supported by test tooling yet.
-->

Ran manually with GPU and USM enabled, ensured that log wasn't polluted.

### Possible Drawbacks / Trade-offs

### Additional Notes
<!--
* Anything else we should know when reviewing?
* Include benchmarking information here whenever possible.
* Include info about alternatives that were considered and why the proposed
  version was chosen.
-->


Diff:
diff --git a/pkg/ebpf/uprobes/attacher.go b/pkg/ebpf/uprobes/attacher.go
index 7be9e0e003b6..1dc31b6758c4 100644
--- a/pkg/ebpf/uprobes/attacher.go
+++ b/pkg/ebpf/uprobes/attacher.go
@@ -571,10 +571,27 @@ func (ua *UprobeAttacher) Stop() {
 	ua.wg.Wait()
 }
 
+func (ua *UprobeAttacher) shouldLogRegistryError(err error) bool {
+	if err == nil {
+		return false
+	}
+
+	// Always log all errors if detailed logging is enabled
+	if ua.config.EnableDetailedLogging {
+		return true
+	}
+
+	var unknownErr *utils.UnknownAttachmentError
+	return errors.As(err, &unknownErr)
+}
+
 // handleProcessStart is called when a new process is started, wraps AttachPIDWithOptions but ignoring the error
 // for API compatibility with processMonitor
 func (ua *UprobeAttacher) handleProcessStart(pid uint32) {
-	_ = ua.AttachPIDWithOptions(pid, false) // Do not try to attach to libraries on process start, it hasn't loaded them yet
+	err := ua.AttachPIDWithOptions(pid, false) // Do not try to attach to libraries on process start, it hasn't loaded them yet
+	if ua.shouldLogRegistryError(err) {
+		log.Warnf("could not attach to process %d: %v", pid, err)
+	}
 }
 
 // handleProcessExit is called when a process finishes, wraps DetachPID but ignoring the error
@@ -587,8 +604,8 @@ func (ua *UprobeAttacher) handleLibraryOpen(libpath sharedlibraries.LibPath) {
 	path := sharedlibraries.ToBytes(&libpath)
 
 	err := ua.AttachLibrary(string(path), libpath.Pid)
-	if err != nil {
-		log.Errorf("error attaching to library %s (PID %d): %v", path, libpath.Pid, err)
+	if ua.shouldLogRegistryError(err) {
+		log.Warnf("could not attach to library %s (PID %d): %v", path, libpath.Pid, err)
 	}
 }
 
@@ -683,6 +700,9 @@ func (ua *UprobeAttacher) AttachPIDWithOptions(pid uint32, attachToLibs bool) er
 	if ua.handlesExecutables() || (ua.config.ExcludeTargets&ExcludeInternal) != 0 {
 		binPath, err = procInfo.Exe()
 		if err != nil {
+			if !errors.Is(err, os.ErrNotExist) {
+				return utils.NewUnknownAttachmentError(err)
+			}
 			return err
 		}
 	}
@@ -771,11 +791,13 @@ func (ua *UprobeAttacher) attachToBinary(fpath utils.FilePath, matchingRules []*
 
 	symbolsToRequest, err := ua.computeSymbolsToRequest(matchingRules)
 	if err != nil {
-		return fmt.Errorf("error computing symbols to request for rules %+v: %w", matchingRules, err)
+		return utils.NewUnknownAttachmentError(fmt.Errorf("error computing symbols to request for rules %+v: %w", matchingRules, err))
 	}
 
 	inspectResult, err := ua.inspector.Inspect(fpath, symbolsToRequest)
 	if err != nil {
+		// Not wrapping this one in an UnknownAttachmentError as it can happen if we're trying to
+		// attach to a process that just doesn't have the symbols we're looking for.
 		return fmt.Errorf("error inspecting %s: %w", fpath.HostPath, err)
 	}
 
@@ -785,7 +807,10 @@ func (ua *UprobeAttacher) attachToBinary(fpath utils.FilePath, matchingRules []*
 		for _, selector := range rule.ProbesSelector {
 			err = ua.attachProbeSelector(selector, fpath, uid, rule, inspectResult)
 			if err != nil {
-				return err
+				// At this point we have done enough validation so that the
+				// probe attachment should work, if it doesn't it's an issue we
+				// don't expect and we want to know about it.
+				return utils.NewUnknownAttachmentError(err)
 			}
 		}
 	}
@@ -948,7 +973,7 @@ func (ua *UprobeAttacher) attachToLibrariesOfPID(pid uint32) error {
 	successfulMatches := make([]string, 0)
 	libs, err := ua.getLibrariesFromMapsFile(int(pid))
 	if err != nil {
-		return err
+		return utils.NewUnknownAttachmentError(err)
 	}
 	for _, libpath := range libs {
 		err := ua.AttachLibrary(libpath, pid)
@@ -964,10 +989,10 @@ func (ua *UprobeAttacher) attachToLibrariesOfPID(pid uint32) error {
 		if len(registerErrors) == 0 {
 			return nil // No libraries found to attach
 		}
-		return fmt.Errorf("no rules matched for pid %d, errors: %v", pid, registerErrors)
+		return utils.NewUnknownAttachmentError(fmt.Errorf("no rules matched for pid %d, errors: %v", pid, registerErrors))
 	}
 	if len(registerErrors) > 0 {
-		return fmt.Errorf("partially hooked (%v), errors while attaching pid %d: %v", successfulMatches, pid, registerErrors)
+		return utils.NewUnknownAttachmentError(fmt.Errorf("partially hooked (%v), errors while attaching pid %d: %v", successfulMatches, pid, registerErrors))
 	}
 	return nil
 }
diff --git a/pkg/gpu/probe.go b/pkg/gpu/probe.go
index 10584eeb2927..0a30618d00b2 100644
--- a/pkg/gpu/probe.go
+++ b/pkg/gpu/probe.go
@@ -383,7 +383,7 @@ func getAttacherConfig(cfg *config.Config) uprobes.AttacherConfig {
 		SharedLibsLibset:               sharedlibraries.LibsetGPU,
 		ScanProcessesInterval:          cfg.ScanProcessesInterval,
 		EnablePeriodicScanNewProcesses: true,
-		EnableDetailedLogging:          true,
+		EnableDetailedLogging:          false,
 	}
 }
 
diff --git a/pkg/network/usm/utils/file_registry.go b/pkg/network/usm/utils/file_registry.go
index 2b2041008818..4a9fbc916d7c 100644
--- a/pkg/network/usm/utils/file_registry.go
+++ b/pkg/network/usm/utils/file_registry.go
@@ -129,6 +129,28 @@ var (
 	ErrPathIsAlreadyRegistered = errors.New("path is already registered")
 )
 
+// UnknownAttachmentError is an error that is not one of the expected errors, a
+// shorthand to ensure we don't log expected errors (such as
+// ErrPathIsAlreadyRegistered or errPathIsBlocked, which are expected to happen
+// in normal operation)
+type UnknownAttachmentError struct {
+	Err error
+}
+
+func (e *UnknownAttachmentError) Error() string {
+	return fmt.Sprintf("unexpected error: %v", e.Err)
+}
+
+func (e *UnknownAttachmentError) Unwrap() error {
+	return e.Err
+}
+
+// NewUnknownAttachmentError creates a new `UnknownAttachmentError` instance wrapping
+// the given error.
+func NewUnknownAttachmentError(err error) *UnknownAttachmentError {
+	return &UnknownAttachmentError{Err: err}
+}
+
 // getBlockReason creates a string specifying the reason for the block based on
 // the error received. To reduce memory usage of this debugging feature, for
 // very common errors we store a summary instead of the full error string,
@@ -152,12 +174,12 @@ func getBlockReason(error error) string {
 // the existing registration if and only if `pid` is new;
 func (r *FileRegistry) Register(namespacedPath string, pid uint32, activationCB, deactivationCB, alreadyRegistered Callback) error {
 	if activationCB == nil || deactivationCB == nil {
-		return errCallbackIsMissing
+		return NewUnknownAttachmentError(errCallbackIsMissing)
 	}
 
 	path, err := NewFilePath(r.procRoot, namespacedPath, pid)
 	if err != nil {
-		return err
+		return NewUnknownAttachmentError(err)
 	}
 
 	pathID := path.ID
@@ -220,6 +242,9 @@ func (r *FileRegistry) Register(namespacedPath string, pid uint32, activationCB,
 			r.blocklistByID.Add(pathID, BlockListEntry{Path: path.HostPath, Reason: getBlockReason(err)})
 		}
 		r.telemetry.fileHookFailed.Add(1)
+
+		// Passing the error as is, without wrapping it in a `UnknownAttachmentError`,
+		// that's the responsibility of the callback.
 		return err
 	}
 


Reviews:
user: login: guyarb
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-21T18:44:22Z
user: login: guyarb
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-21T18:45:32Z
user: login: brycekahle
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-21T19:19:20Z
user: login: gjulianm
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-22T10:01:09Z

Review comments:
diff_hunk: @@ -383,7 +383,7 @@ func getAttacherConfig(cfg *config.Config) uprobes.AttacherConfig {
 		SharedLibsLibset:               sharedlibraries.LibsetGPU,
 		ScanProcessesInterval:          cfg.ScanProcessesInterval,
 		EnablePeriodicScanNewProcesses: true,
-		EnableDetailedLogging:          true,
+		EnableDetailedLogging:          false,
path: pkg/gpu/probe.go
user: login: guyarb
body: when do we enable detailed logging?

created_at: 2025-04-21T18:44:22Z
author_association: CONTRIBUTOR
diff_hunk: @@ -383,7 +383,7 @@ func getAttacherConfig(cfg *config.Config) uprobes.AttacherConfig {
 		SharedLibsLibset:               sharedlibraries.LibsetGPU,
 		ScanProcessesInterval:          cfg.ScanProcessesInterval,
 		EnablePeriodicScanNewProcesses: true,
-		EnableDetailedLogging:          true,
+		EnableDetailedLogging:          false,
path: pkg/gpu/probe.go
user: login: gjulianm
body: I want to make a separate PR to add a config option, but personally I've enabled manually when debugging and in unit tests.
created_at: 2025-04-22T10:01:09Z
author_association: CONTRIBUTOR

PR comments:
user: login: agent-platform-auto-pr[bot]
created_at: 2025-04-21T13:22:54Z
body: ## Uncompressed package size comparison

Comparison with [ancestor](https://github.com/DataDog/datadog-agent/commit/aaf74d67afda1a5c61527983da4d64766e84188c) `aaf74d67afda1a5c61527983da4d64766e84188c`


<details open>
  <summary> Diff per package </summary>

|package|diff|status|size|ancestor|threshold|
|--|--|--|--|--|--|
|datadog-agent-arm64-deb|0.01MB|⚠️|786.56MB|786.55MB|0.50MB|
|datadog-agent-aarch64-rpm|0.00MB|✅|795.47MB|795.47MB|0.50MB|
|datadog-agent-x86_64-rpm|0.00MB|✅|805.62MB|805.62MB|0.50MB|
|datadog-agent-x86_64-suse|0.00MB|✅|805.62MB|805.62MB|0.50MB|
|datadog-agent-amd64-deb|0.00MB|✅|796.68MB|796.68MB|0.50MB|
|datadog-dogstatsd-amd64-deb|0.00MB|✅|31.26MB|31.26MB|0.50MB|
|datadog-dogstatsd-x86_64-rpm|0.00MB|✅|31.34MB|31.34MB|0.50MB|
|datadog-dogstatsd-x86_64-suse|0.00MB|✅|31.34MB|31.34MB|0.50MB|
|datadog-dogstatsd-arm64-deb|0.00MB|✅|30.09MB|30.09MB|0.50MB|
|datadog-heroku-agent-amd64-deb|0.00MB|✅|440.70MB|440.70MB|0.50MB|
|datadog-iot-agent-amd64-deb|0.00MB|✅|60.82MB|60.82MB|0.50MB|
|datadog-iot-agent-x86_64-rpm|0.00MB|✅|60.89MB|60.89MB|0.50MB|
|datadog-iot-agent-x86_64-suse|0.00MB|✅|60.89MB|60.89MB|0.50MB|
|datadog-iot-agent-arm64-deb|0.00MB|✅|58.12MB|58.12MB|0.50MB|
|datadog-iot-agent-aarch64-rpm|0.00MB|✅|58.19MB|58.19MB|0.50MB|

</details>

## Decision
⚠️ Warning



author_association: CONTRIBUTOR
user: login: agent-platform-auto-pr[bot]
created_at: 2025-04-21T13:23:20Z
body: ## Test changes on VM

Use this command from [test-infra-definitions](https://github.com/DataDog/test-infra-definitions) to manually test this PR changes on a VM:
```sh
dda inv aws.create-vm --pipeline-id=62879719 --os-family=ubuntu
```
Note: This applies to commit **1a3eceef**
author_association: CONTRIBUTOR
user: login: cit-pr-commenter[bot]
created_at: 2025-04-21T13:49:03Z
body: ## Regression Detector

# Regression Detector Results

[Metrics dashboard](https://app.datadoghq.com/dashboard/ykh-ua8-vcu/SMP-Regression-Detector-Metrics?fromUser=true&refresh_mode=paused&tpl_var_run-id%5B0%5D=c784f6c2-82b1-4f70-8042-3b5d4a2f7954&view=spans&from_ts=1745317157000&to_ts=1745317757000&live=false)  
[Target profiles](https://app.datadoghq.com/profiling/explorer?query=env%3Asingle-machine-performance%20service%3Adatadog-agent%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_t=count&fromUser=false&viz=stream&start=1745309957000&end=1745321357000&paused=true)  
Run ID: c784f6c2-82b1-4f70-8042-3b5d4a2f7954

Baseline: aaf74d67afda1a5c61527983da4d64766e84188c
Comparison: 1a3eceef4255f8322cef3a47b83253aa1e422f38
[Diff](aaf74d67afda1a5c61527983da4d64766e84188c...1a3eceef4255f8322cef3a47b83253aa1e422f38)


## ❌ Experiments with missing or malformed data

This is a critical error. No usable optimization goal data was produced by the listed experiments. This may be a result of misconfiguration. Ping #single-machine-performance and we can help out.

* ddot_traces ([Logs](https://app.datadoghq.com/logs?query=experiment%3Addot_traces%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false))


## Optimization Goals: ✅ No significant changes detected


<details>
<summary><h2>
Fine details of change detection per experiment
</h2></summary>

| perf | experiment                                   | goal               | Δ mean % | Δ mean % CI    | trials | links                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|------|----------------------------------------------|--------------------|----------|----------------|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ➖   | docker_containers_cpu                        | % cpu utilization  | +2.63    | [-1.22, +6.49] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Adocker_containers_cpu%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                           |
| ➖   | otlp_ingest_traces                           | memory utilization | +1.23    | [+0.96, +1.51] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Aotlp_ingest_traces%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                              |
| ➖   | otlp_ingest_logs                             | memory utilization | +1.19    | [+1.03, +1.34] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Aotlp_ingest_logs%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                                |
| ➖   | tcp_syslog_to_blackhole                      | ingress throughput | +1.15    | [+1.09, +1.22] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Atcp_syslog_to_blackhole%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                         |
| ➖   | quality_gate_idle_all_features               | memory utilization | +0.46    | [+0.37, +0.55] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Aquality_gate_idle_all_features%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false) [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle_all_features&tpl_var_job_id%5B0%5D=c784f6c2-82b1-4f70-8042-3b5d4a2f7954&view=spans&from_ts=1745317157000&to_ts=1745317757000&live=false) |
| ➖   | uds_dogstatsd_20mb_12k_contexts_20_senders   | memory utilization | +0.44    | [+0.37, +0.50] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Auds_dogstatsd_20mb_12k_contexts_20_senders%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                      |
| ➖   | ddot_logs                                    | memory utilization | +0.34    | [+0.30, +0.37] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Addot_logs%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                                       |
| ➖   | ddot_metrics                                 | memory utilization | +0.26    | [+0.22, +0.31] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Addot_metrics%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                                    |
| ➖   | quality_gate_logs                            | % cpu utilization  | +0.17    | [-2.64, +2.98] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Aquality_gate_logs%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false) [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_logs&tpl_var_job_id%5B0%5D=c784f6c2-82b1-4f70-8042-3b5d4a2f7954&view=spans&from_ts=1745317157000&to_ts=1745317757000&live=false)                           |
| ➖   | docker_containers_memory                     | memory utilization | +0.08    | [+0.00, +0.16] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Adocker_containers_memory%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                        |
| ➖   | file_to_blackhole_0ms_latency                | egress throughput  | +0.08    | [-0.76, +0.92] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_0ms_latency%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                   |
| ➖   | quality_gate_idle                            | memory utilization | +0.02    | [-0.04, +0.08] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Aquality_gate_idle%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false) [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle&tpl_var_job_id%5B0%5D=c784f6c2-82b1-4f70-8042-3b5d4a2f7954&view=spans&from_ts=1745317157000&to_ts=1745317757000&live=false)                           |
| ➖   | file_to_blackhole_100ms_latency              | egress throughput  | +0.01    | [-0.90, +0.91] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_100ms_latency%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                 |
| ➖   | uds_dogstatsd_to_api                         | ingress throughput | -0.00    | [-0.28, +0.28] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Auds_dogstatsd_to_api%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                            |
| ➖   | file_to_blackhole_300ms_latency              | egress throughput  | -0.00    | [-0.89, +0.89] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_300ms_latency%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                 |
| ➖   | tcp_dd_logs_filter_exclude                   | ingress throughput | -0.00    | [-0.02, +0.01] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Atcp_dd_logs_filter_exclude%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                      |
| ➖   | file_to_blackhole_0ms_latency_http2          | egress throughput  | -0.01    | [-0.85, +0.84] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_0ms_latency_http2%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                             |
| ➖   | file_to_blackhole_1000ms_latency             | egress throughput  | -0.01    | [-0.83, +0.81] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_1000ms_latency%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                |
| ➖   | file_to_blackhole_1000ms_latency_linear_load | egress throughput  | -0.03    | [-0.24, +0.18] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_1000ms_latency_linear_load%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                    |
| ➖   | file_to_blackhole_0ms_latency_http1          | egress throughput  | -0.04    | [-0.84, +0.76] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_0ms_latency_http1%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                             |
| ➖   | file_to_blackhole_500ms_latency              | egress throughput  | -0.04    | [-0.85, +0.76] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_500ms_latency%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                 |
| ➖   | otlp_ingest_metrics                          | memory utilization | -0.32    | [-0.47, -0.17] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Aotlp_ingest_metrics%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                             |
| ➖   | file_tree                                    | memory utilization | -0.54    | [-0.68, -0.41] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_tree%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                                       |
| ➖   | uds_dogstatsd_to_api_cpu                     | % cpu utilization  | -2.63    | [-3.47, -1.79] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Auds_dogstatsd_to_api_cpu%20job_id%3Ac784f6c2-82b1-4f70-8042-3b5d4a2f7954&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745309957000&to_ts=1745321357000&live=false)                                                                                                                                                                                                                                                                                                        |
</details>


<details>
<summary><h2>
Bounds Checks: ✅ Passed
</h2></summary>

| perf | experiment                                   | bounds_check_name  | replicates_passed | links                                                                                                                                                                                                                                                                                            |
|------|----------------------------------------------|--------------------|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ✅   | docker_containers_cpu                        | simple_check_run   | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | docker_containers_memory                     | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | docker_containers_memory                     | simple_check_run   | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_0ms_latency                | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_0ms_latency                | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_0ms_latency_http1          | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_0ms_latency_http1          | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_0ms_latency_http2          | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_0ms_latency_http2          | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_1000ms_latency             | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_1000ms_latency_linear_load | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_100ms_latency              | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_100ms_latency              | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_300ms_latency              | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_300ms_latency              | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_500ms_latency              | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_500ms_latency              | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | quality_gate_idle                            | intake_connections | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle&tpl_var_job_id%5B0%5D=c784f6c2-82b1-4f70-8042-3b5d4a2f7954&view=spans&from_ts=1745317157000&to_ts=1745317757000&live=false)              |
| ✅   | quality_gate_idle                            | memory_usage       | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle&tpl_var_job_id%5B0%5D=c784f6c2-82b1-4f70-8042-3b5d4a2f7954&view=spans&from_ts=1745317157000&to_ts=1745317757000&live=false)              |
| ✅   | quality_gate_idle_all_features               | intake_connections | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle_all_features&tpl_var_job_id%5B0%5D=c784f6c2-82b1-4f70-8042-3b5d4a2f7954&view=spans&from_ts=1745317157000&to_ts=1745317757000&live=false) |
| ✅   | quality_gate_idle_all_features               | memory_usage       | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle_all_features&tpl_var_job_id%5B0%5D=c784f6c2-82b1-4f70-8042-3b5d4a2f7954&view=spans&from_ts=1745317157000&to_ts=1745317757000&live=false) |
| ✅   | quality_gate_logs                            | intake_connections | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_logs&tpl_var_job_id%5B0%5D=c784f6c2-82b1-4f70-8042-3b5d4a2f7954&view=spans&from_ts=1745317157000&to_ts=1745317757000&live=false)              |
| ✅   | quality_gate_logs                            | lost_bytes         | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_logs&tpl_var_job_id%5B0%5D=c784f6c2-82b1-4f70-8042-3b5d4a2f7954&view=spans&from_ts=1745317157000&to_ts=1745317757000&live=false)              |
| ✅   | quality_gate_logs                            | memory_usage       | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_logs&tpl_var_job_id%5B0%5D=c784f6c2-82b1-4f70-8042-3b5d4a2f7954&view=spans&from_ts=1745317157000&to_ts=1745317757000&live=false)              |
</details>


<details>
<summary><h2>
Explanation
</h2></summary>

**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:

1. Its estimated |Δ mean %| ≥ 5.00%, indicating the change is big enough to merit a closer look.

2. 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.

3. Its configuration does not mark it "erratic".
</details>

## CI Pass/Fail Decision

✅ **Passed.** All Quality Gates passed.

- **quality_gate_idle**, bounds check **intake_connections**: 10/10 replicas passed. Gate passed.
- **quality_gate_idle**, bounds check **memory_usage**: 10/10 replicas passed. Gate passed.
- **quality_gate_idle_all_features**, bounds check **memory_usage**: 10/10 replicas passed. Gate passed.
- **quality_gate_idle_all_features**, bounds check **intake_connections**: 10/10 replicas passed. Gate passed.
- **quality_gate_logs**, bounds check **lost_bytes**: 10/10 replicas passed. Gate passed.
- **quality_gate_logs**, bounds check **intake_connections**: 10/10 replicas passed. Gate passed.
- **quality_gate_logs**, bounds check **memory_usage**: 10/10 replicas passed. Gate passed.
author_association: NONE
user: login: agent-platform-auto-pr[bot]
created_at: 2025-04-21T14:01:54Z
body: ## Static quality checks

✅ Please find below the results from static quality gates


<details>
<summary>Successful checks</summary>

### Info

|Result|Quality gate|On disk size|On disk size limit|On wire size|On wire size limit|
|----|----|----|----|----|----|
|✅|static_quality_gate_agent_deb_amd64|770.42 MiB|778.06 MiB|188.72 MiB|191.06 MiB|
|✅|static_quality_gate_agent_deb_amd64_fips|768.43 MiB|776.09 MiB|187.13 MiB|190.72 MiB|
|✅|static_quality_gate_agent_heroku_amd64|428.24 MiB|434.99 MiB|112.74 MiB|114.34 MiB|
|✅|static_quality_gate_agent_msi|958.46 MiB|978.45 MiB|148.12 MiB|151.65 MiB|
|✅|static_quality_gate_agent_rpm_amd64|770.41 MiB|778.06 MiB|189.45 MiB|193.42 MiB|
|✅|static_quality_gate_agent_rpm_amd64_fips|768.41 MiB|776.06 MiB|189.07 MiB|192.61 MiB|
|✅|static_quality_gate_agent_rpm_arm64|760.7 MiB|768.33 MiB|172.18 MiB|174.71 MiB|
|✅|static_quality_gate_agent_rpm_arm64_fips|758.87 MiB|766.55 MiB|171.09 MiB|173.92 MiB|
|✅|static_quality_gate_agent_suse_amd64|770.44 MiB|778.08 MiB|189.45 MiB|193.42 MiB|
|✅|static_quality_gate_agent_suse_amd64_fips|768.4 MiB|776.11 MiB|189.07 MiB|192.78 MiB|
|✅|static_quality_gate_agent_suse_arm64|760.72 MiB|768.31 MiB|172.18 MiB|174.71 MiB|
|✅|static_quality_gate_agent_suse_arm64_fips|758.85 MiB|766.5 MiB|171.09 MiB|173.92 MiB|
|✅|static_quality_gate_docker_agent_amd64|855.09 MiB|862.5 MiB|287.83 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_arm64|868.69 MiB|876.0 MiB|274.44 MiB|278.3 MiB|
|✅|static_quality_gate_docker_agent_jmx_amd64|855.09 MiB|862.5 MiB|287.83 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_jmx_arm64|868.69 MiB|876.63 MiB|274.44 MiB|278.4 MiB|
|✅|static_quality_gate_docker_agent_windows1809|855.09 MiB|862.5 MiB|287.83 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_windows1809_core|855.09 MiB|862.5 MiB|287.83 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_windows1809_core_jmx|855.09 MiB|862.5 MiB|287.83 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_windows1809_jmx|855.09 MiB|862.5 MiB|287.83 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_windows2022|855.09 MiB|862.5 MiB|287.83 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_windows2022_core|855.09 MiB|862.5 MiB|287.83 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_windows2022_core_jmx|855.09 MiB|862.5 MiB|287.83 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_windows2022_jmx|855.09 MiB|862.5 MiB|287.83 MiB|292.0 MiB|
|✅|static_quality_gate_docker_cluster_agent_amd64|262.74 MiB|263.4 MiB|103.31 MiB|104.07 MiB|
|✅|static_quality_gate_docker_cluster_agent_arm64|278.68 MiB|279.38 MiB|98.18 MiB|98.95 MiB|
|✅|static_quality_gate_docker_cws_instrumentation_amd64|6.65 MiB|7.12 MiB|2.82 MiB|3.29 MiB|
|✅|static_quality_gate_docker_cws_instrumentation_arm64|6.44 MiB|6.92 MiB|2.6 MiB|3.07 MiB|
|✅|static_quality_gate_docker_dogstatsd_amd64|38.03 MiB|46.39 MiB|14.67 MiB|17.78 MiB|
|✅|static_quality_gate_docker_dogstatsd_arm64|36.94 MiB|45.05 MiB|13.75 MiB|16.65 MiB|
|✅|static_quality_gate_dogstatsd_deb_amd64|29.89 MiB|38.4 MiB|7.91 MiB|10.26 MiB|
|✅|static_quality_gate_dogstatsd_deb_arm64|28.77 MiB|36.98 MiB|6.89 MiB|8.96 MiB|
|✅|static_quality_gate_dogstatsd_rpm_amd64|29.89 MiB|38.4 MiB|7.92 MiB|10.27 MiB|
|✅|static_quality_gate_dogstatsd_suse_amd64|29.89 MiB|38.4 MiB|7.92 MiB|10.27 MiB|
|✅|static_quality_gate_iot_agent_deb_amd64|58.08 MiB|58.51 MiB|14.61 MiB|15.02 MiB|
|✅|static_quality_gate_iot_agent_deb_arm64|55.51 MiB|55.94 MiB|12.63 MiB|13.05 MiB|
|✅|static_quality_gate_iot_agent_deb_armhf|54.21 MiB|54.32 MiB|12.63 MiB|13.05 MiB|
|✅|static_quality_gate_iot_agent_rpm_amd64|58.08 MiB|58.51 MiB|14.63 MiB|15.04 MiB|
|✅|static_quality_gate_iot_agent_rpm_arm64|55.51 MiB|55.94 MiB|12.65 MiB|13.07 MiB|
|✅|static_quality_gate_iot_agent_suse_amd64|58.08 MiB|58.51 MiB|14.63 MiB|15.04 MiB|

</details>

author_association: CONTRIBUTOR
user: login: gjulianm
created_at: 2025-04-22T16:42:29Z
body: /merge
author_association: CONTRIBUTOR
user: login: dd-devflow[bot]
created_at: 2025-04-22T16:42:33Z
body: <!-- "FeedbackWorkflowId":"47e83952-618b-4ebe-a98c-385ccd7955ca_36" -->
[View all feedbacks in Devflow UI.](https://mosaic.us1.ddbuild.io/devflow/logs/47e83952-618b-4ebe-a98c-385ccd7955ca_36)

`2025-04-22 16:42:32 UTC` :information_source: Start processing command `/merge`

---
`2025-04-22 16:42:36 UTC` :information_source: **MergeQueue:** pull request added to the queue

The expected merge time in `main` is approximately 40m (p90).

---
`2025-04-22 17:09:47 UTC` :information_source: **MergeQueue:** This merge request was merged

author_association: NONE