From 503c19966243f21d250fc5e54be77f4e791a7877 Mon Sep 17 00:00:00 2001 From: Florent Clarret Date: Wed, 11 Sep 2024 14:13:27 +0000 Subject: [PATCH 001/195] Fix a typo in the vscode.setup task (#29247) --- tasks/vscode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/vscode.py b/tasks/vscode.py index e528d188e1c79..e792327343084 100644 --- a/tasks/vscode.py +++ b/tasks/vscode.py @@ -44,7 +44,7 @@ def setup(ctx, force=False): print(color_message("* Setting up tasks", Color.BOLD)) setup_tasks(ctx, force) print(color_message("* Setting up tests", Color.BOLD)) - setup_tasks(ctx, force) + setup_tests(ctx, force) print(color_message("* Setting up settings", Color.BOLD)) setup_settings(ctx, force) print(color_message("* Setting up launch settings", Color.BOLD)) From 60b8d589e393df32973efdb26fa81e4a8e3afdce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20L=C3=B3pez=20de=20Heredia?= Date: Wed, 11 Sep 2024 16:46:27 +0200 Subject: [PATCH 002/195] [APM] Normalize ctags header on telemetry proxy (#29236) --- pkg/trace/api/telemetry.go | 5 +++-- pkg/trace/api/telemetry_test.go | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pkg/trace/api/telemetry.go b/pkg/trace/api/telemetry.go index 4a1880cb6e570..a0eb0bffab17c 100644 --- a/pkg/trace/api/telemetry.go +++ b/pkg/trace/api/telemetry.go @@ -257,8 +257,9 @@ func (f *TelemetryForwarder) setRequestHeader(req *http.Request) { req.Header.Set(header.ContainerID, containerID) } if containerTags != "" { - req.Header.Set("x-datadog-container-tags", containerTags) - log.Debugf("Setting header x-datadog-container-tags=%s for telemetry proxy", containerTags) + ctagsHeader := normalizeHTTPHeader(containerTags) + req.Header.Set("X-Datadog-Container-Tags", ctagsHeader) + log.Debugf("Setting header X-Datadog-Container-Tags=%s for telemetry proxy", ctagsHeader) } if f.conf.InstallSignature.Found { req.Header.Set("DD-Agent-Install-Id", f.conf.InstallSignature.InstallID) diff --git a/pkg/trace/api/telemetry_test.go b/pkg/trace/api/telemetry_test.go index 5c37737da22ae..6662572cf3b6a 100644 --- a/pkg/trace/api/telemetry_test.go +++ b/pkg/trace/api/telemetry_test.go @@ -84,6 +84,7 @@ func TestTelemetryBasicProxyRequest(t *testing.T) { assert.Equal("AWS", req.Header.Get("DD-Cloud-Provider")) assert.Equal("AWSLambda", req.Header.Get("DD-Cloud-Resource-Type")) assert.Equal("test_ARN", req.Header.Get("DD-Cloud-Resource-Identifier")) + assert.Equal("key:test_value", req.Header.Get("X-Datadog-Container-Tags")) assert.Equal("/path", req.URL.Path) assert.Equal("", req.Header.Get("User-Agent")) assert.Regexp(regexp.MustCompile("trace-agent.*"), req.Header.Get("Via")) @@ -94,7 +95,11 @@ func TestTelemetryBasicProxyRequest(t *testing.T) { cfg := getTestConfig(srv.URL) cfg.GlobalTags[functionARNKeyTag] = "test_ARN" + cfg.ContainerTags = func(_ string) ([]string, error) { + return []string{"key:test\nvalue"}, nil + } recv := newTestReceiverFromConfig(cfg) + recv.telemetryForwarder.containerIDProvider = getTestContainerIDProvider() assertSendRequest(t, recv, endpointCalled) } From 482b38be8fe0d860b2b80806d96b7682839590b4 Mon Sep 17 00:00:00 2001 From: Usama Saqib Date: Wed, 11 Sep 2024 17:11:14 +0200 Subject: [PATCH 003/195] Collect libvirt VM metrics (#29099) --- .gitlab/kernel_matrix_testing/common.yml | 15 + tasks/kmt.py | 13 + test/new-e2e/go.mod | 8 +- test/new-e2e/go.sum | 39 ++- .../system-probe/vm-metrics/vm-metrics.go | 283 ++++++++++++++++++ .../vm-metrics/vm-metrics_test.go | 139 +++++++++ 6 files changed, 482 insertions(+), 15 deletions(-) create mode 100644 test/new-e2e/system-probe/vm-metrics/vm-metrics.go create mode 100644 test/new-e2e/system-probe/vm-metrics/vm-metrics_test.go diff --git a/.gitlab/kernel_matrix_testing/common.yml b/.gitlab/kernel_matrix_testing/common.yml index 1dce667e038ab..daddc75b048db 100644 --- a/.gitlab/kernel_matrix_testing/common.yml +++ b/.gitlab/kernel_matrix_testing/common.yml @@ -169,6 +169,19 @@ - scp -o StrictHostKeyChecking=no -i $AWS_EC2_SSH_KEY_FILE "ubuntu@$INSTANCE_IP:/tmp/ddvm-xml-*" $CI_PROJECT_DIR/libvirt/xml - scp -o StrictHostKeyChecking=no -i $AWS_EC2_SSH_KEY_FILE "ubuntu@$INSTANCE_IP:/tmp/qemu-ddvm-*.log" $CI_PROJECT_DIR/libvirt/qemu - scp -o StrictHostKeyChecking=no -i $AWS_EC2_SSH_KEY_FILE "ubuntu@$INSTANCE_IP:/tmp/dnsmasq/*" $CI_PROJECT_DIR/libvirt/dnsmasq + # build vm-metrics collector + - | + GO_ARCH=$ARCH + if [ "${ARCH}" == "x86_64" ]; then + GO_ARCH=amd64 + fi + - cd test/new-e2e && GOOS=linux GOARCH="${GO_ARCH}" go build system-probe/vm-metrics/vm-metrics.go + # The vm-metrics collector is uploaded and executed in the same job because we need to execute it after the datadog-agent + # is launched in the metal instance, and before the tests are executed. This place naturally satisfies these constraints. + # upload vm-metrics collector to metal instance + - scp -o StrictHostKeyChecking=no -i $AWS_EC2_SSH_KEY_FILE $CI_PROJECT_DIR/test/new-e2e/vm-metrics "ubuntu@$INSTANCE_IP:/home/ubuntu/vm-metrics" + # run vm-metrics collector + - ssh -o StrictHostKeyChecking=no -i $AWS_EC2_SSH_KEY_FILE "ubuntu@$INSTANCE_IP" "/home/ubuntu/vm-metrics -statsd-host=127.0.0.1 -statsd-port=8125 -libvirt-uri=/var/run/libvirt/libvirt-sock-ro --tag \"arch:${ARCH}\" --tag \"test-component:${TEST_COMPONENT}\" --tag \"ci-pipeline-id:${CI_PIPELINE_ID}\" --daemon -log-file /home/ubuntu/daemon.log" - !reference [.tag_kmt_ci_job] artifacts: when: always @@ -256,6 +269,7 @@ - NESTED_VM_CMD="/home/ubuntu/connector -host ${MICRO_VM_IP} -user root -ssh-file /home/kernel-version-testing/ddvm_rsa -vm-cmd 'CI=true /root/fetch_dependencies.sh ${ARCH} && COLLECT_COMPLEXITY=${COLLECT_COMPLEXITY} /opt/micro-vm-init.sh -test-tools /opt/testing-tools -retry ${RETRY} -test-root /opt/${TEST_COMPONENT}-tests -packages-run-config /opt/${TEST_SET}.json'" - $CI_PROJECT_DIR/connector-$ARCH -host $INSTANCE_IP -user ubuntu -ssh-file $AWS_EC2_SSH_KEY_FILE -vm-cmd "${NESTED_VM_CMD}" -send-env-vars DD_API_KEY # Allow DD_API_KEY to be passed to the metal instance, so we can use it to send metrics from the connector. - ssh metal_instance "ssh ${MICRO_VM_IP} '/opt/testing-tools/test-json-review -flakes /opt/testing-tools/flakes.yaml -codeowners /opt/testing-tools/CODEOWNERS -test-root /opt/${TEST_COMPONENT}-tests'" + - '[ ! -f $CI_PROJECT_DIR/daemon-${ARCH}.log ] && scp metal_instance:/home/ubuntu/daemon.log $CI_PROJECT_DIR/vm-metrics-daemon-${ARCH}.log' artifacts: expire_in: 2 weeks when: always @@ -265,6 +279,7 @@ - $DD_AGENT_TESTING_DIR/verifier-complexity-$ARCH-$TAG-${TEST_COMPONENT}.tar.gz - $CI_PROJECT_DIR/logs - $CI_PROJECT_DIR/pcaps + - $CI_PROJECT_DIR/vm-metrics-daemon-${ARCH}.log reports: annotations: - $EXTERNAL_LINKS_PATH diff --git a/tasks/kmt.py b/tasks/kmt.py index 486ce76fd1976..64c3607ac053c 100644 --- a/tasks/kmt.py +++ b/tasks/kmt.py @@ -530,6 +530,19 @@ def ninja_build_dependencies(ctx: Context, nw: NinjaWriter, kmt_paths: KMTPaths, inputs=[os.path.abspath(f)], ) + vm_metrics_files = glob("test/new-e2e/system-probe/vm-metrics/*.go") + nw.build( + rule="gobin", + pool="gobuild", + outputs=[os.path.join(kmt_paths.dependencies, "vm-metrics")], + implicit=vm_metrics_files, + variables={ + "go": go_path, + "chdir": "cd test/new-e2e/system-probe/vm-metrics", + "env": env_str, + }, + ) + test_json_files = glob("test/new-e2e/system-probe/test-json-review/*.go") nw.build( rule="gobin", diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod index bbe8063d8489a..0c155ffb07091 100644 --- a/test/new-e2e/go.mod +++ b/test/new-e2e/go.mod @@ -9,6 +9,7 @@ go 1.22.0 replace ( github.com/DataDog/datadog-agent/comp/netflow/payload => ../../comp/netflow/payload github.com/DataDog/datadog-agent/pkg/proto => ../../pkg/proto + github.com/DataDog/datadog-agent/pkg/trace => ../../pkg/trace github.com/DataDog/datadog-agent/pkg/util/optional => ../../pkg/util/optional github.com/DataDog/datadog-agent/pkg/util/pointer => ../../pkg/util/pointer github.com/DataDog/datadog-agent/pkg/util/scrubber => ../../pkg/util/scrubber @@ -261,7 +262,12 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) -require github.com/hairyhenderson/go-codeowners v0.5.0 +require ( + github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 + github.com/DataDog/datadog-go/v5 v5.5.0 + github.com/digitalocean/go-libvirt v0.0.0-20240812180835-9c6c0a310c6c + github.com/hairyhenderson/go-codeowners v0.5.0 +) require ( github.com/pulumi/pulumi-azure-native-sdk/authorization/v2 v2.60.0 // indirect diff --git a/test/new-e2e/go.sum b/test/new-e2e/go.sum index e31485a46f4bb..df48578281988 100644 --- a/test/new-e2e/go.sum +++ b/test/new-e2e/go.sum @@ -12,6 +12,8 @@ github.com/DataDog/datadog-api-client-go v1.16.0 h1:5jOZv1m98criCvYTa3qpW8Hzv301 github.com/DataDog/datadog-api-client-go v1.16.0/go.mod h1:PgrP2ABuJWL3Auw2iEkemAJ/r72ghG4DQQmb5sgnKW4= github.com/DataDog/datadog-api-client-go/v2 v2.27.0 h1:AGZj41frjnjMufQHQbJH2fzmifOs20wpmVDtIBCv33E= github.com/DataDog/datadog-api-client-go/v2 v2.27.0/go.mod h1:QKOu6vscsh87fMY1lHfLEmNSunyXImj8BUaUWJXOehc= +github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= +github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/mmh3 v0.0.0-20200805151601-30884ca2197a h1:m9REhmyaWD5YJ0P53ygRHxKKo+KM+nw+zz0hEdKztMo= github.com/DataDog/mmh3 v0.0.0-20200805151601-30884ca2197a/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= github.com/DataDog/test-infra-definitions v0.0.0-20240910143843-ce6a4aad9299 h1:lMzRshj0zEnNId74hiUsXSClnB0qKmQlC3VQ9kC6p+0= @@ -26,6 +28,7 @@ github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= @@ -105,8 +108,8 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= github.com/charmbracelet/bubbles v0.18.0 h1:PYv1A036luoBGroX6VWjQIE9Syf2Wby2oOl/39KLfy0= @@ -137,6 +140,8 @@ github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxG github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/digitalocean/go-libvirt v0.0.0-20240812180835-9c6c0a310c6c h1:1y+eZhZOMDP86ErYQ7P7ebAvyhpr+HZhR5K6BlOkWoo= +github.com/digitalocean/go-libvirt v0.0.0-20240812180835-9c6c0a310c6c/go.mod h1:vhj0tZhS07ugaMVppAreQmBVHcqLwl5YR2DRu5/uJbY= github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/djherbis/times v1.6.0 h1:w2ctJ92J8fBvWPxugmXIv7Nz7Q3iDMKNx9v5ocVH20c= @@ -211,6 +216,7 @@ github.com/golang/glog v1.2.1/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwm github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= @@ -317,8 +323,6 @@ github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= @@ -384,15 +388,15 @@ github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= -github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= +github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM= -github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= -github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= -github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= -github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= -github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.54.0 h1:ZlZy0BgJhTwVZUn7dLOkwCZHUkrAqd3WYtcFCWnM1D8= +github.com/prometheus/common v0.54.0/go.mod h1:/TQgMJP5CuVYveyT7n/0Ix8yLNNXy9yRSkhnLTHPDIQ= +github.com/prometheus/procfs v0.15.0 h1:A82kmvXJq2jTu5YUhSGNlYoxh85zLnKgPz4bMZgI5Ek= +github.com/prometheus/procfs v0.15.0/go.mod h1:Y0RJ/Y5g5wJpkTisOtqwDSo4HwhGmLB4VQSw2sQJLHk= github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435cARxCW6q9gc0S/Yxz7Mkd38pOb0= github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE= github.com/pulumi/esc v0.9.1 h1:HH5eEv8sgyxSpY5a8yePyqFXzA8cvBvapfH8457+mIs= @@ -489,8 +493,8 @@ github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVK github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U= github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= -github.com/vmihailenco/tagparser v0.1.1 h1:quXMXlA39OCbd2wAdTsGDlK9RkOk6Wuw+x37wVyIuWY= -github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= +github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc= +github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= @@ -503,6 +507,7 @@ github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zclconf/go-cty v1.14.4 h1:uXXczd9QDGsgu0i/QFR/hzI5NYCHLf6NQw/atrbnhq8= github.com/zclconf/go-cty v1.14.4/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= @@ -548,6 +553,7 @@ golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPI golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= @@ -563,6 +569,7 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= @@ -580,6 +587,7 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= @@ -595,7 +603,9 @@ golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -644,6 +654,7 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= diff --git a/test/new-e2e/system-probe/vm-metrics/vm-metrics.go b/test/new-e2e/system-probe/vm-metrics/vm-metrics.go new file mode 100644 index 0000000000000..9d2d0edae409a --- /dev/null +++ b/test/new-e2e/system-probe/vm-metrics/vm-metrics.go @@ -0,0 +1,283 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows + +// Package systemprobe is sets up the remote testing environment for system-probe using the Kernel Matrix Testing framework +package main + +import ( + "flag" + "fmt" + "log" + "os" + "regexp" + "syscall" + "time" + + "github.com/DataDog/datadog-go/v5/statsd" + "github.com/digitalocean/go-libvirt" + "github.com/digitalocean/go-libvirt/socket/dialers" +) + +const kmtMicroVmsPrefix = "kmt.microvm." + +var distrosMatch = map[string]*regexp.Regexp{ + "ubuntu": regexp.MustCompile(`-(ubuntu_[\.,\d]{1,5}).*-`), + "fedora": regexp.MustCompile(`-(fedora_[\.,\d]{1,5}).*-`), + "debian": regexp.MustCompile(`-(debian_[\.,\d]{1,5}).*-`), + "centos": regexp.MustCompile(`-(centos_[\.,\d]{1,5}).*-`), + "amazon": regexp.MustCompile(`-(amazon_[\.,\d]{1,5}).*-`), + "rocky": regexp.MustCompile(`-(rocky_[\.,\d]{1,5}).*-`), + "oracle": regexp.MustCompile(`-(oracle_[\.,\d]{1,5}).*-`), + "opensuse": regexp.MustCompile(`-(opensuse_[\.,\d]{1,5}).*-`), + "suse": regexp.MustCompile(`-(suse_[\.,\d]{1,5}).*-`), +} + +var memStatTagToName = map[libvirt.DomainMemoryStatTags]string{ + libvirt.DomainMemoryStatSwapIn: "swap_in_bytes", // The total amount of data read from swap space (in kB). + libvirt.DomainMemoryStatSwapOut: "swap_out_bytes", // The total amount of memory written out to swap space (in kB). + libvirt.DomainMemoryStatMajorFault: "major_pagefault", // Page faults occur when a process makes a valid access to virtual memory that is not available. When servicing the page fault, if disk IO is required, it is considered a major fault. + libvirt.DomainMemoryStatAvailable: "memory_available_bytes", // The total amount of usable memory as seen by the domain. This value may be less than the amount of memory assigned to the domain if a balloon driver is in use or if the guest OS does not initialize all assigned pages. This value is expressed in kB. + libvirt.DomainMemoryStatActualBalloon: "memory_actual_balloon_bytes", // Current balloon value (in KB). + libvirt.DomainMemoryStatRss: "memory_rss_bytes", // Resident Set Size of the process running the domain. This value is in kB + libvirt.DomainMemoryStatUsable: "memory_usable_bytes", // How much the balloon can be inflated without pushing the guest system to swap, corresponds to 'Available' in /proc/meminfo + libvirt.DomainMemoryStatUnused: "memory_unused_bytes", // The amount of memory left completely unused by the system. Memory that is available but used for reclaimable caches should NOT be reported as free. This value is expressed in kB. +} + +type libvirtInterface interface { + ConnectListAllDomains(int32, libvirt.ConnectListAllDomainsFlags) ([]libvirt.Domain, uint32, error) + DomainMemoryStats(libvirt.Domain, uint32, uint32) ([]libvirt.DomainMemoryStat, error) +} + +type libvirtExporter struct { + libvirt libvirtInterface + statsdClient statsd.ClientInterface +} + +func newLibvirtExporter(l libvirtInterface, client statsd.ClientInterface) *libvirtExporter { + return &libvirtExporter{ + libvirt: l, + statsdClient: client, + } +} + +func (l *libvirtExporter) collect() ([]*domainMetrics, error) { + return collectLibvirtMetrics(l.libvirt) +} + +func (l *libvirtExporter) submit(metrics []*domainMetrics) error { + for _, dm := range metrics { + for _, m := range dm.metrics { + if err := l.statsdClient.Gauge(kmtMicroVmsPrefix+m.name, float64(m.value), m.tags, 1); err != nil { + return fmt.Errorf("error sending metric: %w", err) + } + } + } + if err := l.statsdClient.Flush(); err != nil { + return fmt.Errorf("failed to flush client: %w", err) + } + + return nil +} + +type statsdMetric struct { + name string + value uint64 + tags []string +} + +type domainMetrics struct { + osID string + metrics []statsdMetric + + libvirtDomain libvirt.Domain +} + +func (d *domainMetrics) addMetric(name string, value uint64, tags []string) { + d.metrics = append(d.metrics, statsdMetric{ + name: name, + value: value, + tags: tags, + }) +} + +func kbToBytes(kb uint64) uint64 { + return kb * 1024 +} + +func (d *domainMetrics) collectDomainMemoryStatInfo(l libvirtInterface) error { + memStats, err := l.DomainMemoryStats(d.libvirtDomain, uint32(libvirt.DomainMemoryStatNr), 0) + if err != nil { + return fmt.Errorf("failed to get memory stats: %w", err) + } + + tags := []string{fmt.Sprintf("os:%s", d.osID)} + for _, stat := range memStats { + if statString, ok := memStatTagToName[libvirt.DomainMemoryStatTags(stat.Tag)]; ok { + if stat.Tag == int32(libvirt.DomainMemoryStatMajorFault) { + d.addMetric(statString, stat.Val, tags) + } else { + d.addMetric(statString, kbToBytes(stat.Val), tags) + } + } + } + + return nil +} + +func collectLibvirtMetrics(l libvirtInterface) ([]*domainMetrics, error) { + var dMetrics []*domainMetrics + + domains, _, err := l.ConnectListAllDomains(1, libvirt.ConnectListDomainsActive) + if err != nil { + return nil, fmt.Errorf("failed to list domains: %w", err) + } + + for _, d := range domains { + osID := parseOSInformation(d.Name) + if osID == "" { + continue + } + + dMetrics = append(dMetrics, &domainMetrics{ + osID: osID, + libvirtDomain: d, + }) + } + + for _, d := range dMetrics { + if err := d.collectDomainMemoryStatInfo(l); err != nil { + return nil, fmt.Errorf("failed to collect memory stats for domain %s: %w", d.osID, err) + } + } + + return dMetrics, nil +} + +func parseOSInformation(name string) string { + for _, distro := range distrosMatch { + if match := distro.FindStringSubmatch(name); match != nil { + return match[1] + } + } + + return "" +} + +type tagsList []string + +func (t *tagsList) String() string { + return fmt.Sprintf("%v", *t) +} + +func (t *tagsList) Set(value string) error { + *t = append(*t, value) + return nil +} + +// runAsDaemon function runs the vm-metrics collector as a daemon +// To daemonize a process this function: +// - forksExec the vm-metrics binary, allowing the parent to exit. +// this makes the new process the child of the init process. +// - setsid() on child process. Make the child the session leader +// and release it from the original controlling terminal. +// - Reset umask, so that files are created with the requested +// permissions +func runAsDaemon(daemonLogFile string) error { + if daemonLogFile == "" { + daemonLogFile = "/tmp/vm-metrics.log" + } + + if _, isDaemon := os.LookupEnv("DAEMON_COLLECTOR"); !isDaemon { + f, err := os.OpenFile(daemonLogFile, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) + if err != nil { + return fmt.Errorf("failed to open daemon log file: %w", err) + } + + if _, err := syscall.ForkExec(os.Args[0], os.Args, &syscall.ProcAttr{ + Dir: "/", + Env: append(os.Environ(), "DAEMON_COLLECTOR=1"), + Sys: &syscall.SysProcAttr{ + Setsid: true, + }, + Files: []uintptr{0, f.Fd(), f.Fd()}, // print message to the same pty + }); err != nil { + return fmt.Errorf("failed to fork/exec parent process: %w", err) + } + + os.Exit(0) + } + + // close stdin + stdin := os.NewFile(0, "stdin") + stdin.Close() + + // open /dev/null as stdin + if _, err := os.Open("/dev/null"); err != nil { + return fmt.Errorf("failed to open '/dev/null' as stdin: %w", err) + } + + // clear umask + syscall.Umask(0) + + return nil +} + +func main() { + var globalTags tagsList + + statsdPort := flag.String("statsd-port", "8125", "Statsd port") + statsdHost := flag.String("statsd-host", "127.0.0.1", "Statsd host") + collectionInterval := flag.Duration("interval", time.Second*20, "interval for collecting vm stats") + libvirtDaemonURI := flag.String("libvirt-uri", "", "libvirt daemon URI") + daemonize := flag.Bool("daemon", false, "run collector as a daemon") + daemonLogFile := flag.String("log-file", "", "log file daemon") + flag.Var(&globalTags, "tag", "global tags to set") + flag.Parse() + + if *daemonize { + if err := runAsDaemon(*daemonLogFile); err != nil { + log.Printf("failed to run collector as daemon: %v", err) + return + } + } + + log.Printf("VM metrics collector started") + + dialer := dialers.NewLocal(dialers.WithSocket(*libvirtDaemonURI), dialers.WithLocalTimeout((5 * time.Second))) + l := libvirt.NewWithDialer(dialer) + if err := l.ConnectToURI(libvirt.QEMUSystem); err != nil { + log.Fatalf("failed to connect to libvirt: %v", err) + } + defer func() { + if err := l.Disconnect(); err != nil { + log.Printf("failed to disconnect: %v", err) + } + }() + + log.Printf("launching statsd with global tags: %v", globalTags) + dogstatsdClient, err := statsd.New(fmt.Sprintf("%s:%s", *statsdHost, *statsdPort), statsd.WithTags(globalTags)) + if err != nil { + log.Fatal(err) + } + + lexporter := newLibvirtExporter(l, dogstatsdClient) + + for range time.Tick(*collectionInterval) { + metrics, err := lexporter.collect() + if err != nil { + log.Fatal(err) + } + + log.Println("Submitting metrics to statsd:") + for _, m := range metrics { + log.Printf(" %v", *m) + } + if err := lexporter.submit(metrics); err != nil { + log.Fatal(err) + } + } +} diff --git a/test/new-e2e/system-probe/vm-metrics/vm-metrics_test.go b/test/new-e2e/system-probe/vm-metrics/vm-metrics_test.go new file mode 100644 index 0000000000000..657859a3d68fa --- /dev/null +++ b/test/new-e2e/system-probe/vm-metrics/vm-metrics_test.go @@ -0,0 +1,139 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +//go:build !windows + +package main + +import ( + "strings" + "testing" + + "github.com/DataDog/datadog-agent/pkg/trace/teststatsd" + "github.com/digitalocean/go-libvirt" + "github.com/stretchr/testify/require" +) + +var memStats = map[libvirt.DomainMemoryStatTags]uint64{ + libvirt.DomainMemoryStatSwapIn: 10, + libvirt.DomainMemoryStatSwapOut: 20, + libvirt.DomainMemoryStatMajorFault: 30, + libvirt.DomainMemoryStatAvailable: 40, + libvirt.DomainMemoryStatActualBalloon: 50, + libvirt.DomainMemoryStatRss: 60, + libvirt.DomainMemoryStatUnused: 70, + libvirt.DomainMemoryStatUsable: 80, +} + +var nameToTag = map[string]libvirt.DomainMemoryStatTags{ + "swap_in_bytes": libvirt.DomainMemoryStatSwapIn, + "swap_out_bytes": libvirt.DomainMemoryStatSwapOut, + "major_pagefault": libvirt.DomainMemoryStatMajorFault, + "memory_available_bytes": libvirt.DomainMemoryStatAvailable, + "memory_actual_balloon_bytes": libvirt.DomainMemoryStatActualBalloon, + "memory_rss_bytes": libvirt.DomainMemoryStatRss, + "memory_usable_bytes": libvirt.DomainMemoryStatUsable, + "memory_unused_bytes": libvirt.DomainMemoryStatUnused, +} + +func TestParseOSInformation(t *testing.T) { + cases := map[string]string{ + "x86_64-fedora_37-distro_x86_64-no_usm-ddvm-4-12288": "fedora_37", + "x86_64-fedora_38-distro_x86_64-no_usm-ddvm-4-12288": "fedora_38", + "x86_64-amazon_4.14-distro_x86_64-no_usm-ddvm-4-12288": "amazon_4.14", + "x86_64-amazon_5.10-distro_x86_64-no_usm-ddvm-4-12288": "amazon_5.10", + "x86_64-amazon_5.4-distro_x86_64-no_usm-ddvm-4-12288": "amazon_5.4", + "x86_64-amazon_2023-distro_x86_64-no_usm-ddvm-4-12288": "amazon_2023", + "x86_64-centos_7.9-distro_x86_64-no_usm-ddvm-4-12288": "centos_7.9", + "x86_64-centos_8-distro_x86_64-no_usm-ddvm-4-12288": "centos_8", + "x86_64-ubuntu_24.04-all_tests-distro_x86_64-ddvm-4-12288": "ubuntu_24.04", + "arm64-ubuntu_23.10-distro_arm64-no_usm-ddvm-4-12288": "ubuntu_23.10", + "arm64-ubuntu_22.04-distro_arm64-no_usm-ddvm-4-12288": "ubuntu_22.04", + "arm64-ubuntu_20.04-distro_arm64-no_usm-ddvm-4-12288": "ubuntu_20.04", + "arm64-ubuntu_18.04-distro_arm64-no_usm-ddvm-4-12288": "ubuntu_18.04", + "x86_64-ubuntu_16.04-distro_x86_64-no_usm-ddvm-4-12288": "ubuntu_16.04", + "x86_64-debian_9-distro_x86_64-no_usm-ddvm-4-12288": "debian_9", + "x86_64-debian_10-only_usm-distro_x86_64-ddvm-4-12288": "debian_10", + "x86_64-debian_11-only_usm-distro_x86_64-ddvm-4-12288": "debian_11", + "x86_64-debian_12-only_usm-distro_x86_64-ddvm-4-12288": "debian_12", + "x86_64-suse_12.5-all_tests-distro_x86_64-ddvm-4-12288": "suse_12.5", + "x86_64-opensuse_15.5-all_tests-distro_x86_64-ddvm-4-12288": "opensuse_15.5", + "x86_64-opensuse_15.3-all_tests-distro_x86_64-ddvm-4-12288": "opensuse_15.3", + "x86_64-rocky_9.3-all_tests-distro_x86_64-ddvm-4-12288": "rocky_9.3", + "x86_64-rocky_8.5-all_tests-distro_x86_64-ddvm-4-12288": "rocky_8.5", + "x86_64-oracle_9.3-all_tests-distro_x86_64-ddvm-4-12288": "oracle_9.3", + "x86_64-oracle_8.9-all_tests-distro_x86_64-ddvm-4-12288": "oracle_8.9", + } + + for id, os := range cases { + osID := parseOSInformation(id) + require.Equal(t, osID, os) + } +} + +type libvirtMock struct{} + +func (l *libvirtMock) ConnectListAllDomains(_ int32, _ libvirt.ConnectListAllDomainsFlags) ([]libvirt.Domain, uint32, error) { + return []libvirt.Domain{ + {Name: "x86_64-debian_12-only_usm-distro_x86_64-ddvm-4-12288"}, + {Name: "x86_64-ubuntu_16.04-distro_x86_64-no_usm-ddvm-4-12288"}, + }, 0, nil +} + +func (l *libvirtMock) DomainMemoryStats(_ libvirt.Domain, _ uint32, _ uint32) ([]libvirt.DomainMemoryStat, error) { + var stats []libvirt.DomainMemoryStat + for tag, val := range memStats { + stats = append(stats, libvirt.DomainMemoryStat{ + Tag: int32(tag), + Val: val, + }) + } + return stats, nil +} + +func bytesToKb(bytes uint64) uint64 { + return bytes / 1024 +} + +func TestLibvirtCollectMetrics(t *testing.T) { + lexporter := newLibvirtExporter(&libvirtMock{}, &teststatsd.Client{}) + + domainMetrics, err := lexporter.collect() + require.NoError(t, err) + + for _, dm := range domainMetrics { + for _, m := range dm.metrics { + tag, ok := nameToTag[m.name] + require.True(t, ok) + + if tag == libvirt.DomainMemoryStatMajorFault { + require.Equal(t, memStats[tag], m.value) + } else { + require.Equal(t, memStats[tag], bytesToKb(m.value)) + } + } + } +} +func TestLibvirtSubmitMetrics(t *testing.T) { + lexporter := newLibvirtExporter(&libvirtMock{}, &teststatsd.Client{}) + + domainMetrics, err := lexporter.collect() + require.NoError(t, err) + + err = lexporter.submit(domainMetrics) + require.NoError(t, err) + + for name, summary := range lexporter.statsdClient.(*teststatsd.Client).GetGaugeSummaries() { + statName := strings.TrimPrefix(name, kmtMicroVmsPrefix) + expectedVal := memStats[nameToTag[statName]] + if statName != "major_pagefault" { + expectedVal *= 1024 + } + + for _, call := range summary.Calls { + require.Equal(t, call.Value, float64(expectedVal)) + } + } +} From c1c9a1bf302363e1c39c6c79f66cdc0e1eb949d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20Juli=C3=A1n?= Date: Wed, 11 Sep 2024 17:14:29 +0200 Subject: [PATCH 004/195] [EBPF] Improve pulumi error parsing for KMT diagnostics (#29249) --- test/new-e2e/system-probe/errors.go | 41 ++++--- test/new-e2e/system-probe/errors_test.go | 146 +++++++++++++++++++++-- 2 files changed, 162 insertions(+), 25 deletions(-) diff --git a/test/new-e2e/system-probe/errors.go b/test/new-e2e/system-probe/errors.go index 91cb123602fe2..0ac077d8a1276 100644 --- a/test/new-e2e/system-probe/errors.go +++ b/test/new-e2e/system-probe/errors.go @@ -218,9 +218,6 @@ type pulumiError struct { } var commandRegex = regexp.MustCompile(`^ command:remote:Command \(([^\)]+)\):$`) -var archRegex = regexp.MustCompile(`distro_(arm64|x86_64)`) -var vmCmdRegex = regexp.MustCompile(`-cmd-.+-ddvm-\d+-\d+-(.+)$`) -var vmNameRegex = regexp.MustCompile(`-([^-]+)-distro`) func parsePulumiDiagnostics(message string) *pulumiError { var perr pulumiError @@ -245,20 +242,7 @@ func parsePulumiDiagnostics(message string) *pulumiError { if commandMatch != nil { perr.command = commandMatch[1] - archMatch := archRegex.FindStringSubmatch(perr.command) - if archMatch != nil { - perr.arch = archMatch[1] - } - - vmCmdMatch := vmCmdRegex.FindStringSubmatch(perr.command) - if vmCmdMatch != nil { - perr.vmCommand = vmCmdMatch[1] - } - - vmNameMatch := vmNameRegex.FindStringSubmatch(perr.command) - if vmNameMatch != nil { - perr.vmName = vmNameMatch[1] - } + perr.arch, perr.vmCommand, perr.vmName = parsePulumiComand(perr.command) } } else { perr.errorMessage += strings.Trim(line, " ") + "\n" @@ -267,3 +251,26 @@ func parsePulumiDiagnostics(message string) *pulumiError { return nil } + +var archRegex = regexp.MustCompile(`distro_(arm64|x86_64)`) +var vmCmdRegex = regexp.MustCompile(`-cmd-.+-(?:ddvm-\d+-\d+|distro_(?:x86_64|arm64))-(.+)$`) +var vmNameRegex = regexp.MustCompile(`-(?:conn|cmd)-(?:arm64|x86_64)-([^-]+)-`) + +func parsePulumiComand(command string) (arch, vmCommand, vmName string) { + archMatch := archRegex.FindStringSubmatch(command) + if archMatch != nil { + arch = archMatch[1] + } + + vmCmdMatch := vmCmdRegex.FindStringSubmatch(command) + if vmCmdMatch != nil { + vmCommand = vmCmdMatch[1] + } + + vmNameMatch := vmNameRegex.FindStringSubmatch(command) + if vmNameMatch != nil { + vmName = vmNameMatch[1] + } + + return +} diff --git a/test/new-e2e/system-probe/errors_test.go b/test/new-e2e/system-probe/errors_test.go index eeee52d43fb4f..84ae28f4f9baf 100644 --- a/test/new-e2e/system-probe/errors_test.go +++ b/test/new-e2e/system-probe/errors_test.go @@ -13,7 +13,7 @@ import ( "github.com/stretchr/testify/require" ) -const output = ` +const outputLocalError = ` Updating (gjulian-guillermo.julian-e2e-report-all-errors-ddvm): pulumi:pulumi:Stack e2elocal-gjulian-guillermo.julian-e2e-report-all-errors-ddvm running @@ -94,12 +94,142 @@ Resources: Duration: 6s ` +const outputSSHFailed = ` + pulumi:pulumi:Stack e2eci-ci-630160752-4670-kernel-matrix-testing-system-probe-arm64-43724877 **failed** 1 error +Diagnostics: + pulumi:pulumi:Stack (e2eci-ci-630160752-4670-kernel-matrix-testing-system-probe-arm64-43724877): + error: update failed + command:remote:Command (remote-ci-630160752-4670-kernel-matrix-testing-system-probe-arm64-43724877-arm64-conn-arm64-fedora_37-no_usm-distro_arm64-ddvm-4-12288-cmd-arm64-fedora_37-no_usm-distro_arm64-ddvm-4-12288-mount-disk-dev-vdb): + error: proxy: after 60 failed attempts: ssh: rejected: connect failed (No route to host) +Outputs: + kmt-stack: [secret] +Resources: + +-8 replaced + 349 unchanged +Duration: 7m35s +` + +const outputSSHFailedWithChangedOrder = ` +@ updating.... + + pulumi:pulumi:Stack e2eci-ci-630160752-4670-kernel-matrix-testing-system-probe-arm64-43724877 creating (933s) error: update failed + + pulumi:pulumi:Stack e2eci-ci-630160752-4670-kernel-matrix-testing-system-probe-arm64-43724877 **creating failed (933s)** 1 error +Diagnostics: + command:remote:Command (remote-ci-630160752-4670-kernel-matrix-testing-system-probe-arm64-43724877-arm64-conn-arm64-fedora_37-no_usm-distro_arm64-ddvm-4-12288-cmd-arm64-fedora_37-no_usm-distro_arm64-ddvm-4-12288-mount-disk-dev-vdb): + error: proxy: after 60 failed attempts: ssh: rejected: connect failed (No route to host) + + pulumi:pulumi:Stack (e2eci-ci-630160752-4670-kernel-matrix-testing-system-probe-arm64-43724877): + error: update failed + +Outputs: + kmt-stack: [secret] + +Resources: + + 357 created + +Duration: 15m34s +` + func TestParseDiagnostics(t *testing.T) { - result := parsePulumiDiagnostics(output) - require.NotNil(t, result) - require.Equal(t, "remote-gjulian-guillermo.julian-e2e-report-all-errors-ddvm-arm64-conn-arm64-ubuntu_22.04-distro_arm64-ddvm-4-8192-cmd-arm64-ubuntu_22.04-distro_arm64-ddvm-4-8192-mount-disk-dev-vdb", result.command) - require.Equal(t, "arm64", result.arch) - require.Equal(t, "mount-disk-dev-vdb", result.vmCommand) - require.Equal(t, "error: Process exited with status 127: running \" nocommand /mnt/docker && mount /dev/vdb /mnt/docker\":\nbash: line 1: nocommand: command not found\n", result.errorMessage) - require.Equal(t, "ubuntu_22.04", result.vmName) + cases := []struct { + caseName string + output string + result pulumiError + }{ + { + caseName: "LocalError", + output: outputLocalError, + result: pulumiError{ + command: "remote-gjulian-guillermo.julian-e2e-report-all-errors-ddvm-arm64-conn-arm64-ubuntu_22.04-distro_arm64-ddvm-4-8192-cmd-arm64-ubuntu_22.04-distro_arm64-ddvm-4-8192-mount-disk-dev-vdb", + arch: "arm64", + vmCommand: "mount-disk-dev-vdb", + errorMessage: "error: Process exited with status 127: running \" nocommand /mnt/docker && mount /dev/vdb /mnt/docker\":\nbash: line 1: nocommand: command not found\n", + vmName: "ubuntu_22.04", + }, + }, + { + caseName: "SSHFailed", + output: outputSSHFailed, + result: pulumiError{ + command: "remote-ci-630160752-4670-kernel-matrix-testing-system-probe-arm64-43724877-arm64-conn-arm64-fedora_37-no_usm-distro_arm64-ddvm-4-12288-cmd-arm64-fedora_37-no_usm-distro_arm64-ddvm-4-12288-mount-disk-dev-vdb", + arch: "arm64", + vmCommand: "mount-disk-dev-vdb", + vmName: "fedora_37", + errorMessage: "error: proxy: after 60 failed attempts: ssh: rejected: connect failed (No route to host)\n", + }, + }, + { + caseName: "SSHFailedWithChangedOrder", + output: outputSSHFailedWithChangedOrder, + result: pulumiError{ + command: "remote-ci-630160752-4670-kernel-matrix-testing-system-probe-arm64-43724877-arm64-conn-arm64-fedora_37-no_usm-distro_arm64-ddvm-4-12288-cmd-arm64-fedora_37-no_usm-distro_arm64-ddvm-4-12288-mount-disk-dev-vdb", + arch: "arm64", + vmCommand: "mount-disk-dev-vdb", + vmName: "fedora_37", + errorMessage: "error: proxy: after 60 failed attempts: ssh: rejected: connect failed (No route to host)\n", + }, + }, + } + + for _, c := range cases { + t.Run(c.caseName, func(tt *testing.T) { + result := parsePulumiDiagnostics(c.output) + require.NotNil(tt, result) + require.Equal(tt, c.result, *result) + }) + } +} + +func TestParsePulumiCommand(t *testing.T) { + cases := []struct { + caseName string + command string + arch string + vmCmd string + vmName string + }{ + { + caseName: "NoVMSet", + command: "remote-gjulian-guillermo.julian-e2e-report-all-errors-ddvm-arm64-conn-arm64-ubuntu_22.04-distro_arm64-ddvm-4-8192-cmd-arm64-ubuntu_22.04-distro_arm64-ddvm-4-8192-mount-disk-dev-vdb", + arch: "arm64", + vmCmd: "mount-disk-dev-vdb", + vmName: "ubuntu_22.04", + }, + { + caseName: "CommandWithoutVM", + command: "remote-aws-ci-634872953-4670-kernel-matrix-testing-system-probe-x86-64-44043832-x86_64-cmd-only_usm-distro_x86_64-download-with-curl", + arch: "x86_64", + vmCmd: "download-with-curl", + vmName: "", + }, + { + caseName: "DomainCreationCommand", + command: "remote-aws-ci-632806887-4670-kernel-matrix-testing-system-probe-arm64-43913143-arm64-cmd-arm64-debian_12-distro_arm64-no_usm-ddvm-4-12288-create-nvram", + arch: "arm64", + vmCmd: "create-nvram", + vmName: "debian_12", + }, + { + caseName: "AlteredTagOrder", + command: "remote-ci-632806887-4670-kernel-matrix-testing-system-probe-arm64-43913143-arm64-conn-arm64-ubuntu_23.10-only_usm-distro_arm64-ddvm-4-12288-cmd-arm64-ubuntu_23.10-only_usm-distro_arm64-ddvm-4-12288-set-docker-data-root", + arch: "arm64", + vmCmd: "set-docker-data-root", + vmName: "ubuntu_23.10", + }, + { + caseName: "CommandWithVMSet", + command: "remote-ci-630160752-4670-kernel-matrix-testing-system-probe-arm64-43724877-arm64-conn-arm64-fedora_37-no_usm-distro_arm64-ddvm-4-12288-cmd-arm64-fedora_37-no_usm-distro_arm64-ddvm-4-12288-mount-disk-dev-vdb", + arch: "arm64", + vmCmd: "mount-disk-dev-vdb", + vmName: "fedora_37", + }, + } + + for _, c := range cases { + t.Run(c.caseName, func(tt *testing.T) { + arch, vmCmd, vmName := parsePulumiComand(c.command) + require.Equal(tt, c.arch, arch) + require.Equal(tt, c.vmCmd, vmCmd) + require.Equal(tt, c.vmName, vmName) + }) + } } From 88f1a37ee909c9ece42732560c7d67673cb66580 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Wed, 11 Sep 2024 19:19:16 +0200 Subject: [PATCH 005/195] [CWS] only log as debug when failing to parse IMDS event (#29256) --- pkg/security/probe/probe_ebpf.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/security/probe/probe_ebpf.go b/pkg/security/probe/probe_ebpf.go index ca88215596b59..a05c3254faaaf 100644 --- a/pkg/security/probe/probe_ebpf.go +++ b/pkg/security/probe/probe_ebpf.go @@ -1001,7 +1001,8 @@ func (p *EBPFProbe) handleEvent(CPU int, data []byte) { } case model.IMDSEventType: if _, err = event.IMDS.UnmarshalBinary(data[offset:]); err != nil { - seclog.Errorf("failed to decode IMDS event: %s (offset %d, len %d)", err, offset, len(data)) + // it's very possible we can't parse the IMDS body, as such let's put it as debug for now + seclog.Debugf("failed to decode IMDS event: %s (offset %d, len %d)", err, offset, len(data)) return } defer p.Resolvers.ProcessResolver.UpdateAWSSecurityCredentials(event.PIDContext.Pid, event) From ac0bf1af48a6f2ac64d4f0764e344413b846b0b4 Mon Sep 17 00:00:00 2001 From: Jaime Fullaondo Date: Wed, 11 Sep 2024 19:19:48 +0200 Subject: [PATCH 006/195] [gitlab] introduce versioning for otel images (#29215) --- .../deploy_containers_a7.yml | 46 ++++++++++++------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/.gitlab/deploy_containers/deploy_containers_a7.yml b/.gitlab/deploy_containers/deploy_containers_a7.yml index 5d3fdac92be9a..d4b2ae4d6ad8f 100644 --- a/.gitlab/deploy_containers/deploy_containers_a7.yml +++ b/.gitlab/deploy_containers/deploy_containers_a7.yml @@ -45,6 +45,16 @@ include: - "-servercore" - "-linux" +.deploy_containers-a7-base-ot: + extends: .docker_publish_job_definition + stage: deploy_containers + rules: + - when: manual + allow_failure: true + variables: + AGENT_REPOSITORY: agent + IMG_REGISTRIES: public + dependencies: [] deploy_containers-a7: extends: .deploy_containers-a7_external @@ -86,22 +96,16 @@ deploy_containers-a7_internal-rc: deploy_containers-ot: - extends: .docker_publish_job_definition - stage: deploy_containers - rules: - - when: manual - allow_failure: true - variables: - AGENT_REPOSITORY: agent - IMG_REGISTRIES: public - VERSION: 7 - dependencies: [] + extends: .deploy_containers-a7-base-ot + before_script: + - if [[ "$VERSION" == "" ]]; then export VERSION="$(inv agent.version --major-version 7 --url-safe --pipeline-id $PARENT_PIPELINE_ID)"; fi + - export IMG_SOURCES="${SRC_AGENT}:v${PARENT_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-ot-beta${JMX}-amd64,${SRC_AGENT}:v${PARENT_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-ot-beta${JMX}-arm64" + - export IMG_DESTINATIONS="${AGENT_REPOSITORY}:${VERSION}-ot-beta${JMX}" parallel: matrix: - - IMG_SOURCES: ${SRC_AGENT}:v${PARENT_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-ot-beta-amd64,${SRC_AGENT}:v${PARENT_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-ot-beta-arm64 - IMG_DESTINATIONS: ${AGENT_REPOSITORY}:${VERSION}-ot-beta - - IMG_SOURCES: ${SRC_AGENT}:v${PARENT_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-ot-beta-jmx-amd64,${SRC_AGENT}:v${PARENT_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-ot-beta-jmx-arm64 - IMG_DESTINATIONS: ${AGENT_REPOSITORY}:${VERSION}-ot-beta-jmx + - JMX: + - "" + - "-jmx" # @@ -129,7 +133,6 @@ deploy_containers_latest-a7: IMG_SOURCES: "%BASE%-win1809-servercore-amd64,%BASE%-winltsc2022-servercore-amd64" IMG_DESTINATIONS: ${AGENT_REPOSITORY}:7-servercore-jmx,${AGENT_REPOSITORY}:latest-servercore-jmx - deploy_containers_latest-a7_internal: extends: .docker_publish_job_definition stage: deploy_containers @@ -142,7 +145,6 @@ deploy_containers_latest-a7_internal: IMG_SOURCES: "%BASE%-amd64,%BASE%-arm64,%BASE%-win1809-amd64,%BASE%-winltsc2022-amd64" IMG_DESTINATIONS: ${AGENT_REPOSITORY}:7-jmx - deploy_containers_latest-dogstatsd: extends: .docker_publish_job_definition stage: deploy_containers @@ -152,3 +154,15 @@ deploy_containers_latest-dogstatsd: variables: IMG_SOURCES: ${SRC_DSD}:v${PARENT_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-amd64,${SRC_DSD}:v${PARENT_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-arm64 IMG_DESTINATIONS: ${DSD_REPOSITORY}:7,${DSD_REPOSITORY}:latest + +deploy_containers_latest-ot: + extends: .deploy_containers-a7-base-ot + variables: + VERSION: 7 + parallel: + matrix: + - IMG_SOURCES: ${SRC_AGENT}:v${PARENT_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-ot-beta-amd64,${SRC_AGENT}:v${PARENT_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-ot-beta-arm64 + IMG_DESTINATIONS: ${AGENT_REPOSITORY}:${VERSION}-ot-beta + - IMG_SOURCES: ${SRC_AGENT}:v${PARENT_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-ot-beta-jmx-amd64,${SRC_AGENT}:v${PARENT_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-ot-beta-jmx-arm64 + IMG_DESTINATIONS: ${AGENT_REPOSITORY}:${VERSION}-ot-beta-jmx + From f0ff19823707d338001c9952022b8c8af5d6c43e Mon Sep 17 00:00:00 2001 From: Dustin Long Date: Wed, 11 Sep 2024 13:33:18 -0400 Subject: [PATCH 007/195] Sort mapNode keys to fix flaky test (#29264) --- pkg/config/structure/unmarshal.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/config/structure/unmarshal.go b/pkg/config/structure/unmarshal.go index 97420043e2268..9fae31b6399b9 100644 --- a/pkg/config/structure/unmarshal.go +++ b/pkg/config/structure/unmarshal.go @@ -9,6 +9,7 @@ package structure import ( "fmt" "reflect" + "slices" "strings" "unicode" "unicode/utf8" @@ -163,6 +164,8 @@ func (n *innerMapNodeImpl) ChildrenKeys() ([]string, error) { return nil, fmt.Errorf("map node has invalid non-string key: %v", kv) } } + // map keys are iterated non-deterministically, sort them + slices.Sort(keys) return keys, nil } From 792217d8ffa9099dbe1d722046bd3cd8e3579590 Mon Sep 17 00:00:00 2001 From: Alexandre Yang Date: Wed, 11 Sep 2024 19:35:59 +0200 Subject: [PATCH 008/195] [network path] recommend not setting port (#29260) --- cmd/agent/dist/conf.d/network_path.d/conf.yaml.example | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/agent/dist/conf.d/network_path.d/conf.yaml.example b/cmd/agent/dist/conf.d/network_path.d/conf.yaml.example index 6f3e29eed0bfd..89299ee1c00f3 100644 --- a/cmd/agent/dist/conf.d/network_path.d/conf.yaml.example +++ b/cmd/agent/dist/conf.d/network_path.d/conf.yaml.example @@ -21,6 +21,7 @@ instances: ## @param port - integer - optional ## Port of the target endpoint to monitor via Network Path. + ## For UDP, we do not recommend setting the port since it can make probes less reliable. ## If port is not set, a random port will be used. # # port: From 18ad7b352bfff8a8e2f8279e3289a4b0fb2c8c0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20Juli=C3=A1n?= Date: Wed, 11 Sep 2024 19:59:09 +0200 Subject: [PATCH 009/195] [EBPF] Fall back to single-item iterator in GenericMap (#29220) --- pkg/ebpf/maps/generic_map.go | 27 +++++++++++++++++--- pkg/ebpf/maps/generic_map_test.go | 41 +++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/pkg/ebpf/maps/generic_map.go b/pkg/ebpf/maps/generic_map.go index 0e762c48cf00c..3a0f2594ada25 100644 --- a/pkg/ebpf/maps/generic_map.go +++ b/pkg/ebpf/maps/generic_map.go @@ -9,6 +9,8 @@ package maps import ( + "bytes" + "encoding/binary" "errors" "fmt" "reflect" @@ -53,7 +55,18 @@ var BatchAPISupported = funcs.MemoizeNoError(func() bool { // GenericMap is a wrapper around ebpf.Map that allows to use generic types. // Also includes support for batch iterations type GenericMap[K any, V any] struct { - m *ebpf.Map + m *ebpf.Map + keySupportsBatchAPI bool +} + +func canBinaryReadKey[K any]() bool { + kval := new(K) + buffer := make([]byte, unsafe.Sizeof(*kval)) + reader := bytes.NewReader(buffer) + + err := binary.Read(reader, binary.LittleEndian, kval) + + return err == nil } // NewGenericMap creates a new GenericMap with the given spec. Key and Value sizes are automatically @@ -78,13 +91,21 @@ func NewGenericMap[K any, V any](spec *ebpf.MapSpec) (*GenericMap[K, V], error) spec.ValueSize = uint32(unsafe.Sizeof(vval)) } + // See if we can perform binary.Read on the key type. If we can't we can't use the batch API + // for this map + keySupportsBatchAPI := canBinaryReadKey[K]() + if !keySupportsBatchAPI { + log.Warnf("Key type %T does not support binary.Read, batch API will not be used for this map", kval) + } + m, err := ebpf.NewMap(spec) if err != nil { return nil, err } return &GenericMap[K, V]{ - m: m, + m: m, + keySupportsBatchAPI: keySupportsBatchAPI, }, nil } @@ -221,7 +242,7 @@ func (g *GenericMap[K, V]) IterateWithBatchSize(batchSize int) GenericMapIterato batchSize = int(g.m.MaxEntries()) } - if BatchAPISupported() && !g.isPerCPU() && batchSize > 1 { + if g.keySupportsBatchAPI && BatchAPISupported() && !g.isPerCPU() && batchSize > 1 { it := &genericMapBatchIterator[K, V]{ m: g.m, batchSize: batchSize, diff --git a/pkg/ebpf/maps/generic_map_test.go b/pkg/ebpf/maps/generic_map_test.go index 261571b440a73..3bc59f494f8b6 100644 --- a/pkg/ebpf/maps/generic_map_test.go +++ b/pkg/ebpf/maps/generic_map_test.go @@ -531,3 +531,44 @@ func TestBatchUpdate(t *testing.T) { require.True(t, foundElements[i]) } } + +type keyWithPointer struct { + Pointer *uint32 + Value uint32 +} + +func TestIterateWithPointerKey(t *testing.T) { + require.NoError(t, rlimit.RemoveMemlock()) + + m, err := NewGenericMap[keyWithPointer, uint32](&ebpf.MapSpec{ + Type: ebpf.Hash, + MaxEntries: 100, + }) + require.NoError(t, err) + + numsToPut := uint32(50) + theNumber := uint32(42) + expectedNumbers := make([]uint32, numsToPut) + for i := uint32(0); i < numsToPut; i++ { + require.NoError(t, m.Put(&keyWithPointer{Pointer: &theNumber, Value: i}, &i)) + expectedNumbers[i] = i + } + + var k keyWithPointer + var v uint32 + actualNumbers := make([]uint32, numsToPut) + + // Should automatically revert to the single item iterator, as we cannot use pointers + // in batch iterators + it := m.IterateWithBatchSize(10) + require.NotNil(t, it) + for it.Next(&k, &v) { + actualNumbers[k.Value] = v + require.Equal(t, theNumber, *k.Pointer) + require.Equal(t, &theNumber, k.Pointer) + require.Equal(t, k.Value, v) + } + + require.NoError(t, it.Err()) + require.Equal(t, expectedNumbers, actualNumbers) +} From 0c2181220f857d533dca5717dad396e6c20a19bb Mon Sep 17 00:00:00 2001 From: Yang Song Date: Wed, 11 Sep 2024 15:20:58 -0400 Subject: [PATCH 010/195] [OTEL-2071] Map deployment.environment.name to env (#29157) --- .../exporter/datadogexporter/go.mod | 8 +++--- .../exporter/datadogexporter/go.sum | 24 ++++++++--------- .../exporter/logsagentexporter/go.mod | 6 ++--- .../exporter/logsagentexporter/go.sum | 12 ++++----- .../exporter/serializerexporter/go.mod | 6 ++--- .../exporter/serializerexporter/go.sum | 16 +++++------ .../otlp/components/statsprocessor/go.mod | 2 +- .../otlp/components/statsprocessor/go.sum | 4 +-- comp/otelcol/otlp/testutil/go.mod | 4 +-- comp/otelcol/otlp/testutil/go.sum | 8 +++--- comp/trace/agent/def/go.mod | 2 +- comp/trace/agent/def/go.sum | 4 +-- go.mod | 10 +++---- go.sum | 24 ++++++++--------- pkg/metrics/go.mod | 2 +- pkg/metrics/go.sum | 8 +++--- pkg/serializer/go.mod | 2 +- pkg/serializer/go.sum | 8 +++--- pkg/trace/api/otlp.go | 6 +++-- pkg/trace/api/otlp_test.go | 27 +++++++++++++++++++ pkg/trace/go.mod | 2 +- pkg/trace/go.sum | 4 +-- pkg/trace/stats/otel_util.go | 3 ++- pkg/trace/stats/otel_util_test.go | 9 +++++++ pkg/trace/stats/oteltest/go.mod | 2 +- pkg/trace/stats/oteltest/go.sum | 4 +-- .../notes/otlp-env-convention-b5c9da638d.yaml | 11 ++++++++ test/otel/go.mod | 8 +++--- test/otel/go.sum | 24 ++++++++--------- 29 files changed, 150 insertions(+), 100 deletions(-) create mode 100644 releasenotes/notes/otlp-env-convention-b5c9da638d.yaml diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod index 5f48e6da16c46..49df310b52c0a 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod @@ -99,8 +99,8 @@ require ( github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.56.0-rc.3 github.com/DataDog/datadog-go/v5 v5.5.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.18.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.18.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.20.0 github.com/stretchr/testify v1.9.0 go.opentelemetry.io/collector/component v0.104.0 go.opentelemetry.io/collector/config/configauth v0.104.0 @@ -188,8 +188,8 @@ require ( github.com/DataDog/go-sqllexer v0.0.14 // indirect github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.16.1 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.18.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.20.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/DataDog/zstd v1.5.5 // indirect diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum index cdf2e4f5f136d..6c32aacebcc70 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum @@ -14,18 +14,18 @@ github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4ti github.com/DataDog/go-tuf v1.1.0-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.17.0 h1:weAPKDi/dTlBbWU4oDZ55ubomqUob6OWPoUcdBjWM2M= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.17.0/go.mod h1:VrcmO2+HTWXaGYin1pAAXWNEtaza/DCJDH/+t5IY5rs= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.18.0 h1:KNiq6ofE5BBMQjl7w9fftg8z44C9z51w7qOWIKs5SCg= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.18.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.18.0 h1:FaUFQE8IuaNdpOQGIhoy2h58v8AVND+yZG3gVqKAwLQ= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.18.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.16.1 h1:px2+7svK86oeCGd+sT1x/9f0pqIJdApGFnWI0AOPXwA= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.16.1/go.mod h1:+LijQ2LdlocAQ4WB+7KsoIGe90bfogkRslubd9swVow= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.18.0 h1:Fija8Qo0z/HngskYyBpMqmJKM2ejNr1NfXUyWszFDAw= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.18.0/go.mod h1:lNu6vfFNCV/tyWxs8x8nCN1TqK+bPeI2dbnlwFTs8VA= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.18.0 h1:x6re32f8gQ8fdCllywQyAbxQuXNrgxeimpLBfvwA97g= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.18.0/go.mod h1:R84ZVbxKSgMxzvJro/MftVrlkGm2C2gndUhV35wyR8A= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.20.0 h1:jdsuH8u4rxfvy3ZHoSLk5NAZrQMNZqyJwhM15FpEswE= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.20.0/go.mod h1:KI5I5JhJNOQWeE4vs+qk+BY/9PVSDwNmSjrCUrmuZKw= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.20.0 h1:e4XT2+v4vgZBCbp5JUbe0Z+PRegh+nsLMp4X+esht9E= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.20.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 h1:fKv05WFWHCXQmUTehW1eEZvXJP65Qv00W4V01B1EqSA= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.20.0 h1:JLpKc1QpkaUXEFgN68/Q9XgF0XgbVl/IXd8S1KUcEV4= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.20.0/go.mod h1:VJtgUHCz38obs58oEjNjEre6IaHmR+s7o4DvX74knq4= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.20.0 h1:b60rxWT/EwcSA4l/zXfqTZp3udXJ1fKtz7+Qwat8OjQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.20.0/go.mod h1:6jM34grB+zhMrzWgM0V8B6vyIJ/75oAfjcx/mJWv6cE= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0 h1:0OFAPO964qsj6BzKs/hbAkpO/IIHp7vN1klKrohzULA= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0/go.mod h1:IDaKpBfDtw8eWBLtXR14HB5dsXDxS4VRUR0OL5rlRT8= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod index e689f59dd1341..33d8b3e3dd81b 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod @@ -45,8 +45,8 @@ require ( github.com/DataDog/datadog-agent/pkg/logs/message v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/sources v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.17.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.14.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.20.0 github.com/stormcat24/protodep v0.1.8 github.com/stretchr/testify v1.9.0 go.opentelemetry.io/collector/component v0.104.0 @@ -75,7 +75,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.13.0 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.17.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.20.0 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/DataDog/zstd v1.5.2 // indirect diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum index 35e04032d9e4c..4c182e6b228bd 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum @@ -2,12 +2,12 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/datadog-api-client-go/v2 v2.13.0 h1:2c1dXSyUfum2YIVoYlqnBhV5JOG1cLSW+4jB3RrKjLc= github.com/DataDog/datadog-api-client-go/v2 v2.13.0/go.mod h1:kntOqXEh1SmjwSDzW/eJkr9kS7EqttvEkelglWtJRbg= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.17.0 h1:weAPKDi/dTlBbWU4oDZ55ubomqUob6OWPoUcdBjWM2M= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.17.0/go.mod h1:VrcmO2+HTWXaGYin1pAAXWNEtaza/DCJDH/+t5IY5rs= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.17.0 h1:1FGr7e8wAebpvpoabdQcRt5WtPCJ2W2kDPzLfOb07/c= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.17.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.14.0 h1:nma5ZICTbHZ0YoMu18ziWGSLK1ICzMm6rJTv+IatJ0U= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.14.0/go.mod h1:xUiGj13q5uHPboc0xZ754fyusiF5C2RxNzOFdTbdZFA= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.20.0 h1:jdsuH8u4rxfvy3ZHoSLk5NAZrQMNZqyJwhM15FpEswE= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.20.0/go.mod h1:KI5I5JhJNOQWeE4vs+qk+BY/9PVSDwNmSjrCUrmuZKw= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 h1:fKv05WFWHCXQmUTehW1eEZvXJP65Qv00W4V01B1EqSA= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.20.0 h1:JLpKc1QpkaUXEFgN68/Q9XgF0XgbVl/IXd8S1KUcEV4= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.20.0/go.mod h1:VJtgUHCz38obs58oEjNjEre6IaHmR+s7o4DvX74knq4= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod index 14c69501c50af..ec3b34ee5f4f8 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod @@ -65,9 +65,9 @@ require ( github.com/DataDog/datadog-agent/pkg/serializer v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/tagset v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.18.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.18.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.18.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.20.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0 github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.104.0 github.com/stretchr/testify v1.9.0 diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum index cc8e3ecec4203..00e001429e524 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum @@ -4,14 +4,14 @@ github.com/DataDog/agent-payload/v5 v5.0.114 h1:qg3jfzz2/lOFKbFOw2yM6RM8eyMs4HlE github.com/DataDog/agent-payload/v5 v5.0.114/go.mod h1:COngtbYYCncpIPiE5D93QlXDH/3VAKk10jDNwGHcMRE= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.18.0 h1:KNiq6ofE5BBMQjl7w9fftg8z44C9z51w7qOWIKs5SCg= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.18.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.18.0 h1:FaUFQE8IuaNdpOQGIhoy2h58v8AVND+yZG3gVqKAwLQ= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.18.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.18.0 h1:Fija8Qo0z/HngskYyBpMqmJKM2ejNr1NfXUyWszFDAw= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.18.0/go.mod h1:lNu6vfFNCV/tyWxs8x8nCN1TqK+bPeI2dbnlwFTs8VA= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.18.0 h1:x6re32f8gQ8fdCllywQyAbxQuXNrgxeimpLBfvwA97g= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.18.0/go.mod h1:R84ZVbxKSgMxzvJro/MftVrlkGm2C2gndUhV35wyR8A= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.20.0 h1:e4XT2+v4vgZBCbp5JUbe0Z+PRegh+nsLMp4X+esht9E= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.20.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 h1:fKv05WFWHCXQmUTehW1eEZvXJP65Qv00W4V01B1EqSA= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.20.0 h1:b60rxWT/EwcSA4l/zXfqTZp3udXJ1fKtz7+Qwat8OjQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.20.0/go.mod h1:6jM34grB+zhMrzWgM0V8B6vyIJ/75oAfjcx/mJWv6cE= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0 h1:0OFAPO964qsj6BzKs/hbAkpO/IIHp7vN1klKrohzULA= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0/go.mod h1:IDaKpBfDtw8eWBLtXR14HB5dsXDxS4VRUR0OL5rlRT8= github.com/DataDog/sketches-go v1.4.4 h1:dF52vzXRFSPOj2IjXSWLvXq3jubL4CI69kwYjJ1w5Z8= github.com/DataDog/sketches-go v1.4.4/go.mod h1:XR0ns2RtEEF09mDKXiKZiQg+nfZStrq1ZuL1eezeZe0= github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= diff --git a/comp/otelcol/otlp/components/statsprocessor/go.mod b/comp/otelcol/otlp/components/statsprocessor/go.mod index b21dae11b5ade..ca6cee287f497 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.mod +++ b/comp/otelcol/otlp/components/statsprocessor/go.mod @@ -23,7 +23,7 @@ require ( github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 github.com/DataDog/datadog-go/v5 v5.5.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.16.1 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 github.com/stretchr/testify v1.9.0 go.opentelemetry.io/collector/component v0.104.0 go.opentelemetry.io/collector/pdata v1.11.0 diff --git a/comp/otelcol/otlp/components/statsprocessor/go.sum b/comp/otelcol/otlp/components/statsprocessor/go.sum index a928af42bb225..8c6d9031f59ae 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.sum +++ b/comp/otelcol/otlp/components/statsprocessor/go.sum @@ -4,8 +4,8 @@ github.com/DataDog/go-sqllexer v0.0.14 h1:xUQh2tLr/95LGxDzLmttLgTo/1gzFeOyuwrQa/ github.com/DataDog/go-sqllexer v0.0.14/go.mod h1:KwkYhpFEVIq+BfobkTC1vfqm4gTi65skV/DpDBXtexc= github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4tiAupQ4= github.com/DataDog/go-tuf v1.1.0-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.16.1 h1:ZI8u3CgdMXpDplrf9/gIr13+/g/tUzUcBMk2ZhXgzLE= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.16.1/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 h1:fKv05WFWHCXQmUTehW1eEZvXJP65Qv00W4V01B1EqSA= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= github.com/DataDog/sketches-go v1.4.2 h1:gppNudE9d19cQ98RYABOetxIhpTCl4m7CnbRZjvVA/o= github.com/DataDog/sketches-go v1.4.2/go.mod h1:xJIXldczJyyjnbDop7ZZcLxJdV3+7Kra7H1KMgpgkLk= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= diff --git a/comp/otelcol/otlp/testutil/go.mod b/comp/otelcol/otlp/testutil/go.mod index cd00e6506c335..b198ecd8a455f 100644 --- a/comp/otelcol/otlp/testutil/go.mod +++ b/comp/otelcol/otlp/testutil/go.mod @@ -33,8 +33,8 @@ require ( github.com/DataDog/datadog-agent/pkg/config/model v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/config/setup v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/proto v0.55.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.17.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.17.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.20.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 github.com/DataDog/sketches-go v1.4.6 github.com/stretchr/testify v1.9.0 go.opentelemetry.io/collector/pdata v1.9.0 diff --git a/comp/otelcol/otlp/testutil/go.sum b/comp/otelcol/otlp/testutil/go.sum index b4d06b630c428..5d129b48dda03 100644 --- a/comp/otelcol/otlp/testutil/go.sum +++ b/comp/otelcol/otlp/testutil/go.sum @@ -1,9 +1,9 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.17.0 h1:weAPKDi/dTlBbWU4oDZ55ubomqUob6OWPoUcdBjWM2M= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.17.0/go.mod h1:VrcmO2+HTWXaGYin1pAAXWNEtaza/DCJDH/+t5IY5rs= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.17.0 h1:1FGr7e8wAebpvpoabdQcRt5WtPCJ2W2kDPzLfOb07/c= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.17.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.20.0 h1:jdsuH8u4rxfvy3ZHoSLk5NAZrQMNZqyJwhM15FpEswE= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.20.0/go.mod h1:KI5I5JhJNOQWeE4vs+qk+BY/9PVSDwNmSjrCUrmuZKw= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 h1:fKv05WFWHCXQmUTehW1eEZvXJP65Qv00W4V01B1EqSA= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= diff --git a/comp/trace/agent/def/go.mod b/comp/trace/agent/def/go.mod index 3647b991a6acd..3519642a216f9 100644 --- a/comp/trace/agent/def/go.mod +++ b/comp/trace/agent/def/go.mod @@ -6,7 +6,7 @@ replace github.com/DataDog/datadog-agent/pkg/proto => ../../../../pkg/proto require ( github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.16.1 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 go.opentelemetry.io/collector/pdata v1.9.0 ) diff --git a/comp/trace/agent/def/go.sum b/comp/trace/agent/def/go.sum index 99ed13405a9d9..d7e46e4a7be46 100644 --- a/comp/trace/agent/def/go.sum +++ b/comp/trace/agent/def/go.sum @@ -1,5 +1,5 @@ -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.16.1 h1:ZI8u3CgdMXpDplrf9/gIr13+/g/tUzUcBMk2ZhXgzLE= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.16.1/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 h1:fKv05WFWHCXQmUTehW1eEZvXJP65Qv00W4V01B1EqSA= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= diff --git a/go.mod b/go.mod index a024f6d9ea5a8..1491cec0a3815 100644 --- a/go.mod +++ b/go.mod @@ -157,9 +157,9 @@ require ( github.com/DataDog/ebpf-manager v0.7.1 github.com/DataDog/gopsutil v1.2.2 github.com/DataDog/nikos v1.12.4 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.18.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.18.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.18.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.20.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0 github.com/DataDog/sketches-go v1.4.6 github.com/DataDog/viper v1.13.5 github.com/DataDog/watermarkpodautoscaler v0.6.1 @@ -774,8 +774,8 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.56.2 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.26.0 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.17.0 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.17.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.20.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.20.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.0 // indirect github.com/Intevation/gval v1.3.0 // indirect github.com/Intevation/jsonpath v0.2.1 // indirect diff --git a/go.sum b/go.sum index cc9e6112e673b..49f65d56b4cae 100644 --- a/go.sum +++ b/go.sum @@ -730,18 +730,18 @@ github.com/DataDog/netlink v1.0.1-0.20240223195320-c7a4f832a3d1 h1:HnvrdC79xJ+RP github.com/DataDog/netlink v1.0.1-0.20240223195320-c7a4f832a3d1/go.mod h1:whJevzBpTrid75eZy99s3DqCmy05NfibNaF2Ol5Ox5A= github.com/DataDog/nikos v1.12.4 h1:UBo2v1Std4GvPHalKs22+1kcM4tXvMACREe5k4QMzf0= github.com/DataDog/nikos v1.12.4/go.mod h1:ovDmd9Jz/ZJwP39wgQmFUXZZzeDYJtFgsY7K1OPstWk= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.17.0 h1:weAPKDi/dTlBbWU4oDZ55ubomqUob6OWPoUcdBjWM2M= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.17.0/go.mod h1:VrcmO2+HTWXaGYin1pAAXWNEtaza/DCJDH/+t5IY5rs= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.18.0 h1:KNiq6ofE5BBMQjl7w9fftg8z44C9z51w7qOWIKs5SCg= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.18.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.18.0 h1:FaUFQE8IuaNdpOQGIhoy2h58v8AVND+yZG3gVqKAwLQ= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.18.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.17.0 h1:K6SIJy7ECWdQMWJMo60oJNvduOeIJ/t/6VDbHWDd/oM= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.17.0/go.mod h1:L7QrJ1emQ+rcXAs2JW5b+eu72G9A4yku35Ia4kLrdcg= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.18.0 h1:Fija8Qo0z/HngskYyBpMqmJKM2ejNr1NfXUyWszFDAw= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.18.0/go.mod h1:lNu6vfFNCV/tyWxs8x8nCN1TqK+bPeI2dbnlwFTs8VA= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.18.0 h1:x6re32f8gQ8fdCllywQyAbxQuXNrgxeimpLBfvwA97g= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.18.0/go.mod h1:R84ZVbxKSgMxzvJro/MftVrlkGm2C2gndUhV35wyR8A= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.20.0 h1:jdsuH8u4rxfvy3ZHoSLk5NAZrQMNZqyJwhM15FpEswE= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.20.0/go.mod h1:KI5I5JhJNOQWeE4vs+qk+BY/9PVSDwNmSjrCUrmuZKw= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.20.0 h1:e4XT2+v4vgZBCbp5JUbe0Z+PRegh+nsLMp4X+esht9E= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.20.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 h1:fKv05WFWHCXQmUTehW1eEZvXJP65Qv00W4V01B1EqSA= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.20.0 h1:JLpKc1QpkaUXEFgN68/Q9XgF0XgbVl/IXd8S1KUcEV4= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.20.0/go.mod h1:VJtgUHCz38obs58oEjNjEre6IaHmR+s7o4DvX74knq4= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.20.0 h1:b60rxWT/EwcSA4l/zXfqTZp3udXJ1fKtz7+Qwat8OjQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.20.0/go.mod h1:6jM34grB+zhMrzWgM0V8B6vyIJ/75oAfjcx/mJWv6cE= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0 h1:0OFAPO964qsj6BzKs/hbAkpO/IIHp7vN1klKrohzULA= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0/go.mod h1:IDaKpBfDtw8eWBLtXR14HB5dsXDxS4VRUR0OL5rlRT8= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/trivy v0.0.0-20240729123106-0d652d4a5630 h1:GA5L0gJsKLmuzGRGOqC3koKod7fmSL6C8GEDrBceJBI= diff --git a/pkg/metrics/go.mod b/pkg/metrics/go.mod index 9ddbec9712b46..c9baa39e3633a 100644 --- a/pkg/metrics/go.mod +++ b/pkg/metrics/go.mod @@ -27,7 +27,7 @@ require ( github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/buf v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 - github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.14.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0 github.com/stretchr/testify v1.9.0 go.uber.org/atomic v1.11.0 ) diff --git a/pkg/metrics/go.sum b/pkg/metrics/go.sum index a8bc0739ad6c7..8ba22b6a12d97 100644 --- a/pkg/metrics/go.sum +++ b/pkg/metrics/go.sum @@ -39,10 +39,10 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7 github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.14.0 h1:J0IEqkrB8BjtuDHofR8Q3J+Z8829Ja1Mlix9cyG8wJI= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.14.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.14.0 h1:QHx6B/VUx3rZQqrQNZI5BfypbhhGSRzCz05viyJEQmM= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.14.0/go.mod h1:q4c7zbmdnIdSJNZuBsveTk5ZeRkSkS2g6b8zzFF1mE4= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.20.0 h1:e4XT2+v4vgZBCbp5JUbe0Z+PRegh+nsLMp4X+esht9E= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.20.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0 h1:0OFAPO964qsj6BzKs/hbAkpO/IIHp7vN1klKrohzULA= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0/go.mod h1:IDaKpBfDtw8eWBLtXR14HB5dsXDxS4VRUR0OL5rlRT8= github.com/DataDog/sketches-go v1.4.4 h1:dF52vzXRFSPOj2IjXSWLvXq3jubL4CI69kwYjJ1w5Z8= github.com/DataDog/sketches-go v1.4.4/go.mod h1:XR0ns2RtEEF09mDKXiKZiQg+nfZStrq1ZuL1eezeZe0= github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= diff --git a/pkg/serializer/go.mod b/pkg/serializer/go.mod index bbe11b5b863be..03a98a35c816b 100644 --- a/pkg/serializer/go.mod +++ b/pkg/serializer/go.mod @@ -75,7 +75,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/json v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 - github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.14.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0 github.com/gogo/protobuf v1.3.2 github.com/json-iterator/go v1.1.12 github.com/protocolbuffers/protoscope v0.0.0-20221109213918-8e7a6aafa2c9 diff --git a/pkg/serializer/go.sum b/pkg/serializer/go.sum index d952c59d01660..8628a262989a8 100644 --- a/pkg/serializer/go.sum +++ b/pkg/serializer/go.sum @@ -4,10 +4,10 @@ github.com/DataDog/agent-payload/v5 v5.0.114 h1:qg3jfzz2/lOFKbFOw2yM6RM8eyMs4HlE github.com/DataDog/agent-payload/v5 v5.0.114/go.mod h1:COngtbYYCncpIPiE5D93QlXDH/3VAKk10jDNwGHcMRE= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.14.0 h1:J0IEqkrB8BjtuDHofR8Q3J+Z8829Ja1Mlix9cyG8wJI= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.14.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.14.0 h1:QHx6B/VUx3rZQqrQNZI5BfypbhhGSRzCz05viyJEQmM= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.14.0/go.mod h1:q4c7zbmdnIdSJNZuBsveTk5ZeRkSkS2g6b8zzFF1mE4= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.20.0 h1:e4XT2+v4vgZBCbp5JUbe0Z+PRegh+nsLMp4X+esht9E= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.20.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0 h1:0OFAPO964qsj6BzKs/hbAkpO/IIHp7vN1klKrohzULA= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0/go.mod h1:IDaKpBfDtw8eWBLtXR14HB5dsXDxS4VRUR0OL5rlRT8= github.com/DataDog/sketches-go v1.4.4 h1:dF52vzXRFSPOj2IjXSWLvXq3jubL4CI69kwYjJ1w5Z8= github.com/DataDog/sketches-go v1.4.4/go.mod h1:XR0ns2RtEEF09mDKXiKZiQg+nfZStrq1ZuL1eezeZe0= github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= diff --git a/pkg/trace/api/otlp.go b/pkg/trace/api/otlp.go index fb1a9d20b58ee..1f645164ba6b6 100644 --- a/pkg/trace/api/otlp.go +++ b/pkg/trace/api/otlp.go @@ -207,7 +207,8 @@ func (o *OTLPReceiver) ReceiveResourceSpans(ctx context.Context, rspans ptrace.R if !srcok { hostFromMap(rattr, "_dd.hostname") } - env := rattr[string(semconv.AttributeDeploymentEnvironment)] + // TODO(songy23): use AttributeDeploymentEnvironmentName once collector version upgrade is unblocked + _, env := getFirstFromMap(rattr, "deployment.environment.name", semconv.AttributeDeploymentEnvironment) lang := rattr[string(semconv.AttributeTelemetrySDKLanguage)] if lang == "" { lang = fastHeaderGet(httpHeader, header.Lang) @@ -588,7 +589,8 @@ func (o *OTLPReceiver) convertSpan(rattr map[string]string, lib pcommon.Instrume return true }) if _, ok := span.Meta["env"]; !ok { - if env := span.Meta[string(semconv.AttributeDeploymentEnvironment)]; env != "" { + // TODO(songy23): use AttributeDeploymentEnvironmentName once collector version upgrade is unblocked + if _, env := getFirstFromMap(span.Meta, "deployment.environment.name", semconv.AttributeDeploymentEnvironment); env != "" { setMetaOTLP(span, "env", traceutil.NormalizeTag(env)) } } diff --git a/pkg/trace/api/otlp_test.go b/pkg/trace/api/otlp_test.go index 05a019f9e7e67..75895a36f99a5 100644 --- a/pkg/trace/api/otlp_test.go +++ b/pkg/trace/api/otlp_test.go @@ -288,6 +288,18 @@ func TestOTLPReceiveResourceSpans(t *testing.T) { require.Equal("depenv", out.Env) }, }, + { + in: []testutil.OTLPResourceSpan{ + { + LibName: "libname", + LibVersion: "1.2", + Attributes: map[string]interface{}{"deployment.environment.name": "staging"}, + }, + }, + fn: func(out *pb.TracerPayload) { + require.Equal("staging", out.Env) + }, + }, { in: []testutil.OTLPResourceSpan{ { @@ -303,6 +315,21 @@ func TestOTLPReceiveResourceSpans(t *testing.T) { require.Equal("spanenv", out.Env) }, }, + { + in: []testutil.OTLPResourceSpan{ + { + LibName: "libname", + LibVersion: "1.2", + Attributes: map[string]interface{}{}, + Spans: []*testutil.OTLPSpan{ + {Attributes: map[string]interface{}{"deployment.environment.name": "spanenv2"}}, + }, + }, + }, + fn: func(out *pb.TracerPayload) { + require.Equal("spanenv2", out.Env) + }, + }, { in: []testutil.OTLPResourceSpan{ { diff --git a/pkg/trace/go.mod b/pkg/trace/go.mod index a16cdf5d8f6a9..ffbca4d83b1f8 100644 --- a/pkg/trace/go.mod +++ b/pkg/trace/go.mod @@ -21,7 +21,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 github.com/DataDog/datadog-go/v5 v5.5.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 github.com/DataDog/sketches-go v1.4.2 github.com/Microsoft/go-winio v0.6.1 github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 diff --git a/pkg/trace/go.sum b/pkg/trace/go.sum index 0acbab963039c..4ba7b5e0d92e4 100644 --- a/pkg/trace/go.sum +++ b/pkg/trace/go.sum @@ -6,8 +6,8 @@ github.com/DataDog/go-sqllexer v0.0.14 h1:xUQh2tLr/95LGxDzLmttLgTo/1gzFeOyuwrQa/ github.com/DataDog/go-sqllexer v0.0.14/go.mod h1:KwkYhpFEVIq+BfobkTC1vfqm4gTi65skV/DpDBXtexc= github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4tiAupQ4= github.com/DataDog/go-tuf v1.1.0-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0 h1:10TPqpTlIkmDPFWVIEZ4ZX3rWrCrx3rEoeoAooZr6LM= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 h1:fKv05WFWHCXQmUTehW1eEZvXJP65Qv00W4V01B1EqSA= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= github.com/DataDog/sketches-go v1.4.2 h1:gppNudE9d19cQ98RYABOetxIhpTCl4m7CnbRZjvVA/o= github.com/DataDog/sketches-go v1.4.2/go.mod h1:xJIXldczJyyjnbDop7ZZcLxJdV3+7Kra7H1KMgpgkLk= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= diff --git a/pkg/trace/stats/otel_util.go b/pkg/trace/stats/otel_util.go index 8c9a5a2970daf..1c72b6fa640b8 100644 --- a/pkg/trace/stats/otel_util.go +++ b/pkg/trace/stats/otel_util.go @@ -49,7 +49,8 @@ func OTLPTracesToConcentratorInputs( if _, exists := ignoreResNames[traceutil.GetOTelResource(otelspan, otelres)]; exists { continue } - env := traceutil.GetOTelAttrValInResAndSpanAttrs(otelspan, otelres, true, semconv.AttributeDeploymentEnvironment) + // TODO(songy23): use AttributeDeploymentEnvironmentName once collector version upgrade is unblocked + env := traceutil.GetOTelAttrValInResAndSpanAttrs(otelspan, otelres, true, "deployment.environment.name", semconv.AttributeDeploymentEnvironment) hostname := traceutil.GetOTelHostname(otelspan, otelres, conf.OTLPReceiver.AttributesTranslator, conf.Hostname) version := traceutil.GetOTelAttrValInResAndSpanAttrs(otelspan, otelres, true, semconv.AttributeServiceVersion) cid := traceutil.GetOTelAttrValInResAndSpanAttrs(otelspan, otelres, true, semconv.AttributeContainerID, semconv.AttributeK8SPodUID) diff --git a/pkg/trace/stats/otel_util_test.go b/pkg/trace/stats/otel_util_test.go index e2c78f3ef0b73..1422226c8ecc5 100644 --- a/pkg/trace/stats/otel_util_test.go +++ b/pkg/trace/stats/otel_util_test.go @@ -117,6 +117,15 @@ func TestProcessOTLPTraces(t *testing.T) { libname: "spring", expected: createStatsPayload(agentEnv, agentHost, "svc", "op", "http", "client", "res", agentHost, "tracer-env", "", nil, nil, true, false), }, + { + name: "new env convention", + spanName: "spanname2", + rattrs: map[string]string{"service.name": "svc", "deployment.environment.name": "new-env"}, + sattrs: map[string]any{"operation.name": "op", "resource.name": "res"}, + spanKind: ptrace.SpanKindClient, + libname: "spring", + expected: createStatsPayload(agentEnv, agentHost, "svc", "op", "http", "client", "res", agentHost, "new-env", "", nil, nil, true, false), + }, { name: "span operation name from span name with db attribute, peerTagsAggr not enabled", spanName: "spanname3", diff --git a/pkg/trace/stats/oteltest/go.mod b/pkg/trace/stats/oteltest/go.mod index e3466f3cda4f7..59c592dd08090 100644 --- a/pkg/trace/stats/oteltest/go.mod +++ b/pkg/trace/stats/oteltest/go.mod @@ -7,7 +7,7 @@ require ( github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 github.com/DataDog/datadog-go/v5 v5.5.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.16.1 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 github.com/google/go-cmp v0.6.0 github.com/stretchr/testify v1.9.0 go.opentelemetry.io/collector/component v0.104.0 diff --git a/pkg/trace/stats/oteltest/go.sum b/pkg/trace/stats/oteltest/go.sum index a928af42bb225..8c6d9031f59ae 100644 --- a/pkg/trace/stats/oteltest/go.sum +++ b/pkg/trace/stats/oteltest/go.sum @@ -4,8 +4,8 @@ github.com/DataDog/go-sqllexer v0.0.14 h1:xUQh2tLr/95LGxDzLmttLgTo/1gzFeOyuwrQa/ github.com/DataDog/go-sqllexer v0.0.14/go.mod h1:KwkYhpFEVIq+BfobkTC1vfqm4gTi65skV/DpDBXtexc= github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4tiAupQ4= github.com/DataDog/go-tuf v1.1.0-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.16.1 h1:ZI8u3CgdMXpDplrf9/gIr13+/g/tUzUcBMk2ZhXgzLE= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.16.1/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 h1:fKv05WFWHCXQmUTehW1eEZvXJP65Qv00W4V01B1EqSA= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= github.com/DataDog/sketches-go v1.4.2 h1:gppNudE9d19cQ98RYABOetxIhpTCl4m7CnbRZjvVA/o= github.com/DataDog/sketches-go v1.4.2/go.mod h1:xJIXldczJyyjnbDop7ZZcLxJdV3+7Kra7H1KMgpgkLk= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= diff --git a/releasenotes/notes/otlp-env-convention-b5c9da638d.yaml b/releasenotes/notes/otlp-env-convention-b5c9da638d.yaml new file mode 100644 index 0000000000000..be46b8baa5fa6 --- /dev/null +++ b/releasenotes/notes/otlp-env-convention-b5c9da638d.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + The OTLP ingest endpoint now maps the new OTel semantic convention `deployment.environment.name` to `env` diff --git a/test/otel/go.mod b/test/otel/go.mod index 1a1e56a250a8a..4e012080206ec 100644 --- a/test/otel/go.mod +++ b/test/otel/go.mod @@ -174,10 +174,10 @@ require ( github.com/DataDog/go-sqllexer v0.0.14 // indirect github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.18.0 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.16.1 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.18.0 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.18.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.20.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.20.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/DataDog/zstd v1.5.5 // indirect diff --git a/test/otel/go.sum b/test/otel/go.sum index cdf2e4f5f136d..6c32aacebcc70 100644 --- a/test/otel/go.sum +++ b/test/otel/go.sum @@ -14,18 +14,18 @@ github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4ti github.com/DataDog/go-tuf v1.1.0-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.17.0 h1:weAPKDi/dTlBbWU4oDZ55ubomqUob6OWPoUcdBjWM2M= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.17.0/go.mod h1:VrcmO2+HTWXaGYin1pAAXWNEtaza/DCJDH/+t5IY5rs= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.18.0 h1:KNiq6ofE5BBMQjl7w9fftg8z44C9z51w7qOWIKs5SCg= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.18.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.18.0 h1:FaUFQE8IuaNdpOQGIhoy2h58v8AVND+yZG3gVqKAwLQ= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.18.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.16.1 h1:px2+7svK86oeCGd+sT1x/9f0pqIJdApGFnWI0AOPXwA= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.16.1/go.mod h1:+LijQ2LdlocAQ4WB+7KsoIGe90bfogkRslubd9swVow= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.18.0 h1:Fija8Qo0z/HngskYyBpMqmJKM2ejNr1NfXUyWszFDAw= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.18.0/go.mod h1:lNu6vfFNCV/tyWxs8x8nCN1TqK+bPeI2dbnlwFTs8VA= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.18.0 h1:x6re32f8gQ8fdCllywQyAbxQuXNrgxeimpLBfvwA97g= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.18.0/go.mod h1:R84ZVbxKSgMxzvJro/MftVrlkGm2C2gndUhV35wyR8A= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.20.0 h1:jdsuH8u4rxfvy3ZHoSLk5NAZrQMNZqyJwhM15FpEswE= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.20.0/go.mod h1:KI5I5JhJNOQWeE4vs+qk+BY/9PVSDwNmSjrCUrmuZKw= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.20.0 h1:e4XT2+v4vgZBCbp5JUbe0Z+PRegh+nsLMp4X+esht9E= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.20.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 h1:fKv05WFWHCXQmUTehW1eEZvXJP65Qv00W4V01B1EqSA= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.20.0 h1:JLpKc1QpkaUXEFgN68/Q9XgF0XgbVl/IXd8S1KUcEV4= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.20.0/go.mod h1:VJtgUHCz38obs58oEjNjEre6IaHmR+s7o4DvX74knq4= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.20.0 h1:b60rxWT/EwcSA4l/zXfqTZp3udXJ1fKtz7+Qwat8OjQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.20.0/go.mod h1:6jM34grB+zhMrzWgM0V8B6vyIJ/75oAfjcx/mJWv6cE= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0 h1:0OFAPO964qsj6BzKs/hbAkpO/IIHp7vN1klKrohzULA= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0/go.mod h1:IDaKpBfDtw8eWBLtXR14HB5dsXDxS4VRUR0OL5rlRT8= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= From a28fcd42853751395c46b4ac3a307ebca9bb7757 Mon Sep 17 00:00:00 2001 From: pducolin <45568537+pducolin@users.noreply.github.com> Date: Thu, 12 Sep 2024 08:19:45 +0200 Subject: [PATCH 011/195] [e2e] recreate stack on fakeintake timeout (#29253) --- .../pkg/utils/infra/retriable_errors.go | 16 +++++-- test/new-e2e/pkg/utils/infra/stack_manager.go | 19 +++++--- .../pkg/utils/infra/stack_manager_test.go | 48 ++++++++++++++++++- .../system-probe/system-probe-test-env.go | 2 +- 4 files changed, 72 insertions(+), 13 deletions(-) diff --git a/test/new-e2e/pkg/utils/infra/retriable_errors.go b/test/new-e2e/pkg/utils/infra/retriable_errors.go index b8d5c27b53195..7d28f17006460 100644 --- a/test/new-e2e/pkg/utils/infra/retriable_errors.go +++ b/test/new-e2e/pkg/utils/infra/retriable_errors.go @@ -24,22 +24,30 @@ func getKnownErrors() []knownError { // Add here errors that are known to be flakes and that should be retried return []knownError{ { - errorMessage: "i/o timeout", + errorMessage: `i\/o timeout`, retryType: ReCreate, }, { // https://datadoghq.atlassian.net/browse/ADXT-1 - errorMessage: "failed attempts: dial tcp :22: connect: connection refused", + errorMessage: `failed attempts: dial tcp :22: connect: connection refused`, retryType: ReCreate, }, { // https://datadoghq.atlassian.net/browse/ADXT-295 - errorMessage: "Resource provider reported that the resource did not exist while updating", + errorMessage: `Resource provider reported that the resource did not exist while updating`, retryType: ReCreate, }, { // https://datadoghq.atlassian.net/browse/ADXT-558 - errorMessage: "Process exited with status 2: running \" sudo cloud-init status --wait\"", + errorMessage: `Process exited with status 2: running " sudo cloud-init status --wait"`, + retryType: ReCreate, + }, + { + errorMessage: `waiting for ECS Service .+fakeintake-ecs.+ create: timeout while waiting for state to become 'tfSTABLE'`, + retryType: ReCreate, + }, + { + errorMessage: `error while waiting for fakeintake`, retryType: ReCreate, }, } diff --git a/test/new-e2e/pkg/utils/infra/stack_manager.go b/test/new-e2e/pkg/utils/infra/stack_manager.go index 2a580fd651d7d..15d9e44c2139b 100644 --- a/test/new-e2e/pkg/utils/infra/stack_manager.go +++ b/test/new-e2e/pkg/utils/infra/stack_manager.go @@ -12,6 +12,7 @@ import ( "fmt" "io" "os" + "regexp" "runtime" "strings" "sync" @@ -56,16 +57,16 @@ var ( initStackManager sync.Once ) -// RetryStrategy is a function that given the current error and the number of retries, returns the type of retry to perform and a list of options to modify the configuration -type RetryStrategy func(error, int) (RetryType, []GetStackOption) +// RetryStrategyFromFn is a function that given the current error and the number of retries, returns the type of retry to perform and a list of options to modify the configuration +type RetryStrategyFromFn func(error, int) (RetryType, []GetStackOption) // StackManager handles type StackManager struct { stacks *safeStackMap knownErrors []knownError - // RetryStrategy defines how to handle retries. By default points to StackManager.getRetryStrategyFrom but can be overridden - RetryStrategy RetryStrategy + // GetRetryStrategyFrom defines how to handle retries. By default points to StackManager.getRetryStrategyFrom but can be overridden + GetRetryStrategyFrom RetryStrategyFromFn } type safeStackMap struct { @@ -120,7 +121,7 @@ func newStackManager() (*StackManager, error) { stacks: newSafeStackMap(), knownErrors: getKnownErrors(), } - sm.RetryStrategy = sm.getRetryStrategyFrom + sm.GetRetryStrategyFrom = sm.getRetryStrategyFrom return sm, nil } @@ -523,7 +524,7 @@ func (sm *StackManager) getStack(ctx context.Context, name string, deployFunc pu } } - retryStrategy, changedOpts := sm.RetryStrategy(upError, upCount) + retryStrategy, changedOpts := sm.GetRetryStrategyFrom(upError, upCount) sendEventToDatadog(params.DatadogEventSender, fmt.Sprintf("[E2E] Stack %s : error on Pulumi stack up", name), upError.Error(), []string{"operation:up", "result:fail", fmt.Sprintf("retry:%s", retryStrategy), fmt.Sprintf("stack:%s", stack.Name()), fmt.Sprintf("retries:%d", upCount)}) switch retryStrategy { @@ -619,7 +620,11 @@ func (sm *StackManager) getRetryStrategyFrom(err error, upCount int) (RetryType, } for _, knownError := range sm.knownErrors { - if strings.Contains(err.Error(), knownError.errorMessage) { + isMatch, err := regexp.MatchString(knownError.errorMessage, err.Error()) + if err != nil { + fmt.Printf("Error matching regex %s: %v\n", knownError.errorMessage, err) + } + if isMatch { return knownError.retryType, nil } } diff --git a/test/new-e2e/pkg/utils/infra/stack_manager_test.go b/test/new-e2e/pkg/utils/infra/stack_manager_test.go index c10aaba87ee4e..56de15ce98455 100644 --- a/test/new-e2e/pkg/utils/infra/stack_manager_test.go +++ b/test/new-e2e/pkg/utils/infra/stack_manager_test.go @@ -8,13 +8,15 @@ package infra import ( "context" + "errors" "fmt" - "github.com/DataDog/datadog-agent/test/new-e2e/pkg/utils/common" "io" "strings" "testing" "time" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/utils/common" + "github.com/DataDog/datadog-api-client-go/v2/api/datadogV1" "github.com/pulumi/pulumi/sdk/v3/go/auto" "github.com/pulumi/pulumi/sdk/v3/go/pulumi" @@ -225,6 +227,50 @@ func TestStackManager(t *testing.T) { assert.Contains(t, mockDatadogEventSender.events[1].Title, fmt.Sprintf("[E2E] Stack %s : error on Pulumi stack up", stackName)) assert.Contains(t, mockDatadogEventSender.events[2].Title, fmt.Sprintf("[E2E] Stack %s : success on Pulumi stack up", stackName)) }) + + t.Run("should-return-retry-strategy-on-retriable-errors", func(t *testing.T) { + t.Parallel() + + type testError struct { + name string + errMessage string + expectedRetryType RetryType + } + + testErrors := []testError{ + { + name: "timeout", + errMessage: "i/o timeout", + expectedRetryType: ReCreate, + }, + { + name: "connection-refused", + errMessage: "failed attempts: dial tcp :22: connect: connection refused", + expectedRetryType: ReCreate, + }, + { + name: "resource-not-exist", + errMessage: "Resource provider reported that the resource did not exist while updating", + expectedRetryType: ReCreate, + }, + { + name: "cloud-init-timeout", + errMessage: "Process exited with status 2: running \" sudo cloud-init status --wait\"", + expectedRetryType: ReCreate, + }, + { + name: "ecs-fakeintake-timeout", + errMessage: "waiting for ECS Service (arn:aws:ecs:us-east-1:669783387624:service/fakeintake-ecs/ci-633219896-4670-e2e-dockersuite-80f62edf7bcc6194-aws-fakeintake-dockervm-srv) create: timeout while waiting for state to become 'tfSTABLE' (last state: 'tfPENDING', timeout: 20m0s)", + expectedRetryType: ReCreate, + }, + } + + for _, te := range testErrors { + err := errors.New(te.errMessage) + retryType, _ := stackManager.getRetryStrategyFrom(err, 0) + assert.Equal(t, te.expectedRetryType, retryType, te.name) + } + }) } func filterRetryOnErrorLogs(logs []string) []string { diff --git a/test/new-e2e/system-probe/system-probe-test-env.go b/test/new-e2e/system-probe/system-probe-test-env.go index 516f47d76244a..2148e4d94427e 100644 --- a/test/new-e2e/system-probe/system-probe-test-env.go +++ b/test/new-e2e/system-probe/system-probe-test-env.go @@ -252,7 +252,7 @@ func NewTestEnv(name, x86InstanceType, armInstanceType string, opts *EnvOpts) (* infraEnv: opts.InfraEnv, } - stackManager.RetryStrategy = retryHandler.HandleError + stackManager.GetRetryStrategyFrom = retryHandler.HandleError pulumiStack, upResult, pulumiErr := stackManager.GetStackNoDeleteOnFailure( systemProbeTestEnv.context, systemProbeTestEnv.name, From f2035d2439ee5c005f667a9a09f2143a46be831d Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Thu, 12 Sep 2024 09:43:11 +0200 Subject: [PATCH 012/195] [CWS] fix race between probe closing and `pushNewTCClassifierRequest` (#29284) --- pkg/security/probe/probe_ebpf.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/security/probe/probe_ebpf.go b/pkg/security/probe/probe_ebpf.go index a05c3254faaaf..6be2b40c8d22f 100644 --- a/pkg/security/probe/probe_ebpf.go +++ b/pkg/security/probe/probe_ebpf.go @@ -1430,6 +1430,9 @@ func (err QueuedNetworkDeviceError) Error() string { func (p *EBPFProbe) pushNewTCClassifierRequest(device model.NetDevice) { select { + case <-p.ctx.Done(): + // the probe is stopping, do not push the new tc classifier request + return case p.newTCNetDevices <- device: // do nothing default: From 9faa31ba5d9760eba07bc29c66753f2539e648e1 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Thu, 12 Sep 2024 09:43:15 +0200 Subject: [PATCH 013/195] [CWS] switch to a "write to tmp then rename" mode for local storage (#29259) --- .../security_profile/dump/local_storage.go | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/pkg/security/security_profile/dump/local_storage.go b/pkg/security/security_profile/dump/local_storage.go index a2d3af607eb08..1c1a29a6a6b86 100644 --- a/pkg/security/security_profile/dump/local_storage.go +++ b/pkg/security/security_profile/dump/local_storage.go @@ -193,26 +193,32 @@ func (storage *ActivityDumpLocalStorage) Persist(request config.StorageRequest, // create output file _ = os.MkdirAll(request.OutputDirectory, 0400) - file, err := os.Create(outputPath) + tmpOutputPath := outputPath + ".tmp" + + file, err := os.Create(tmpOutputPath) if err != nil { - return fmt.Errorf("couldn't persist to file [%s]: %w", outputPath, err) + return fmt.Errorf("couldn't persist to file [%s]: %w", tmpOutputPath, err) } defer file.Close() // set output file access mode - if err = os.Chmod(outputPath, 0400); err != nil { - return fmt.Errorf("couldn't set mod for file [%s]: %w", outputPath, err) + if err := os.Chmod(tmpOutputPath, 0400); err != nil { + return fmt.Errorf("couldn't set mod for file [%s]: %w", tmpOutputPath, err) } // persist data to disk - if _, err = file.Write(raw.Bytes()); err != nil { - return fmt.Errorf("couldn't write to file [%s]: %w", outputPath, err) + if _, err := file.Write(raw.Bytes()); err != nil { + return fmt.Errorf("couldn't write to file [%s]: %w", tmpOutputPath, err) } - if err = file.Close(); err != nil { + if err := file.Close(); err != nil { return fmt.Errorf("could not close file [%s]: %w", file.Name(), err) } + if err := os.Rename(tmpOutputPath, outputPath); err != nil { + return fmt.Errorf("could not rename file from [%s] to [%s]: %w", tmpOutputPath, outputPath, err) + } + seclog.Infof("[%s] file for [%s] written at: [%s]", request.Format, ad.GetSelectorStr(), outputPath) return nil } From bab222838198c195dc378a24a6fb73ad37ff8902 Mon Sep 17 00:00:00 2001 From: Derek Brown Date: Thu, 12 Sep 2024 01:20:48 -0700 Subject: [PATCH 014/195] [windows][usm] fix bug in filename evaluation (#29282) --- pkg/network/events/monitor_windows.go | 4 ++-- test/new-e2e/tests/sysprobe-functional/apmtags_test.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/network/events/monitor_windows.go b/pkg/network/events/monitor_windows.go index 3698e001eb40f..e766e0a4bfa0f 100644 --- a/pkg/network/events/monitor_windows.go +++ b/pkg/network/events/monitor_windows.go @@ -62,7 +62,7 @@ func getAPMTags(already map[string]struct{}, filename string) []*intern.Value { tags := make([]*intern.Value, 0, 3) // see if there's an app.config in the directory - appConfig := filepath.Join(dir, "app.config") + appConfig := filename + ".config" ddJSON := filepath.Join(dir, "datadog.json") if _, err := os.Stat(appConfig); err == nil { @@ -74,7 +74,7 @@ func getAPMTags(already map[string]struct{}, filename string) []*intern.Value { } } } else if !errors.Is(err, os.ErrNotExist) { - log.Warnf("Error reading app.config: %v", err) + log.Warnf("Error reading app.config: %s %v", appConfig, err) } if len(already) == len(envFilter) { // we've seen all we need, no point in looking in datadog.json diff --git a/test/new-e2e/tests/sysprobe-functional/apmtags_test.go b/test/new-e2e/tests/sysprobe-functional/apmtags_test.go index 4f6f26623170f..7d75096f107cd 100644 --- a/test/new-e2e/tests/sysprobe-functional/apmtags_test.go +++ b/test/new-e2e/tests/sysprobe-functional/apmtags_test.go @@ -217,7 +217,7 @@ func setupTest(vm *components.RemoteHost, test usmTaggingTest) error { testRoot := path.Join("c:", "users", "administrator") clientJSONFile := path.Join(testRoot, "datadog.json") - clientAppConfig := path.Join(testRoot, "app.config") + clientAppConfig := path.Join(testRoot, "littleget.exe.config") removeIfExists(vm, clientJSONFile) removeIfExists(vm, clientAppConfig) From 1818a7bb988569dd0df8bbe40b3d3cca19b094f8 Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Thu, 12 Sep 2024 10:38:49 +0200 Subject: [PATCH 015/195] Reuse existing function to compute package module to fix precommit hooks (#29265) --- tasks/gotest.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/tasks/gotest.py b/tasks/gotest.py index ede25f85d4f05..6e87554ef4c4b 100644 --- a/tasks/gotest.py +++ b/tasks/gotest.py @@ -454,14 +454,7 @@ def get_modified_packages(ctx, build_tags=None, lint=False) -> list[GoModule]: go_mod_modified_modules = set() for modified_file in modified_go_files: - match_precision = 0 - best_module_path = None - - # Since several modules can match the path we take only the most precise one - for module_path in DEFAULT_MODULES: - if module_path in modified_file and len(module_path) > match_precision: - match_precision = len(module_path) - best_module_path = module_path + best_module_path = get_go_module(modified_file) # Check if the package is in the target list of the module we want to test targeted = False From d16217c79eb3c4efcd7db7a595ed7c809b3f8a5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Mathieu?= Date: Thu, 12 Sep 2024 10:41:59 +0200 Subject: [PATCH 016/195] sds: histogram on SDS processing latency. (#29234) --- pkg/logs/sds/scanner.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/logs/sds/scanner.go b/pkg/logs/sds/scanner.go index c8f726b38a18d..0b0938b7b9c6b 100644 --- a/pkg/logs/sds/scanner.go +++ b/pkg/logs/sds/scanner.go @@ -14,6 +14,7 @@ import ( "strconv" "strings" "sync" + "time" "github.com/DataDog/datadog-agent/pkg/logs/message" "github.com/DataDog/datadog-agent/pkg/telemetry" @@ -32,6 +33,8 @@ var ( "Count of SDS reconfiguration error.", telemetry.Options{DefaultMetric: true}) tlmSDSReconfigSuccess = telemetry.NewCounterWithOpts("sds", "reconfiguration_success", []string{"pipeline", "type"}, "Count of SDS reconfiguration success.", telemetry.Options{DefaultMetric: true}) + tlmSDSProcessingLatency = telemetry.NewSimpleHistogram("sds", "processing_latency", "Processing latency histogram", + []float64{10, 250, 500, 2000, 5000, 10000}) // unit: us ) // Scanner wraps an SDS Scanner implementation, adds reconfiguration @@ -284,7 +287,6 @@ func interpretRCRule(userRule RuleConfig, standardRule StandardRuleConfig, defau reqCapabilitiesCount := len(stdRuleDef.RequiredCapabilities) if reqCapabilitiesCount > 0 { if reqCapabilitiesCount > 1 { - // TODO(remy): telemetry log.Warnf("Standard rule '%v' with multiple required capabilities: %d. Only the first one will be used", standardRule.Name, reqCapabilitiesCount) } received := stdRuleDef.RequiredCapabilities[0] @@ -307,7 +309,6 @@ func interpretRCRule(userRule RuleConfig, standardRule StandardRuleConfig, defau } if defToUse.Version == -1 { - // TODO(remy): telemetry return nil, fmt.Errorf("unsupported rule with no compatible definition") } @@ -358,6 +359,7 @@ func interpretRCRule(userRule RuleConfig, standardRule StandardRuleConfig, defau func (s *Scanner) Scan(event []byte, msg *message.Message) (bool, []byte, error) { s.Lock() defer s.Unlock() + start := time.Now() if s.Scanner == nil { return false, nil, fmt.Errorf("can't Scan with an unitialized scanner") @@ -378,6 +380,7 @@ func (s *Scanner) Scan(event []byte, msg *message.Message) (bool, []byte, error) // using a tag. msg.ProcessingTags = append(msg.ProcessingTags, ScannedTag) + tlmSDSProcessingLatency.Observe(float64(time.Since(start) / 1000)) return scanResult.Mutated, scanResult.Event, err } From 7658bd0b281628bba27150a67de2a09765f8a75a Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Thu, 12 Sep 2024 11:15:32 +0200 Subject: [PATCH 017/195] [CWS] switch to "write to tmp then rename" in `persistProfile` (#29288) --- pkg/security/security_profile/profile/manager.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pkg/security/security_profile/profile/manager.go b/pkg/security/security_profile/profile/manager.go index 79ff0079f94cc..c3c67ea27aaab 100644 --- a/pkg/security/security_profile/profile/manager.go +++ b/pkg/security/security_profile/profile/manager.go @@ -686,6 +686,7 @@ func (m *SecurityProfileManager) persistProfile(profile *SecurityProfile) error filename := profile.Metadata.Name + ".profile" outputPath := path.Join(m.config.RuntimeSecurity.SecurityProfileDir, filename) + tmpOutputPath := outputPath + ".tmp" // create output directory and output file, truncate existing file if a profile already exists err = os.MkdirAll(m.config.RuntimeSecurity.SecurityProfileDir, 0400) @@ -693,20 +694,24 @@ func (m *SecurityProfileManager) persistProfile(profile *SecurityProfile) error return fmt.Errorf("couldn't ensure directory [%s] exists: %w", m.config.RuntimeSecurity.SecurityProfileDir, err) } - file, err := os.OpenFile(outputPath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0400) + file, err := os.OpenFile(tmpOutputPath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0400) if err != nil { return fmt.Errorf("couldn't persist profile to file [%s]: %w", outputPath, err) } defer file.Close() - if _, err = file.Write(raw); err != nil { - return fmt.Errorf("couldn't write profile to file [%s]: %w", outputPath, err) + if _, err := file.Write(raw); err != nil { + return fmt.Errorf("couldn't write profile to file [%s]: %w", tmpOutputPath, err) } - if err = file.Close(); err != nil { + if err := file.Close(); err != nil { return fmt.Errorf("error trying to close profile file [%s]: %w", file.Name(), err) } + if err := os.Rename(tmpOutputPath, outputPath); err != nil { + return fmt.Errorf("couldn't rename profile file [%s] to [%s]: %w", tmpOutputPath, outputPath, err) + } + seclog.Infof("[profile] file for %s written at: [%s]", profile.selector.String(), outputPath) return nil From 97f10e01c8c0567957b34341d12007cd1ea33890 Mon Sep 17 00:00:00 2001 From: yuri-lipnesh Date: Thu, 12 Sep 2024 07:20:19 -0400 Subject: [PATCH 018/195] [USM] Postgres telemetry, add tag "state" to metric usm.postgres.query_length_bucket. (#28936) --- pkg/network/protocols/postgres/telemetry.go | 89 ++++++++++++++++--- .../protocols/postgres/telemetry_test.go | 17 +++- 2 files changed, 95 insertions(+), 11 deletions(-) diff --git a/pkg/network/protocols/postgres/telemetry.go b/pkg/network/protocols/postgres/telemetry.go index bfdd93030c078..9d45855c312fb 100644 --- a/pkg/network/protocols/postgres/telemetry.go +++ b/pkg/network/protocols/postgres/telemetry.go @@ -22,18 +22,81 @@ const ( numberOfBucketsSmallerThanMaxBufferSize = 3 ) +type counterStateEnum int + +const ( + tableAndOperation counterStateEnum = iota + 1 + operationNotFound + tableNameNotFound + tableAndOpNotFound +) + +// extractionFailureCounter stores counter when goal was achieved and counter when target not found. +type extractionFailureCounter struct { + // countTableAndOperationFound counts the number of successfully retrieved table name and operation. + countTableAndOperationFound *libtelemetry.Counter + // countOperationNotFound counts the number of unsuccessful fetches of the operation. + countOperationNotFound *libtelemetry.Counter + // countTableNameNotFound counts the number of unsuccessful fetches of the table name. + countTableNameNotFound *libtelemetry.Counter + // countTableAndOpNotFound counts the number of failed attempts to fetch both the table name and the operation. + countTableAndOpNotFound *libtelemetry.Counter +} + +// newExtractionFailureCounter creates and returns a new instance +func newExtractionFailureCounter(metricGroup *libtelemetry.MetricGroup, metricName string, tags ...string) *extractionFailureCounter { + return &extractionFailureCounter{ + countTableAndOperationFound: metricGroup.NewCounter(metricName, append(tags, "state:table_and_op")...), + countOperationNotFound: metricGroup.NewCounter(metricName, append(tags, "state:no_operation")...), + countTableNameNotFound: metricGroup.NewCounter(metricName, append(tags, "state:no_table_name")...), + countTableAndOpNotFound: metricGroup.NewCounter(metricName, append(tags, "state:no_table_no_op")...), + } +} + +// inc increments the appropriate counter based on the provided state. +func (c *extractionFailureCounter) inc(state counterStateEnum) { + switch state { + case tableAndOperation: + c.countTableAndOperationFound.Add(1) + case operationNotFound: + c.countOperationNotFound.Add(1) + case tableNameNotFound: + c.countTableNameNotFound.Add(1) + case tableAndOpNotFound: + c.countTableAndOpNotFound.Add(1) + default: + log.Errorf("unable to increment extractionFailureCounter due to undefined state: %v\n", state) + } +} + +// get returns the counter value based on the result. +func (c *extractionFailureCounter) get(state counterStateEnum) int64 { + switch state { + case tableAndOperation: + return c.countTableAndOperationFound.Get() + case operationNotFound: + return c.countOperationNotFound.Get() + case tableNameNotFound: + return c.countTableNameNotFound.Get() + case tableAndOpNotFound: + return c.countTableAndOpNotFound.Get() + default: + return 0 + } +} + // Telemetry is a struct to hold the telemetry for the postgres protocol type Telemetry struct { metricGroup *libtelemetry.MetricGroup // queryLengthBuckets holds the counters for the different buckets of by the query length quires - queryLengthBuckets [numberOfBuckets]*libtelemetry.Counter + queryLengthBuckets [numberOfBuckets]*extractionFailureCounter // failedTableNameExtraction holds the counter for the failed table name extraction failedTableNameExtraction *libtelemetry.Counter // failedOperationExtraction holds the counter for the failed operation extraction failedOperationExtraction *libtelemetry.Counter // firstBucketLowerBoundary is the lower boundary of the first bucket. - // We add 1 in order to include BufferSize as the upper boundary of the third bucket. + // We inc 1 in order to include BufferSize as the upper boundary of the third bucket. // Then the first three buckets will include query lengths shorter or equal to BufferSize, // and the rest will include sizes equal to or above the buffer size. firstBucketLowerBoundary int @@ -51,10 +114,10 @@ type Telemetry struct { // Bucket 7: BufferSize + 4*bucketLength + 1 to BufferSize + 5*bucketLength // Bucket 8: BufferSize + 5*bucketLength + 1 to BufferSize + 6*bucketLength // Bucket 9: BufferSize + 6*bucketLength + 1 to BufferSize + 7*bucketLength -func createQueryLengthBuckets(metricGroup *libtelemetry.MetricGroup) [numberOfBuckets]*libtelemetry.Counter { - var buckets [numberOfBuckets]*libtelemetry.Counter +func createQueryLengthBuckets(metricGroup *libtelemetry.MetricGroup) [numberOfBuckets]*extractionFailureCounter { + var buckets [numberOfBuckets]*extractionFailureCounter for i := 0; i < numberOfBuckets; i++ { - buckets[i] = metricGroup.NewCounter("query_length_bucket"+fmt.Sprint(i+1), libtelemetry.OptStatsd) + buckets[i] = newExtractionFailureCounter(metricGroup, "query_length_bucket"+fmt.Sprint(i+1), libtelemetry.OptStatsd) } return buckets } @@ -88,16 +151,22 @@ func (t *Telemetry) getBucketIndex(querySize int) int { func (t *Telemetry) Count(tx *ebpf.EbpfEvent, eventWrapper *EventWrapper) { querySize := int(tx.Tx.Original_query_size) - bucketIndex := t.getBucketIndex(querySize) - if bucketIndex >= 0 && bucketIndex < len(t.queryLengthBuckets) { - t.queryLengthBuckets[bucketIndex].Add(1) - } - + state := tableAndOperation if eventWrapper.Operation() == UnknownOP { t.failedOperationExtraction.Add(1) + state = operationNotFound } if eventWrapper.TableName() == "UNKNOWN" { t.failedTableNameExtraction.Add(1) + if state == operationNotFound { + state = tableAndOpNotFound + } else { + state = tableNameNotFound + } + } + bucketIndex := t.getBucketIndex(querySize) + if bucketIndex >= 0 && bucketIndex < len(t.queryLengthBuckets) { + t.queryLengthBuckets[bucketIndex].inc(state) } } diff --git a/pkg/network/protocols/postgres/telemetry_test.go b/pkg/network/protocols/postgres/telemetry_test.go index f1e5f9cf58a04..aa8aa6843e373 100644 --- a/pkg/network/protocols/postgres/telemetry_test.go +++ b/pkg/network/protocols/postgres/telemetry_test.go @@ -22,6 +22,7 @@ type telemetryResults struct { queryLength [bucketLength]int64 failedTableNameExtraction int64 failedOperationExtraction int64 + counterState counterStateEnum } func Test_getBucketIndex(t *testing.T) { @@ -81,6 +82,7 @@ func TestTelemetry_Count(t *testing.T) { queryLength: [bucketLength]int64{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, failedOperationExtraction: 10, failedTableNameExtraction: 10, + counterState: tableAndOpNotFound, }, }, { @@ -103,6 +105,7 @@ func TestTelemetry_Count(t *testing.T) { queryLength: [bucketLength]int64{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, failedOperationExtraction: 10, failedTableNameExtraction: 10, + counterState: tableAndOpNotFound, }, }, { @@ -125,6 +128,7 @@ func TestTelemetry_Count(t *testing.T) { queryLength: [bucketLength]int64{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, failedOperationExtraction: 10, failedTableNameExtraction: 10, + counterState: tableAndOpNotFound, }, }, { @@ -134,6 +138,7 @@ func TestTelemetry_Count(t *testing.T) { expectedTelemetry: telemetryResults{ failedOperationExtraction: 1, queryLength: [bucketLength]int64{1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + counterState: operationNotFound, }, }, { @@ -143,6 +148,7 @@ func TestTelemetry_Count(t *testing.T) { expectedTelemetry: telemetryResults{ failedTableNameExtraction: 1, queryLength: [bucketLength]int64{1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + counterState: tableNameNotFound, }, }, { @@ -153,6 +159,7 @@ func TestTelemetry_Count(t *testing.T) { failedTableNameExtraction: 1, failedOperationExtraction: 1, queryLength: [bucketLength]int64{1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + counterState: tableAndOpNotFound, }, }, } @@ -188,7 +195,15 @@ func createEbpfEvent(querySize int) *ebpf.EbpfEvent { func verifyTelemetry(t *testing.T, tel *Telemetry, expected telemetryResults) { for i := 0; i < len(tel.queryLengthBuckets); i++ { - assert.Equal(t, expected.queryLength[i], tel.queryLengthBuckets[i].Get(), "queryLength for bucket %d count is incorrect", i) + expState := expected.counterState + expCount := expected.queryLength[i] + curCount := tel.queryLengthBuckets[i].get(expState) + + assert.Equal(t, + expCount, + curCount, + "queryLength bucket '%d': expected state '%v', expected counter '%d', actual counter '%d'", + i, expState, expCount, curCount) } assert.Equal(t, expected.failedTableNameExtraction, tel.failedTableNameExtraction.Get(), "failedTableNameExtraction count is incorrect") assert.Equal(t, expected.failedOperationExtraction, tel.failedOperationExtraction.Get(), "failedOperationExtraction count is incorrect") From 41ffcc75e146fd2e34b2548b6899d1721d2a5b4b Mon Sep 17 00:00:00 2001 From: Sylvain Afchain Date: Thu, 12 Sep 2024 13:22:09 +0200 Subject: [PATCH 019/195] [CWS] do not eval event originating from system-probe itself (#29275) --- .../ebpf/c/include/helpers/discarders.h | 4 ++ pkg/security/ebpf/c/include/hooks/bpf.h | 4 ++ pkg/security/ebpf/c/include/hooks/chdir.h | 4 ++ pkg/security/ebpf/c/include/hooks/chmod.h | 4 ++ pkg/security/ebpf/c/include/hooks/chown.h | 4 ++ pkg/security/ebpf/c/include/hooks/mkdir.h | 4 ++ pkg/security/ebpf/c/include/hooks/mmap.h | 4 ++ pkg/security/ebpf/c/include/hooks/mprotect.h | 4 ++ pkg/security/ebpf/c/include/hooks/open.h | 4 ++ pkg/security/ebpf/c/include/hooks/selinux.h | 4 ++ pkg/security/ebpf/c/include/hooks/setxattr.h | 4 ++ pkg/security/ebpf/c/include/hooks/signal.h | 4 ++ pkg/security/ebpf/c/include/hooks/splice.h | 4 ++ pkg/security/ebpf/c/include/hooks/utimes.h | 4 ++ pkg/security/probe/opts_others.go | 15 ++++++ pkg/security/probe/opts_windows.go | 3 ++ pkg/security/probe/probe_others.go | 1 + pkg/security/rules/engine.go | 7 +++ pkg/security/tests/filters_test.go | 49 +++++++++++++++++++ pkg/security/tests/module_tester_linux.go | 4 ++ pkg/security/tests/testopts.go | 4 +- 21 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 pkg/security/probe/opts_others.go diff --git a/pkg/security/ebpf/c/include/helpers/discarders.h b/pkg/security/ebpf/c/include/helpers/discarders.h index 86bc5d3a1c96d..06e4edb60ae91 100644 --- a/pkg/security/ebpf/c/include/helpers/discarders.h +++ b/pkg/security/ebpf/c/include/helpers/discarders.h @@ -283,4 +283,8 @@ int __attribute__((always_inline)) expire_inode_discarders(u32 mount_id, u64 ino return 0; } +static __attribute__((always_inline)) int is_discarded_by_pid() { + return is_runtime_discarded() && is_runtime_request(); +} + #endif diff --git a/pkg/security/ebpf/c/include/hooks/bpf.h b/pkg/security/ebpf/c/include/hooks/bpf.h index 8b1c9f3bca35c..9cd41f0c9cd39 100644 --- a/pkg/security/ebpf/c/include/hooks/bpf.h +++ b/pkg/security/ebpf/c/include/hooks/bpf.h @@ -50,6 +50,10 @@ __attribute__((always_inline)) void send_bpf_event(void *ctx, struct syscall_cac } HOOK_SYSCALL_ENTRY3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, size) { + if (is_discarded_by_pid()) { + return 0; + } + struct policy_t policy = fetch_policy(EVENT_BPF); struct syscall_cache_t syscall = { .policy = policy, diff --git a/pkg/security/ebpf/c/include/hooks/chdir.h b/pkg/security/ebpf/c/include/hooks/chdir.h index b424ec706ddd1..6a1226db3ced9 100644 --- a/pkg/security/ebpf/c/include/hooks/chdir.h +++ b/pkg/security/ebpf/c/include/hooks/chdir.h @@ -8,6 +8,10 @@ #include "helpers/syscalls.h" long __attribute__((always_inline)) trace__sys_chdir(const char *path) { + if (is_discarded_by_pid()) { + return 0; + } + struct policy_t policy = fetch_policy(EVENT_CHDIR); struct syscall_cache_t syscall = { .type = EVENT_CHDIR, diff --git a/pkg/security/ebpf/c/include/hooks/chmod.h b/pkg/security/ebpf/c/include/hooks/chmod.h index 8afd2f1f663ab..f374c6478cc31 100644 --- a/pkg/security/ebpf/c/include/hooks/chmod.h +++ b/pkg/security/ebpf/c/include/hooks/chmod.h @@ -7,6 +7,10 @@ #include "helpers/syscalls.h" int __attribute__((always_inline)) trace__sys_chmod(const char *path, umode_t mode) { + if (is_discarded_by_pid()) { + return 0; + } + struct policy_t policy = fetch_policy(EVENT_CHMOD); struct syscall_cache_t syscall = { .type = EVENT_CHMOD, diff --git a/pkg/security/ebpf/c/include/hooks/chown.h b/pkg/security/ebpf/c/include/hooks/chown.h index 248d366aef68c..3bb4cbf243141 100644 --- a/pkg/security/ebpf/c/include/hooks/chown.h +++ b/pkg/security/ebpf/c/include/hooks/chown.h @@ -7,6 +7,10 @@ #include "helpers/syscalls.h" int __attribute__((always_inline)) trace__sys_chown(const char *filename, uid_t user, gid_t group) { + if (is_discarded_by_pid()) { + return 0; + } + struct policy_t policy = fetch_policy(EVENT_CHOWN); struct syscall_cache_t syscall = { .type = EVENT_CHOWN, diff --git a/pkg/security/ebpf/c/include/hooks/mkdir.h b/pkg/security/ebpf/c/include/hooks/mkdir.h index 0047972df52df..ebc7e09cc4078 100644 --- a/pkg/security/ebpf/c/include/hooks/mkdir.h +++ b/pkg/security/ebpf/c/include/hooks/mkdir.h @@ -8,6 +8,10 @@ #include "helpers/syscalls.h" long __attribute__((always_inline)) trace__sys_mkdir(u8 async, umode_t mode) { + if (is_discarded_by_pid()) { + return 0; + } + struct policy_t policy = fetch_policy(EVENT_MKDIR); struct syscall_cache_t syscall = { .type = EVENT_MKDIR, diff --git a/pkg/security/ebpf/c/include/hooks/mmap.h b/pkg/security/ebpf/c/include/hooks/mmap.h index 45392650a94ca..d28d6b3fdd099 100644 --- a/pkg/security/ebpf/c/include/hooks/mmap.h +++ b/pkg/security/ebpf/c/include/hooks/mmap.h @@ -9,6 +9,10 @@ HOOK_ENTRY("vm_mmap_pgoff") int hook_vm_mmap_pgoff(ctx_t *ctx) { + if (is_discarded_by_pid()) { + return 0; + } + u64 len = CTX_PARM3(ctx); u64 prot = CTX_PARM4(ctx); u64 flags = CTX_PARM5(ctx); diff --git a/pkg/security/ebpf/c/include/hooks/mprotect.h b/pkg/security/ebpf/c/include/hooks/mprotect.h index 0a6107c12c13b..0439acaf3bc24 100644 --- a/pkg/security/ebpf/c/include/hooks/mprotect.h +++ b/pkg/security/ebpf/c/include/hooks/mprotect.h @@ -7,6 +7,10 @@ #include "helpers/syscalls.h" HOOK_SYSCALL_ENTRY0(mprotect) { + if (is_discarded_by_pid()) { + return 0; + } + struct policy_t policy = fetch_policy(EVENT_MPROTECT); struct syscall_cache_t syscall = { .type = EVENT_MPROTECT, diff --git a/pkg/security/ebpf/c/include/hooks/open.h b/pkg/security/ebpf/c/include/hooks/open.h index 3d48368979c93..1ec4cf79c96b0 100644 --- a/pkg/security/ebpf/c/include/hooks/open.h +++ b/pkg/security/ebpf/c/include/hooks/open.h @@ -11,6 +11,10 @@ #include "helpers/syscalls.h" int __attribute__((always_inline)) trace__sys_openat2(const char *path, u8 async, int flags, umode_t mode, u64 pid_tgid) { + if (is_discarded_by_pid()) { + return 0; + } + struct policy_t policy = fetch_policy(EVENT_OPEN); struct syscall_cache_t syscall = { .type = EVENT_OPEN, diff --git a/pkg/security/ebpf/c/include/hooks/selinux.h b/pkg/security/ebpf/c/include/hooks/selinux.h index aa9d7084823b9..983214b3d1714 100644 --- a/pkg/security/ebpf/c/include/hooks/selinux.h +++ b/pkg/security/ebpf/c/include/hooks/selinux.h @@ -7,6 +7,10 @@ #include "helpers/syscalls.h" int __attribute__((always_inline)) handle_selinux_event(void *ctx, struct file *file, const char *buf, size_t count, enum selinux_source_event_t source_event) { + if (is_discarded_by_pid()) { + return 0; + } + struct syscall_cache_t syscall = { .type = EVENT_SELINUX, .policy = fetch_policy(EVENT_SELINUX), diff --git a/pkg/security/ebpf/c/include/hooks/setxattr.h b/pkg/security/ebpf/c/include/hooks/setxattr.h index f97a33e160f3b..93a2fe23f1e90 100644 --- a/pkg/security/ebpf/c/include/hooks/setxattr.h +++ b/pkg/security/ebpf/c/include/hooks/setxattr.h @@ -7,6 +7,10 @@ #include "helpers/syscalls.h" int __attribute__((always_inline)) trace__sys_setxattr(const char *xattr_name) { + if (is_discarded_by_pid()) { + return 0; + } + struct policy_t policy = fetch_policy(EVENT_SETXATTR); struct syscall_cache_t syscall = { .type = EVENT_SETXATTR, diff --git a/pkg/security/ebpf/c/include/hooks/signal.h b/pkg/security/ebpf/c/include/hooks/signal.h index 8b6d11fb80206..92dbd145d7992 100644 --- a/pkg/security/ebpf/c/include/hooks/signal.h +++ b/pkg/security/ebpf/c/include/hooks/signal.h @@ -6,6 +6,10 @@ #include "helpers/syscalls.h" HOOK_SYSCALL_ENTRY2(kill, int, pid, int, type) { + if (is_discarded_by_pid()) { + return 0; + } + /* TODO: implement the event for pid equal to 0 or -1. */ if (pid < 1) { return 0; diff --git a/pkg/security/ebpf/c/include/hooks/splice.h b/pkg/security/ebpf/c/include/hooks/splice.h index 7dff0490400e7..c58452a64c621 100644 --- a/pkg/security/ebpf/c/include/hooks/splice.h +++ b/pkg/security/ebpf/c/include/hooks/splice.h @@ -9,6 +9,10 @@ #include "helpers/syscalls.h" HOOK_SYSCALL_ENTRY0(splice) { + if (is_discarded_by_pid()) { + return 0; + } + struct policy_t policy = fetch_policy(EVENT_SPLICE); struct syscall_cache_t syscall = { .type = EVENT_SPLICE, diff --git a/pkg/security/ebpf/c/include/hooks/utimes.h b/pkg/security/ebpf/c/include/hooks/utimes.h index 88bdc8d44c8ae..8cb865dc7f998 100644 --- a/pkg/security/ebpf/c/include/hooks/utimes.h +++ b/pkg/security/ebpf/c/include/hooks/utimes.h @@ -6,6 +6,10 @@ #include "helpers/syscalls.h" int __attribute__((always_inline)) trace__sys_utimes(const char *filename) { + if (is_discarded_by_pid()) { + return 0; + } + struct policy_t policy = fetch_policy(EVENT_UTIME); struct syscall_cache_t syscall = { .type = EVENT_UTIME, diff --git a/pkg/security/probe/opts_others.go b/pkg/security/probe/opts_others.go new file mode 100644 index 0000000000000..59cf8dccb1453 --- /dev/null +++ b/pkg/security/probe/opts_others.go @@ -0,0 +1,15 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !linux && !windows + +// Package probe holds probe related files +package probe + +// Opts defines some probe options +type Opts struct { + // DontDiscardRuntime do not discard the runtime. Mostly used by functional tests + DontDiscardRuntime bool +} diff --git a/pkg/security/probe/opts_windows.go b/pkg/security/probe/opts_windows.go index 7558f1758456b..8d079df75832f 100644 --- a/pkg/security/probe/opts_windows.go +++ b/pkg/security/probe/opts_windows.go @@ -14,6 +14,9 @@ import ( // Opts defines some probe options type Opts struct { + // DontDiscardRuntime do not discard the runtime. Mostly used by functional tests + DontDiscardRuntime bool + // StatsdClient to be used for probe stats StatsdClient statsd.ClientInterface diff --git a/pkg/security/probe/probe_others.go b/pkg/security/probe/probe_others.go index 099b646d32bd4..ad1166c45c23d 100644 --- a/pkg/security/probe/probe_others.go +++ b/pkg/security/probe/probe_others.go @@ -39,6 +39,7 @@ type PlatformProbe struct { // Probe represents the runtime security probe type Probe struct { Config *config.Config + Opts Opts } // Origin returns origin diff --git a/pkg/security/rules/engine.go b/pkg/security/rules/engine.go index 2c24d48d230a8..2f512728b12dd 100644 --- a/pkg/security/rules/engine.go +++ b/pkg/security/rules/engine.go @@ -63,6 +63,7 @@ type RuleEngine struct { eventSender events.EventSender rulesetListeners []rules.RuleSetListener AutoSuppression autosuppression.AutoSuppression + pid uint32 } // APIServer defines the API server @@ -85,6 +86,7 @@ func NewRuleEngine(evm *eventmonitor.EventMonitor, config *config.RuntimeSecurit policyLoader: rules.NewPolicyLoader(), statsdClient: statsdClient, rulesetListeners: rulesetListeners, + pid: utils.Getpid(), } engine.AutoSuppression.Init(autosuppression.Opts{ @@ -516,6 +518,11 @@ func (e *RuleEngine) SetRulesetLoadedCallback(cb func(es *rules.RuleSet, err *mu // HandleEvent is called by the probe when an event arrives from the kernel func (e *RuleEngine) HandleEvent(event *model.Event) { + // don't eval event originating from myself + if !e.probe.Opts.DontDiscardRuntime && event.ProcessContext.Pid == e.pid { + return + } + // event already marked with an error, skip it if event.Error != nil { return diff --git a/pkg/security/tests/filters_test.go b/pkg/security/tests/filters_test.go index 74486100f4470..6688355ff4f33 100644 --- a/pkg/security/tests/filters_test.go +++ b/pkg/security/tests/filters_test.go @@ -796,3 +796,52 @@ func TestFilterBpfCmd(t *testing.T) { } } } + +func TestFilterRuntimeDiscarded(t *testing.T) { + SkipIfNotAvailable(t) + + ruleDefs := []*rules.RuleDefinition{ + { + ID: "test_open", + Expression: `open.file.path == "{{.Root}}/no-event"`, + }, + { + ID: "test_unlink", + Expression: `unlink.file.path == "{{.Root}}/no-event"`, + }, + } + + test, err := newTestModule(t, nil, ruleDefs, withStaticOpts(testOpts{discardRuntime: true})) + if err != nil { + t.Fatal(err) + } + defer test.Close() + + testFile, _, err := test.Path("no-event") + if err != nil { + t.Fatal(err) + } + defer os.Remove(testFile) + + // test that we don't receive event from the kernel + if err := waitForOpenProbeEvent(test, func() error { + fd, err := openTestFile(test, testFile, syscall.O_CREAT) + if err != nil { + return err + } + return syscall.Close(fd) + }, testFile); err == nil { + t.Fatal("shouldn't get an event") + } + + // unlink aren't discarded kernel side (inode invalidation) but should be discarded before the rule evaluation + err = test.GetSignal(t, func() error { + return os.Remove(testFile) + }, func(event *model.Event, r *rules.Rule) { + t.Errorf("shouldn't get an event") + }) + + if err == nil { + t.Errorf("shouldn't get an event") + } +} diff --git a/pkg/security/tests/module_tester_linux.go b/pkg/security/tests/module_tester_linux.go index da0946b338ce6..b542dc52cb918 100644 --- a/pkg/security/tests/module_tester_linux.go +++ b/pkg/security/tests/module_tester_linux.go @@ -807,6 +807,10 @@ func newTestModuleWithOnDemandProbes(t testing.TB, onDemandHooks []rules.OnDeman emopts.ProbeOpts.TagsResolver = NewFakeResolverDifferentImageNames() } + if opts.staticOpts.discardRuntime { + emopts.ProbeOpts.DontDiscardRuntime = false + } + fxDeps := fxutil.Test[testModuleFxDeps]( t, core.MockBundle(), diff --git a/pkg/security/tests/testopts.go b/pkg/security/tests/testopts.go index 43ef3dc1bbebf..d8eb578131e45 100644 --- a/pkg/security/tests/testopts.go +++ b/pkg/security/tests/testopts.go @@ -71,6 +71,7 @@ type testOpts struct { enforcementDisarmerExecutableMaxAllowed int enforcementDisarmerExecutablePeriod time.Duration eventServerRetention time.Duration + discardRuntime bool } type dynamicTestOpts struct { @@ -153,5 +154,6 @@ func (to testOpts) Equal(opts testOpts) bool { to.enforcementDisarmerExecutableEnabled == opts.enforcementDisarmerExecutableEnabled && to.enforcementDisarmerExecutableMaxAllowed == opts.enforcementDisarmerExecutableMaxAllowed && to.enforcementDisarmerExecutablePeriod == opts.enforcementDisarmerExecutablePeriod && - to.eventServerRetention == opts.eventServerRetention + to.eventServerRetention == opts.eventServerRetention && + to.discardRuntime == opts.discardRuntime } From 4d2331848354259d7f57eb97d62563c1805cacae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Bavelier?= <97530782+tbavelier@users.noreply.github.com> Date: Thu, 12 Sep 2024 14:00:31 +0200 Subject: [PATCH 020/195] [Podman] Support for rootless containers for file log collection (#28235) Co-authored-by: Sandra (neko) <165049174+neko-dd@users.noreply.github.com> --- .../launchers/container/tailerfactory/file.go | 9 +++- .../container/tailerfactory/file_test.go | 45 +++++++++++++++++-- pkg/util/log/log_podman_util.go | 27 +++++++++++ pkg/util/log/log_podman_util_test.go | 33 ++++++++++++++ ...ath_rootless_support-55a1af8f41cf94c4.yaml | 4 ++ 5 files changed, 114 insertions(+), 4 deletions(-) create mode 100644 pkg/util/log/log_podman_util.go create mode 100644 pkg/util/log/log_podman_util_test.go create mode 100644 releasenotes/notes/podman_file_logs_path_rootless_support-55a1af8f41cf94c4.yaml diff --git a/pkg/logs/launchers/container/tailerfactory/file.go b/pkg/logs/launchers/container/tailerfactory/file.go index 9ef2b0f06777c..f940804a6c027 100644 --- a/pkg/logs/launchers/container/tailerfactory/file.go +++ b/pkg/logs/launchers/container/tailerfactory/file.go @@ -33,7 +33,7 @@ import ( var podLogsBasePath = "/var/log/pods" var dockerLogsBasePathNix = "/var/lib/docker" var dockerLogsBasePathWin = "c:\\programdata\\docker" -var podmanLogsBasePath = "/var/lib/containers" +var podmanRootfullLogsBasePath = "/var/lib/containers" // makeFileTailer makes a file-based tailer for the given source, or returns // an error if it cannot do so (e.g., due to permission errors) @@ -161,6 +161,13 @@ func (tf *factory) findDockerLogPath(containerID string) string { // this config flag provides temporary support for podman while it is // still recognized by AD as a "docker" runtime. if coreConfig.Datadog().GetBool("logs_config.use_podman_logs") { + // Default path for podman rootfull containers + podmanLogsBasePath := podmanRootfullLogsBasePath + podmanDBPath := coreConfig.Datadog().GetString("podman_db_path") + // User provided a custom podman DB path, they are running rootless containers or modified the root directory. + if len(podmanDBPath) > 0 { + podmanLogsBasePath = log.ExtractPodmanRootDirFromDBPath(podmanDBPath) + } return filepath.Join( podmanLogsBasePath, "storage/overlay-containers", containerID, "userdata/ctr.log") diff --git a/pkg/logs/launchers/container/tailerfactory/file_test.go b/pkg/logs/launchers/container/tailerfactory/file_test.go index b98f9102c7308..314b804bfe8f0 100644 --- a/pkg/logs/launchers/container/tailerfactory/file_test.go +++ b/pkg/logs/launchers/container/tailerfactory/file_test.go @@ -43,7 +43,7 @@ func fileTestSetup(t *testing.T) { oldPodLogsBasePath, podLogsBasePath = podLogsBasePath, filepath.Join(tmp, "pods") oldDockerLogsBasePathNix, dockerLogsBasePathNix = dockerLogsBasePathNix, filepath.Join(tmp, "docker-nix") oldDockerLogsBasePathWin, dockerLogsBasePathWin = dockerLogsBasePathWin, filepath.Join(tmp, "docker-win") - oldPodmanLogsBasePath, podmanLogsBasePath = podmanLogsBasePath, filepath.Join(tmp, "containers") + oldPodmanLogsBasePath, podmanRootfullLogsBasePath = podmanRootfullLogsBasePath, filepath.Join(tmp, "containers") switch runtime.GOOS { case "windows": @@ -56,7 +56,7 @@ func fileTestSetup(t *testing.T) { podLogsBasePath = oldPodLogsBasePath dockerLogsBasePathNix = oldDockerLogsBasePathNix dockerLogsBasePathWin = oldDockerLogsBasePathWin - podmanLogsBasePath = oldPodmanLogsBasePath + podmanRootfullLogsBasePath = oldPodmanLogsBasePath }) } @@ -145,7 +145,7 @@ func TestMakeFileSource_podman_success(t *testing.T) { t.Skip("Skip on Windows due to WSL file path abstraction") } - p := filepath.Join(podmanLogsBasePath, filepath.FromSlash("storage/overlay-containers/abc/userdata/ctr.log")) + p := filepath.Join(podmanRootfullLogsBasePath, filepath.FromSlash("storage/overlay-containers/abc/userdata/ctr.log")) require.NoError(t, os.MkdirAll(filepath.Dir(p), 0o777)) require.NoError(t, os.WriteFile(p, []byte("{}"), 0o666)) @@ -178,6 +178,45 @@ func TestMakeFileSource_podman_success(t *testing.T) { require.Equal(t, source.Config.AutoMultiLineMatchThreshold, 0.321) } +func TestMakeFileSource_podman_with_db_path_success(t *testing.T) { + tmp := t.TempDir() + customPath := filepath.Join(tmp, "/custom/path/containers/storage/db.sql") + mockConfig := configmock.New(t) + mockConfig.SetWithoutSource("logs_config.use_podman_logs", true) + mockConfig.SetWithoutSource("podman_db_path", customPath) + + // On Windows, podman runs within a Linux virtual machine, so the Agent would believe it runs in a Linux environment with all the paths being nix-like. + // The real path on the system is abstracted by the Windows Subsystem for Linux layer, so this unit test is skipped. + // Ref: https://github.com/containers/podman/blob/main/docs/tutorials/podman-for-windows.md + if runtime.GOOS == "windows" { + t.Skip("Skip on Windows due to WSL file path abstraction") + } + + p := filepath.Join(filepath.Join(tmp, "/custom/path/containers"), filepath.FromSlash("storage/overlay-containers/abc/userdata/ctr.log")) + require.NoError(t, os.MkdirAll(filepath.Dir(p), 0o777)) + require.NoError(t, os.WriteFile(p, []byte("{}"), 0o666)) + + tf := &factory{ + pipelineProvider: pipeline.NewMockProvider(), + cop: containersorpods.NewDecidedChooser(containersorpods.LogContainers), + } + source := sources.NewLogSource("test", &config.LogsConfig{ + Type: "podman", + Identifier: "abc", + Source: "src", + Service: "svc", + }) + child, err := tf.makeFileSource(source) + require.NoError(t, err) + require.Equal(t, source.Name, child.Name) + require.Equal(t, "file", child.Config.Type) + require.Equal(t, source.Config.Identifier, child.Config.Identifier) + require.Equal(t, p, child.Config.Path) + require.Equal(t, source.Config.Source, child.Config.Source) + require.Equal(t, source.Config.Service, child.Config.Service) + require.Equal(t, sources.DockerSourceType, child.GetSourceType()) +} + func TestMakeFileSource_docker_no_file(t *testing.T) { fileTestSetup(t) diff --git a/pkg/util/log/log_podman_util.go b/pkg/util/log/log_podman_util.go new file mode 100644 index 0000000000000..4327572820cff --- /dev/null +++ b/pkg/util/log/log_podman_util.go @@ -0,0 +1,27 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package log + +import ( + "strings" +) + +// The paths below are set in podman code and cannot be modified by the user. +// Ref: https://github.com/containers/podman/blob/7c38ee756592d95e718967fcd3983b81abd95e76/test/e2e/run_transient_test.go#L19-L45 +const ( + sqlDBSuffix string = "/storage/db.sql" + boltDBSuffix string = "/storage/libpod/bolt_state.db" +) + +// ExtractPodmanRootDirFromDBPath extracts the podman base path for the containers directory based on the user-provided `podman_db_path`. +func ExtractPodmanRootDirFromDBPath(podmanDBPath string) string { + if strings.HasSuffix(podmanDBPath, sqlDBSuffix) { + return strings.TrimSuffix(podmanDBPath, sqlDBSuffix) + } else if strings.HasSuffix(podmanDBPath, boltDBSuffix) { + return strings.TrimSuffix(podmanDBPath, boltDBSuffix) + } + return "" +} diff --git a/pkg/util/log/log_podman_util_test.go b/pkg/util/log/log_podman_util_test.go new file mode 100644 index 0000000000000..13e9a601b2d0d --- /dev/null +++ b/pkg/util/log/log_podman_util_test.go @@ -0,0 +1,33 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package log + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/assert" +) + +func Test_ExtractPodmanRootDirFromDBPath(t *testing.T) { + testCases := []struct { + name string + input string + expected string + }{ + {"Rootless & BoltDB", "/data/containers_tomcat/storage/libpod/bolt_state.db", "/data/containers_tomcat"}, + {"Rootfull & BoltDB", "/var/lib/containers/storage/libpod/bolt_state.db", "/var/lib/containers"}, + {"Rootless & SQLite", "/home/ubuntu/.local/share/containers/storage/db.sql", "/home/ubuntu/.local/share/containers"}, + {"Rootfull & SQLite", "/var/lib/containers/storage/db.sql", "/var/lib/containers"}, + {"No matching suffix", "/foo/bar/baz", ""}, + } + + for _, testCase := range testCases { + output := ExtractPodmanRootDirFromDBPath(testCase.input) + assert.Equal(t, testCase.expected, output, fmt.Sprintf("%s: Expected %s but output is %s for input %s", testCase.name, testCase.expected, output, testCase.input)) + } + +} diff --git a/releasenotes/notes/podman_file_logs_path_rootless_support-55a1af8f41cf94c4.yaml b/releasenotes/notes/podman_file_logs_path_rootless_support-55a1af8f41cf94c4.yaml new file mode 100644 index 0000000000000..17fab73bf7b3d --- /dev/null +++ b/releasenotes/notes/podman_file_logs_path_rootless_support-55a1af8f41cf94c4.yaml @@ -0,0 +1,4 @@ +--- +enhancements: + - | + Adds support for file log collection from Podman rootless containers when ``logs_config.use_podman_logs`` is set to ``true`` and ``podman_db_path`` is configured. From 3528ce7782207f4610c6d8e857a418769a3f064a Mon Sep 17 00:00:00 2001 From: Jaime Fullaondo Date: Thu, 12 Sep 2024 14:30:18 +0200 Subject: [PATCH 021/195] [otel-agent] config: adding missing testdata (#29031) --- cmd/otel-agent/config/agent_config_test.go | 20 ++++++++++++++++--- .../testdata/datadog_bad_log_level.yaml | 5 +++++ 2 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 cmd/otel-agent/config/testdata/datadog_bad_log_level.yaml diff --git a/cmd/otel-agent/config/agent_config_test.go b/cmd/otel-agent/config/agent_config_test.go index c985c24859da2..720ec35cea3f1 100644 --- a/cmd/otel-agent/config/agent_config_test.go +++ b/cmd/otel-agent/config/agent_config_test.go @@ -7,6 +7,7 @@ package config import ( "context" + "fmt" "os" "strings" "testing" @@ -174,15 +175,28 @@ func (suite *ConfigTestSuite) TestEnvBadLogLevel() { assert.Error(t, err) } +func (suite *ConfigTestSuite) TestBadDDConfigFile() { + t := suite.T() + fileName := "testdata/config_default.yaml" + ddFileName := "testdata/doesnotexists.yaml" + _, err := NewConfigComponent(context.Background(), ddFileName, []string{fileName}) + + expectedError := fmt.Sprintf( + "open %s: no such file or directory\nopen %s: no such file or directory", + ddFileName, ddFileName) + assert.ErrorContains(t, err, expectedError) +} + func (suite *ConfigTestSuite) TestBadLogLevel() { t := suite.T() fileName := "testdata/config_default.yaml" ddFileName := "testdata/datadog_bad_log_level.yaml" _, err := NewConfigComponent(context.Background(), ddFileName, []string{fileName}) - // log_level from service config takes precedence -> more verbose - // ddFlleName configures level warn, Telemetry defaults to info - assert.Error(t, err) + expectedError := fmt.Sprintf( + "invalid log level (%v) set in the Datadog Agent configuration", + pkgconfigsetup.Datadog().GetString("log_level")) + assert.ErrorContains(t, err, expectedError) } func (suite *ConfigTestSuite) TestNoDDExporter() { diff --git a/cmd/otel-agent/config/testdata/datadog_bad_log_level.yaml b/cmd/otel-agent/config/testdata/datadog_bad_log_level.yaml new file mode 100644 index 0000000000000..be99720314f33 --- /dev/null +++ b/cmd/otel-agent/config/testdata/datadog_bad_log_level.yaml @@ -0,0 +1,5 @@ +log_level: yabadabadoo + +otelcollector: + enabled: true + extension_url: "https://localhost:8888" From 6e66b216eee455dca54e61634cc381d15b1d8df9 Mon Sep 17 00:00:00 2001 From: Vincent Whitchurch Date: Thu, 12 Sep 2024 15:00:24 +0200 Subject: [PATCH 022/195] language detection: Detect .NET processes (#29252) --- .../internal/detectors/dotnet_detector.go | 84 +++++++++++++++++++ .../detectors/dotnet_detector_test.go | 79 +++++++++++++++++ .../detectors/testdata/System.Runtime.dll | 1 + .../privileged/privileged_detector.go | 2 + .../privileged/privileged_detector_test.go | 72 ++++++++++++++++ 5 files changed, 238 insertions(+) create mode 100644 pkg/languagedetection/internal/detectors/dotnet_detector.go create mode 100644 pkg/languagedetection/internal/detectors/dotnet_detector_test.go create mode 100644 pkg/languagedetection/internal/detectors/testdata/System.Runtime.dll diff --git a/pkg/languagedetection/internal/detectors/dotnet_detector.go b/pkg/languagedetection/internal/detectors/dotnet_detector.go new file mode 100644 index 0000000000000..c3a8c7403d88c --- /dev/null +++ b/pkg/languagedetection/internal/detectors/dotnet_detector.go @@ -0,0 +1,84 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +//go:build linux + +package detectors + +import ( + "bufio" + "fmt" + "io" + "os" + "path" + "strconv" + "strings" + + dderrors "github.com/DataDog/datadog-agent/pkg/errors" + "github.com/DataDog/datadog-agent/pkg/languagedetection/languagemodels" + "github.com/DataDog/datadog-agent/pkg/util/kernel" +) + +const runtimeDll = "/System.Runtime.dll" + +var errorDllNotFound = dderrors.NewNotFound(runtimeDll) + +// DotnetDetector detects .NET processes. +type DotnetDetector struct { + hostProc string +} + +// NewDotnetDetector creates a new instance of DotnetDetector. +func NewDotnetDetector() DotnetDetector { + return DotnetDetector{hostProc: kernel.ProcFSRoot()} +} + +// mapsHasDotnetDll checks if the maps file includes a path with the .NET +// runtime DLL. +func mapsHasDotnetDll(reader io.Reader) (bool, error) { + scanner := bufio.NewScanner(bufio.NewReader(reader)) + + for scanner.Scan() { + line := scanner.Text() + + if strings.HasSuffix(line, runtimeDll) { + return true, nil + } + } + + return false, scanner.Err() +} + +func (d DotnetDetector) getMapsPath(pid int32) string { + return path.Join(d.hostProc, strconv.FormatInt(int64(pid), 10), "maps") +} + +// DetectLanguage detects if a process is a .NET process. It does this by using +// /proc/PID/maps to check if the process has mapped a standard .NET dll. This +// works for non-single-file deployments (both self-contained and +// framework-dependent), and framework-dependent single-file deployments. +// +// It does not work for self-contained single-file deployments since these do +// not have any DLLs in their maps file. +func (d DotnetDetector) DetectLanguage(process languagemodels.Process) (languagemodels.Language, error) { + path := d.getMapsPath(process.GetPid()) + mapsFile, err := os.Open(path) + if err != nil { + return languagemodels.Language{}, fmt.Errorf("open: %v", err) + } + defer mapsFile.Close() + + hasDLL, err := mapsHasDotnetDll(mapsFile) + if err != nil { + return languagemodels.Language{}, err + } + if !hasDLL { + return languagemodels.Language{}, errorDllNotFound + } + + return languagemodels.Language{ + Name: languagemodels.Dotnet, + }, nil +} diff --git a/pkg/languagedetection/internal/detectors/dotnet_detector_test.go b/pkg/languagedetection/internal/detectors/dotnet_detector_test.go new file mode 100644 index 0000000000000..78b7bf146e619 --- /dev/null +++ b/pkg/languagedetection/internal/detectors/dotnet_detector_test.go @@ -0,0 +1,79 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +//go:build linux + +package detectors + +import ( + "os" + "path/filepath" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/languagedetection/languagemodels" + "github.com/DataDog/datadog-agent/pkg/network/protocols/http/testutil" + fileopener "github.com/DataDog/datadog-agent/pkg/network/usm/sharedlibraries/testutil" + "github.com/DataDog/datadog-agent/pkg/proto/pbgo/languagedetection" +) + +func TestDotnetMapsParser(t *testing.T) { + data := []struct { + name string + maps string + result bool + }{ + { + name: "empty maps", + maps: "", + }, + { + name: "not in maps", + maps: ` +79f6cd47d000-79f6cd47f000 r--p 00000000 fc:04 793163 /usr/lib/python3.10/lib-dynload/_bz2.cpython-310-x86_64-linux-gnu.so +79f6cd479000-79f6cd47a000 r-xp 00001000 fc:06 5507018 /home/foo/.local/lib/python3.10/site-packages/ddtrace_fake/md.cpython-310-x86_64-linux-gnu.so + `, + result: false, + }, + { + name: "in maps", + maps: ` +7d97b4e57000-7d97b4e85000 r--s 00000000 fc:04 1332568 /usr/lib/dotnet/shared/Microsoft.NETCore.App/8.0.8/System.Con +sole.dll +7d97b4e85000-7d97b4e8e000 r--s 00000000 fc:04 1332665 /usr/lib/dotnet/shared/Microsoft.NETCore.App/8.0.8/System.Runtime.dll +7d97b4e8e000-7d97b4e99000 r--p 00000000 fc:04 1332718 /usr/lib/dotnet/shared/Microsoft.NETCore.App/8.0.8/libSystem.Native.so + `, + result: true, + }, + } + for _, d := range data { + t.Run(d.name, func(t *testing.T) { + result, err := mapsHasDotnetDll(strings.NewReader(d.maps)) + assert.NoError(t, err) + assert.Equal(t, d.result, result) + }) + } +} + +func TestDotnetDetector(t *testing.T) { + curDir, err := testutil.CurDir() + require.NoError(t, err) + + dll := filepath.Join(curDir, "testdata", "System.Runtime.dll") + cmd, err := fileopener.OpenFromAnotherProcess(t, dll) + require.NoError(t, err) + + proc := &languagedetection.Process{Pid: int32(cmd.Process.Pid)} + langInfo, err := NewDotnetDetector().DetectLanguage(proc) + require.NoError(t, err) + assert.Equal(t, languagemodels.Dotnet, langInfo.Name) + + self := &languagedetection.Process{Pid: int32(os.Getpid())} + _, err = NewDotnetDetector().DetectLanguage(self) + require.Error(t, err) +} diff --git a/pkg/languagedetection/internal/detectors/testdata/System.Runtime.dll b/pkg/languagedetection/internal/detectors/testdata/System.Runtime.dll new file mode 100644 index 0000000000000..421376db9e8ae --- /dev/null +++ b/pkg/languagedetection/internal/detectors/testdata/System.Runtime.dll @@ -0,0 +1 @@ +dummy diff --git a/pkg/languagedetection/privileged/privileged_detector.go b/pkg/languagedetection/privileged/privileged_detector.go index cf050a77676f5..b6447ea310c14 100644 --- a/pkg/languagedetection/privileged/privileged_detector.go +++ b/pkg/languagedetection/privileged/privileged_detector.go @@ -30,6 +30,7 @@ import ( var detectorsWithPrivilege = []languagemodels.Detector{ detectors.NewGoDetector(), + detectors.NewDotnetDetector(), } var ( @@ -97,6 +98,7 @@ func (l *LanguageDetector) DetectWithPrivileges(procs []languagemodels.Process) continue } languages[i] = lang + break } l.mux.Lock() l.binaryIDCache.Add(bin, lang) diff --git a/pkg/languagedetection/privileged/privileged_detector_test.go b/pkg/languagedetection/privileged/privileged_detector_test.go index aba97bf96595c..485a02bbe5ec9 100644 --- a/pkg/languagedetection/privileged/privileged_detector_test.go +++ b/pkg/languagedetection/privileged/privileged_detector_test.go @@ -8,6 +8,7 @@ package privileged import ( + "errors" "os" "os/exec" "path/filepath" @@ -149,3 +150,74 @@ func TestShortLivingProc(t *testing.T) { require.Equal(t, languagemodels.Language{}, res[0]) require.Zero(t, d.binaryIDCache.Len()) } + +// DummyDetector is a detector used for testing +type DummyDetector struct { + language languagemodels.LanguageName +} + +// DummyProcess is a process used for testing +type DummyProcess struct{} + +// GetPid is unused +func (p DummyProcess) GetPid() int32 { + return int32(os.Getpid()) +} + +// GetCommand is unused +func (p DummyProcess) GetCommand() string { + return "dummy" +} + +// GetCmdline is unused +func (p DummyProcess) GetCmdline() []string { + return []string{"dummy"} +} + +// DetectLanguage "detects" a dummy language for testing +func (d DummyDetector) DetectLanguage(_ languagemodels.Process) (languagemodels.Language, error) { + if d.language == languagemodels.Unknown { + return languagemodels.Language{}, errors.New("unable to detect") + } + + return languagemodels.Language{Name: languagemodels.LanguageName(d.language)}, nil +} + +func TestDetectorOrder(t *testing.T) { + for _, test := range []struct { + name string + detectors []languagemodels.Detector + language languagemodels.LanguageName + }{ + { + name: "stop at first good", + detectors: []languagemodels.Detector{ + DummyDetector{languagemodels.Java}, + DummyDetector{languagemodels.Python}}, + language: languagemodels.Java, + }, + { + name: "try second if first fails", + detectors: []languagemodels.Detector{ + DummyDetector{}, + DummyDetector{languagemodels.Python}}, + language: languagemodels.Python, + }, + { + name: "all fail", + detectors: []languagemodels.Detector{ + DummyDetector{}, + DummyDetector{}}, + language: languagemodels.Unknown, + }, + } { + t.Run(test.name, func(t *testing.T) { + MockPrivilegedDetectors(t, test.detectors) + d := NewLanguageDetector() + res := d.DetectWithPrivileges([]languagemodels.Process{DummyProcess{}}) + require.Len(t, res, 1) + require.NotNil(t, res[0]) + assert.Equal(t, test.language, res[0].Name) + }) + } +} From 8d215ebf781049cd883e6baac4c26819527f080b Mon Sep 17 00:00:00 2001 From: Baptiste Foy Date: Thu, 12 Sep 2024 15:43:39 +0200 Subject: [PATCH 023/195] chore(fleet): Fix incident-30484 (#29227) --- .gitlab/e2e/e2e.yml | 36 +++++++++------ test/new-e2e/pkg/utils/e2e/client/host.go | 2 +- test/new-e2e/tests/installer/all_packages.go | 40 +++++++++++++++++ .../tests/installer/all_packages_test.go | 45 ++++++------------- .../host/fixtures/run_http_server.sh | 4 +- .../tests/installer/package_agent_test.go | 18 ++++---- .../installer/package_apm_inject_test.go | 2 +- .../tests/installer/package_installer_test.go | 2 +- .../tests/installer/upgrade_scenario_test.go | 2 +- .../tests/installer/windows/base_suite.go | 12 +++-- 10 files changed, 100 insertions(+), 63 deletions(-) create mode 100644 test/new-e2e/tests/installer/all_packages.go diff --git a/.gitlab/e2e/e2e.yml b/.gitlab/e2e/e2e.yml index 8cb38a1e6f869..c1a40c6852fec 100644 --- a/.gitlab/e2e/e2e.yml +++ b/.gitlab/e2e/e2e.yml @@ -321,6 +321,20 @@ new-e2e-installer: - deploy_rpm_testing-a7_x64 - deploy_suse_rpm_testing_arm64-a7 - deploy_suse_rpm_testing_x64-a7 + - qa_installer_oci + - qa_agent_oci + variables: + TARGETS: ./tests/installer + TEAM: fleet + FLEET_INSTALL_METHOD: "install_script" + +new-e2e-installer-windows: + extends: .new_e2e_template + rules: + - !reference [.on_installer_or_e2e_changes] + - !reference [.manual] + needs: + - !reference [.needs_new_e2e_template] - deploy_windows_testing-a7 - qa_installer_oci - qa_agent_oci @@ -336,8 +350,7 @@ new-e2e-installer: variables: TARGETS: ./tests/installer TEAM: fleet - FLEET_INSTALL_METHOD: "install_script" - allow_failure: true # incident-30484 + FLEET_INSTALL_METHOD: "windows" new-e2e-installer-ansible: extends: .new_e2e_template @@ -346,21 +359,18 @@ new-e2e-installer-ansible: - !reference [.manual] needs: - !reference [.needs_new_e2e_template] - - new-e2e-installer - before_script: - # CURRENT_AGENT_VERSION is used to verify the installed agent version - # Must run before new_e2e_template changes the aws profile - # Note: this is similar to the WINDOWS_AGENT_VERSION in new-e2e_windows_msi but this job is running cross platforms - # Note 2: new_e2e_template does not define AGENT_MAJOR_VERSION, so define it as 7 below. - - export CURRENT_AGENT_VERSION=$(invoke agent.version --major-version 7) - - export STABLE_AGENT_VERSION_PACKAGE=$(curl -sS https://hub.docker.com/v2/namespaces/datadog/repositories/agent-package/tags | jq -r '.results[] | .name' | sort | tail -n 2 | head -n 1) - - export STABLE_INSTALLER_VERSION_PACKAGE=$(curl -sS https://hub.docker.com/v2/namespaces/datadog/repositories/installer-package/tags | jq -r '.results[] | .name' | sort | tail -n 2 | head -n 1) - - !reference [.new_e2e_template, before_script] + - deploy_deb_testing-a7_arm64 + - deploy_deb_testing-a7_x64 + - deploy_rpm_testing-a7_arm64 + - deploy_rpm_testing-a7_x64 + - deploy_suse_rpm_testing_arm64-a7 + - deploy_suse_rpm_testing_x64-a7 + - qa_installer_oci + - qa_agent_oci variables: TARGETS: ./tests/installer TEAM: fleet FLEET_INSTALL_METHOD: "ansible" - allow_failure: true # incident-30484 new-e2e-ndm-netflow: extends: .new_e2e_template diff --git a/test/new-e2e/pkg/utils/e2e/client/host.go b/test/new-e2e/pkg/utils/e2e/client/host.go index 31a14f32aaf64..caebb0d9c9717 100644 --- a/test/new-e2e/pkg/utils/e2e/client/host.go +++ b/test/new-e2e/pkg/utils/e2e/client/host.go @@ -128,7 +128,7 @@ func (h *Host) Execute(command string, options ...ExecuteOption) (string, error) func (h *Host) executeAndReconnectOnError(command string) (string, error) { scrubbedCommand := h.scrubber.ScrubLine(command) // scrub the command in case it contains secrets - h.context.T().Logf("Executing command `%s`", scrubbedCommand) + h.context.T().Logf("%s - %s - Executing command `%s`", time.Now().Format("02-01-2006 15:04:05"), h.context.T().Name(), scrubbedCommand) stdout, err := execute(h.client, command) if err != nil && strings.Contains(err.Error(), "failed to create session:") { err = h.Reconnect() diff --git a/test/new-e2e/tests/installer/all_packages.go b/test/new-e2e/tests/installer/all_packages.go new file mode 100644 index 0000000000000..2efb5f4db6e4e --- /dev/null +++ b/test/new-e2e/tests/installer/all_packages.go @@ -0,0 +1,40 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package installer contains tests for the datadog installer +package installer + +import ( + "fmt" + "os" +) + +// InstallMethodOption is the type for the install method to use for the tests +type InstallMethodOption string + +const ( + // InstallMethodInstallScript is the default install method + InstallMethodInstallScript InstallMethodOption = "install_script" + // InstallMethodAnsible is the install method for Ansible + InstallMethodAnsible InstallMethodOption = "ansible" + // InstallMethodWindows is the install method for Windows + InstallMethodWindows InstallMethodOption = "windows" +) + +// GetInstallMethodFromEnv returns the install method to use for the tests +func GetInstallMethodFromEnv() InstallMethodOption { + supportedValues := []string{string(InstallMethodAnsible), string(InstallMethodInstallScript), string(InstallMethodWindows)} + envValue := os.Getenv("FLEET_INSTALL_METHOD") + switch envValue { + case "install_script": + return InstallMethodInstallScript + case "ansible": + return InstallMethodAnsible + case "windows": + return InstallMethodWindows + default: + panic(fmt.Sprintf("unsupported install method: %s. Supported values are: %v", envValue, supportedValues)) + } +} diff --git a/test/new-e2e/tests/installer/all_packages_test.go b/test/new-e2e/tests/installer/all_packages_test.go index 67d8186196aba..b3ccc59818a37 100644 --- a/test/new-e2e/tests/installer/all_packages_test.go +++ b/test/new-e2e/tests/installer/all_packages_test.go @@ -24,12 +24,12 @@ import ( "github.com/stretchr/testify/require" ) -type packageTests func(os e2eos.Descriptor, arch e2eos.Architecture, method installMethodOption) packageSuite +type packageTests func(os e2eos.Descriptor, arch e2eos.Architecture, method InstallMethodOption) packageSuite type packageTestsWithSkipedFlavors struct { t packageTests skippedFlavors []e2eos.Descriptor - skippedInstallationMethods []installMethodOption + skippedInstallationMethods []InstallMethodOption } var ( @@ -50,7 +50,7 @@ var ( packagesTestsWithSkippedFlavors = []packageTestsWithSkipedFlavors{ {t: testInstaller}, {t: testAgent}, - {t: testApmInjectAgent, skippedFlavors: []e2eos.Descriptor{e2eos.CentOS7, e2eos.RedHat9, e2eos.Fedora37, e2eos.Suse15}, skippedInstallationMethods: []installMethodOption{installMethodAnsible}}, + {t: testApmInjectAgent, skippedFlavors: []e2eos.Descriptor{e2eos.CentOS7, e2eos.RedHat9, e2eos.Fedora37, e2eos.Suse15}, skippedInstallationMethods: []InstallMethodOption{InstallMethodAnsible}}, {t: testUpgradeScenario}, } ) @@ -64,7 +64,7 @@ func shouldSkipFlavor(flavors []e2eos.Descriptor, flavor e2eos.Descriptor) bool return false } -func shouldSkipInstallMethod(methods []installMethodOption, method installMethodOption) bool { +func shouldSkipInstallMethod(methods []InstallMethodOption, method InstallMethodOption) bool { for _, m := range methods { if m == method { return true @@ -73,19 +73,6 @@ func shouldSkipInstallMethod(methods []installMethodOption, method installMethod return false } -func getInstallMethodFromEnv() installMethodOption { - supportedValues := []string{string(installMethodAnsible), string(installMethodInstallScript)} - envValue := os.Getenv("FLEET_INSTALL_METHOD") - switch envValue { - case "install_script": - return installMethodInstallScript - case "ansible": - return installMethodAnsible - default: - panic(fmt.Sprintf("unsupported install method: %s. Supported values are: %v", envValue, supportedValues)) - } -} - func TestPackages(t *testing.T) { if _, ok := os.LookupEnv("E2E_PIPELINE_ID"); !ok { @@ -93,7 +80,10 @@ func TestPackages(t *testing.T) { t.FailNow() } - method := getInstallMethodFromEnv() + method := GetInstallMethodFromEnv() + if method == InstallMethodWindows { + t.Skip("Windows install method - skipping") + } var flavors []e2eos.Descriptor for _, flavor := range amd64Flavors { @@ -114,7 +104,7 @@ func TestPackages(t *testing.T) { continue } // TODO: remove once ansible+suse is fully supported - if flavor.Flavor == e2eos.Suse && method == installMethodAnsible { + if flavor.Flavor == e2eos.Suse && method == InstallMethodAnsible { continue } @@ -127,7 +117,7 @@ func TestPackages(t *testing.T) { } // FIXME: Ansible tests are flaky on multiple tests/os - if method == installMethodAnsible { + if method == InstallMethodAnsible { flake.Mark(t) } opts := []awshost.ProvisionerOption{ @@ -159,17 +149,10 @@ type packageBaseSuite struct { pkg string arch e2eos.Architecture os e2eos.Descriptor - installMethod installMethodOption + installMethod InstallMethodOption } -type installMethodOption string - -const ( - installMethodInstallScript installMethodOption = "install_script" - installMethodAnsible installMethodOption = "ansible" -) - -func newPackageSuite(pkg string, os e2eos.Descriptor, arch e2eos.Architecture, method installMethodOption, opts ...awshost.ProvisionerOption) packageBaseSuite { +func newPackageSuite(pkg string, os e2eos.Descriptor, arch e2eos.Architecture, method InstallMethodOption, opts ...awshost.ProvisionerOption) packageBaseSuite { return packageBaseSuite{ os: os, arch: arch, @@ -214,14 +197,14 @@ func (s *packageBaseSuite) RunInstallScriptWithError(params ...string) error { func (s *packageBaseSuite) RunInstallScript(params ...string) { switch s.installMethod { - case installMethodInstallScript: + case InstallMethodInstallScript: // bugfix for https://major.io/p/systemd-in-fedora-22-failed-to-restart-service-access-denied/ if s.os.Flavor == e2eos.CentOS && s.os.Version == e2eos.CentOS7.Version { s.Env().RemoteHost.MustExecute("sudo systemctl daemon-reexec") } err := s.RunInstallScriptWithError(params...) require.NoErrorf(s.T(), err, "installer not properly installed. logs: \n%s\n%s", s.Env().RemoteHost.MustExecute("cat /tmp/datadog-installer-stdout.log"), s.Env().RemoteHost.MustExecute("cat /tmp/datadog-installer-stderr.log")) - case installMethodAnsible: + case InstallMethodAnsible: // Install ansible then install the agent ansiblePrefix := s.installAnsible(s.os) diff --git a/test/new-e2e/tests/installer/host/fixtures/run_http_server.sh b/test/new-e2e/tests/installer/host/fixtures/run_http_server.sh index 3055ed5f5927a..66b2ca5290cbb 100755 --- a/test/new-e2e/tests/installer/host/fixtures/run_http_server.sh +++ b/test/new-e2e/tests/installer/host/fixtures/run_http_server.sh @@ -8,6 +8,4 @@ python3 /opt/fixtures/http_server.py >/tmp/server.log 2>&1 & PID=$! disown $PID -while ! curl -s http://localhost:8080 > /dev/null; do - sleep 1 -done +timeout 30s bash -c 'while ! curl -s http://localhost:8080 > /dev/null; do sleep 1; done' diff --git a/test/new-e2e/tests/installer/package_agent_test.go b/test/new-e2e/tests/installer/package_agent_test.go index b1c672952ac92..f990a322018e7 100644 --- a/test/new-e2e/tests/installer/package_agent_test.go +++ b/test/new-e2e/tests/installer/package_agent_test.go @@ -36,7 +36,7 @@ type packageAgentSuite struct { packageBaseSuite } -func testAgent(os e2eos.Descriptor, arch e2eos.Architecture, method installMethodOption) packageSuite { +func testAgent(os e2eos.Descriptor, arch e2eos.Architecture, method InstallMethodOption) packageSuite { return &packageAgentSuite{ packageBaseSuite: newPackageSuite("agent", os, arch, method, awshost.WithoutFakeIntake()), } @@ -181,7 +181,7 @@ func (s *packageAgentSuite) TestExperimentTimeout() { Starting(agentUnitXP). Started(processUnitXP). Started(traceUnitXP). - SkippedIf(probeUnitXP, s.installMethod != installMethodAnsible). + SkippedIf(probeUnitXP, s.installMethod != InstallMethodAnsible). Skipped(securityUnitXP), ). @@ -198,7 +198,7 @@ func (s *packageAgentSuite) TestExperimentTimeout() { Unordered(host.SystemdEvents(). Started(traceUnit). Started(processUnit). - SkippedIf(probeUnitXP, s.installMethod != installMethodAnsible). + SkippedIf(probeUnitXP, s.installMethod != InstallMethodAnsible). Skipped(securityUnit), ), ) @@ -248,7 +248,7 @@ func (s *packageAgentSuite) TestExperimentIgnoringSigterm() { Starting(agentUnitXP). Started(processUnitXP). Started(traceUnitXP). - SkippedIf(probeUnitXP, s.installMethod != installMethodAnsible). + SkippedIf(probeUnitXP, s.installMethod != InstallMethodAnsible). Skipped(securityUnitXP), ). @@ -271,7 +271,7 @@ func (s *packageAgentSuite) TestExperimentIgnoringSigterm() { Unordered(host.SystemdEvents(). Started(traceUnit). Started(processUnit). - SkippedIf(probeUnitXP, s.installMethod != installMethodAnsible). + SkippedIf(probeUnitXP, s.installMethod != InstallMethodAnsible). Skipped(securityUnit), ), ) @@ -311,7 +311,7 @@ func (s *packageAgentSuite) TestExperimentExits() { Starting(agentUnitXP). Started(processUnitXP). Started(traceUnitXP). - SkippedIf(probeUnitXP, s.installMethod != installMethodAnsible). + SkippedIf(probeUnitXP, s.installMethod != InstallMethodAnsible). Skipped(securityUnitXP), ). @@ -327,7 +327,7 @@ func (s *packageAgentSuite) TestExperimentExits() { Unordered(host.SystemdEvents(). Started(traceUnit). Started(processUnit). - SkippedIf(probeUnitXP, s.installMethod != installMethodAnsible). + SkippedIf(probeUnitXP, s.installMethod != InstallMethodAnsible). Skipped(securityUnit), ), ) @@ -351,7 +351,7 @@ func (s *packageAgentSuite) TestExperimentStopped() { s.host.AssertSystemdEvents(timestamp, host.SystemdEvents().Started(traceUnitXP)) s.host.AssertSystemdEvents(timestamp, host.SystemdEvents().Started(processUnitXP)) s.host.AssertSystemdEvents(timestamp, host.SystemdEvents().Skipped(securityUnitXP)) - s.host.AssertSystemdEvents(timestamp, host.SystemdEvents().SkippedIf(probeUnitXP, s.installMethod != installMethodAnsible)) + s.host.AssertSystemdEvents(timestamp, host.SystemdEvents().SkippedIf(probeUnitXP, s.installMethod != InstallMethodAnsible)) // stop experiment timestamp = s.host.LastJournaldTimestamp() @@ -370,7 +370,7 @@ func (s *packageAgentSuite) TestExperimentStopped() { Unordered(host.SystemdEvents(). Started(traceUnit). Started(processUnit). - SkippedIf(probeUnitXP, s.installMethod != installMethodAnsible). + SkippedIf(probeUnitXP, s.installMethod != InstallMethodAnsible). Skipped(securityUnit), ), ) diff --git a/test/new-e2e/tests/installer/package_apm_inject_test.go b/test/new-e2e/tests/installer/package_apm_inject_test.go index dbdfa6de25483..389da3c392f3e 100644 --- a/test/new-e2e/tests/installer/package_apm_inject_test.go +++ b/test/new-e2e/tests/installer/package_apm_inject_test.go @@ -25,7 +25,7 @@ type packageApmInjectSuite struct { packageBaseSuite } -func testApmInjectAgent(os e2eos.Descriptor, arch e2eos.Architecture, method installMethodOption) packageSuite { +func testApmInjectAgent(os e2eos.Descriptor, arch e2eos.Architecture, method InstallMethodOption) packageSuite { return &packageApmInjectSuite{ packageBaseSuite: newPackageSuite("apm-inject", os, arch, method), } diff --git a/test/new-e2e/tests/installer/package_installer_test.go b/test/new-e2e/tests/installer/package_installer_test.go index d9b0363b3a4df..9f949c65354b8 100644 --- a/test/new-e2e/tests/installer/package_installer_test.go +++ b/test/new-e2e/tests/installer/package_installer_test.go @@ -15,7 +15,7 @@ type packageInstallerSuite struct { packageBaseSuite } -func testInstaller(os e2eos.Descriptor, arch e2eos.Architecture, method installMethodOption) packageSuite { +func testInstaller(os e2eos.Descriptor, arch e2eos.Architecture, method InstallMethodOption) packageSuite { return &packageInstallerSuite{ packageBaseSuite: newPackageSuite("installer", os, arch, method, awshost.WithoutFakeIntake()), } diff --git a/test/new-e2e/tests/installer/upgrade_scenario_test.go b/test/new-e2e/tests/installer/upgrade_scenario_test.go index e4ada47c79316..702dfca0d7a57 100644 --- a/test/new-e2e/tests/installer/upgrade_scenario_test.go +++ b/test/new-e2e/tests/installer/upgrade_scenario_test.go @@ -87,7 +87,7 @@ const ( previousInstallerImageVersion = "7.55.0-installer-0.4.1-1" ) -func testUpgradeScenario(os e2eos.Descriptor, arch e2eos.Architecture, method installMethodOption) packageSuite { +func testUpgradeScenario(os e2eos.Descriptor, arch e2eos.Architecture, method InstallMethodOption) packageSuite { return &upgradeScenarioSuite{ packageBaseSuite: newPackageSuite("upgrade_scenario", os, arch, method), } diff --git a/test/new-e2e/tests/installer/windows/base_suite.go b/test/new-e2e/tests/installer/windows/base_suite.go index 2daac352d8e14..5a3fd22833af5 100644 --- a/test/new-e2e/tests/installer/windows/base_suite.go +++ b/test/new-e2e/tests/installer/windows/base_suite.go @@ -6,13 +6,15 @@ package installer import ( + "os" + "strings" + agentVersion "github.com/DataDog/datadog-agent/pkg/version" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/runner" - "github.com/DataDog/datadog-agent/test/new-e2e/tests/installer/windows/suite-assertions" - "os" - "strings" + instlr "github.com/DataDog/datadog-agent/test/new-e2e/tests/installer" + suiteasserts "github.com/DataDog/datadog-agent/test/new-e2e/tests/installer/windows/suite-assertions" ) // PackageVersion is a helper type to store both the version and the package version of a binary. @@ -85,6 +87,10 @@ func (s *BaseInstallerSuite) StableAgentVersion() PackageVersion { func (s *BaseInstallerSuite) SetupSuite() { s.BaseSuite.SetupSuite() + if instlr.GetInstallMethodFromEnv() != instlr.InstallMethodWindows { + s.T().Skip("Skipping Windows-only tests as the install method isn't Windows") + } + // TODO:FA-779 if s.Env().Environment.PipelineID() == "" && os.Getenv("DD_INSTALLER_MSI_URL") == "" { s.FailNow("E2E_PIPELINE_ID env var is not set, this test requires this variable to be set to work") From 2f220e0c1666fa9969315d6e8cf8561887188bf5 Mon Sep 17 00:00:00 2001 From: Kylian Serrania Date: Thu, 12 Sep 2024 17:32:56 +0200 Subject: [PATCH 024/195] [windows] Fix cmd/otel-agent/config.TestBadDDConfigFile test (#29310) Updates the cmd/otel-agent/config.TestBadDDConfigFile test to handle Windows cases. It was failing because the test was expecting a very specific error string that was only true on Linux / macOS. assert.ErrorIs(t, err, fs.ErrNotExist) is an OS-agnostic way to catch file not found errors, and is preferred here. --- cmd/otel-agent/config/agent_config_test.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/cmd/otel-agent/config/agent_config_test.go b/cmd/otel-agent/config/agent_config_test.go index 720ec35cea3f1..fc6b4dd6b21ff 100644 --- a/cmd/otel-agent/config/agent_config_test.go +++ b/cmd/otel-agent/config/agent_config_test.go @@ -8,6 +8,7 @@ package config import ( "context" "fmt" + "io/fs" "os" "strings" "testing" @@ -181,10 +182,7 @@ func (suite *ConfigTestSuite) TestBadDDConfigFile() { ddFileName := "testdata/doesnotexists.yaml" _, err := NewConfigComponent(context.Background(), ddFileName, []string{fileName}) - expectedError := fmt.Sprintf( - "open %s: no such file or directory\nopen %s: no such file or directory", - ddFileName, ddFileName) - assert.ErrorContains(t, err, expectedError) + assert.ErrorIs(t, err, fs.ErrNotExist) } func (suite *ConfigTestSuite) TestBadLogLevel() { From f93b9c9acc8b64eb93b3fff750ffa29dce5f2020 Mon Sep 17 00:00:00 2001 From: Andrew Lock Date: Thu, 12 Sep 2024 16:49:48 +0100 Subject: [PATCH 025/195] [AutoInstrumentation] Update default version for .NET in auto-instrumentation to v3 (#29042) --- .../autoinstrumentation/auto_instrumentation_test.go | 4 ++-- .../mutate/autoinstrumentation/language_versions.go | 2 +- pkg/fleet/installer/default_packages.go | 2 +- pkg/fleet/installer/default_packages_test.go | 2 +- .../notes/dotnet-lib-inject-v3-d5fb50cd7eccb116.yaml | 11 +++++++++++ 5 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 releasenotes/notes/dotnet-lib-inject-v3-d5fb50cd7eccb116.yaml diff --git a/pkg/clusteragent/admission/mutate/autoinstrumentation/auto_instrumentation_test.go b/pkg/clusteragent/admission/mutate/autoinstrumentation/auto_instrumentation_test.go index d7b217f755020..fe6ba5fe70d6d 100644 --- a/pkg/clusteragent/admission/mutate/autoinstrumentation/auto_instrumentation_test.go +++ b/pkg/clusteragent/admission/mutate/autoinstrumentation/auto_instrumentation_test.go @@ -640,7 +640,7 @@ func TestExtractLibInfo(t *testing.T) { }, { lang: "dotnet", - image: "registry/dd-lib-dotnet-init:v2", + image: "registry/dd-lib-dotnet-init:v3", }, { lang: "ruby", @@ -1358,7 +1358,7 @@ func TestInjectAutoInstrumentation(t *testing.T) { "java": "v1", "python": "v2", "ruby": "v2", - "dotnet": "v2", + "dotnet": "v3", "js": "v5", } diff --git a/pkg/clusteragent/admission/mutate/autoinstrumentation/language_versions.go b/pkg/clusteragent/admission/mutate/autoinstrumentation/language_versions.go index dccaf9fa8c9f3..7ddaace808661 100644 --- a/pkg/clusteragent/admission/mutate/autoinstrumentation/language_versions.go +++ b/pkg/clusteragent/admission/mutate/autoinstrumentation/language_versions.go @@ -113,7 +113,7 @@ func (l language) isSupported() bool { // If this language does not appear in supportedLanguages, it will not be injected. var languageVersions = map[language]string{ java: "v1", // https://datadoghq.atlassian.net/browse/APMON-1064 - dotnet: "v2", // https://datadoghq.atlassian.net/browse/APMON-1067 + dotnet: "v3", // https://datadoghq.atlassian.net/browse/APMON-1390 python: "v2", // https://datadoghq.atlassian.net/browse/APMON-1068 ruby: "v2", // https://datadoghq.atlassian.net/browse/APMON-1066 js: "v5", // https://datadoghq.atlassian.net/browse/APMON-1065 diff --git a/pkg/fleet/installer/default_packages.go b/pkg/fleet/installer/default_packages.go index dad23e5ce3241..27e767ad6758d 100644 --- a/pkg/fleet/installer/default_packages.go +++ b/pkg/fleet/installer/default_packages.go @@ -40,7 +40,7 @@ var apmPackageDefaultVersions = map[string]string{ "datadog-apm-library-java": "1", "datadog-apm-library-ruby": "2", "datadog-apm-library-js": "5", - "datadog-apm-library-dotnet": "2", + "datadog-apm-library-dotnet": "3", "datadog-apm-library-python": "2", "datadog-apm-library-php": "1", } diff --git a/pkg/fleet/installer/default_packages_test.go b/pkg/fleet/installer/default_packages_test.go index 1707fff0a5609..c1d9734a68e4b 100644 --- a/pkg/fleet/installer/default_packages_test.go +++ b/pkg/fleet/installer/default_packages_test.go @@ -34,7 +34,7 @@ func TestDefaultPackagesAPMInjectEnabled(t *testing.T) { "oci://gcr.io/datadoghq/apm-library-java-package:1", "oci://gcr.io/datadoghq/apm-library-ruby-package:2", "oci://gcr.io/datadoghq/apm-library-js-package:5", - "oci://gcr.io/datadoghq/apm-library-dotnet-package:2", + "oci://gcr.io/datadoghq/apm-library-dotnet-package:3", "oci://gcr.io/datadoghq/apm-library-python-package:2", }, packages) } diff --git a/releasenotes/notes/dotnet-lib-inject-v3-d5fb50cd7eccb116.yaml b/releasenotes/notes/dotnet-lib-inject-v3-d5fb50cd7eccb116.yaml new file mode 100644 index 0000000000000..947c33e62ab89 --- /dev/null +++ b/releasenotes/notes/dotnet-lib-inject-v3-d5fb50cd7eccb116.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + Updates default .NET library used for auto-instrumentation from v2 to v3 \ No newline at end of file From aff1667e57d5b532df0d0c686778140b77e12ae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20Juli=C3=A1n?= Date: Thu, 12 Sep 2024 18:03:39 +0200 Subject: [PATCH 026/195] [EBPF] Use uint64 instead of uintptr in CGo types (#29293) --- pkg/ebpf/cgo/genpost.go | 4 ++-- pkg/network/ebpf/kprobe_types_linux.go | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/ebpf/cgo/genpost.go b/pkg/ebpf/cgo/genpost.go index 512d0542c62d9..97035a29bea46 100644 --- a/pkg/ebpf/cgo/genpost.go +++ b/pkg/ebpf/cgo/genpost.go @@ -44,9 +44,9 @@ func main() { convertInt8ArrayToByteArrayRegex := regexp.MustCompile(`(` + strings.Join(int8variableNames, "|") + `)(\s+)\[(\d+)\]u?int8`) b = convertInt8ArrayToByteArrayRegex.ReplaceAll(b, []byte("$1$2[$3]byte")) - // Convert generated pointers to CGo structs to uintptr + // Convert generated pointers to CGo structs to uint64 convertPointerToUint64Regex := regexp.MustCompile(`\*_Ctype_struct_(\w+)`) - b = convertPointerToUint64Regex.ReplaceAll(b, []byte("uintptr")) + b = convertPointerToUint64Regex.ReplaceAll(b, []byte("uint64")) b, err = format.Source(b) if err != nil { diff --git a/pkg/network/ebpf/kprobe_types_linux.go b/pkg/network/ebpf/kprobe_types_linux.go index 7916d343dcd10..e081d14f28456 100644 --- a/pkg/network/ebpf/kprobe_types_linux.go +++ b/pkg/network/ebpf/kprobe_types_linux.go @@ -77,12 +77,12 @@ type PIDFD struct { Fd uint32 } type UDPRecvSock struct { - Sk uintptr - Msg uintptr + Sk uint64 + Msg uint64 } type BindSyscallArgs struct { - Addr uintptr - Sk uintptr + Addr uint64 + Sk uint64 } type ProtocolStack struct { Api uint8 From ed7d0f404053cded813495acd5ef390bafcea312 Mon Sep 17 00:00:00 2001 From: JakeYankovich <51723005+JakeYankovich@users.noreply.github.com> Date: Thu, 12 Sep 2024 10:18:05 -0600 Subject: [PATCH 027/195] Log FIPS mode in MSI install logs (#29126) --- .../CustomActions/InstallStateCustomActions.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/windows/DatadogAgentInstaller/CustomActions/InstallStateCustomActions.cs b/tools/windows/DatadogAgentInstaller/CustomActions/InstallStateCustomActions.cs index 34cce2d6b636d..f86da9332b282 100644 --- a/tools/windows/DatadogAgentInstaller/CustomActions/InstallStateCustomActions.cs +++ b/tools/windows/DatadogAgentInstaller/CustomActions/InstallStateCustomActions.cs @@ -3,6 +3,7 @@ using Datadog.CustomActions.Native; using Microsoft.Win32; using System; +using System.Security.Cryptography; using System.Security.Principal; using ServiceController = Datadog.CustomActions.Native.ServiceController; @@ -177,6 +178,7 @@ public void GetWindowsBuildVersion() { _session.Log("WindowsBuild not found"); } + _session.Log("FIPS enabled: " + CryptoConfig.AllowOnlyFipsAlgorithms); } public static SecurityIdentifier GetPreviousAgentUser(ISession session, IRegistryServices registryServices, From bb14d5c2b5a98dc3b5687baa21f08b5b2350f46f Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Thu, 12 Sep 2024 18:22:27 +0200 Subject: [PATCH 028/195] [CWS] add missing check for nil-ness of ProcessContext (#29304) --- pkg/security/rules/engine.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/security/rules/engine.go b/pkg/security/rules/engine.go index 2f512728b12dd..43ef3ea0dc0d3 100644 --- a/pkg/security/rules/engine.go +++ b/pkg/security/rules/engine.go @@ -519,7 +519,7 @@ func (e *RuleEngine) SetRulesetLoadedCallback(cb func(es *rules.RuleSet, err *mu // HandleEvent is called by the probe when an event arrives from the kernel func (e *RuleEngine) HandleEvent(event *model.Event) { // don't eval event originating from myself - if !e.probe.Opts.DontDiscardRuntime && event.ProcessContext.Pid == e.pid { + if !e.probe.Opts.DontDiscardRuntime && event.ProcessContext != nil && event.ProcessContext.Pid == e.pid { return } From 72da5b7ffe2d941d94bf33f12a15e49f2f244a58 Mon Sep 17 00:00:00 2001 From: "John L. Peterson (Jack)" Date: Thu, 12 Sep 2024 12:22:31 -0400 Subject: [PATCH 029/195] Create infraattributesprocessor go module (#29154) --- LICENSE-3rdparty.csv | 2 +- cmd/serverless/dependencies_linux_amd64.txt | 1 + cmd/serverless/dependencies_linux_arm64.txt | 1 + comp/otelcol/collector/impl/collector.go | 14 +- comp/otelcol/otlp/collector.go | 8 +- comp/otelcol/otlp/collector_test.go | 15 +- .../infraattributesprocessor/config_test.go | 3 +- .../infraattributesprocessor/factory.go | 16 +- .../infraattributesprocessor/factory_test.go | 9 +- .../processor/infraattributesprocessor/go.mod | 134 ++++++ .../processor/infraattributesprocessor/go.sum | 422 ++++++++++++++++++ .../{taggerclient.go => helperclients.go} | 0 ...erclient_test.go => helperclients_test.go} | 15 +- .../infraattributesprocessor/logs.go | 6 +- .../infraattributesprocessor/logs_test.go | 6 +- .../infraattributesprocessor/metrics.go | 16 +- .../infraattributesprocessor/metrics_test.go | 11 +- .../infraattributesprocessor/traces.go | 6 +- .../infraattributesprocessor/traces_test.go | 6 +- go.mod | 12 +- go.sum | 4 +- tasks/modules.py | 3 + 22 files changed, 656 insertions(+), 54 deletions(-) create mode 100644 comp/otelcol/otlp/components/processor/infraattributesprocessor/go.mod create mode 100644 comp/otelcol/otlp/components/processor/infraattributesprocessor/go.sum rename comp/otelcol/otlp/components/processor/infraattributesprocessor/{taggerclient.go => helperclients.go} (100%) rename comp/otelcol/otlp/components/processor/infraattributesprocessor/{taggerclient_test.go => helperclients_test.go} (74%) diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv index f8555a000f46d..8630554f6b2b4 100644 --- a/LICENSE-3rdparty.csv +++ b/LICENSE-3rdparty.csv @@ -1055,6 +1055,7 @@ core,github.com/go-redis/redis/v9/internal/util,BSD-2-Clause,Copyright (c) 2013 core,github.com/go-resty/resty/v2,MIT,"Copyright (c) 2015-2023 Jeevanandam M., https://myjeeva.com " core,github.com/go-sql-driver/mysql,MPL-2.0,"Aaron Hopkins | Achille Roussel | Aidan | Alex Snast | Alexey Palazhchenko | Andrew Reid | Animesh Ray | Ariel Mashraki | Arne Hormann | Asta Xie | Barracuda Networks, Inc. | Brian Hendriks | Bulat Gaifullin | Caine Jette | Carlos Nieto | Chris Kirkland | Chris Moos | Counting Ltd. | Craig Wilson | Daemonxiao <735462752 at qq.com> | Daniel Montoya | Daniel Nichter | Daniël van Eeden | Dave Protasowski | DigitalOcean Inc. | DisposaBoy | Dolthub Inc. | Egor Smolyakov | Erwan Martin | Evan Elias | Evan Shaw | Facebook Inc. | Frederick Mayle | GitHub Inc. | Google Inc. | Gustavo Kristic | Gusted | Hajime Nakagami | Hanno Braun | Henri Yandell | Hirotaka Yamamoto | Huyiguang | ICHINOSE Shogo | INADA Naoki | Ilia Cimpoes | InfoSum Ltd. | Jacek Szwec | James Harr | Janek Vedock | Jason Ng | Jean-Yves Pellé | Jeff Hodges | Jeffrey Charles | Jennifer Purevsuren | Jerome Meyer | Jiajia Zhong | Jian Zhen | Joshua Prunier | Julien Lefevre | Julien Schmidt | Justin Li | Justin Nuß | Kamil Dziedzic | Kei Kamikawa | Kevin Malachowski | Keybase Inc. | Kieron Woodhouse | Lance Tian | Lennart Rudolph | Leonardo YongUk Kim | Linh Tran Tuan | Lion Yang | Luca Looz | Lucas Liu | Luke Scott | Lunny Xiao | Maciej Zimnoch | Michael Woolnough | Microsoft Corp. | Multiplay Ltd. | Nathanial Murphy | Nicola Peduzzi | Oliver Bone | Olivier Mengué | Paul Bonser | Paulius Lozys | Percona LLC | Peter Schultz | Phil Porada | PingCAP Inc. | Pivotal Inc. | Rebecca Chin | Reed Allman | Richard Wilkes | Robert Russell | Runrioter Wung | Samantha Frank | Santhosh Kumar Tekuri | Shattered Silicon Ltd. | Sho Iizuka | Sho Ikeda | Shuode Li | Simon J Mudd | Soroush Pour | Stan Putrya | Stanley Gunawan | Steven Hartland | Stripe Inc. | Tan Jinhua <312841925 at qq.com> | Tetsuro Aoki | Thomas Wodarek | Tim Ruffles | Tom Jenkinson | Vladimir Kovpak | Vladyslav Zhelezniak | Xiangyu Hu | Xiaobing Jiang | Xiuming Chen | Xuehong Chan | Zendesk Inc. | Zhang Xiang | Zhenye Xie | Zhixin Wen | Ziheng Lyu | copyright doctrines of fair use, fair dealing, or other | dyves labs AG | oscarzhao " core,github.com/go-viper/mapstructure/v2,MIT,Copyright (c) 2013 Mitchell Hashimoto +core,github.com/go-viper/mapstructure/v2/internal/errors,MIT,Copyright (c) 2013 Mitchell Hashimoto core,github.com/go-zookeeper/zk,BSD-3-Clause,"Copyright (c) 2013, Samuel Stauffer " core,github.com/gobwas/glob,MIT,Copyright (c) 2016 Sergey Kamardin core,github.com/gobwas/glob/compiler,MIT,Copyright (c) 2016 Sergey Kamardin @@ -2402,7 +2403,6 @@ core,go.opentelemetry.io/collector/pdata/pmetric,Apache-2.0,Copyright The OpenTe core,go.opentelemetry.io/collector/pdata/pmetric/pmetricotlp,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/ptrace,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/ptrace/ptraceotlp,Apache-2.0,Copyright The OpenTelemetry Authors -core,go.opentelemetry.io/collector/pdata/testdata,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/processor,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/processor/batchprocessor,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/processor/batchprocessor/internal/metadata,Apache-2.0,Copyright The OpenTelemetry Authors diff --git a/cmd/serverless/dependencies_linux_amd64.txt b/cmd/serverless/dependencies_linux_amd64.txt index c31cb5dcebd87..99e37948bf62f 100644 --- a/cmd/serverless/dependencies_linux_amd64.txt +++ b/cmd/serverless/dependencies_linux_amd64.txt @@ -438,6 +438,7 @@ github.com/go-logr/logr github.com/go-logr/logr/funcr github.com/go-logr/stdr github.com/go-viper/mapstructure/v2 +github.com/go-viper/mapstructure/v2/internal/errors github.com/godbus/dbus/v5 github.com/gogo/protobuf/gogoproto github.com/gogo/protobuf/jsonpb diff --git a/cmd/serverless/dependencies_linux_arm64.txt b/cmd/serverless/dependencies_linux_arm64.txt index afc9f4e4fa881..52fe78f37ecfd 100644 --- a/cmd/serverless/dependencies_linux_arm64.txt +++ b/cmd/serverless/dependencies_linux_arm64.txt @@ -438,6 +438,7 @@ github.com/go-logr/logr github.com/go-logr/logr/funcr github.com/go-logr/stdr github.com/go-viper/mapstructure/v2 +github.com/go-viper/mapstructure/v2/internal/errors github.com/godbus/dbus/v5 github.com/gogo/protobuf/gogoproto github.com/gogo/protobuf/jsonpb diff --git a/comp/otelcol/collector/impl/collector.go b/comp/otelcol/collector/impl/collector.go index 87fcbae39ce63..aa7bdbddbdf07 100644 --- a/comp/otelcol/collector/impl/collector.go +++ b/comp/otelcol/collector/impl/collector.go @@ -21,9 +21,14 @@ import ( "go.opentelemetry.io/collector/confmap/provider/yamlprovider" "go.opentelemetry.io/collector/otelcol" + "github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + "github.com/DataDog/datadog-agent/comp/core/config" log "github.com/DataDog/datadog-agent/comp/core/log/def" "github.com/DataDog/datadog-agent/comp/core/tagger" + "github.com/DataDog/datadog-agent/comp/core/workloadmeta/collectors/util" compdef "github.com/DataDog/datadog-agent/comp/def" collectorcontrib "github.com/DataDog/datadog-agent/comp/otelcol/collector-contrib/def" collector "github.com/DataDog/datadog-agent/comp/otelcol/collector/def" @@ -39,9 +44,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/serializer" zapAgent "github.com/DataDog/datadog-agent/pkg/util/log/zap" "github.com/DataDog/datadog-agent/pkg/util/optional" - "github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector" - "go.uber.org/zap" - "go.uber.org/zap/zapcore" ) type collectorImpl struct { @@ -110,13 +112,17 @@ func newConfigProviderSettings(reqs Requires, enhanced bool) otelcol.ConfigProvi } } +func generateID(group, resource, namespace, name string) string { + return string(util.GenerateKubeMetadataEntityID(group, resource, namespace, name)) +} + func addFactories(reqs Requires, factories otelcol.Factories) { if v, ok := reqs.LogsAgent.Get(); ok { factories.Exporters[datadogexporter.Type] = datadogexporter.NewFactory(reqs.TraceAgent, reqs.Serializer, v, reqs.SourceProvider, reqs.StatsdClientWrapper) } else { factories.Exporters[datadogexporter.Type] = datadogexporter.NewFactory(reqs.TraceAgent, reqs.Serializer, nil, reqs.SourceProvider, reqs.StatsdClientWrapper) } - factories.Processors[infraattributesprocessor.Type] = infraattributesprocessor.NewFactory(reqs.Tagger) + factories.Processors[infraattributesprocessor.Type] = infraattributesprocessor.NewFactory(reqs.Tagger, generateID) factories.Extensions[ddextension.Type] = ddextension.NewFactory(reqs.ConfigStore) factories.Connectors[component.MustNewType("datadog")] = datadogconnector.NewFactory() } diff --git a/comp/otelcol/otlp/collector.go b/comp/otelcol/otlp/collector.go index 96787d7a53196..2ce66bf173972 100644 --- a/comp/otelcol/otlp/collector.go +++ b/comp/otelcol/otlp/collector.go @@ -33,6 +33,7 @@ import ( "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/tagger" "github.com/DataDog/datadog-agent/comp/core/tagger/types" + "github.com/DataDog/datadog-agent/comp/core/workloadmeta/collectors/util" "github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/exporter/logsagentexporter" "github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/exporter/serializerexporter" "github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/processor/infraattributesprocessor" @@ -86,6 +87,11 @@ func (t *tagEnricher) Enrich(_ context.Context, extraTags []string, dimensions * return enrichedTags } +func generateID(group, resource, namespace, name string) string { + + return string(util.GenerateKubeMetadataEntityID(group, resource, namespace, name)) +} + func getComponents(s serializer.MetricSerializer, logsAgentChannel chan *message.Message, tagger tagger.Component) ( otelcol.Factories, error, @@ -121,7 +127,7 @@ func getComponents(s serializer.MetricSerializer, logsAgentChannel chan *message processorFactories := []processor.Factory{batchprocessor.NewFactory()} if tagger != nil { - processorFactories = append(processorFactories, infraattributesprocessor.NewFactory(tagger)) + processorFactories = append(processorFactories, infraattributesprocessor.NewFactory(tagger, generateID)) } processors, err := processor.MakeFactoryMap(processorFactories...) if err != nil { diff --git a/comp/otelcol/otlp/collector_test.go b/comp/otelcol/otlp/collector_test.go index 3d9b51062daf5..9da8447cfd4de 100644 --- a/comp/otelcol/otlp/collector_test.go +++ b/comp/otelcol/otlp/collector_test.go @@ -19,7 +19,7 @@ import ( "github.com/DataDog/datadog-agent/comp/core/tagger/taggerimpl" "github.com/DataDog/datadog-agent/comp/otelcol/otlp/testutil" - "github.com/DataDog/datadog-agent/pkg/config" + pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/logs/message" serializermock "github.com/DataDog/datadog-agent/pkg/serializer/mocks" ) @@ -66,20 +66,21 @@ func AssertFailedRun(t *testing.T, pcfg PipelineConfig, expected string) { require.NoError(t, err) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() - assert.ErrorContains(t, p.Run(ctx), expected) + pipelineError := p.Run(ctx) + assert.ErrorContains(t, pipelineError, expected) } func TestStartPipeline(t *testing.T) { - config.Datadog().SetWithoutSource("hostname", "otlp-testhostname") - defer config.Datadog().SetWithoutSource("hostname", "") + pkgconfigsetup.Datadog().SetWithoutSource("hostname", "otlp-testhostname") + defer pkgconfigsetup.Datadog().SetWithoutSource("hostname", "") pcfg := getTestPipelineConfig() AssertSucessfulRun(t, pcfg) } func TestStartPipelineFromConfig(t *testing.T) { - config.Datadog().SetWithoutSource("hostname", "otlp-testhostname") - defer config.Datadog().SetWithoutSource("hostname", "") + pkgconfigsetup.Datadog().SetWithoutSource("hostname", "otlp-testhostname") + defer pkgconfigsetup.Datadog().SetWithoutSource("hostname", "") // TODO (AP-1723): Disable changing the gRPC logger before re-enabling. if runtime.GOOS == "windows" { @@ -103,7 +104,7 @@ func TestStartPipelineFromConfig(t *testing.T) { {path: "receiver/advanced.yaml"}, { path: "receiver/typo.yaml", - err: "error decoding 'receivers': error reading configuration for \"otlp\": 1 error(s) decoding:\n\n* 'protocols' has invalid keys: htttp", + err: "'protocols' has invalid keys: htttp", }, } diff --git a/comp/otelcol/otlp/components/processor/infraattributesprocessor/config_test.go b/comp/otelcol/otlp/components/processor/infraattributesprocessor/config_test.go index e34800eaf21df..5cf3de7117651 100644 --- a/comp/otelcol/otlp/components/processor/infraattributesprocessor/config_test.go +++ b/comp/otelcol/otlp/components/processor/infraattributesprocessor/config_test.go @@ -35,7 +35,8 @@ func TestLoadingConfigStrictLogs(t *testing.T) { for _, tt := range tests { t.Run(tt.id.String(), func(t *testing.T) { tc := newTestTaggerClient() - f := NewFactory(tc) + gc := newTestGenerateIDClient().generateID + f := NewFactory(tc, gc) cfg := f.CreateDefaultConfig() sub, err := cm.Sub(tt.id.String()) diff --git a/comp/otelcol/otlp/components/processor/infraattributesprocessor/factory.go b/comp/otelcol/otlp/components/processor/infraattributesprocessor/factory.go index 086c89e1bd417..429ee568fb79f 100644 --- a/comp/otelcol/otlp/components/processor/infraattributesprocessor/factory.go +++ b/comp/otelcol/otlp/components/processor/infraattributesprocessor/factory.go @@ -18,14 +18,18 @@ import ( var processorCapabilities = consumer.Capabilities{MutatesData: true} +// TODO: Remove tagger and generateID as depenendencies to enable future import of +// infraattributesprocessor by external go packages like ocb type factory struct { - tagger taggerClient + tagger taggerClient + generateID GenerateKubeMetadataEntityID } // NewFactory returns a new factory for the InfraAttributes processor. -func NewFactory(tagger taggerClient) processor.Factory { +func NewFactory(tagger taggerClient, generateID GenerateKubeMetadataEntityID) processor.Factory { f := &factory{ - tagger: tagger, + tagger: tagger, + generateID: generateID, } return processor.NewFactory( @@ -49,7 +53,7 @@ func (f *factory) createMetricsProcessor( cfg component.Config, nextConsumer consumer.Metrics, ) (processor.Metrics, error) { - iap, err := newInfraAttributesMetricProcessor(set, cfg.(*Config), f.tagger) + iap, err := newInfraAttributesMetricProcessor(set, cfg.(*Config), f.tagger, f.generateID) if err != nil { return nil, err } @@ -68,7 +72,7 @@ func (f *factory) createLogsProcessor( cfg component.Config, nextConsumer consumer.Logs, ) (processor.Logs, error) { - iap, err := newInfraAttributesLogsProcessor(set, cfg.(*Config), f.tagger) + iap, err := newInfraAttributesLogsProcessor(set, cfg.(*Config), f.tagger, f.generateID) if err != nil { return nil, err } @@ -87,7 +91,7 @@ func (f *factory) createTracesProcessor( cfg component.Config, nextConsumer consumer.Traces, ) (processor.Traces, error) { - iap, err := newInfraAttributesSpanProcessor(set, cfg.(*Config), f.tagger) + iap, err := newInfraAttributesSpanProcessor(set, cfg.(*Config), f.tagger, f.generateID) if err != nil { return nil, err } diff --git a/comp/otelcol/otlp/components/processor/infraattributesprocessor/factory_test.go b/comp/otelcol/otlp/components/processor/infraattributesprocessor/factory_test.go index 5ba0b9eb0ce0e..21ee70fd1874a 100644 --- a/comp/otelcol/otlp/components/processor/infraattributesprocessor/factory_test.go +++ b/comp/otelcol/otlp/components/processor/infraattributesprocessor/factory_test.go @@ -21,7 +21,8 @@ import ( func TestType(t *testing.T) { tc := newTestTaggerClient() - factory := NewFactory(tc) + gc := newTestGenerateIDClient().generateID + factory := NewFactory(tc, gc) pType := factory.Type() assert.Equal(t, pType, Type) @@ -29,7 +30,8 @@ func TestType(t *testing.T) { func TestCreateDefaultConfig(t *testing.T) { tc := newTestTaggerClient() - factory := NewFactory(tc) + gc := newTestGenerateIDClient().generateID + factory := NewFactory(tc, gc) cfg := factory.CreateDefaultConfig() assert.NoError(t, componenttest.CheckConfigStruct(cfg)) } @@ -52,10 +54,11 @@ func TestCreateProcessors(t *testing.T) { cm, err := confmaptest.LoadConf(filepath.Join("testdata", tt.configName)) require.NoError(t, err) tc := newTestTaggerClient() + gc := newTestGenerateIDClient().generateID for k := range cm.ToStringMap() { // Check if all processor variations that are defined in test config can be actually created - factory := NewFactory(tc) + factory := NewFactory(tc, gc) cfg := factory.CreateDefaultConfig() sub, err := cm.Sub(k) diff --git a/comp/otelcol/otlp/components/processor/infraattributesprocessor/go.mod b/comp/otelcol/otlp/components/processor/infraattributesprocessor/go.mod new file mode 100644 index 0000000000000..df8797c00d15f --- /dev/null +++ b/comp/otelcol/otlp/components/processor/infraattributesprocessor/go.mod @@ -0,0 +1,134 @@ +module github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/processor/infraattributesprocessor + +go 1.22.0 + +replace ( + github.com/DataDog/datadog-agent/comp/api/api/def => ../../../../../api/api/def + github.com/DataDog/datadog-agent/comp/core/flare/builder => ../../../../../core/flare/builder + github.com/DataDog/datadog-agent/comp/core/flare/types => ../../../../../core/flare/types + github.com/DataDog/datadog-agent/comp/core/secrets => ../../../../../core/secrets + github.com/DataDog/datadog-agent/comp/core/tagger/common => ../../../../../core/tagger/common + github.com/DataDog/datadog-agent/comp/core/tagger/types => ../../../../../core/tagger/types + github.com/DataDog/datadog-agent/comp/core/tagger/utils => ../../../../../core/tagger/utils + github.com/DataDog/datadog-agent/comp/core/telemetry => ../../../../../core/telemetry + github.com/DataDog/datadog-agent/comp/def => ../../../../../def + github.com/DataDog/datadog-agent/pkg/collector/check/defaults => ../../../../../../pkg/collector/check/defaults + github.com/DataDog/datadog-agent/pkg/config/env => ../../../../../../pkg/config/env + github.com/DataDog/datadog-agent/pkg/config/model => ../../../../../../pkg/config/model + github.com/DataDog/datadog-agent/pkg/config/setup => ../../../../../../pkg/config/setup + github.com/DataDog/datadog-agent/pkg/util/executable => ../../../../../../pkg/util/executable + github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../../../../pkg/util/filesystem + github.com/DataDog/datadog-agent/pkg/util/fxutil => ../../../../../../pkg/util/fxutil + github.com/DataDog/datadog-agent/pkg/util/hostname/validate => ../../../../../../pkg/util/hostname/validate + github.com/DataDog/datadog-agent/pkg/util/log => ../../../../../../pkg/util/log + github.com/DataDog/datadog-agent/pkg/util/optional => ../../../../../../pkg/util/optional + github.com/DataDog/datadog-agent/pkg/util/pointer => ../../../../../../pkg/util/pointer + github.com/DataDog/datadog-agent/pkg/util/scrubber => ../../../../../../pkg/util/scrubber + github.com/DataDog/datadog-agent/pkg/util/system => ../../../../../../pkg/util/system + github.com/DataDog/datadog-agent/pkg/util/system/socket => ../../../../../../pkg/util/system/socket + github.com/DataDog/datadog-agent/pkg/util/tagger => ../../../../../../pkg/util/tagger + github.com/DataDog/datadog-agent/pkg/util/testutil => ../../../../../../pkg/util/testutil + github.com/DataDog/datadog-agent/pkg/util/winutil => ../../../../../../pkg/util/winutil +) + +require ( + github.com/DataDog/datadog-agent/comp/core/tagger/types v0.56.0-rc.3 + github.com/stretchr/testify v1.9.0 + go.opentelemetry.io/collector/component v0.104.0 + go.opentelemetry.io/collector/confmap v0.104.0 + go.opentelemetry.io/collector/consumer v0.104.0 + go.opentelemetry.io/collector/pdata v1.11.0 + go.opentelemetry.io/collector/processor v0.104.0 + go.opentelemetry.io/collector/semconv v0.104.0 + go.opentelemetry.io/otel/metric v1.27.0 + go.opentelemetry.io/otel/trace v1.27.0 + go.uber.org/zap v1.27.0 +) + +require ( + github.com/DataDog/datadog-agent/comp/core/secrets v0.56.2 // indirect + github.com/DataDog/datadog-agent/comp/core/tagger/utils v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/collector/check/defaults v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/config/env v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/config/model v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/config/setup v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/util/filesystem v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/util/optional v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/util/system v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/util/system/socket v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/util/tagger v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.2 // indirect + github.com/DataDog/viper v1.13.5 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/go-viper/mapstructure/v2 v2.1.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/hashicorp/go-version v1.7.0 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect + github.com/knadh/koanf/maps v0.1.1 // indirect + github.com/knadh/koanf/providers/confmap v0.1.0 // indirect + github.com/knadh/koanf/v2 v2.1.1 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/magiconair/properties v1.8.1 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/mapstructure v1.1.2 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect + github.com/pelletier/go-toml v1.2.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/prometheus/client_golang v1.19.1 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.54.0 // indirect + github.com/prometheus/procfs v0.15.0 // indirect + github.com/shirou/gopsutil/v3 v3.23.12 // indirect + github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/spf13/afero v1.1.2 // indirect + github.com/spf13/cast v1.5.1 // indirect + github.com/spf13/jwalterweatherman v1.0.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect + go.opentelemetry.io/collector v0.104.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.104.0 // indirect + go.opentelemetry.io/collector/featuregate v1.11.0 // indirect + go.opentelemetry.io/collector/pdata/pprofile v0.104.0 // indirect + go.opentelemetry.io/collector/pdata/testdata v0.104.0 // indirect + go.opentelemetry.io/otel v1.27.0 // indirect + go.opentelemetry.io/otel/exporters/prometheus v0.49.0 // indirect + go.opentelemetry.io/otel/sdk v1.27.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.27.0 // indirect + go.uber.org/atomic v1.11.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa // indirect + golang.org/x/mod v0.20.0 // indirect + golang.org/x/net v0.28.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/sys v0.24.0 // indirect + golang.org/x/text v0.17.0 // indirect + golang.org/x/tools v0.24.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect + google.golang.org/grpc v1.65.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/comp/otelcol/otlp/components/processor/infraattributesprocessor/go.sum b/comp/otelcol/otlp/components/processor/infraattributesprocessor/go.sum new file mode 100644 index 0000000000000..32837146844ff --- /dev/null +++ b/comp/otelcol/otlp/components/processor/infraattributesprocessor/go.sum @@ -0,0 +1,422 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= +github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1c8PVE1PubbNx3mjUr09OqWGCs= +github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-viper/mapstructure/v2 v2.1.0 h1:gHnMa2Y/pIxElCH2GlZZ1lZSsn6XMtufpGyP1XxdC/w= +github.com/go-viper/mapstructure/v2 v2.1.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.0/go.mod h1:mJzapYve32yjrKlk9GbyCZHuPgZsrbyIbyKhSzOpg6s= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= +github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= +github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= +github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA= +github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NIs= +github.com/knadh/koanf/maps v0.1.1/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI= +github.com/knadh/koanf/providers/confmap v0.1.0 h1:gOkxhHkemwG4LezxxN8DMOFopOPghxRVp7JbIvdvqzU= +github.com/knadh/koanf/providers/confmap v0.1.0/go.mod h1:2uLhxQzJnyHKfxG927awZC7+fyHFdQkd697K4MdLnIU= +github.com/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM= +github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= +github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.54.0 h1:ZlZy0BgJhTwVZUn7dLOkwCZHUkrAqd3WYtcFCWnM1D8= +github.com/prometheus/common v0.54.0/go.mod h1:/TQgMJP5CuVYveyT7n/0Ix8yLNNXy9yRSkhnLTHPDIQ= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.15.0 h1:A82kmvXJq2jTu5YUhSGNlYoxh85zLnKgPz4bMZgI5Ek= +github.com/prometheus/procfs v0.15.0/go.mod h1:Y0RJ/Y5g5wJpkTisOtqwDSo4HwhGmLB4VQSw2sQJLHk= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/shirou/gopsutil/v3 v3.23.12 h1:z90NtUkp3bMtmICZKpC4+WaknU1eXtp5vtbQ11DgpE4= +github.com/shirou/gopsutil/v3 v3.23.12/go.mod h1:1FrWgea594Jp7qmjHUUPlJDTPgcsb9mGnXDxavtikzM= +github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= +github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= +github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= +github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= +github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20200122045848-3419fae592fc/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.opentelemetry.io/collector v0.104.0 h1:R3zjM4O3K3+ttzsjPV75P80xalxRbwYTURlK0ys7uyo= +go.opentelemetry.io/collector v0.104.0/go.mod h1:Tm6F3na9ajnOm6I5goU9dURKxq1fSBK1yA94nvUix3k= +go.opentelemetry.io/collector/component v0.104.0 h1:jqu/X9rnv8ha0RNZ1a9+x7OU49KwSMsPbOuIEykHuQE= +go.opentelemetry.io/collector/component v0.104.0/go.mod h1:1C7C0hMVSbXyY1ycCmaMUAR9fVwpgyiNQqxXtEWhVpw= +go.opentelemetry.io/collector/config/configtelemetry v0.104.0 h1:eHv98XIhapZA8MgTiipvi+FDOXoFhCYOwyKReOt+E4E= +go.opentelemetry.io/collector/config/configtelemetry v0.104.0/go.mod h1:WxWKNVAQJg/Io1nA3xLgn/DWLE/W1QOB2+/Js3ACi40= +go.opentelemetry.io/collector/confmap v0.104.0 h1:d3yuwX+CHpoyCh0iMv3rqb/vwAekjSm4ZDL6UK1nZSA= +go.opentelemetry.io/collector/confmap v0.104.0/go.mod h1:F8Lue+tPPn2oldXcfqI75PPMJoyzgUsKVtM/uHZLA4w= +go.opentelemetry.io/collector/consumer v0.104.0 h1:Z1ZjapFp5mUcbkGEL96ljpqLIUMhRgQQpYKkDRtxy+4= +go.opentelemetry.io/collector/consumer v0.104.0/go.mod h1:60zcIb0W9GW0z9uJCv6NmjpSbCfBOeRUyrtEwqK6Hzo= +go.opentelemetry.io/collector/featuregate v1.11.0 h1:Z7puIymKoQRm3oNM/NH8reWc2zRPz2PNaJvuokh0lQY= +go.opentelemetry.io/collector/featuregate v1.11.0/go.mod h1:PsOINaGgTiFc+Tzu2K/X2jP+Ngmlp7YKGV1XrnBkH7U= +go.opentelemetry.io/collector/pdata v1.11.0 h1:rzYyV1zfTQQz1DI9hCiaKyyaczqawN75XO9mdXmR/hE= +go.opentelemetry.io/collector/pdata v1.11.0/go.mod h1:IHxHsp+Jq/xfjORQMDJjSH6jvedOSTOyu3nbxqhWSYE= +go.opentelemetry.io/collector/pdata/pprofile v0.104.0 h1:MYOIHvPlKEJbWLiBKFQWGD0xd2u22xGVLt4jPbdxP4Y= +go.opentelemetry.io/collector/pdata/pprofile v0.104.0/go.mod h1:7WpyHk2wJZRx70CGkBio8klrYTTXASbyIhf+rH4FKnA= +go.opentelemetry.io/collector/pdata/testdata v0.104.0 h1:BKTZ7hIyAX5DMPecrXkVB2e86HwWtJyOlXn/5vSVXNw= +go.opentelemetry.io/collector/pdata/testdata v0.104.0/go.mod h1:3SnYKu8gLfxURJMWS/cFEUFs+jEKS6jvfqKXnOZsdkQ= +go.opentelemetry.io/collector/processor v0.104.0 h1:KSvMDu4DWmK1/k2z2rOzMtTvAa00jnTabtPEK9WOSYI= +go.opentelemetry.io/collector/processor v0.104.0/go.mod h1:qU2/xCCYdvVORkN6aq0H/WUWkvo505VGYg2eOwPvaTg= +go.opentelemetry.io/collector/semconv v0.104.0 h1:dUvajnh+AYJLEW/XOPk0T0BlwltSdi3vrjO7nSOos3k= +go.opentelemetry.io/collector/semconv v0.104.0/go.mod h1:yMVUCNoQPZVq/IPfrHrnntZTWsLf5YGZ7qwKulIl5hw= +go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= +go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= +go.opentelemetry.io/otel/exporters/prometheus v0.49.0 h1:Er5I1g/YhfYv9Affk9nJLfH/+qCCVVg1f2R9AbJfqDQ= +go.opentelemetry.io/otel/exporters/prometheus v0.49.0/go.mod h1:KfQ1wpjf3zsHjzP149P4LyAwWRupc6c7t1ZJ9eXpKQM= +go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= +go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= +go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= +go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= +go.opentelemetry.io/otel/sdk/metric v1.27.0 h1:5uGNOlpXi+Hbo/DRoI31BSb1v+OGcpv2NemcCrOL8gI= +go.opentelemetry.io/otel/sdk/metric v1.27.0/go.mod h1:we7jJVrYN2kh3mVBlswtPU22K0SA+769l93J6bsyvqw= +go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= +go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/dig v1.18.0 h1:imUL1UiY0Mg4bqbFfsRQO5G4CGRBec/ZujWTvSVp3pw= +go.uber.org/dig v1.18.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= +go.uber.org/fx v1.22.2 h1:iPW+OPxv0G8w75OemJ1RAnTUrF55zOJlXlo1TbJ0Buw= +go.uber.org/fx v1.22.2/go.mod h1:o/D9n+2mLP6v1EG+qsdT1O8wKopYAsqZasju97SDFCU= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI= +golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190529164535-6a60838ec259/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 h1:Zy9XzmMEflZ/MAaA7vNcoebnRAld7FsPW1EeBB7V0m8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= diff --git a/comp/otelcol/otlp/components/processor/infraattributesprocessor/taggerclient.go b/comp/otelcol/otlp/components/processor/infraattributesprocessor/helperclients.go similarity index 100% rename from comp/otelcol/otlp/components/processor/infraattributesprocessor/taggerclient.go rename to comp/otelcol/otlp/components/processor/infraattributesprocessor/helperclients.go diff --git a/comp/otelcol/otlp/components/processor/infraattributesprocessor/taggerclient_test.go b/comp/otelcol/otlp/components/processor/infraattributesprocessor/helperclients_test.go similarity index 74% rename from comp/otelcol/otlp/components/processor/infraattributesprocessor/taggerclient_test.go rename to comp/otelcol/otlp/components/processor/infraattributesprocessor/helperclients_test.go index 41fc7ee5ca3b8..989623475184a 100644 --- a/comp/otelcol/otlp/components/processor/infraattributesprocessor/taggerclient_test.go +++ b/comp/otelcol/otlp/components/processor/infraattributesprocessor/helperclients_test.go @@ -6,7 +6,8 @@ package infraattributesprocessor import ( - "github.com/DataDog/datadog-agent/comp/core/tagger/common" + "fmt" + "github.com/DataDog/datadog-agent/comp/core/tagger/types" ) @@ -29,5 +30,15 @@ func (t *testTaggerClient) Tag(entityID string, _ types.TagCardinality) ([]strin // GlobalTags mocks taggerimpl.GlobalTags functionality for purpose of testing, removing dependency on Taggerimpl func (t *testTaggerClient) GlobalTags(_ types.TagCardinality) ([]string, error) { - return t.tagMap[common.GetGlobalEntityID().String()], nil + return t.tagMap[types.NewEntityID("internal", "global-entity-id").String()], nil +} + +type testGenerateIDClient struct{} + +func newTestGenerateIDClient() *testGenerateIDClient { + return &testGenerateIDClient{} +} + +func (t *testGenerateIDClient) generateID(group, resource, namespace, name string) string { + return fmt.Sprintf("%s/%s/%s/%s", group, resource, namespace, name) } diff --git a/comp/otelcol/otlp/components/processor/infraattributesprocessor/logs.go b/comp/otelcol/otlp/components/processor/infraattributesprocessor/logs.go index bd3ef1584890a..8d63b39c3754b 100644 --- a/comp/otelcol/otlp/components/processor/infraattributesprocessor/logs.go +++ b/comp/otelcol/otlp/components/processor/infraattributesprocessor/logs.go @@ -19,13 +19,15 @@ type infraAttributesLogProcessor struct { logger *zap.Logger tagger taggerClient cardinality types.TagCardinality + generateID GenerateKubeMetadataEntityID } -func newInfraAttributesLogsProcessor(set processor.Settings, cfg *Config, tagger taggerClient) (*infraAttributesLogProcessor, error) { +func newInfraAttributesLogsProcessor(set processor.Settings, cfg *Config, tagger taggerClient, generateID GenerateKubeMetadataEntityID) (*infraAttributesLogProcessor, error) { ialp := &infraAttributesLogProcessor{ logger: set.Logger, tagger: tagger, cardinality: cfg.Cardinality, + generateID: generateID, } set.Logger.Info("Logs Infra Attributes Processor configured") @@ -36,7 +38,7 @@ func (ialp *infraAttributesLogProcessor) processLogs(_ context.Context, ld plog. rls := ld.ResourceLogs() for i := 0; i < rls.Len(); i++ { resourceAttributes := rls.At(i).Resource().Attributes() - entityIDs := entityIDsFromAttributes(resourceAttributes) + entityIDs := entityIDsFromAttributes(resourceAttributes, ialp.generateID) tagMap := make(map[string]string) // Get all unique tags from resource attributes and global tags diff --git a/comp/otelcol/otlp/components/processor/infraattributesprocessor/logs_test.go b/comp/otelcol/otlp/components/processor/infraattributesprocessor/logs_test.go index 054c6667d1fc1..4248ee573697e 100644 --- a/comp/otelcol/otlp/components/processor/infraattributesprocessor/logs_test.go +++ b/comp/otelcol/otlp/components/processor/infraattributesprocessor/logs_test.go @@ -14,7 +14,6 @@ import ( "go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/processor/processortest" - "github.com/DataDog/datadog-agent/comp/core/tagger/common" "github.com/DataDog/datadog-agent/comp/core/tagger/types" ) @@ -127,9 +126,10 @@ func TestInfraAttributesLogProcessor(t *testing.T) { tc := newTestTaggerClient() tc.tagMap["container_id://test"] = []string{"container:id"} tc.tagMap["deployment://namespace/deployment"] = []string{"deployment:name"} - tc.tagMap[common.GetGlobalEntityID().String()] = []string{"global:tag"} + tc.tagMap[types.NewEntityID("internal", "global-entity-id").String()] = []string{"global:tag"} + gc := newTestGenerateIDClient().generateID - factory := NewFactory(tc) + factory := NewFactory(tc, gc) flp, err := factory.CreateLogsProcessor( context.Background(), processortest.NewNopSettings(), diff --git a/comp/otelcol/otlp/components/processor/infraattributesprocessor/metrics.go b/comp/otelcol/otlp/components/processor/infraattributesprocessor/metrics.go index 5dcbd2e1f974c..e7a8cb3d7a700 100644 --- a/comp/otelcol/otlp/components/processor/infraattributesprocessor/metrics.go +++ b/comp/otelcol/otlp/components/processor/infraattributesprocessor/metrics.go @@ -11,7 +11,6 @@ import ( "strings" "github.com/DataDog/datadog-agent/comp/core/tagger/types" - "github.com/DataDog/datadog-agent/comp/core/workloadmeta/collectors/util" "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/pmetric" @@ -24,22 +23,27 @@ type infraAttributesMetricProcessor struct { logger *zap.Logger tagger taggerClient cardinality types.TagCardinality + generateID GenerateKubeMetadataEntityID } -func newInfraAttributesMetricProcessor(set processor.Settings, cfg *Config, tagger taggerClient) (*infraAttributesMetricProcessor, error) { +func newInfraAttributesMetricProcessor(set processor.Settings, cfg *Config, tagger taggerClient, generateID GenerateKubeMetadataEntityID) (*infraAttributesMetricProcessor, error) { iamp := &infraAttributesMetricProcessor{ logger: set.Logger, tagger: tagger, cardinality: cfg.Cardinality, + generateID: generateID, } set.Logger.Info("Metric Infra Attributes Processor configured") return iamp, nil } +// GenerateKubeMetadataEntityID is a function that generates an entity ID for a Kubernetes resource. +type GenerateKubeMetadataEntityID func(group, resource, namespace, name string) string + // TODO: Replace OriginIDFromAttributes in opentelemetry-mapping-go with this method // entityIDsFromAttributes gets the entity IDs from resource attributes. // If not found, an empty string slice is returned. -func entityIDsFromAttributes(attrs pcommon.Map) []types.EntityID { +func entityIDsFromAttributes(attrs pcommon.Map, generateID GenerateKubeMetadataEntityID) []types.EntityID { entityIDs := make([]types.EntityID, 0, 8) // Prefixes come from pkg/util/kubernetes/kubelet and pkg/util/containers. if containerID, ok := attrs.Get(conventions.AttributeContainerID); ok { @@ -61,11 +65,11 @@ func entityIDsFromAttributes(attrs pcommon.Map) []types.EntityID { } } if namespace, ok := attrs.Get(conventions.AttributeK8SNamespaceName); ok { - entityIDs = append(entityIDs, types.NewEntityID(types.KubernetesMetadata, string(util.GenerateKubeMetadataEntityID("", "namespaces", "", namespace.AsString())))) + entityIDs = append(entityIDs, types.NewEntityID(types.KubernetesMetadata, generateID("", "namespaces", "", namespace.AsString()))) } if nodeName, ok := attrs.Get(conventions.AttributeK8SNodeName); ok { - entityIDs = append(entityIDs, types.NewEntityID(types.KubernetesMetadata, string(util.GenerateKubeMetadataEntityID("", "nodes", "", nodeName.AsString())))) + entityIDs = append(entityIDs, types.NewEntityID(types.KubernetesMetadata, generateID("", "nodes", "", nodeName.AsString()))) } if podUID, ok := attrs.Get(conventions.AttributeK8SPodUID); ok { entityIDs = append(entityIDs, types.NewEntityID(types.KubernetesPodUID, podUID.AsString())) @@ -88,7 +92,7 @@ func (iamp *infraAttributesMetricProcessor) processMetrics(_ context.Context, md rms := md.ResourceMetrics() for i := 0; i < rms.Len(); i++ { resourceAttributes := rms.At(i).Resource().Attributes() - entityIDs := entityIDsFromAttributes(resourceAttributes) + entityIDs := entityIDsFromAttributes(resourceAttributes, iamp.generateID) tagMap := make(map[string]string) // Get all unique tags from resource attributes and global tags diff --git a/comp/otelcol/otlp/components/processor/infraattributesprocessor/metrics_test.go b/comp/otelcol/otlp/components/processor/infraattributesprocessor/metrics_test.go index 023f60b904edc..01cecbaefcc62 100644 --- a/comp/otelcol/otlp/components/processor/infraattributesprocessor/metrics_test.go +++ b/comp/otelcol/otlp/components/processor/infraattributesprocessor/metrics_test.go @@ -16,7 +16,6 @@ import ( "go.opentelemetry.io/collector/processor/processortest" conventions "go.opentelemetry.io/collector/semconv/v1.21.0" - "github.com/DataDog/datadog-agent/comp/core/tagger/common" "github.com/DataDog/datadog-agent/comp/core/tagger/types" ) @@ -130,8 +129,10 @@ func TestInfraAttributesMetricProcessor(t *testing.T) { tc := newTestTaggerClient() tc.tagMap["container_id://test"] = []string{"container:id"} tc.tagMap["deployment://namespace/deployment"] = []string{"deployment:name"} - tc.tagMap[common.GetGlobalEntityID().String()] = []string{"global:tag"} - factory := NewFactory(tc) + tc.tagMap[types.NewEntityID("internal", "global-entity-id").String()] = []string{"global:tag"} + gc := newTestGenerateIDClient().generateID + + factory := NewFactory(tc, gc) fmp, err := factory.CreateMetricsProcessor( context.Background(), processortest.NewNopSettings(), @@ -262,10 +263,10 @@ func TestEntityIDsFromAttributes(t *testing.T) { entityIDs: []string{"process://process_pid_goes_here"}, }, } - + gc := newTestGenerateIDClient().generateID for _, testInstance := range tests { t.Run(testInstance.name, func(t *testing.T) { - entityIDs := entityIDsFromAttributes(testInstance.attrs) + entityIDs := entityIDsFromAttributes(testInstance.attrs, gc) entityIDsAsStrings := make([]string, len(entityIDs)) for idx, entityID := range entityIDs { entityIDsAsStrings[idx] = entityID.String() diff --git a/comp/otelcol/otlp/components/processor/infraattributesprocessor/traces.go b/comp/otelcol/otlp/components/processor/infraattributesprocessor/traces.go index d35f7b4009208..ce6fe02674e95 100644 --- a/comp/otelcol/otlp/components/processor/infraattributesprocessor/traces.go +++ b/comp/otelcol/otlp/components/processor/infraattributesprocessor/traces.go @@ -19,13 +19,15 @@ type infraAttributesSpanProcessor struct { logger *zap.Logger tagger taggerClient cardinality types.TagCardinality + generateID GenerateKubeMetadataEntityID } -func newInfraAttributesSpanProcessor(set processor.Settings, cfg *Config, tagger taggerClient) (*infraAttributesSpanProcessor, error) { +func newInfraAttributesSpanProcessor(set processor.Settings, cfg *Config, tagger taggerClient, generateID GenerateKubeMetadataEntityID) (*infraAttributesSpanProcessor, error) { iasp := &infraAttributesSpanProcessor{ logger: set.Logger, tagger: tagger, cardinality: cfg.Cardinality, + generateID: generateID, } set.Logger.Info("Span Infra Attributes Processor configured") return iasp, nil @@ -35,7 +37,7 @@ func (iasp *infraAttributesSpanProcessor) processTraces(_ context.Context, td pt rss := td.ResourceSpans() for i := 0; i < rss.Len(); i++ { resourceAttributes := rss.At(i).Resource().Attributes() - entityIDs := entityIDsFromAttributes(resourceAttributes) + entityIDs := entityIDsFromAttributes(resourceAttributes, iasp.generateID) tagMap := make(map[string]string) // Get all unique tags from resource attributes and global tags diff --git a/comp/otelcol/otlp/components/processor/infraattributesprocessor/traces_test.go b/comp/otelcol/otlp/components/processor/infraattributesprocessor/traces_test.go index 53cf8ad88f134..0c9a47324e1df 100644 --- a/comp/otelcol/otlp/components/processor/infraattributesprocessor/traces_test.go +++ b/comp/otelcol/otlp/components/processor/infraattributesprocessor/traces_test.go @@ -14,7 +14,6 @@ import ( "go.opentelemetry.io/collector/pdata/ptrace" "go.opentelemetry.io/collector/processor/processortest" - "github.com/DataDog/datadog-agent/comp/core/tagger/common" "github.com/DataDog/datadog-agent/comp/core/tagger/types" ) @@ -127,8 +126,9 @@ func TestInfraAttributesTraceProcessor(t *testing.T) { tc := newTestTaggerClient() tc.tagMap["container_id://test"] = []string{"container:id"} tc.tagMap["deployment://namespace/deployment"] = []string{"deployment:name"} - tc.tagMap[common.GetGlobalEntityID().String()] = []string{"global:tag"} - factory := NewFactory(tc) + tc.tagMap[types.NewEntityID("internal", "global-entity-id").String()] = []string{"global:tag"} + gc := newTestGenerateIDClient().generateID + factory := NewFactory(tc, gc) fmp, err := factory.CreateTracesProcessor( context.Background(), processortest.NewNopSettings(), diff --git a/go.mod b/go.mod index 1491cec0a3815..3b9ae872e6a9c 100644 --- a/go.mod +++ b/go.mod @@ -59,6 +59,7 @@ replace ( github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/exporter/logsagentexporter => ./comp/otelcol/otlp/components/exporter/logsagentexporter github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/exporter/serializerexporter => ./comp/otelcol/otlp/components/exporter/serializerexporter github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/metricsclient => ./comp/otelcol/otlp/components/metricsclient + github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/processor/infraattributesprocessor => ./comp/otelcol/otlp/components/processor/infraattributesprocessor github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/statsprocessor => ./comp/otelcol/otlp/components/statsprocessor github.com/DataDog/datadog-agent/comp/otelcol/otlp/testutil => ./comp/otelcol/otlp/testutil github.com/DataDog/datadog-agent/comp/serializer/compression => ./comp/serializer/compression @@ -553,9 +554,9 @@ require ( go.etcd.io/etcd/client/v3 v3.6.0-alpha.0 // indirect go.etcd.io/etcd/server/v3 v3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/collector/consumer v0.104.0 + go.opentelemetry.io/collector/consumer v0.104.0 // indirect go.opentelemetry.io/collector/featuregate v1.11.0 - go.opentelemetry.io/collector/semconv v0.104.0 + go.opentelemetry.io/collector/semconv v0.104.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect go.opentelemetry.io/contrib/propagators/b3 v1.27.0 // indirect go.opentelemetry.io/otel v1.28.0 @@ -563,7 +564,7 @@ require ( go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 go.opentelemetry.io/otel/exporters/prometheus v0.49.0 // indirect - go.opentelemetry.io/otel/metric v1.28.0 + go.opentelemetry.io/otel/metric v1.28.0 // indirect go.opentelemetry.io/otel/sdk v1.28.0 go.opentelemetry.io/otel/sdk/metric v1.27.0 // indirect go.opentelemetry.io/otel/trace v1.28.0 @@ -642,6 +643,7 @@ require ( github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/exporter/logsagentexporter v0.56.0-rc.3 github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/exporter/serializerexporter v0.56.0-rc.3 github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/metricsclient v0.56.0-rc.3 + github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/processor/infraattributesprocessor v0.56.0-rc.3 github.com/DataDog/datadog-agent/comp/otelcol/otlp/testutil v0.56.0-rc.3 github.com/DataDog/datadog-agent/comp/serializer/compression v0.56.0-rc.3 github.com/DataDog/datadog-agent/comp/trace/agent/def v0.56.0-rc.3 @@ -821,7 +823,7 @@ require ( github.com/go-openapi/spec v0.20.14 // indirect github.com/go-resty/resty/v2 v2.12.0 // indirect github.com/go-test/deep v1.1.0 // indirect - github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect + github.com/go-viper/mapstructure/v2 v2.1.0 // indirect github.com/go-zookeeper/zk v1.0.3 // indirect github.com/goccy/go-json v0.10.3 // indirect github.com/goccy/go-yaml v1.11.0 // indirect @@ -975,8 +977,6 @@ require ( go.opentelemetry.io/collector/extension/auth v0.104.0 // indirect go.opentelemetry.io/collector/extension/zpagesextension v0.104.0 // indirect go.opentelemetry.io/collector/filter v0.104.0 // indirect - go.opentelemetry.io/collector/pdata/pprofile v0.104.0 // indirect - go.opentelemetry.io/collector/pdata/testdata v0.104.0 // indirect go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.104.0 // indirect go.opentelemetry.io/collector/receiver/nopreceiver v0.104.0 // indirect go.opentelemetry.io/contrib/config v0.7.0 // indirect diff --git a/go.sum b/go.sum index 49f65d56b4cae..e451325c39d6c 100644 --- a/go.sum +++ b/go.sum @@ -1364,8 +1364,8 @@ github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZ github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg= github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= -github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c= -github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/go-viper/mapstructure/v2 v2.1.0 h1:gHnMa2Y/pIxElCH2GlZZ1lZSsn6XMtufpGyP1XxdC/w= +github.com/go-viper/mapstructure/v2 v2.1.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg= github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= diff --git a/tasks/modules.py b/tasks/modules.py index ebed764f57eaf..1876dbc83ad73 100644 --- a/tasks/modules.py +++ b/tasks/modules.py @@ -189,6 +189,9 @@ def dependency_path(self, agent_version): "comp/otelcol/otlp/components/metricsclient": GoModule( "comp/otelcol/otlp/components/metricsclient", independent=True, used_by_otel=True ), + "comp/otelcol/otlp/components/processor/infraattributesprocessor": GoModule( + "comp/otelcol/otlp/components/processor/infraattributesprocessor", independent=True, used_by_otel=True + ), "comp/otelcol/otlp/components/statsprocessor": GoModule( "comp/otelcol/otlp/components/statsprocessor", independent=True, used_by_otel=True ), From 977ffd14b0c5c9bc4bee995dd95bed0a31a3b55f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20Juli=C3=A1n?= Date: Thu, 12 Sep 2024 19:24:34 +0200 Subject: [PATCH 030/195] [EBPF] Fix problems with maps that use variable-size key types (#29292) --- pkg/ebpf/map_cleaner.go | 10 +++++++++- pkg/ebpf/maps/generic_map.go | 18 +++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/pkg/ebpf/map_cleaner.go b/pkg/ebpf/map_cleaner.go index 311d294929c46..6c0493731b4f9 100644 --- a/pkg/ebpf/map_cleaner.go +++ b/pkg/ebpf/map_cleaner.go @@ -71,7 +71,7 @@ func (mc *MapCleaner[K, V]) Clean(interval time.Duration, preClean func() bool, // of a version comparison because some distros have backported this API), and fallback to // the old method otherwise. The new API is also more efficient because it minimizes the number of allocations. cleaner := mc.cleanWithoutBatches - if maps.BatchAPISupported() { + if mc.emap.CanUseBatchAPI() { cleaner = mc.cleanWithBatches } @@ -135,6 +135,10 @@ func (mc *MapCleaner[K, V]) cleanWithBatches(nowTS int64, shouldClean func(nowTS keysToDelete = append(keysToDelete, key) } + if err := it.Err(); err != nil { + log.Errorf("error iterating map=%s: %s", mc.emap, err) + } + var deletionError error if len(keysToDelete) > 0 { deletedCount, deletionError = mc.emap.BatchDelete(keysToDelete) @@ -179,6 +183,10 @@ func (mc *MapCleaner[K, V]) cleanWithoutBatches(nowTS int64, shouldClean func(no keysToDelete = append(keysToDelete, key) } + if err := entries.Err(); err != nil { + log.Errorf("error iterating map=%s: %s", mc.emap, err) + } + for _, k := range keysToDelete { err := mc.emap.Delete(&k) if err == nil { diff --git a/pkg/ebpf/maps/generic_map.go b/pkg/ebpf/maps/generic_map.go index 3a0f2594ada25..a8fbdb4c06665 100644 --- a/pkg/ebpf/maps/generic_map.go +++ b/pkg/ebpf/maps/generic_map.go @@ -25,6 +25,8 @@ import ( const defaultBatchSize = 100 +var ErrBatchAPINotSupported = errors.New("batch API not supported for this map: check whether key is fixed-size, kernel supports batch API and if this map is not per-cpu") + // BatchAPISupported returns true if the kernel supports the batch API for maps var BatchAPISupported = funcs.MemoizeNoError(func() bool { // Do feature detection directly instead of based on kernel versions for more accuracy @@ -190,11 +192,19 @@ func (g *GenericMap[K, V]) Delete(key *K) error { // BatchDelete deletes a batch of keys from the map. Returns the number of deleted items func (g *GenericMap[K, V]) BatchDelete(keys []K) (int, error) { + if !g.CanUseBatchAPI() { + return 0, ErrBatchAPINotSupported + } + return g.m.BatchDelete(keys, nil) } // BatchUpdate updates a batch of keys in the map func (g *GenericMap[K, V]) BatchUpdate(keys []K, values []V, opts *ebpf.BatchOptions) (int, error) { + if !g.CanUseBatchAPI() { + return 0, ErrBatchAPINotSupported + } + return g.m.BatchUpdate(keys, values, opts) } @@ -207,6 +217,12 @@ type GenericMapIterator[K any, V any] interface { Err() error } +// CanUseBatchAPI returns whether this map can use the batch API. Takes into account map type, batch API support +// in the kernel and the key type (keys with pointers). Returns an error describing the reason. +func (g *GenericMap[K, V]) CanUseBatchAPI() bool { + return g.keySupportsBatchAPI && BatchAPISupported() && !g.isPerCPU() +} + func isPerCPU(t ebpf.MapType) bool { switch t { case ebpf.PerCPUHash, ebpf.PerCPUArray, ebpf.LRUCPUHash: @@ -242,7 +258,7 @@ func (g *GenericMap[K, V]) IterateWithBatchSize(batchSize int) GenericMapIterato batchSize = int(g.m.MaxEntries()) } - if g.keySupportsBatchAPI && BatchAPISupported() && !g.isPerCPU() && batchSize > 1 { + if batchSize > 1 && g.CanUseBatchAPI() { it := &genericMapBatchIterator[K, V]{ m: g.m, batchSize: batchSize, From 571414c9992de8f3996af6148f0dc57ab69b52fa Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Thu, 12 Sep 2024 22:33:39 +0200 Subject: [PATCH 031/195] fix(github_workflows): Use the correct slack token (#29311) --- .github/workflows/chase_release_managers.yml | 3 ++- .github/workflows/create_rc_pr.yml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/chase_release_managers.yml b/.github/workflows/chase_release_managers.yml index bcf922f93d575..085cc6378cc0f 100644 --- a/.github/workflows/chase_release_managers.yml +++ b/.github/workflows/chase_release_managers.yml @@ -11,7 +11,7 @@ on: permissions: {} jobs: - create_release_schedule: + chase_release_managers: runs-on: ubuntu-latest steps: - name: Checkout repository @@ -31,5 +31,6 @@ jobs: env: ATLASSIAN_USERNAME : ${{ secrets.ATLASSIAN_USERNAME }} ATLASSIAN_PASSWORD : ${{ secrets.ATLASSIAN_PASSWORD }} + SLACK_API_TOKEN : ${{ secrets.SLACK_DATADOG_AGENT_BOT_TOKEN }} run: | inv -e release.chase-release-managers --version ${{ github.event.inputs.version }} diff --git a/.github/workflows/create_rc_pr.yml b/.github/workflows/create_rc_pr.yml index bfed4df0f66b4..eec8e650f45ae 100644 --- a/.github/workflows/create_rc_pr.yml +++ b/.github/workflows/create_rc_pr.yml @@ -81,8 +81,8 @@ jobs: env: ATLASSIAN_USERNAME: ${{ secrets.ATLASSIAN_USERNAME }} ATLASSIAN_PASSWORD: ${{ secrets.ATLASSIAN_PASSWORD }} + SLACK_API_TOKEN : ${{ secrets.SLACK_DATADOG_AGENT_BOT_TOKEN }} run: | - export SLACK_API_TOKEN="${{ secrets.SLACK_API_TOKEN }}" echo "CHANGES=$(inv -e release.check-for-changes -r ${{ matrix.value }} ${{ needs.find_release_branches.outputs.warning }})" >> $GITHUB_OUTPUT - name: Create RC PR From b5beb8f89428ee8ba5c10662b0c7a44c6b22e25b Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Thu, 12 Sep 2024 22:44:41 +0200 Subject: [PATCH 032/195] fix(gitlab): Remove the last `/root/.bashrc` occurrences (#29237) --- .gitlab/.pre/test_gitlab_configuration.yml | 1 - .gitlab/deps_fetch/deps_fetch.yml | 1 - .gitlab/functional_test/oracle.yml | 1 - .gitlab/internal_image_deploy/internal_image_deploy.yml | 1 - .gitlab/kernel_matrix_testing/common.yml | 1 - .gitlab/notify/notify.yml | 1 - .gitlab/source_test/linux.yml | 1 - 7 files changed, 7 deletions(-) diff --git a/.gitlab/.pre/test_gitlab_configuration.yml b/.gitlab/.pre/test_gitlab_configuration.yml index 1c17aa088a4a6..eeb3083716644 100644 --- a/.gitlab/.pre/test_gitlab_configuration.yml +++ b/.gitlab/.pre/test_gitlab_configuration.yml @@ -18,7 +18,6 @@ test_gitlab_compare_to: rules: - !reference [.on_gitlab_changes] script: - - source /root/.bashrc - export GITLAB_TOKEN=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $GITLAB_FULL_API_TOKEN) - !reference [.setup_agent_github_app] - pip install -r tasks/requirements.txt diff --git a/.gitlab/deps_fetch/deps_fetch.yml b/.gitlab/deps_fetch/deps_fetch.yml index 4fde8af699088..6defdd7d381e7 100644 --- a/.gitlab/deps_fetch/deps_fetch.yml +++ b/.gitlab/deps_fetch/deps_fetch.yml @@ -77,7 +77,6 @@ go_e2e_deps: extends: .cache script: - if [ -f modcache_e2e.tar.xz ]; then exit 0; fi - - source /root/.bashrc - inv -e new-e2e-tests.deps - cd $GOPATH/pkg/mod/ && tar c -I "pxz -T${KUBERNETES_CPU_REQUEST}" -f $CI_PROJECT_DIR/modcache_e2e.tar.xz . artifacts: diff --git a/.gitlab/functional_test/oracle.yml b/.gitlab/functional_test/oracle.yml index e170254b42bb5..f1c89e36bf3cc 100644 --- a/.gitlab/functional_test/oracle.yml +++ b/.gitlab/functional_test/oracle.yml @@ -17,7 +17,6 @@ oracle: matrix: - DBMS_VERSION: "21.3.0-xe" before_script: - - source /root/.bashrc - !reference [.retrieve_linux_go_deps] script: - inv oracle.test \ No newline at end of file diff --git a/.gitlab/internal_image_deploy/internal_image_deploy.yml b/.gitlab/internal_image_deploy/internal_image_deploy.yml index a39917217f5ae..9a89b3393addf 100644 --- a/.gitlab/internal_image_deploy/internal_image_deploy.yml +++ b/.gitlab/internal_image_deploy/internal_image_deploy.yml @@ -67,7 +67,6 @@ docker_trigger_internal-ot: TMPL_SRC_REPO: ci/datadog-agent/agent RELEASE_STAGING: "true" script: - - source /root/.bashrc - export GITLAB_TOKEN=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $GITLAB_SCHEDULER_TOKEN) - if [ "$BUCKET_BRANCH" = "beta" ] || [ "$BUCKET_BRANCH" = "stable" ]; then TMPL_SRC_REPO="${TMPL_SRC_REPO}-release"; fi - | diff --git a/.gitlab/kernel_matrix_testing/common.yml b/.gitlab/kernel_matrix_testing/common.yml index daddc75b048db..cba9e3fa18361 100644 --- a/.gitlab/kernel_matrix_testing/common.yml +++ b/.gitlab/kernel_matrix_testing/common.yml @@ -326,7 +326,6 @@ notify_ebpf_complexity_changes: TEST_SET: no_usm allow_failure: true before_script: - - source /root/.bashrc - python3 -m pip install tabulate # Required for printing the tables - python3 -m pip install -r tasks/libs/requirements-github.txt - | diff --git a/.gitlab/notify/notify.yml b/.gitlab/notify/notify.yml index 1f6f08ba9c6a3..e4f96da3b59e5 100644 --- a/.gitlab/notify/notify.yml +++ b/.gitlab/notify/notify.yml @@ -107,7 +107,6 @@ notify_gitlab_ci_changes: - git checkout main - git checkout - script: - - source /root/.bashrc - python3 -m pip install -r tasks/libs/requirements-github.txt - | export GITHUB_KEY_B64=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $GITHUB_PR_COMMENTER_APP_KEY | base64) diff --git a/.gitlab/source_test/linux.yml b/.gitlab/source_test/linux.yml index 4b49e23974b35..958869933d854 100644 --- a/.gitlab/source_test/linux.yml +++ b/.gitlab/source_test/linux.yml @@ -50,7 +50,6 @@ .upload_coverage: # Upload coverage files to Codecov. Never fail on coverage upload. - - source /root/.bashrc - export CODECOV_TOKEN=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $CODECOV_TOKEN) - inv -e coverage.upload-to-codecov $COVERAGE_CACHE_FLAG || true From 9f702b17914c3af1d9f83de16489c19720335d67 Mon Sep 17 00:00:00 2001 From: Alexandre Yang Date: Thu, 12 Sep 2024 22:48:42 +0200 Subject: [PATCH 033/195] [network path] Add agent version (#29245) --- .../npcollectorimpl/npcollector_test.go | 2 ++ .../corechecks/networkpath/networkpath.go | 6 +++--- pkg/networkpath/payload/pathevent.go | 19 ++++++++++--------- pkg/networkpath/traceroute/runner.go | 15 +++++++++------ 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/comp/networkpath/npcollector/npcollectorimpl/npcollector_test.go b/comp/networkpath/npcollector/npcollectorimpl/npcollector_test.go index 770e90ed5e188..9b1f1ee475f83 100644 --- a/comp/networkpath/npcollector/npcollectorimpl/npcollector_test.go +++ b/comp/networkpath/npcollector/npcollectorimpl/npcollector_test.go @@ -133,6 +133,7 @@ func Test_NpCollector_runningAndProcessing(t *testing.T) { event1 := []byte(` { "timestamp": 0, + "agent_version": "", "namespace": "my-ns1", "pathtrace_id": "pathtrace-id-111", "origin":"network_traffic", @@ -166,6 +167,7 @@ func Test_NpCollector_runningAndProcessing(t *testing.T) { event2 := []byte(` { "timestamp": 0, + "agent_version": "", "namespace": "my-ns1", "pathtrace_id": "pathtrace-id-222", "origin":"network_traffic", diff --git a/pkg/collector/corechecks/networkpath/networkpath.go b/pkg/collector/corechecks/networkpath/networkpath.go index e7ba9465f268b..642dc8dd622dc 100644 --- a/pkg/collector/corechecks/networkpath/networkpath.go +++ b/pkg/collector/corechecks/networkpath/networkpath.go @@ -69,10 +69,9 @@ func (c *Check) Run() error { path.Namespace = c.config.Namespace // Add tags to path - commonTags := append(utils.GetCommonAgentTags(), c.config.Tags...) path.Source.Service = c.config.SourceService path.Destination.Service = c.config.DestinationService - path.Tags = commonTags + path.Tags = c.config.Tags // send to EP err = c.SendNetPathMDToEP(senderInstance, path) @@ -80,7 +79,8 @@ func (c *Check) Run() error { return fmt.Errorf("failed to send network path metadata: %w", err) } - c.submitTelemetry(metricSender, path, commonTags, startTime) + metricTags := append(utils.GetCommonAgentTags(), c.config.Tags...) + c.submitTelemetry(metricSender, path, metricTags, startTime) senderInstance.Commit() return nil diff --git a/pkg/networkpath/payload/pathevent.go b/pkg/networkpath/payload/pathevent.go index 25fa9f748cffc..004d4b44303ec 100644 --- a/pkg/networkpath/payload/pathevent.go +++ b/pkg/networkpath/payload/pathevent.go @@ -62,13 +62,14 @@ type NetworkPathDestination struct { // NetworkPath encapsulates data that defines a // path between two hosts as mapped by the agent type NetworkPath struct { - Timestamp int64 `json:"timestamp"` - Namespace string `json:"namespace"` // namespace used to resolve NDM resources - PathtraceID string `json:"pathtrace_id"` - Origin PathOrigin `json:"origin"` - Protocol Protocol `json:"protocol"` - Source NetworkPathSource `json:"source"` - Destination NetworkPathDestination `json:"destination"` - Hops []NetworkPathHop `json:"hops"` - Tags []string `json:"tags,omitempty"` + Timestamp int64 `json:"timestamp"` + AgentVersion string `json:"agent_version"` + Namespace string `json:"namespace"` // namespace used to resolve NDM resources + PathtraceID string `json:"pathtrace_id"` + Origin PathOrigin `json:"origin"` + Protocol Protocol `json:"protocol"` + Source NetworkPathSource `json:"source"` + Destination NetworkPathDestination `json:"destination"` + Hops []NetworkPathHop `json:"hops"` + Tags []string `json:"tags,omitempty"` } diff --git a/pkg/networkpath/traceroute/runner.go b/pkg/networkpath/traceroute/runner.go index 2e0fabbc88eec..b016da93a5a2c 100644 --- a/pkg/networkpath/traceroute/runner.go +++ b/pkg/networkpath/traceroute/runner.go @@ -15,6 +15,7 @@ import ( "sort" "time" + "github.com/DataDog/datadog-agent/pkg/version" "github.com/Datadog/dublin-traceroute/go/dublintraceroute/probes/probev4" "github.com/Datadog/dublin-traceroute/go/dublintraceroute/results" "github.com/vishvananda/netns" @@ -225,9 +226,10 @@ func (r *Runner) runTCP(cfg Config, hname string, target net.IP, maxTTL uint8, t func (r *Runner) processTCPResults(res *tcp.Results, hname string, destinationHost string, destinationPort uint16, destinationIP net.IP) (payload.NetworkPath, error) { traceroutePath := payload.NetworkPath{ - PathtraceID: payload.NewPathtraceID(), - Protocol: payload.ProtocolTCP, - Timestamp: time.Now().UnixMilli(), + AgentVersion: version.AgentVersion, + PathtraceID: payload.NewPathtraceID(), + Protocol: payload.ProtocolTCP, + Timestamp: time.Now().UnixMilli(), Source: payload.NetworkPathSource{ Hostname: hname, NetworkID: r.networkID, @@ -287,9 +289,10 @@ func (r *Runner) processUDPResults(res *results.Results, hname string, destinati } traceroutePath := payload.NetworkPath{ - PathtraceID: payload.NewPathtraceID(), - Protocol: payload.ProtocolUDP, - Timestamp: time.Now().UnixMilli(), + AgentVersion: version.AgentVersion, + PathtraceID: payload.NewPathtraceID(), + Protocol: payload.ProtocolUDP, + Timestamp: time.Now().UnixMilli(), Source: payload.NetworkPathSource{ Hostname: hname, NetworkID: r.networkID, From 36b4f64a391ecb75556ba2d3ac9f96ac11171cd4 Mon Sep 17 00:00:00 2001 From: pducolin <45568537+pducolin@users.noreply.github.com> Date: Thu, 12 Sep 2024 23:14:23 +0200 Subject: [PATCH 034/195] [e2e] mark tests as flaky (#29323) --- test/new-e2e/tests/windows/install-test/npm_test.go | 3 +++ test/new-e2e/tests/windows/install-test/upgrade_test.go | 3 +++ 2 files changed, 6 insertions(+) diff --git a/test/new-e2e/tests/windows/install-test/npm_test.go b/test/new-e2e/tests/windows/install-test/npm_test.go index cefec1f51b626..e3d5ff0b0d82e 100644 --- a/test/new-e2e/tests/windows/install-test/npm_test.go +++ b/test/new-e2e/tests/windows/install-test/npm_test.go @@ -10,6 +10,7 @@ import ( "path/filepath" "time" + "github.com/DataDog/datadog-agent/pkg/util/testutil/flake" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" windowsCommon "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows/common" windowsAgent "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows/common/agent" @@ -110,6 +111,8 @@ func (s *testNPMInstallWithAddLocalSuite) TestNPMInstallWithAddLocal() { // // Old name: Scenario 10 func TestNPMUpgradeFromBeta(t *testing.T) { + // incident-30584 + flake.Mark(t) s := &testNPMUpgradeFromBeta{} s.previousVersion = "7.23.2-beta1-1" s.url = "https://ddagent-windows-unstable.s3.amazonaws.com/datadog-agent-7.23.2-beta1-1-x86_64.msi" diff --git a/test/new-e2e/tests/windows/install-test/upgrade_test.go b/test/new-e2e/tests/windows/install-test/upgrade_test.go index e4c5677cf7198..d1f62be95aedc 100644 --- a/test/new-e2e/tests/windows/install-test/upgrade_test.go +++ b/test/new-e2e/tests/windows/install-test/upgrade_test.go @@ -11,6 +11,7 @@ import ( "slices" "strings" + "github.com/DataDog/datadog-agent/pkg/util/testutil/flake" windowsCommon "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows/common" windowsAgent "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows/common/agent" servicetest "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows/install-test/service-test" @@ -23,6 +24,8 @@ import ( // TestUpgrade tests upgrading the agent from LAST_STABLE_VERSION to WINDOWS_AGENT_VERSION func TestUpgrade(t *testing.T) { + // incident-30584 + flake.Mark(t) s := &testUpgradeSuite{} previousAgentPackage, err := windowsAgent.GetLastStablePackageFromEnv() require.NoError(t, err, "should get last stable agent package from env") From e6cb6ead47d0d0b324930667527b192bcedb5de3 Mon Sep 17 00:00:00 2001 From: Baptiste Foy Date: Fri, 13 Sep 2024 09:18:00 +0200 Subject: [PATCH 035/195] fix(fleet): Unflake ansible tests (#29299) --- test/new-e2e/tests/installer/all_packages_test.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/test/new-e2e/tests/installer/all_packages_test.go b/test/new-e2e/tests/installer/all_packages_test.go index b3ccc59818a37..85779c01e4d97 100644 --- a/test/new-e2e/tests/installer/all_packages_test.go +++ b/test/new-e2e/tests/installer/all_packages_test.go @@ -116,10 +116,6 @@ func TestPackages(t *testing.T) { flake.Mark(t) } - // FIXME: Ansible tests are flaky on multiple tests/os - if method == InstallMethodAnsible { - flake.Mark(t) - } opts := []awshost.ProvisionerOption{ awshost.WithEC2InstanceOptions(ec2.WithOSArch(flavor, flavor.Architecture)), awshost.WithoutAgent(), From f335d082d878f6959eaafb8d863aadacf764bb6e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 13 Sep 2024 07:51:15 +0000 Subject: [PATCH 036/195] CWS: sync BTFHub constants (#29326) Co-authored-by: --- .../probe/constantfetch/btfhub/constants.json | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pkg/security/probe/constantfetch/btfhub/constants.json b/pkg/security/probe/constantfetch/btfhub/constants.json index 7bedf2df1b260..92bca0346b002 100644 --- a/pkg/security/probe/constantfetch/btfhub/constants.json +++ b/pkg/security/probe/constantfetch/btfhub/constants.json @@ -18253,6 +18253,13 @@ "uname_release": "4.14.35-2047.539.5.el7uek.aarch64", "cindex": 89 }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.540.4.1.el7uek.aarch64", + "cindex": 89 + }, { "distrib": "ol", "version": "7", @@ -23671,6 +23678,13 @@ "uname_release": "4.14.35-2047.540.3.el7uek.x86_64", "cindex": 96 }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.540.4.1.el7uek.x86_64", + "cindex": 96 + }, { "distrib": "ol", "version": "7", @@ -23685,6 +23699,13 @@ "uname_release": "4.14.35-2047.541.1.el7uek.x86_64", "cindex": 96 }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.541.2.el7uek.x86_64", + "cindex": 96 + }, { "distrib": "ol", "version": "7", From 3a0a1a4c9a6460ca357fe53c23914369fbb23057 Mon Sep 17 00:00:00 2001 From: pducolin <45568537+pducolin@users.noreply.github.com> Date: Fri, 13 Sep 2024 11:16:43 +0200 Subject: [PATCH 037/195] [tasks][gotest] return relative path in get_go_module (#29324) --- tasks/gotest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasks/gotest.py b/tasks/gotest.py index 6e87554ef4c4b..b1c6b749fb122 100644 --- a/tasks/gotest.py +++ b/tasks/gotest.py @@ -741,7 +741,7 @@ def format_packages(ctx: Context, impacted_packages: set[str], build_tags: list[ modules_to_test = {} for package in packages: - module_path = get_go_module(package).replace("./", "") + module_path = get_go_module(package) # Check if the module is in the target list of the modules we want to test if module_path not in DEFAULT_MODULES or not DEFAULT_MODULES[module_path].condition(): @@ -814,7 +814,7 @@ def get_go_module(path): while path != '/': go_mod_path = os.path.join(path, 'go.mod') if os.path.isfile(go_mod_path): - return path + return os.path.relpath(path) path = os.path.dirname(path) raise Exception(f"No go.mod file found for package at {path}") From bd251aba6474487ee2e4af66dd3112ddaaf30f4c Mon Sep 17 00:00:00 2001 From: Sylvain Baubeau Date: Fri, 13 Sep 2024 12:12:23 +0200 Subject: [PATCH 038/195] [CWS] Do not return container ID for systemd cgroups (#29241) --- pkg/security/probe/field_handlers_ebpf.go | 11 +++++++++-- pkg/security/secl/containerutils/cgroup.go | 2 +- pkg/security/secl/containerutils/helpers.go | 2 +- pkg/security/secl/containerutils/types.go | 8 ++++++++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/pkg/security/probe/field_handlers_ebpf.go b/pkg/security/probe/field_handlers_ebpf.go index b9cb03e12cfc7..2285686cc1bca 100644 --- a/pkg/security/probe/field_handlers_ebpf.go +++ b/pkg/security/probe/field_handlers_ebpf.go @@ -178,7 +178,10 @@ func (fh *EBPFFieldHandlers) ResolveMountRootPath(ev *model.Event, e *model.Moun func (fh *EBPFFieldHandlers) ResolveContainerContext(ev *model.Event) (*model.ContainerContext, bool) { if ev.ContainerContext.ContainerID != "" && !ev.ContainerContext.Resolved { if containerContext, _ := fh.resolvers.CGroupResolver.GetWorkload(string(ev.ContainerContext.ContainerID)); containerContext != nil { - ev.ContainerContext = &containerContext.ContainerContext + if containerContext.CGroupFlags.IsContainer() { + ev.ContainerContext = &containerContext.ContainerContext + } + ev.ContainerContext.Resolved = true } } @@ -552,7 +555,11 @@ func (fh *EBPFFieldHandlers) ResolveCGroupManager(ev *model.Event, _ *model.CGro func (fh *EBPFFieldHandlers) ResolveContainerID(ev *model.Event, e *model.ContainerContext) string { if len(e.ContainerID) == 0 { if entry, _ := fh.ResolveProcessCacheEntry(ev); entry != nil { - e.ContainerID = containerutils.ContainerID(entry.ContainerID) + if entry.CGroup.CGroupFlags.IsContainer() { + e.ContainerID = containerutils.ContainerID(entry.ContainerID) + } else { + e.ContainerID = "" + } return string(e.ContainerID) } } diff --git a/pkg/security/secl/containerutils/cgroup.go b/pkg/security/secl/containerutils/cgroup.go index 734fc74438526..15a341057a0d1 100644 --- a/pkg/security/secl/containerutils/cgroup.go +++ b/pkg/security/secl/containerutils/cgroup.go @@ -67,7 +67,7 @@ func GetContainerFromCgroup(cgroup string) (string, CGroupFlags) { // GetCgroupFromContainer infers the container runtime from a cgroup name func GetCgroupFromContainer(id ContainerID, flags CGroupFlags) CGroupID { for runtimePrefix, runtimeFlag := range RuntimePrefixes { - if uint64(flags)&0b111 == uint64(runtimeFlag) { + if flags&CGroupManagerMask == CGroupFlags(runtimeFlag) { return CGroupID(runtimePrefix + string(id)) } } diff --git a/pkg/security/secl/containerutils/helpers.go b/pkg/security/secl/containerutils/helpers.go index ce2d8c7d3d24b..701e4f9cd1d9f 100644 --- a/pkg/security/secl/containerutils/helpers.go +++ b/pkg/security/secl/containerutils/helpers.go @@ -80,7 +80,7 @@ func FindContainerID(s string) (string, uint64) { // GetCGroupContext returns the cgroup ID and the sanitized container ID from a container id/flags tuple func GetCGroupContext(containerID ContainerID, cgroupFlags CGroupFlags) (CGroupID, ContainerID) { cgroupID := GetCgroupFromContainer(containerID, cgroupFlags) - if cgroupFlags&0b111 == 0 { + if !cgroupFlags.IsContainer() { containerID = "" } return CGroupID(cgroupID), ContainerID(containerID) diff --git a/pkg/security/secl/containerutils/types.go b/pkg/security/secl/containerutils/types.go index fbda75c7caebb..bc55b8539aec0 100644 --- a/pkg/security/secl/containerutils/types.go +++ b/pkg/security/secl/containerutils/types.go @@ -14,3 +14,11 @@ type CGroupID string // CGroupFlags represents the flags of a cgroup type CGroupFlags uint64 + +// CGroupManagerMask holds the bitmask for the cgroup manager +const CGroupManagerMask CGroupFlags = 0b111 + +// IsContainer returns whether a cgroup maps to a container +func (f CGroupFlags) IsContainer() bool { + return (f&CGroupManagerMask != 0) && ((f & CGroupManagerMask) != CGroupFlags(CGroupManagerSystemd)) +} From b6502beceb03e9355ef1b6957d4e29a15f83bd65 Mon Sep 17 00:00:00 2001 From: "agent-platform-auto-pr[bot]" <153269286+agent-platform-auto-pr[bot]@users.noreply.github.com> Date: Fri, 13 Sep 2024 13:29:24 +0000 Subject: [PATCH 039/195] [test-infra-definitions][automated] Bump test-infra-definitions to db795994276b67988db2101a341c44a7f2b14b4b (#29328) Co-authored-by: agent-platform-auto-pr[bot] <153269286+agent-platform-auto-pr[bot]@users.noreply.github.com> --- .gitlab/common/test_infra_version.yml | 2 +- test/new-e2e/go.mod | 2 +- test/new-e2e/go.sum | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitlab/common/test_infra_version.yml b/.gitlab/common/test_infra_version.yml index d095cd25f8513..69d5ff01362d4 100644 --- a/.gitlab/common/test_infra_version.yml +++ b/.gitlab/common/test_infra_version.yml @@ -4,4 +4,4 @@ variables: # and check the job creating the image to make sure you have the right SHA prefix TEST_INFRA_DEFINITIONS_BUILDIMAGES_SUFFIX: "" # Make sure to update test-infra-definitions version in go.mod as well - TEST_INFRA_DEFINITIONS_BUILDIMAGES: ce6a4aad9299 + TEST_INFRA_DEFINITIONS_BUILDIMAGES: db795994276b diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod index 0c155ffb07091..0bb9aacecd572 100644 --- a/test/new-e2e/go.mod +++ b/test/new-e2e/go.mod @@ -33,7 +33,7 @@ require ( // `TEST_INFRA_DEFINITIONS_BUILDIMAGES` matches the commit sha in the module version // Example: github.com/DataDog/test-infra-definitions v0.0.0-YYYYMMDDHHmmSS-0123456789AB // => TEST_INFRA_DEFINITIONS_BUILDIMAGES: 0123456789AB - github.com/DataDog/test-infra-definitions v0.0.0-20240910143843-ce6a4aad9299 + github.com/DataDog/test-infra-definitions v0.0.0-20240913075656-db795994276b github.com/aws/aws-sdk-go-v2 v1.30.5 github.com/aws/aws-sdk-go-v2/config v1.27.19 github.com/aws/aws-sdk-go-v2/service/ec2 v1.164.2 diff --git a/test/new-e2e/go.sum b/test/new-e2e/go.sum index df48578281988..70a940ac876db 100644 --- a/test/new-e2e/go.sum +++ b/test/new-e2e/go.sum @@ -16,8 +16,8 @@ github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/mmh3 v0.0.0-20200805151601-30884ca2197a h1:m9REhmyaWD5YJ0P53ygRHxKKo+KM+nw+zz0hEdKztMo= github.com/DataDog/mmh3 v0.0.0-20200805151601-30884ca2197a/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= -github.com/DataDog/test-infra-definitions v0.0.0-20240910143843-ce6a4aad9299 h1:lMzRshj0zEnNId74hiUsXSClnB0qKmQlC3VQ9kC6p+0= -github.com/DataDog/test-infra-definitions v0.0.0-20240910143843-ce6a4aad9299/go.mod h1:orHExiPWWT9f68UJZ92oIVX1OcTNlKvtbX7b6HM9e0Q= +github.com/DataDog/test-infra-definitions v0.0.0-20240913075656-db795994276b h1:LTzXbX1FT3uG52tA/x5BecSW1DUZQQA2/jnLyfl4nGY= +github.com/DataDog/test-infra-definitions v0.0.0-20240913075656-db795994276b/go.mod h1:AOMxahok2mhJI2Isl9hFQjG69HLVVDuytmFhDMZYx90= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/DataDog/zstd_0 v0.0.0-20210310093942-586c1286621f h1:5Vuo4niPKFkfwW55jV4vY0ih3VQ9RaQqeqY67fvRn8A= From 9c9f0ec2b35e066b78baa34fd30d9fc903d1dc5b Mon Sep 17 00:00:00 2001 From: Adam Karpowich Date: Fri, 13 Sep 2024 10:15:44 -0400 Subject: [PATCH 040/195] [NPM] Fix misattribution of PIDs in failed connections (#28500) --- pkg/config/setup/system_probe.go | 2 +- pkg/network/ebpf/c/co-re/tracer-fentry.c | 40 ++++--- pkg/network/ebpf/c/tracer.c | 97 ++++++++++------ pkg/network/ebpf/c/tracer/events.h | 1 + pkg/network/ebpf/c/tracer/maps.h | 4 +- pkg/network/ebpf/c/tracer/telemetry.h | 22 +++- pkg/network/ebpf/c/tracer/tracer.h | 16 ++- pkg/network/ebpf/kprobe_types.go | 2 + pkg/network/ebpf/kprobe_types_linux.go | 34 ++++-- pkg/network/ebpf/probes/probes.go | 4 +- pkg/network/tracer/connection/dump.go | 17 ++- pkg/network/tracer/connection/ebpf_tracer.go | 107 +++++++++++++++--- .../failure/failed_conn_consumer.go | 2 +- .../tracer/connection/failure/matching.go | 28 +++-- .../tracer/connection/fentry/manager.go | 2 +- .../tracer/connection/kprobe/config.go | 6 +- .../tracer/connection/kprobe/manager.go | 2 +- pkg/network/tracer/tracer.go | 2 - pkg/network/tracer/tracer_linux_test.go | 71 +++++++++++- pkg/network/tracer/tracer_test.go | 82 ++++++++++++-- 20 files changed, 421 insertions(+), 120 deletions(-) diff --git a/pkg/config/setup/system_probe.go b/pkg/config/setup/system_probe.go index 7ebde9fda3f96..eb15387624d4f 100644 --- a/pkg/config/setup/system_probe.go +++ b/pkg/config/setup/system_probe.go @@ -206,7 +206,7 @@ func InitSystemProbeConfig(cfg pkgconfigmodel.Config) { cfg.BindEnvAndSetDefault(join(spNS, "enable_conntrack_all_namespaces"), true, "DD_SYSTEM_PROBE_ENABLE_CONNTRACK_ALL_NAMESPACES") cfg.BindEnvAndSetDefault(join(netNS, "enable_protocol_classification"), true, "DD_ENABLE_PROTOCOL_CLASSIFICATION") cfg.BindEnvAndSetDefault(join(netNS, "enable_ringbuffers"), true, "DD_SYSTEM_PROBE_NETWORK_ENABLE_RINGBUFFERS") - cfg.BindEnvAndSetDefault(join(netNS, "enable_tcp_failed_connections"), false, "DD_SYSTEM_PROBE_NETWORK_ENABLE_FAILED_CONNS") + cfg.BindEnvAndSetDefault(join(netNS, "enable_tcp_failed_connections"), true, "DD_SYSTEM_PROBE_NETWORK_ENABLE_FAILED_CONNS") cfg.BindEnvAndSetDefault(join(netNS, "ignore_conntrack_init_failure"), false, "DD_SYSTEM_PROBE_NETWORK_IGNORE_CONNTRACK_INIT_FAILURE") cfg.BindEnvAndSetDefault(join(netNS, "conntrack_init_timeout"), 10*time.Second) cfg.BindEnvAndSetDefault(join(netNS, "allow_netlink_conntracker_fallback"), true) diff --git a/pkg/network/ebpf/c/co-re/tracer-fentry.c b/pkg/network/ebpf/c/co-re/tracer-fentry.c index a5242b70662f9..09259e948047d 100644 --- a/pkg/network/ebpf/c/co-re/tracer-fentry.c +++ b/pkg/network/ebpf/c/co-re/tracer-fentry.c @@ -232,9 +232,6 @@ int BPF_PROG(tcp_close, struct sock *sk, long timeout) { conn_tuple_t t = {}; u64 pid_tgid = bpf_get_current_pid_tgid(); - // Should actually delete something only if the connection never got established - bpf_map_delete_elem(&tcp_ongoing_connect_pid, &sk); - // Get network namespace id log_debug("fentry/tcp_close: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); if (!read_conn_tuple(&t, sk, pid_tgid, CONN_TYPE_TCP)) { @@ -242,6 +239,11 @@ int BPF_PROG(tcp_close, struct sock *sk, long timeout) { } log_debug("fentry/tcp_close: netns: %u, sport: %u, dport: %u", t.netns, t.sport, t.dport); + skp_conn_tuple_t skp_conn = {.sk = sk, .tup = t}; + skp_conn.tup.pid = 0; + + bpf_map_delete_elem(&tcp_ongoing_connect_pid, &skp_conn); + cleanup_conn(ctx, &t, sk); return 0; } @@ -450,7 +452,15 @@ int BPF_PROG(tcp_connect, struct sock *sk) { u64 pid_tgid = bpf_get_current_pid_tgid(); log_debug("fentry/tcp_connect: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); - bpf_map_update_with_telemetry(tcp_ongoing_connect_pid, &sk, &pid_tgid, BPF_ANY); + conn_tuple_t t = {}; + if (!read_conn_tuple(&t, sk, 0, CONN_TYPE_TCP)) { + increment_telemetry_count(tcp_connect_failed_tuple); + return 0; + } + + skp_conn_tuple_t skp_conn = {.sk = sk, .tup = t}; + pid_ts_t pid_ts = {.pid_tgid = pid_tgid, .timestamp = bpf_ktime_get_ns()}; + bpf_map_update_with_telemetry(tcp_ongoing_connect_pid, &skp_conn, &pid_ts, BPF_ANY); return 0; } @@ -458,19 +468,19 @@ int BPF_PROG(tcp_connect, struct sock *sk) { SEC("fentry/tcp_finish_connect") int BPF_PROG(tcp_finish_connect, struct sock *sk, struct sk_buff *skb, int rc) { RETURN_IF_NOT_IN_SYSPROBE_TASK("fentry/tcp_finish_connect"); - u64 *pid_tgid_p = bpf_map_lookup_elem(&tcp_ongoing_connect_pid, &sk); - if (!pid_tgid_p) { + conn_tuple_t t = {}; + if (!read_conn_tuple(&t, sk, 0, CONN_TYPE_TCP)) { + increment_telemetry_count(tcp_finish_connect_failed_tuple); return 0; } - - u64 pid_tgid = *pid_tgid_p; - bpf_map_delete_elem(&tcp_ongoing_connect_pid, &sk); - log_debug("fentry/tcp_finish_connect: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); - - conn_tuple_t t = {}; - if (!read_conn_tuple(&t, sk, pid_tgid, CONN_TYPE_TCP)) { + skp_conn_tuple_t skp_conn = {.sk = sk, .tup = t}; + pid_ts_t *pid_tgid_p = bpf_map_lookup_elem(&tcp_ongoing_connect_pid, &skp_conn); + if (!pid_tgid_p) { return 0; } + u64 pid_tgid = pid_tgid_p->pid_tgid; + t.pid = pid_tgid >> 32; + log_debug("fentry/tcp_finish_connect: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); handle_tcp_stats(&t, sk, TCP_ESTABLISHED); handle_message(&t, 0, 0, CONN_DIRECTION_OUTGOING, 0, 0, PACKET_COUNT_NONE, sk); @@ -501,6 +511,10 @@ int BPF_PROG(inet_csk_accept_exit, struct sock *_sk, int flags, int *err, bool k pb.netns = t.netns; pb.port = t.sport; add_port_bind(&pb, port_bindings); + + skp_conn_tuple_t skp_conn = {.sk = sk, .tup = t}; + pid_ts_t pid_ts = {.pid_tgid = pid_tgid, .timestamp = bpf_ktime_get_ns()}; + bpf_map_update_with_telemetry(tcp_ongoing_connect_pid, &skp_conn, &pid_ts, BPF_ANY); log_debug("fexit/inet_csk_accept: netns: %u, sport: %u, dport: %u", t.netns, t.sport, t.dport); return 0; } diff --git a/pkg/network/ebpf/c/tracer.c b/pkg/network/ebpf/c/tracer.c index ad7f5fc0ad048..7555758f40524 100644 --- a/pkg/network/ebpf/c/tracer.c +++ b/pkg/network/ebpf/c/tracer.c @@ -193,42 +193,42 @@ int BPF_BYPASSABLE_KRETPROBE(kretprobe__udp_sendpage, int sent) { SEC("kprobe/tcp_done") int BPF_BYPASSABLE_KPROBE(kprobe__tcp_done, struct sock *sk) { conn_tuple_t t = {}; - u64 pid_tgid = bpf_get_current_pid_tgid(); - __u64 *failed_conn_pid = NULL; + + if (!read_conn_tuple(&t, sk, 0, CONN_TYPE_TCP)) { + increment_telemetry_count(tcp_done_failed_tuple); + return 0; + } + log_debug("kprobe/tcp_done: netns: %u, sport: %u, dport: %u", t.netns, t.sport, t.dport); + skp_conn_tuple_t skp_conn = {.sk = sk, .tup = t}; if (!tcp_failed_connections_enabled()) { + bpf_map_delete_elem(&tcp_ongoing_connect_pid, &skp_conn); return 0; } int err = 0; bpf_probe_read_kernel_with_telemetry(&err, sizeof(err), (&sk->sk_err)); if (err == 0) { + bpf_map_delete_elem(&tcp_ongoing_connect_pid, &skp_conn); return 0; // no failure } if (err != TCP_CONN_FAILED_RESET && err != TCP_CONN_FAILED_TIMEOUT && err != TCP_CONN_FAILED_REFUSED) { log_debug("kprobe/tcp_done: unsupported error code: %d", err); increment_telemetry_count(unsupported_tcp_failures); + bpf_map_delete_elem(&tcp_ongoing_connect_pid, &skp_conn); return 0; } - log_debug("kprobe/tcp_done: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); - if (!read_conn_tuple(&t, sk, pid_tgid, CONN_TYPE_TCP)) { - return 0; - } - log_debug("kprobe/tcp_done: netns: %u, sport: %u, dport: %u", t.netns, t.sport, t.dport); - - // connection timeouts will have 0 pids as they are cleaned up by an idle process. - // get the pid from the ongoing failure map in this case, as it should have been set in connect(). - failed_conn_pid = bpf_map_lookup_elem(&tcp_ongoing_connect_pid, &sk); + // connection timeouts will have 0 pids as they are cleaned up by an idle process. + // resets can also have kernel pids are they are triggered by receiving an RST packet from the server + // get the pid from the ongoing failure map in this case, as it should have been set in connect(). else bail + pid_ts_t *failed_conn_pid = bpf_map_lookup_elem(&tcp_ongoing_connect_pid, &skp_conn); if (failed_conn_pid) { - if (*failed_conn_pid != pid_tgid) { - increment_telemetry_count(tcp_done_pid_mismatch); - } - bpf_probe_read_kernel_with_telemetry(&pid_tgid, sizeof(pid_tgid), failed_conn_pid); - t.pid = pid_tgid >> 32; - } - if (t.pid == 0) { + bpf_map_delete_elem(&tcp_ongoing_connect_pid, &skp_conn); + t.pid = failed_conn_pid->pid_tgid >> 32; + } else { + increment_telemetry_count(tcp_done_missing_pid); return 0; } @@ -238,13 +238,12 @@ int BPF_BYPASSABLE_KPROBE(kprobe__tcp_done, struct sock *sk) { __u64 timestamp = bpf_ktime_get_ns(); if (bpf_map_update_with_telemetry(conn_close_flushed, &t, ×tamp, BPF_NOEXIST, -EEXIST) == 0) { cleanup_conn(ctx, &t, sk); + flush_tcp_failure(ctx, &t, err); } else { bpf_map_delete_elem(&conn_close_flushed, &t); increment_telemetry_count(double_flush_attempts_done); } - flush_tcp_failure(ctx, &t, err); - return 0; } @@ -259,11 +258,6 @@ int BPF_BYPASSABLE_KPROBE(kprobe__tcp_close, struct sock *sk) { conn_tuple_t t = {}; u64 pid_tgid = bpf_get_current_pid_tgid(); - // increment telemetry for connections that were never established - if (bpf_map_delete_elem(&tcp_ongoing_connect_pid, &sk) == 0) { - increment_telemetry_count(tcp_failed_connect); - } - // Get network namespace id log_debug("kprobe/tcp_close: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); if (!read_conn_tuple(&t, sk, pid_tgid, CONN_TYPE_TCP)) { @@ -277,12 +271,28 @@ int BPF_BYPASSABLE_KPROBE(kprobe__tcp_close, struct sock *sk) { bpf_map_update_with_telemetry(tcp_close_args, &pid_tgid, &t, BPF_ANY); } + skp_conn_tuple_t skp_conn = {.sk = sk, .tup = t}; + skp_conn.tup.pid = 0; + + bpf_map_delete_elem(&tcp_ongoing_connect_pid, &skp_conn); + + if (!tcp_failed_connections_enabled()) { + cleanup_conn(ctx, &t, sk); + return 0; + } + // check if this connection was already flushed and ensure we don't flush again // upsert the timestamp to the map and delete if it already exists, flush connection otherwise // skip EEXIST errors for telemetry since it is an expected error __u64 timestamp = bpf_ktime_get_ns(); - if (!tcp_failed_connections_enabled() || (bpf_map_update_with_telemetry(conn_close_flushed, &t, ×tamp, BPF_NOEXIST, -EEXIST) == 0)) { + if (bpf_map_update_with_telemetry(conn_close_flushed, &t, ×tamp, BPF_NOEXIST, -EEXIST) == 0) { cleanup_conn(ctx, &t, sk); + int err = 0; + bpf_probe_read_kernel_with_telemetry(&err, sizeof(err), (&sk->sk_err)); + if (err == TCP_CONN_FAILED_RESET || err == TCP_CONN_FAILED_TIMEOUT || err == TCP_CONN_FAILED_REFUSED) { + increment_telemetry_count(tcp_close_target_failures); + flush_tcp_failure(ctx, &t, err); + } } else { bpf_map_delete_elem(&conn_close_flushed, &t); increment_telemetry_count(double_flush_attempts_close); @@ -942,27 +952,36 @@ int BPF_BYPASSABLE_KPROBE(kprobe__tcp_connect, struct sock *skp) { u64 pid_tgid = bpf_get_current_pid_tgid(); log_debug("kprobe/tcp_connect: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); - bpf_map_update_with_telemetry(tcp_ongoing_connect_pid, &skp, &pid_tgid, BPF_ANY); + conn_tuple_t t = {}; + if (!read_conn_tuple(&t, skp, 0, CONN_TYPE_TCP)) { + increment_telemetry_count(tcp_connect_failed_tuple); + return 0; + } + + skp_conn_tuple_t skp_conn = {.sk = skp, .tup = t}; + pid_ts_t pid_ts = {.pid_tgid = pid_tgid, .timestamp = bpf_ktime_get_ns()}; + bpf_map_update_with_telemetry(tcp_ongoing_connect_pid, &skp_conn, &pid_ts, BPF_ANY); return 0; } SEC("kprobe/tcp_finish_connect") int BPF_BYPASSABLE_KPROBE(kprobe__tcp_finish_connect, struct sock *skp) { - u64 *pid_tgid_p = bpf_map_lookup_elem(&tcp_ongoing_connect_pid, &skp); + conn_tuple_t t = {}; + if (!read_conn_tuple(&t, skp, 0, CONN_TYPE_TCP)) { + increment_telemetry_count(tcp_finish_connect_failed_tuple); + return 0; + } + skp_conn_tuple_t skp_conn = {.sk = skp, .tup = t}; + pid_ts_t *pid_tgid_p = bpf_map_lookup_elem(&tcp_ongoing_connect_pid, &skp_conn); if (!pid_tgid_p) { return 0; } - u64 pid_tgid = *pid_tgid_p; - bpf_map_delete_elem(&tcp_ongoing_connect_pid, &skp); + u64 pid_tgid = pid_tgid_p->pid_tgid; + t.pid = pid_tgid >> 32; log_debug("kprobe/tcp_finish_connect: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); - conn_tuple_t t = {}; - if (!read_conn_tuple(&t, skp, pid_tgid, CONN_TYPE_TCP)) { - return 0; - } - handle_tcp_stats(&t, skp, TCP_ESTABLISHED); handle_message(&t, 0, 0, CONN_DIRECTION_OUTGOING, 0, 0, PACKET_COUNT_NONE, skp); @@ -984,6 +1003,8 @@ int BPF_BYPASSABLE_KRETPROBE(kretprobe__inet_csk_accept, struct sock *sk) { if (!read_conn_tuple(&t, sk, pid_tgid, CONN_TYPE_TCP)) { return 0; } + log_debug("kretprobe/inet_csk_accept: netns: %u, sport: %u, dport: %u", t.netns, t.sport, t.dport); + handle_tcp_stats(&t, sk, TCP_ESTABLISHED); handle_message(&t, 0, 0, CONN_DIRECTION_INCOMING, 0, 0, PACKET_COUNT_NONE, sk); @@ -992,7 +1013,11 @@ int BPF_BYPASSABLE_KRETPROBE(kretprobe__inet_csk_accept, struct sock *sk) { pb.port = t.sport; add_port_bind(&pb, port_bindings); - log_debug("kretprobe/inet_csk_accept: netns: %u, sport: %u, dport: %u", t.netns, t.sport, t.dport); + skp_conn_tuple_t skp_conn = {.sk = sk, .tup = t}; + skp_conn.tup.pid = 0; + pid_ts_t pid_ts = {.pid_tgid = pid_tgid, .timestamp = bpf_ktime_get_ns()}; + bpf_map_update_with_telemetry(tcp_ongoing_connect_pid, &skp_conn, &pid_ts, BPF_ANY); + return 0; } diff --git a/pkg/network/ebpf/c/tracer/events.h b/pkg/network/ebpf/c/tracer/events.h index 051e5821c3c00..5e0650faa862f 100644 --- a/pkg/network/ebpf/c/tracer/events.h +++ b/pkg/network/ebpf/c/tracer/events.h @@ -151,6 +151,7 @@ static __always_inline void flush_tcp_failure(void *ctx, conn_tuple_t *tup, int u32 cpu = bpf_get_smp_processor_id(); bpf_perf_event_output(ctx, &conn_fail_event, cpu, &failure, sizeof(conn_failed_t)); } + increment_telemetry_count(tcp_failed_connect); } static __always_inline void flush_conn_close_if_full(void *ctx) { diff --git a/pkg/network/ebpf/c/tracer/maps.h b/pkg/network/ebpf/c/tracer/maps.h index bf00f93b9e7a3..f02066fe4b4dc 100644 --- a/pkg/network/ebpf/c/tracer/maps.h +++ b/pkg/network/ebpf/c/tracer/maps.h @@ -23,8 +23,8 @@ BPF_HASH_MAP(tcp_stats, conn_tuple_t, tcp_stats_t, 0) */ BPF_HASH_MAP(tcp_retransmits, conn_tuple_t, __u32, 0) -/* Will hold the PIDs initiating TCP connections */ -BPF_HASH_MAP(tcp_ongoing_connect_pid, struct sock *, __u64, 1024) +/* Will hold the PIDs initiating TCP connections keyed by socket + tuple. PIDs have a timestamp attached so they can age out */ +BPF_HASH_MAP(tcp_ongoing_connect_pid, skp_conn_tuple_t, pid_ts_t, 0) /* Will hold a flag to indicate that closed connections have already been flushed */ BPF_HASH_MAP(conn_close_flushed, conn_tuple_t, __u64, 8192) diff --git a/pkg/network/ebpf/c/tracer/telemetry.h b/pkg/network/ebpf/c/tracer/telemetry.h index 761088be75788..a6067f1fae501 100644 --- a/pkg/network/ebpf/c/tracer/telemetry.h +++ b/pkg/network/ebpf/c/tracer/telemetry.h @@ -24,7 +24,11 @@ enum telemetry_counter { double_flush_attempts_close, double_flush_attempts_done, unsupported_tcp_failures, - tcp_done_pid_mismatch, + tcp_done_missing_pid, + tcp_connect_failed_tuple, + tcp_done_failed_tuple, + tcp_finish_connect_failed_tuple, + tcp_close_target_failures, }; static __always_inline void increment_telemetry_count(enum telemetry_counter counter_name) { @@ -63,8 +67,20 @@ static __always_inline void increment_telemetry_count(enum telemetry_counter cou case unsupported_tcp_failures: __sync_fetch_and_add(&val->unsupported_tcp_failures, 1); break; - case tcp_done_pid_mismatch: - __sync_fetch_and_add(&val->tcp_done_pid_mismatch, 1); + case tcp_done_missing_pid: + __sync_fetch_and_add(&val->tcp_done_missing_pid, 1); + break; + case tcp_connect_failed_tuple: + __sync_fetch_and_add(&val->tcp_connect_failed_tuple, 1); + break; + case tcp_done_failed_tuple: + __sync_fetch_and_add(&val->tcp_done_failed_tuple, 1); + break; + case tcp_finish_connect_failed_tuple: + __sync_fetch_and_add(&val->tcp_finish_connect_failed_tuple, 1); + break; + case tcp_close_target_failures: + __sync_fetch_and_add(&val->tcp_close_target_failures, 1); break; } } diff --git a/pkg/network/ebpf/c/tracer/tracer.h b/pkg/network/ebpf/c/tracer/tracer.h index 018446b375397..cb2a96ff7a66c 100644 --- a/pkg/network/ebpf/c/tracer/tracer.h +++ b/pkg/network/ebpf/c/tracer/tracer.h @@ -114,7 +114,11 @@ typedef struct { __u64 double_flush_attempts_close; __u64 double_flush_attempts_done; __u64 unsupported_tcp_failures; - __u64 tcp_done_pid_mismatch; + __u64 tcp_done_missing_pid; + __u64 tcp_connect_failed_tuple; + __u64 tcp_done_failed_tuple; + __u64 tcp_finish_connect_failed_tuple; + __u64 tcp_close_target_failures; } telemetry_t; typedef struct { @@ -147,4 +151,14 @@ typedef struct { }; } ip_make_skb_args_t; +typedef struct { + struct sock *sk; + conn_tuple_t tup; +} skp_conn_tuple_t; + +typedef struct { + __u64 pid_tgid; + __u64 timestamp; +} pid_ts_t; + #endif diff --git a/pkg/network/ebpf/kprobe_types.go b/pkg/network/ebpf/kprobe_types.go index 4bc58cdfb864f..6745cdc0b7fee 100644 --- a/pkg/network/ebpf/kprobe_types.go +++ b/pkg/network/ebpf/kprobe_types.go @@ -21,6 +21,8 @@ type TCPStats C.tcp_stats_t type ConnStats C.conn_stats_ts_t type Conn C.conn_t type FailedConn C.conn_failed_t +type SkpConn C.skp_conn_tuple_t +type PidTs C.pid_ts_t type Batch C.batch_t type Telemetry C.telemetry_t type PortBinding C.port_binding_t diff --git a/pkg/network/ebpf/kprobe_types_linux.go b/pkg/network/ebpf/kprobe_types_linux.go index e081d14f28456..58cee5d1115aa 100644 --- a/pkg/network/ebpf/kprobe_types_linux.go +++ b/pkg/network/ebpf/kprobe_types_linux.go @@ -44,6 +44,14 @@ type FailedConn struct { Reason uint32 Pad_cgo_0 [4]byte } +type SkpConn struct { + Sk uint64 + Tup ConnTuple +} +type PidTs struct { + Tgid uint64 + Timestamp uint64 +} type Batch struct { C0 Conn C1 Conn @@ -55,17 +63,21 @@ type Batch struct { Pad_cgo_0 [2]byte } type Telemetry struct { - Tcp_failed_connect uint64 - Tcp_sent_miscounts uint64 - Unbatched_tcp_close uint64 - Unbatched_udp_close uint64 - Udp_sends_processed uint64 - Udp_sends_missed uint64 - Udp_dropped_conns uint64 - Double_flush_attempts_close uint64 - Double_flush_attempts_done uint64 - Unsupported_tcp_failures uint64 - Tcp_done_pid_mismatch uint64 + Tcp_failed_connect uint64 + Tcp_sent_miscounts uint64 + Unbatched_tcp_close uint64 + Unbatched_udp_close uint64 + Udp_sends_processed uint64 + Udp_sends_missed uint64 + Udp_dropped_conns uint64 + Double_flush_attempts_close uint64 + Double_flush_attempts_done uint64 + Unsupported_tcp_failures uint64 + Tcp_done_missing_pid uint64 + Tcp_connect_failed_tuple uint64 + Tcp_done_failed_tuple uint64 + Tcp_finish_connect_failed_tuple uint64 + Tcp_close_target_failures uint64 } type PortBinding struct { Netns uint32 diff --git a/pkg/network/ebpf/probes/probes.go b/pkg/network/ebpf/probes/probes.go index 1d455d9c6e364..8d8cfa5247542 100644 --- a/pkg/network/ebpf/probes/probes.go +++ b/pkg/network/ebpf/probes/probes.go @@ -192,8 +192,8 @@ const ( TCPStatsMap BPFMapName = "tcp_stats" // TCPRetransmitsMap is the map storing TCP retransmits TCPRetransmitsMap BPFMapName = "tcp_retransmits" - // TCPConnectSockPidMap is the map storing the PIDs of ongoing TCP connections - TCPConnectSockPidMap BPFMapName = "tcp_ongoing_connect_pid" + // TCPOngoingConnectPid is the map storing ongoing TCP connection PIDs by (socket + tuple) + TCPOngoingConnectPid BPFMapName = "tcp_ongoing_connect_pid" // ConnCloseFlushed is the map storing closed connections that were already flushed ConnCloseFlushed BPFMapName = "conn_close_flushed" // ConnCloseEventMap is the map storing connection close events diff --git a/pkg/network/tracer/connection/dump.go b/pkg/network/tracer/connection/dump.go index 101ab0d084cb6..a9a9b1aff1337 100644 --- a/pkg/network/tracer/connection/dump.go +++ b/pkg/network/tracer/connection/dump.go @@ -23,7 +23,7 @@ import ( ) -func dumpMapsHandler(w io.Writer, manager *manager.Manager, mapName string, currentMap *ebpf.Map) { +func dumpMapsHandler(w io.Writer, _ *manager.Manager, mapName string, currentMap *ebpf.Map) { switch mapName { case "connectsock_ipv6": // maps/connectsock_ipv6 (BPF_MAP_TYPE_HASH), key C.__u64, value uintptr // C.void* @@ -89,6 +89,21 @@ func dumpMapsHandler(w io.Writer, manager *manager.Manager, mapName string, curr spew.Fdump(w, key, value) } + case probes.TCPOngoingConnectPid: // maps/tcp_ongoing_connect_pid (BPF_MAP_TYPE_HASH), key SkpConnTuple, value u64 + io.WriteString(w, "Map: '"+mapName+"', key: 'SkpConnTuple', value: 'C.u64'\n") + io.WriteString(w, "This map is used to store the PID of the process that initiated the connection\n") + totalSize := 0 + info, _ := currentMap.Info() + spew.Fdump(w, info) + iter := currentMap.Iterate() + var key ddebpf.SkpConn + var value ddebpf.PidTs + for iter.Next(unsafe.Pointer(&key), unsafe.Pointer(&value)) { + totalSize++ + spew.Fdump(w, key.Tup, value) + } + io.WriteString(w, "Total entries: "+spew.Sdump(totalSize)) + case probes.ConnCloseBatchMap: // maps/conn_close_batch (BPF_MAP_TYPE_HASH), key C.__u32, value batch io.WriteString(w, "Map: '"+mapName+"', key: 'C.__u32', value: 'batch'\n") iter := currentMap.Iterate() diff --git a/pkg/network/tracer/connection/ebpf_tracer.go b/pkg/network/tracer/connection/ebpf_tracer.go index e46d8dd242161..4792e6f2aca5a 100644 --- a/pkg/network/tracer/connection/ebpf_tracer.go +++ b/pkg/network/tracer/connection/ebpf_tracer.go @@ -46,42 +46,53 @@ const ( connTracerModuleName = "network_tracer__ebpf" ) +var tcpOngoingConnectMapTTL = 30 * time.Minute.Nanoseconds() + var EbpfTracerTelemetry = struct { connections telemetry.Gauge tcpFailedConnects *prometheus.Desc - TcpSentMiscounts *prometheus.Desc + TcpSentMiscounts *prometheus.Desc unbatchedTcpClose *prometheus.Desc unbatchedUdpClose *prometheus.Desc UdpSendsProcessed *prometheus.Desc - UdpSendsMissed *prometheus.Desc - UdpDroppedConns *prometheus.Desc + UdpSendsMissed *prometheus.Desc + UdpDroppedConns *prometheus.Desc // doubleFlushAttemptsClose is a counter measuring the number of attempts to flush a closed connection twice from tcp_close doubleFlushAttemptsClose *prometheus.Desc // doubleFlushAttemptsDone is a counter measuring the number of attempts to flush a closed connection twice from tcp_done doubleFlushAttemptsDone *prometheus.Desc // unsupportedTcpFailures is a counter measuring the number of attempts to flush a TCP failure that is not supported unsupportedTcpFailures *prometheus.Desc - // tcpDonePidMismatch is a counter measuring the number of TCP connections with a PID mismatch between tcp_connect and tcp_done - tcpDonePidMismatch *prometheus.Desc - PidCollisions *telemetry.StatCounterWrapper - iterationDups telemetry.Counter - iterationAborts telemetry.Counter + // tcpDoneMissingPid is a counter measuring the number of TCP connections with a PID mismatch between tcp_connect and tcp_done + tcpDoneMissingPid *prometheus.Desc + tcpConnectFailedTuple *prometheus.Desc + tcpDoneFailedTuple *prometheus.Desc + tcpFinishConnectFailedTuple *prometheus.Desc + tcpCloseTargetFailures *prometheus.Desc + ongoingConnectPidCleaned telemetry.Counter + PidCollisions *telemetry.StatCounterWrapper + iterationDups telemetry.Counter + iterationAborts telemetry.Counter lastTcpFailedConnects *atomic.Int64 - LastTcpSentMiscounts *atomic.Int64 + LastTcpSentMiscounts *atomic.Int64 lastUnbatchedTcpClose *atomic.Int64 lastUnbatchedUdpClose *atomic.Int64 lastUdpSendsProcessed *atomic.Int64 - lastUdpSendsMissed *atomic.Int64 - lastUdpDroppedConns *atomic.Int64 + lastUdpSendsMissed *atomic.Int64 + lastUdpDroppedConns *atomic.Int64 // lastDoubleFlushAttemptsClose is a counter measuring the diff between the last two values of doubleFlushAttemptsClose lastDoubleFlushAttemptsClose *atomic.Int64 // lastDoubleFlushAttemptsDone is a counter measuring the diff between the last two values of doubleFlushAttemptsDone lastDoubleFlushAttemptsDone *atomic.Int64 // lastUnsupportedTcpFailures is a counter measuring the diff between the last two values of unsupportedTcpFailures lastUnsupportedTcpFailures *atomic.Int64 - // lastTcpDonePidMismatch is a counter measuring the diff between the last two values of tcpDonePidMismatch - lastTcpDonePidMismatch *atomic.Int64 + // lastTcpDoneMissingPid is a counter measuring the diff between the last two values of tcpDoneMissingPid + lastTcpDoneMissingPid *atomic.Int64 + lastTcpConnectFailedTuple *atomic.Int64 + lastTcpDoneFailedTuple *atomic.Int64 + lastTcpFinishConnectFailedTuple *atomic.Int64 + lastTcpCloseTargetFailures *atomic.Int64 }{ telemetry.NewGauge(connTracerModuleName, "connections", []string{"ip_proto", "family"}, "Gauge measuring the number of active connections in the EBPF map"), prometheus.NewDesc(connTracerModuleName+"__tcp_failed_connects", "Counter measuring the number of failed TCP connections in the EBPF map", nil, nil), @@ -94,7 +105,12 @@ var EbpfTracerTelemetry = struct { prometheus.NewDesc(connTracerModuleName+"__double_flush_attempts_close", "Counter measuring the number of attempts to flush a closed connection twice from tcp_close", nil, nil), prometheus.NewDesc(connTracerModuleName+"__double_flush_attempts_done", "Counter measuring the number of attempts to flush a closed connection twice from tcp_done", nil, nil), prometheus.NewDesc(connTracerModuleName+"__unsupported_tcp_failures", "Counter measuring the number of attempts to flush a TCP failure that is not supported", nil, nil), - prometheus.NewDesc(connTracerModuleName+"__tcp_done_pid_mismatch", "Counter measuring the number of TCP connections with a PID mismatch between tcp_connect and tcp_done", nil, nil), + prometheus.NewDesc(connTracerModuleName+"__tcp_done_missing_pid", "Counter measuring the number of TCP connections with a missing PID in tcp_done", nil, nil), + prometheus.NewDesc(connTracerModuleName+"__tcp_connect_failed_tuple", "Counter measuring the number of failed TCP connections due to tuple collisions", nil, nil), + prometheus.NewDesc(connTracerModuleName+"__tcp_done_failed_tuple", "Counter measuring the number of failed TCP connections due to tuple collisions", nil, nil), + prometheus.NewDesc(connTracerModuleName+"__tcp_finish_connect_failed_tuple", "Counter measuring the number of failed TCP connections due to tuple collisions", nil, nil), + prometheus.NewDesc(connTracerModuleName+"__tcp_close_target_failures", "Counter measuring the number of failed TCP connections in tcp_close", nil, nil), + telemetry.NewCounter(connTracerModuleName, "ongoing_connect_pid_cleaned", []string{}, "Counter measuring the number of tcp_ongoing_connect_pid entries cleaned in userspace"), telemetry.NewStatCounterWrapper(connTracerModuleName, "pid_collisions", []string{}, "Counter measuring number of process collisions"), telemetry.NewCounter(connTracerModuleName, "iteration_dups", []string{}, "Counter measuring the number of connections iterated more than once"), telemetry.NewCounter(connTracerModuleName, "iteration_aborts", []string{}, "Counter measuring how many times ebpf iteration of connection map was aborted"), @@ -109,6 +125,10 @@ var EbpfTracerTelemetry = struct { atomic.NewInt64(0), atomic.NewInt64(0), atomic.NewInt64(0), + atomic.NewInt64(0), + atomic.NewInt64(0), + atomic.NewInt64(0), + atomic.NewInt64(0), } type ebpfTracer struct { @@ -124,6 +144,9 @@ type ebpfTracer struct { // tcp failure events failedConnConsumer *failure.TCPFailedConnConsumer + // periodically clean the ongoing connection pid map + ongoingConnectCleaner *ddebpf.MapCleaner[netebpf.SkpConn, netebpf.PidTs] + removeTuple *netebpf.ConnTuple closeTracer func() @@ -161,6 +184,7 @@ func newEbpfTracer(config *config.Config, _ telemetryComponent.Component) (Trace probes.UDPPortBindingsMap: {MaxEntries: config.MaxTrackedConnections, EditorFlag: manager.EditMaxEntries}, probes.ConnectionProtocolMap: {MaxEntries: config.MaxTrackedConnections, EditorFlag: manager.EditMaxEntries}, probes.ConnectionTupleToSocketSKBConnMap: {MaxEntries: config.MaxTrackedConnections, EditorFlag: manager.EditMaxEntries}, + probes.TCPOngoingConnectPid: {MaxEntries: config.MaxTrackedConnections, EditorFlag: manager.EditMaxEntries}, }, ConstantEditors: []manager.ConstantEditor{ boolConst("tcpv6_enabled", config.CollectTCPv6Conns), @@ -244,6 +268,8 @@ func newEbpfTracer(config *config.Config, _ telemetryComponent.Component) (Trace ch: newCookieHasher(), } + tr.setupMapCleaner(m) + tr.conns, err = maps.GetMap[netebpf.ConnTuple, netebpf.ConnStats](m, probes.ConnMap) if err != nil { tr.Stop() @@ -329,6 +355,7 @@ func (t *ebpfTracer) Stop() { _ = t.m.Stop(manager.CleanAll) t.closeConsumer.Stop() t.failedConnConsumer.Stop() + t.ongoingConnectCleaner.Stop() if t.closeTracer != nil { t.closeTracer() } @@ -501,7 +528,11 @@ func (t *ebpfTracer) Describe(ch chan<- *prometheus.Desc) { ch <- EbpfTracerTelemetry.doubleFlushAttemptsClose ch <- EbpfTracerTelemetry.doubleFlushAttemptsDone ch <- EbpfTracerTelemetry.unsupportedTcpFailures - ch <- EbpfTracerTelemetry.tcpDonePidMismatch + ch <- EbpfTracerTelemetry.tcpDoneMissingPid + ch <- EbpfTracerTelemetry.tcpConnectFailedTuple + ch <- EbpfTracerTelemetry.tcpDoneFailedTuple + ch <- EbpfTracerTelemetry.tcpFinishConnectFailedTuple + ch <- EbpfTracerTelemetry.tcpCloseTargetFailures } // Collect returns the current state of all metrics of the collector @@ -550,10 +581,25 @@ func (t *ebpfTracer) Collect(ch chan<- prometheus.Metric) { EbpfTracerTelemetry.lastUnsupportedTcpFailures.Store(int64(ebpfTelemetry.Unsupported_tcp_failures)) ch <- prometheus.MustNewConstMetric(EbpfTracerTelemetry.unsupportedTcpFailures, prometheus.CounterValue, float64(delta)) - delta = int64(ebpfTelemetry.Tcp_done_pid_mismatch) - EbpfTracerTelemetry.lastTcpDonePidMismatch.Load() - EbpfTracerTelemetry.lastTcpDonePidMismatch.Store(int64(ebpfTelemetry.Tcp_done_pid_mismatch)) - ch <- prometheus.MustNewConstMetric(EbpfTracerTelemetry.tcpDonePidMismatch, prometheus.CounterValue, float64(delta)) + delta = int64(ebpfTelemetry.Tcp_done_missing_pid) - EbpfTracerTelemetry.lastTcpDoneMissingPid.Load() + EbpfTracerTelemetry.lastTcpDoneMissingPid.Store(int64(ebpfTelemetry.Tcp_done_missing_pid)) + ch <- prometheus.MustNewConstMetric(EbpfTracerTelemetry.tcpDoneMissingPid, prometheus.CounterValue, float64(delta)) + + delta = int64(ebpfTelemetry.Tcp_connect_failed_tuple) - EbpfTracerTelemetry.lastTcpConnectFailedTuple.Load() + EbpfTracerTelemetry.lastTcpConnectFailedTuple.Store(int64(ebpfTelemetry.Tcp_connect_failed_tuple)) + ch <- prometheus.MustNewConstMetric(EbpfTracerTelemetry.tcpConnectFailedTuple, prometheus.CounterValue, float64(delta)) + + delta = int64(ebpfTelemetry.Tcp_done_failed_tuple) - EbpfTracerTelemetry.lastTcpDoneFailedTuple.Load() + EbpfTracerTelemetry.lastTcpDoneFailedTuple.Store(int64(ebpfTelemetry.Tcp_done_failed_tuple)) + ch <- prometheus.MustNewConstMetric(EbpfTracerTelemetry.tcpDoneFailedTuple, prometheus.CounterValue, float64(delta)) + delta = int64(ebpfTelemetry.Tcp_finish_connect_failed_tuple) - EbpfTracerTelemetry.lastTcpFinishConnectFailedTuple.Load() + EbpfTracerTelemetry.lastTcpFinishConnectFailedTuple.Store(int64(ebpfTelemetry.Tcp_finish_connect_failed_tuple)) + ch <- prometheus.MustNewConstMetric(EbpfTracerTelemetry.tcpFinishConnectFailedTuple, prometheus.CounterValue, float64(delta)) + + delta = int64(ebpfTelemetry.Tcp_close_target_failures) - EbpfTracerTelemetry.lastTcpCloseTargetFailures.Load() + EbpfTracerTelemetry.lastTcpCloseTargetFailures.Store(int64(ebpfTelemetry.Tcp_close_target_failures)) + ch <- prometheus.MustNewConstMetric(EbpfTracerTelemetry.tcpCloseTargetFailures, prometheus.CounterValue, float64(delta)) } // DumpMaps (for debugging purpose) returns all maps content by default or selected maps from maps parameter. @@ -645,6 +691,31 @@ func (t *ebpfTracer) getTCPStats(stats *netebpf.TCPStats, tuple *netebpf.ConnTup return t.tcpStats.Lookup(tuple, stats) == nil } +// setupMapCleaner sets up a map cleaner for the tcp_ongoing_connect_pid map +func (t *ebpfTracer) setupMapCleaner(m *manager.Manager) { + tcpOngoingConnectPidMap, _, err := m.GetMap(probes.TCPOngoingConnectPid) + if err != nil { + log.Errorf("error getting %v map: %s", probes.TCPOngoingConnectPid, err) + return + } + + tcpOngoingConnectPidCleaner, err := ddebpf.NewMapCleaner[netebpf.SkpConn, netebpf.PidTs](tcpOngoingConnectPidMap, 1024) + if err != nil { + log.Errorf("error creating map cleaner: %s", err) + return + } + tcpOngoingConnectPidCleaner.Clean(time.Minute*5, nil, nil, func(now int64, _ netebpf.SkpConn, val netebpf.PidTs) bool { + ts := int64(val.Timestamp) + expired := ts > 0 && now-ts > tcpOngoingConnectMapTTL + if expired { + EbpfTracerTelemetry.ongoingConnectPidCleaned.Inc() + } + return expired + }) + + t.ongoingConnectCleaner = tcpOngoingConnectPidCleaner +} + func populateConnStats(stats *network.ConnectionStats, t *netebpf.ConnTuple, s *netebpf.ConnStats, ch *cookieHasher) { *stats = network.ConnectionStats{ Pid: t.Pid, diff --git a/pkg/network/tracer/connection/failure/failed_conn_consumer.go b/pkg/network/tracer/connection/failure/failed_conn_consumer.go index b82dbd5afc76b..4df1a90f29705 100644 --- a/pkg/network/tracer/connection/failure/failed_conn_consumer.go +++ b/pkg/network/tracer/connection/failure/failed_conn_consumer.go @@ -57,7 +57,7 @@ func (c *TCPFailedConnConsumer) Stop() { c.once.Do(func() { close(c.closed) }) - c.FailedConns.mapCleaner.Stop() + c.FailedConns.connCloseFlushedCleaner.Stop() } func (c *TCPFailedConnConsumer) extractConn(data []byte) { diff --git a/pkg/network/tracer/connection/failure/matching.go b/pkg/network/tracer/connection/failure/matching.go index d02f4ddc0ebbb..4ad1c8ff31c1d 100644 --- a/pkg/network/tracer/connection/failure/matching.go +++ b/pkg/network/tracer/connection/failure/matching.go @@ -26,18 +26,20 @@ import ( ) var ( - telemetryModuleName = "network_tracer__tcp_failure" - mapTTL = 10 * time.Millisecond.Nanoseconds() + telemetryModuleName = "network_tracer__tcp_failure" + connClosedFlushMapTTL = 10 * time.Millisecond.Nanoseconds() ) var failureTelemetry = struct { - failedConnMatches telemetry.Counter - failedConnOrphans telemetry.Counter - failedConnsDropped telemetry.Counter + failedConnMatches telemetry.Counter + failedConnOrphans telemetry.Counter + failedConnsDropped telemetry.Counter + closedConnFlushedCleaned telemetry.Counter }{ telemetry.NewCounter(telemetryModuleName, "matches", []string{"type"}, "Counter measuring the number of successful matches of failed connections with closed connections"), telemetry.NewCounter(telemetryModuleName, "orphans", []string{}, "Counter measuring the number of orphans after associating failed connections with a closed connection"), telemetry.NewCounter(telemetryModuleName, "dropped", []string{}, "Counter measuring the number of dropped failed connections"), + telemetry.NewCounter(telemetryModuleName, "closed_conn_flushed_cleaned", []string{}, "Counter measuring the number of conn_close_flushed entries cleaned in userspace"), } // FailedConnStats is a wrapper to help document the purpose of the underlying map @@ -58,10 +60,10 @@ type FailedConnMap map[ebpf.ConnTuple]*FailedConnStats // FailedConns is a struct to hold failed connections type FailedConns struct { - FailedConnMap map[ebpf.ConnTuple]*FailedConnStats - maxFailuresBuffered uint32 - failureTuple *ebpf.ConnTuple - mapCleaner *ddebpf.MapCleaner[ebpf.ConnTuple, int64] + FailedConnMap map[ebpf.ConnTuple]*FailedConnStats + maxFailuresBuffered uint32 + failureTuple *ebpf.ConnTuple + connCloseFlushedCleaner *ddebpf.MapCleaner[ebpf.ConnTuple, int64] sync.Mutex } @@ -159,8 +161,12 @@ func (fc *FailedConns) setupMapCleaner(m *manager.Manager) { } mapCleaner.Clean(time.Second*1, nil, nil, func(now int64, _ ebpf.ConnTuple, val int64) bool { - return val > 0 && now-val > mapTTL + expired := val > 0 && now-val > connClosedFlushMapTTL + if expired { + failureTelemetry.closedConnFlushedCleaned.Inc() + } + return expired }) - fc.mapCleaner = mapCleaner + fc.connCloseFlushedCleaner = mapCleaner } diff --git a/pkg/network/tracer/connection/fentry/manager.go b/pkg/network/tracer/connection/fentry/manager.go index 5bf409712b057..29cb5ac920bfe 100644 --- a/pkg/network/tracer/connection/fentry/manager.go +++ b/pkg/network/tracer/connection/fentry/manager.go @@ -20,7 +20,7 @@ func initManager(mgr *ddebpf.Manager, connCloseEventHandler ddebpf.EventHandler, mgr.Maps = []*manager.Map{ {Name: probes.ConnMap}, {Name: probes.TCPStatsMap}, - {Name: probes.TCPConnectSockPidMap}, + {Name: probes.TCPOngoingConnectPid}, {Name: probes.ConnCloseFlushed}, {Name: probes.ConnCloseBatchMap}, {Name: "udp_recv_sock"}, diff --git a/pkg/network/tracer/connection/kprobe/config.go b/pkg/network/tracer/connection/kprobe/config.go index 4f119bdbf7bec..e86745416eebe 100644 --- a/pkg/network/tracer/connection/kprobe/config.go +++ b/pkg/network/tracer/connection/kprobe/config.go @@ -59,10 +59,8 @@ func enabledProbes(c *config.Config, runtimeTracer, coreTracer bool) (map[probes enableProbe(enabled, probes.TCPClose) enableProbe(enabled, probes.TCPCloseFlushReturn) enableProbe(enabled, probes.TCPConnect) - if c.FailedConnectionsSupported() && (runtimeTracer || coreTracer) { - enableProbe(enabled, probes.TCPDone) - enableProbe(enabled, probes.TCPDoneFlushReturn) - } + enableProbe(enabled, probes.TCPDone) + enableProbe(enabled, probes.TCPDoneFlushReturn) enableProbe(enabled, probes.TCPFinishConnect) enableProbe(enabled, probes.InetCskAcceptReturn) enableProbe(enabled, probes.InetCskListenStop) diff --git a/pkg/network/tracer/connection/kprobe/manager.go b/pkg/network/tracer/connection/kprobe/manager.go index 4582c276b01f6..e8c1448e9d11c 100644 --- a/pkg/network/tracer/connection/kprobe/manager.go +++ b/pkg/network/tracer/connection/kprobe/manager.go @@ -65,7 +65,7 @@ func initManager(mgr *ddebpf.Manager, connCloseEventHandler ddebpf.EventHandler, mgr.Maps = []*manager.Map{ {Name: probes.ConnMap}, {Name: probes.TCPStatsMap}, - {Name: probes.TCPConnectSockPidMap}, + {Name: probes.TCPOngoingConnectPid}, {Name: probes.ConnCloseFlushed}, {Name: probes.ConnCloseBatchMap}, {Name: "udp_recv_sock"}, diff --git a/pkg/network/tracer/tracer.go b/pkg/network/tracer/tracer.go index 5017167091fca..735b26f55db9a 100644 --- a/pkg/network/tracer/tracer.go +++ b/pkg/network/tracer/tracer.go @@ -67,14 +67,12 @@ var tracerTelemetry = struct { closedConns *telemetry.StatCounterWrapper connStatsMapSize telemetry.Gauge payloadSizePerClient telemetry.Gauge - failedConnOrphans telemetry.Counter }{ telemetry.NewCounter(tracerModuleName, "skipped_conns", []string{"ip_proto"}, "Counter measuring skipped connections"), telemetry.NewCounter(tracerModuleName, "expired_tcp_conns", []string{}, "Counter measuring expired TCP connections"), telemetry.NewStatCounterWrapper(tracerModuleName, "closed_conns", []string{"ip_proto"}, "Counter measuring closed TCP connections"), telemetry.NewGauge(tracerModuleName, "conn_stats_map_size", []string{}, "Gauge measuring the size of the active connections map"), telemetry.NewGauge(tracerModuleName, "payload_conn_count", []string{"client_id", "ip_proto"}, "Gauge measuring the number of connections in the system-probe payload"), - telemetry.NewCounter(tracerModuleName, "failed_conn_orphans", []string{}, "Counter measuring the number of orphans after associating failed connections with a closed connection"), } // Tracer implements the functionality of the network tracer diff --git a/pkg/network/tracer/tracer_linux_test.go b/pkg/network/tracer/tracer_linux_test.go index dfa6036127c77..de077c7c92691 100644 --- a/pkg/network/tracer/tracer_linux_test.go +++ b/pkg/network/tracer/tracer_linux_test.go @@ -2391,8 +2391,8 @@ func checkSkipFailureConnectionsTests(t *testing.T) { if _, ok := failedConnectionsBuildModes[ebpftest.GetBuildMode()]; !ok { t.Skip("Skipping test on unsupported build mode: ", ebpftest.GetBuildMode()) } - } + func (s *TracerSuite) TestTCPFailureConnectionTimeout() { t := s.T() @@ -2445,11 +2445,76 @@ func (s *TracerSuite) TestTCPFailureConnectionTimeout() { localAddr := fmt.Sprintf("127.0.0.1:%d", port) // Check if the connection was recorded as failed due to timeout + var conn *network.ConnectionStats require.Eventually(t, func() bool { conns := getConnections(t, tr) // 110 is the errno for ETIMEDOUT - return findFailedConnection(t, localAddr, srvAddr, conns, 110) - }, 3*time.Second, 1000*time.Millisecond, "Failed connection not recorded properly") + conn = findFailedConnection(t, localAddr, srvAddr, conns, 110) + return conn != nil + }, 3*time.Second, 100*time.Millisecond, "Failed connection not recorded properly") + + assert.Equal(t, uint32(0), conn.TCPFailures[104], "expected 0 connection reset") + assert.Equal(t, uint32(0), conn.TCPFailures[111], "expected 0 connection refused") + assert.Equal(t, uint32(1), conn.TCPFailures[110], "expected 1 connection timeout") + assert.Equal(t, uint64(0), conn.Monotonic.SentBytes, "expected 0 bytes sent") + assert.Equal(t, uint64(0), conn.Monotonic.RecvBytes, "expected 0 bytes received") +} + +func (s *TracerSuite) TestTCPFailureConnectionResetWithDNAT() { + t := s.T() + + checkSkipFailureConnectionsTests(t) + + cfg := testConfig() + cfg.TCPFailedConnectionsEnabled = true + tr := setupTracer(t, cfg) + + // Setup DNAT to redirect traffic from 2.2.2.2 to 1.1.1.1 + netlinktestutil.SetupDNAT(t) + + // Set up a TCP server on the translated address (1.1.1.1) + srv := tracertestutil.NewTCPServerOnAddress("1.1.1.1:80", func(c net.Conn) { + if tcpConn, ok := c.(*net.TCPConn); ok { + tcpConn.SetLinger(0) + buf := make([]byte, 10) + _, _ = c.Read(buf) + time.Sleep(10 * time.Millisecond) + } + c.Close() + }) + + require.NoError(t, srv.Run(), "error running server") + t.Cleanup(srv.Shutdown) + + // Attempt to connect to the DNAT address (2.2.2.2), which should be redirected to the server at 1.1.1.1 + serverAddr := "2.2.2.2:80" + c, err := net.Dial("tcp", serverAddr) + require.NoError(t, err, "could not connect to server: ", err) + + // Write to the server and expect a reset + _, writeErr := c.Write([]byte("ping")) + if writeErr != nil { + t.Log("Write error:", writeErr) + } + + // Read from server to ensure that the server has a chance to reset the connection + _, readErr := c.Read(make([]byte, 4)) + require.Error(t, readErr, "expected connection reset error but got none") + + // Check if the connection was recorded as reset + var conn *network.ConnectionStats + require.Eventually(t, func() bool { + // 104 is the errno for ECONNRESET + conn = findFailedConnection(t, c.LocalAddr().String(), serverAddr, getConnections(t, tr), 104) + return conn != nil + }, 3*time.Second, 100*time.Millisecond, "Failed connection not recorded properly") + + require.NoError(t, c.Close(), "error closing client connection") + assert.Equal(t, uint32(1), conn.TCPFailures[104], "expected 1 connection reset") + assert.Equal(t, uint32(0), conn.TCPFailures[111], "expected 0 connection refused") + assert.Equal(t, uint32(0), conn.TCPFailures[110], "expected 0 connection timeout") + assert.Equal(t, uint64(4), conn.Monotonic.SentBytes, "expected 4 bytes sent") + assert.Equal(t, uint64(0), conn.Monotonic.RecvBytes, "expected 0 bytes received") } func setupDropTrafficRule(tb testing.TB) (ns string) { diff --git a/pkg/network/tracer/tracer_test.go b/pkg/network/tracer/tracer_test.go index 1e001d5b5ed98..5f71e511658ab 100644 --- a/pkg/network/tracer/tracer_test.go +++ b/pkg/network/tracer/tracer_test.go @@ -1260,14 +1260,22 @@ func (s *TracerSuite) TestTCPFailureConnectionRefused() { require.Error(t, err, "expected connection refused error but got none") // Check if the connection was recorded as refused + var foundConn *network.ConnectionStats require.Eventually(t, func() bool { conns := getConnections(t, tr) // Check for the refusal record - return findFailedConnectionByRemoteAddr(srvAddr, conns, 111) + foundConn = findFailedConnectionByRemoteAddr(srvAddr, conns, 111) + return foundConn != nil }, 3*time.Second, 100*time.Millisecond, "Failed connection not recorded properly") + + assert.Equal(t, uint32(1), foundConn.TCPFailures[111], "expected 1 connection refused") + assert.Equal(t, uint32(0), foundConn.TCPFailures[104], "expected 0 connection reset") + assert.Equal(t, uint32(0), foundConn.TCPFailures[110], "expected 0 connection timeout") + assert.Equal(t, uint64(0), foundConn.Monotonic.SentBytes, "expected 0 bytes sent") + assert.Equal(t, uint64(0), foundConn.Monotonic.RecvBytes, "expected 0 bytes received") } -func (s *TracerSuite) TestTCPFailureConnectionReset() { +func (s *TracerSuite) TestTCPFailureConnectionResetWithData() { t := s.T() checkSkipFailureConnectionsTests(t) @@ -1304,27 +1312,83 @@ func (s *TracerSuite) TestTCPFailureConnectionReset() { require.Error(t, readErr, "expected connection reset error but got none") // Check if the connection was recorded as reset + var conn *network.ConnectionStats + require.Eventually(t, func() bool { + // 104 is the errno for ECONNRESET + conn = findFailedConnection(t, c.LocalAddr().String(), serverAddr, getConnections(t, tr), 104) + return conn != nil + }, 3*time.Second, 100*time.Millisecond, "Failed connection not recorded properly") + + require.NoError(t, c.Close(), "error closing client connection") + assert.Equal(t, uint32(1), conn.TCPFailures[104], "expected 1 connection reset") + assert.Equal(t, uint32(0), conn.TCPFailures[111], "expected 0 connection refused") + assert.Equal(t, uint32(0), conn.TCPFailures[110], "expected 0 connection timeout") + assert.Equal(t, uint64(4), conn.Monotonic.SentBytes, "expected 4 bytes sent") + assert.Equal(t, uint64(0), conn.Monotonic.RecvBytes, "expected 0 bytes received") +} + +func (s *TracerSuite) TestTCPFailureConnectionResetNoData() { + t := s.T() + + checkSkipFailureConnectionsTests(t) + + cfg := testConfig() + cfg.TCPFailedConnectionsEnabled = true + tr := setupTracer(t, cfg) + + // Server that immediately resets the connection without any data transfer + srv := testutil.NewTCPServer(func(c net.Conn) { + if tcpConn, ok := c.(*net.TCPConn); ok { + tcpConn.SetLinger(0) + } + // Close the connection immediately to trigger a reset + c.Close() + }) + + require.NoError(t, srv.Run(), "error running server") + t.Cleanup(srv.Shutdown) + + serverAddr := srv.Address() + c, err := net.Dial("tcp", serverAddr) + require.NoError(t, err, "could not connect to server: ", err) + + // Wait briefly to give the server time to close the connection + time.Sleep(50 * time.Millisecond) + + // Attempt to write to the server, expecting a reset + _, writeErr := c.Write([]byte("ping")) + require.Error(t, writeErr, "expected connection reset error but got none") + + // Check if the connection was recorded as reset + var conn *network.ConnectionStats require.Eventually(t, func() bool { conns := getConnections(t, tr) // 104 is the errno for ECONNRESET - return findFailedConnection(t, c.LocalAddr().String(), serverAddr, conns, 104) + conn = findFailedConnection(t, c.LocalAddr().String(), serverAddr, conns, 104) + return conn != nil }, 3*time.Second, 100*time.Millisecond, "Failed connection not recorded properly") require.NoError(t, c.Close(), "error closing client connection") + + assert.Equal(t, uint32(1), conn.TCPFailures[104], "expected 1 connection reset") + assert.Equal(t, uint32(0), conn.TCPFailures[111], "expected 0 connection refused") + assert.Equal(t, uint32(0), conn.TCPFailures[110], "expected 0 connection timeout") + assert.Equal(t, uint64(0), conn.Monotonic.SentBytes, "expected 0 bytes sent") + assert.Equal(t, uint64(0), conn.Monotonic.RecvBytes, "expected 0 bytes received") } // findFailedConnection is a utility function to find a failed connection based on specific TCP error codes -func findFailedConnection(t *testing.T, local, remote string, conns *network.Connections, errorCode uint32) bool { // nolint:unused +func findFailedConnection(t *testing.T, local, remote string, conns *network.Connections, errorCode uint32) *network.ConnectionStats { // nolint:unused // Extract the address and port from the net.Addr types localAddrPort, err := netip.ParseAddrPort(local) if err != nil { t.Logf("Failed to parse local address: %v", err) - return false + return nil } remoteAddrPort, err := netip.ParseAddrPort(remote) if err != nil { t.Logf("Failed to parse remote address: %v", err) - return false + return nil } failureFilter := func(cs network.ConnectionStats) bool { @@ -1333,13 +1397,13 @@ func findFailedConnection(t *testing.T, local, remote string, conns *network.Con return localMatch && remoteMatch && cs.TCPFailures[errorCode] > 0 } - return network.FirstConnection(conns, failureFilter) != nil + return network.FirstConnection(conns, failureFilter) } // for some failed connections we don't know the local addr/port so we need to search by remote addr only -func findFailedConnectionByRemoteAddr(remoteAddr string, conns *network.Connections, errorCode uint32) bool { +func findFailedConnectionByRemoteAddr(remoteAddr string, conns *network.Connections, errorCode uint32) *network.ConnectionStats { failureFilter := func(cs network.ConnectionStats) bool { return netip.MustParseAddrPort(remoteAddr) == netip.AddrPortFrom(cs.Dest.Addr, cs.DPort) && cs.TCPFailures[errorCode] > 0 } - return network.FirstConnection(conns, failureFilter) != nil + return network.FirstConnection(conns, failureFilter) } From f28f8a320848499e999ecc17398645ce6a2662c8 Mon Sep 17 00:00:00 2001 From: Sylvain Afchain Date: Fri, 13 Sep 2024 16:35:56 +0200 Subject: [PATCH 041/195] [CWS] add a delay to hash file (#29295) --- pkg/security/module/server.go | 177 +++++++++++------- pkg/security/probe/actions.go | 20 +- pkg/security/probe/actions_linux.go | 91 +++++++++ pkg/security/probe/actions_linux_easyjson.go | 95 ++++++++++ pkg/security/probe/file_hasher.go | 117 ++++++++++++ pkg/security/probe/probe_ebpf.go | 14 +- pkg/security/probe/probe_ebpfless.go | 18 +- pkg/security/probe/process_killer.go | 2 +- pkg/security/resolvers/hash/resolver_linux.go | 59 +++--- pkg/security/secl/model/model.go | 3 +- pkg/security/secl/rules/errors.go | 10 + pkg/security/secl/rules/model.go | 24 ++- pkg/security/secl/rules/ruleset.go | 11 ++ pkg/security/serializers/helpers.go | 14 +- pkg/security/serializers/patcher.go | 11 ++ pkg/security/serializers/serializers_linux.go | 23 ++- .../serializers/serializers_windows.go | 2 +- pkg/security/tests/action_test.go | 166 ++++++++++++++-- pkg/security/tests/main_linux.go | 1 + pkg/security/tests/module_tester_linux.go | 3 + pkg/security/tests/schemas/agent_context.json | 3 + pkg/security/tests/schemas/hash.schema.json | 25 +++ .../tests/syscall_tester/c/syscall_tester.c | 33 +++- tasks/libs/types/copyright.py | 1 + 24 files changed, 767 insertions(+), 156 deletions(-) create mode 100644 pkg/security/probe/actions_linux.go create mode 100644 pkg/security/probe/actions_linux_easyjson.go create mode 100644 pkg/security/probe/file_hasher.go create mode 100644 pkg/security/serializers/patcher.go create mode 100644 pkg/security/tests/schemas/hash.schema.json diff --git a/pkg/security/module/server.go b/pkg/security/module/server.go index d07dd25e5e871..c2af0b91c249f 100644 --- a/pkg/security/module/server.go +++ b/pkg/security/module/server.go @@ -32,7 +32,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/probe/selftests" "github.com/DataDog/datadog-agent/pkg/security/proto/api" "github.com/DataDog/datadog-agent/pkg/security/rules/monitor" - "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/security/seclog" @@ -44,48 +43,65 @@ import ( ) const ( - maxRetry = 3 + maxRetry = 10 retryDelay = time.Second ) type pendingMsg struct { - ruleID string - backendEvent events.BackendEvent - eventJSON []byte - tags []string - actionReports []model.ActionReport - service string - extTagsCb func() []string - sendAfter time.Time - retry int + ruleID string + backendEvent events.BackendEvent + eventSerializer *serializers.EventSerializer + tags []string + actionReports []model.ActionReport + service string + extTagsCb func() []string + sendAfter time.Time + retry int } -func (p *pendingMsg) ToJSON() ([]byte, bool, error) { - fullyResolved := true +func (p *pendingMsg) isResolved() bool { + for _, report := range p.actionReports { + if !report.IsResolved() { + return false + } + } + return true +} +func (p *pendingMsg) toJSON() ([]byte, error) { p.backendEvent.RuleActions = []json.RawMessage{} for _, report := range p.actionReports { - data, resolved, err := report.ToJSON() + if patcher, ok := report.(serializers.EventSerializerPatcher); ok { + patcher.PatchEvent(p.eventSerializer) + } + + data, err := report.ToJSON() if err != nil { - return nil, false, err + return nil, err } - p.backendEvent.RuleActions = append(p.backendEvent.RuleActions, data) - if !resolved { - fullyResolved = false + if len(data) > 0 { + p.backendEvent.RuleActions = append(p.backendEvent.RuleActions, data) } } backendEventJSON, err := easyjson.Marshal(p.backendEvent) if err != nil { - return nil, false, err + return nil, err } - data := append(backendEventJSON[:len(backendEventJSON)-1], ',') - data = append(data, p.eventJSON[1:]...) + eventJSON, err := p.eventSerializer.ToJSON() + if err != nil { + return nil, err + } - return data, fullyResolved, nil + return mergeJSON(backendEventJSON, eventJSON), nil +} + +func mergeJSON(j1, j2 []byte) []byte { + data := append(j1[:len(j1)-1], ',') + return append(data, j2[1:]...) } // APIServer represents a gRPC server in charge of receiving events sent by @@ -191,7 +207,7 @@ func (a *APIServer) dequeue(now time.Time, cb func(msg *pendingMsg) bool) { seclog.Errorf("failed to sent event, max retry reached: %d", msg.retry) return true } - seclog.Debugf("failed to sent event, retry %d/%d", msg.retry, maxRetry) + seclog.Tracef("failed to sent event, retry %d/%d", msg.retry, maxRetry) msg.sendAfter = now.Add(retryDelay) msg.retry++ @@ -229,17 +245,17 @@ func (a *APIServer) start(ctx context.Context) { } } - data, resolved, err := msg.ToJSON() + // not fully resolved, retry + if !msg.isResolved() && msg.retry < maxRetry { + return false + } + + data, err := msg.toJSON() if err != nil { seclog.Errorf("failed to marshal event context: %v", err) return true } - // not fully resolved, retry - if !resolved && msg.retry < maxRetry { - return false - } - seclog.Tracef("Sending event message for rule `%s` to security-agent `%s`", msg.ruleID, string(data)) m := &api.SecurityEventMessage{ @@ -278,7 +294,7 @@ func (a *APIServer) GetConfig(_ context.Context, _ *api.GetConfigParams) (*api.S } // SendEvent forwards events sent by the runtime security module to Datadog -func (a *APIServer) SendEvent(rule *rules.Rule, e events.Event, extTagsCb func() []string, service string) { +func (a *APIServer) SendEvent(rule *rules.Rule, event events.Event, extTagsCb func() []string, service string) { backendEvent := events.BackendEvent{ Title: rule.Def.Description, AgentContext: events.AgentContext{ @@ -296,13 +312,7 @@ func (a *APIServer) SendEvent(rule *rules.Rule, e events.Event, extTagsCb func() backendEvent.AgentContext.PolicyVersion = policy.Def.Version } - eventJSON, err := marshalEvent(e, rule.Opts) - if err != nil { - seclog.Errorf("failed to marshal event: %v", err) - return - } - - seclog.Tracef("Prepare event message for rule `%s` : `%s`", rule.ID, string(eventJSON)) + seclog.Tracef("Prepare event message for rule `%s`", rule.ID) // no retention if there is no ext tags to resolve retention := a.retention @@ -310,51 +320,78 @@ func (a *APIServer) SendEvent(rule *rules.Rule, e events.Event, extTagsCb func() retention = 0 } - // get type tags + container tags if already resolved, see ResolveContainerTags - eventTags := e.GetTags() - ruleID := rule.Def.ID if rule.Def.GroupID != "" { ruleID = rule.Def.GroupID } - eventActionReports := e.GetActionReports() - actionReports := make([]model.ActionReport, 0, len(eventActionReports)) - for _, ar := range eventActionReports { - if ar.IsMatchingRule(rule.ID) { - actionReports = append(actionReports, ar) + // get type tags + container tags if already resolved, see ResolveContainerTags + eventTags := event.GetTags() + + tags := []string{"rule_id:" + ruleID} + tags = append(tags, rule.Tags...) + tags = append(tags, eventTags...) + tags = append(tags, common.QueryAccountIDTag()) + + // model event or custom event ? if model event use queuing so that tags and actions can be handled + if ev, ok := event.(*model.Event); ok { + //return serializers.MarshalEvent(ev, opts) + eventActionReports := ev.GetActionReports() + actionReports := make([]model.ActionReport, 0, len(eventActionReports)) + for _, ar := range eventActionReports { + if ar.IsMatchingRule(rule.ID) { + actionReports = append(actionReports, ar) + } } - } - msg := &pendingMsg{ - ruleID: ruleID, - backendEvent: backendEvent, - eventJSON: eventJSON, - extTagsCb: extTagsCb, - service: service, - sendAfter: time.Now().Add(retention), - tags: make([]string, 0, 1+len(rule.Tags)+len(eventTags)+1), - actionReports: actionReports, - } + msg := &pendingMsg{ + ruleID: ruleID, + backendEvent: backendEvent, + eventSerializer: serializers.NewEventSerializer(ev, rule.Opts), + extTagsCb: extTagsCb, + service: service, + sendAfter: time.Now().Add(retention), + tags: make([]string, 0, 1+len(rule.Tags)+len(eventTags)+1), + actionReports: actionReports, + } - msg.tags = append(msg.tags, "rule_id:"+ruleID) - msg.tags = append(msg.tags, rule.Tags...) - msg.tags = append(msg.tags, eventTags...) - msg.tags = append(msg.tags, common.QueryAccountIDTag()) + a.enqueue(msg) + } else { + var ( + backendEventJSON []byte + eventJSON []byte + err error + ) + backendEventJSON, err = easyjson.Marshal(backendEvent) + if err != nil { + seclog.Errorf("failed to marshal event: %v", err) + } - a.enqueue(msg) -} + if ev, ok := event.(events.EventMarshaler); ok { + if eventJSON, err = ev.ToJSON(); err != nil { + seclog.Errorf("failed to marshal event: %v", err) + return + } + } else { + if eventJSON, err = json.Marshal(event); err != nil { + seclog.Errorf("failed to marshal event: %v", err) + return + } + } -func marshalEvent(event events.Event, opts *eval.Opts) ([]byte, error) { - if ev, ok := event.(*model.Event); ok { - return serializers.MarshalEvent(ev, opts) - } + data := mergeJSON(backendEventJSON, eventJSON) - if ev, ok := event.(events.EventMarshaler); ok { - return ev.ToJSON() - } + seclog.Tracef("Sending event message for rule `%s` to security-agent `%s`", ruleID, string(data)) - return json.Marshal(event) + m := &api.SecurityEventMessage{ + RuleID: ruleID, + Data: data, + Service: service, + Tags: tags, + } + + a.msgSender.Send(m, a.expireEvent) + } } // expireEvent updates the count of expired messages for the appropriate rule diff --git a/pkg/security/probe/actions.go b/pkg/security/probe/actions.go index 12ecf8d37987d..4f1ac2a46621e 100644 --- a/pkg/security/probe/actions.go +++ b/pkg/security/probe/actions.go @@ -28,10 +28,10 @@ type KillActionReport struct { DetectedAt time.Time KilledAt time.Time ExitedAt time.Time - Rule *rules.Rule // internal resolved bool + rule *rules.Rule } // JKillActionReport used to serialize date @@ -47,13 +47,19 @@ type JKillActionReport struct { TTR string `json:"ttr,omitempty"` } -// ToJSON marshal the action -func (k *KillActionReport) ToJSON() ([]byte, bool, error) { +// IsResolved return if the action is resolved +func (k *KillActionReport) IsResolved() bool { k.RLock() defer k.RUnlock() // for sigkill wait for exit - resolved := k.Signal != "SIGKILL" || k.resolved + return k.Signal != "SIGKILL" || k.resolved +} + +// ToJSON marshal the action +func (k *KillActionReport) ToJSON() ([]byte, error) { + k.RLock() + defer k.RUnlock() jk := JKillActionReport{ Type: rules.KillAction, @@ -71,10 +77,10 @@ func (k *KillActionReport) ToJSON() ([]byte, bool, error) { data, err := utils.MarshalEasyJSON(jk) if err != nil { - return nil, false, err + return nil, err } - return data, resolved, nil + return data, nil } // IsMatchingRule returns true if this action report is targeted at the given rule ID @@ -82,5 +88,5 @@ func (k *KillActionReport) IsMatchingRule(ruleID eval.RuleID) bool { k.RLock() defer k.RUnlock() - return k.Rule.ID == ruleID + return k.rule.ID == ruleID } diff --git a/pkg/security/probe/actions_linux.go b/pkg/security/probe/actions_linux.go new file mode 100644 index 0000000000000..54126bb2b12f5 --- /dev/null +++ b/pkg/security/probe/actions_linux.go @@ -0,0 +1,91 @@ +//go:generate go run github.com/mailru/easyjson/easyjson -gen_build_flags=-mod=mod -no_std_marshalers -build_tags linux $GOFILE + +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package probe holds probe related files +package probe + +import ( + "sync" + "time" + + "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" + "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" + "github.com/DataDog/datadog-agent/pkg/security/secl/rules" + "github.com/DataDog/datadog-agent/pkg/security/serializers" + "github.com/DataDog/datadog-agent/pkg/security/utils" +) + +const ( + // HashTriggerTimeout hash triggered because of a timeout + HashTriggerTimeout = "timeout" + // HashTriggerProcessExit hash triggered on process exit + HashTriggerProcessExit = "process_exit" +) + +// HashActionReport defines a hash action reports +// easyjson:json +type HashActionReport struct { + sync.RWMutex + + Type string `json:"type"` + Path string `json:"path"` + State string `json:"state"` + Trigger string `json:"trigger"` + + // internal + resolved bool + rule *rules.Rule + pid uint32 + seenAt time.Time + fileEvent model.FileEvent + crtID containerutils.ContainerID + eventType model.EventType +} + +// IsResolved return if the action is resolved +func (k *HashActionReport) IsResolved() bool { + k.RLock() + defer k.RUnlock() + + return k.resolved +} + +// ToJSON marshal the action +func (k *HashActionReport) ToJSON() ([]byte, error) { + k.Lock() + defer k.Unlock() + + k.Type = rules.HashAction + k.Path = k.fileEvent.PathnameStr + k.State = k.fileEvent.HashState.String() + + data, err := utils.MarshalEasyJSON(k) + if err != nil { + return nil, err + } + + return data, nil +} + +// IsMatchingRule returns true if this action report is targeted at the given rule ID +func (k *HashActionReport) IsMatchingRule(ruleID eval.RuleID) bool { + k.RLock() + defer k.RUnlock() + + return k.rule.ID == ruleID +} + +// PatchEvent implements the EventSerializerPatcher interface +func (k *HashActionReport) PatchEvent(ev *serializers.EventSerializer) { + if ev.FileEventSerializer == nil { + return + } + + ev.FileEventSerializer.HashState = k.fileEvent.HashState.String() + ev.FileEventSerializer.Hashes = k.fileEvent.Hashes +} diff --git a/pkg/security/probe/actions_linux_easyjson.go b/pkg/security/probe/actions_linux_easyjson.go new file mode 100644 index 0000000000000..5ab1d450c2823 --- /dev/null +++ b/pkg/security/probe/actions_linux_easyjson.go @@ -0,0 +1,95 @@ +//go:build linux +// +build linux + +// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT. + +package probe + +import ( + json "encoding/json" + easyjson "github.com/mailru/easyjson" + jlexer "github.com/mailru/easyjson/jlexer" + jwriter "github.com/mailru/easyjson/jwriter" +) + +// suppress unused package warning +var ( + _ *json.RawMessage + _ *jlexer.Lexer + _ *jwriter.Writer + _ easyjson.Marshaler +) + +func easyjson7cab6e30DecodeGithubComDataDogDatadogAgentPkgSecurityProbe(in *jlexer.Lexer, out *HashActionReport) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeFieldName(false) + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "type": + out.Type = string(in.String()) + case "path": + out.Path = string(in.String()) + case "state": + out.State = string(in.String()) + case "trigger": + out.Trigger = string(in.String()) + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson7cab6e30EncodeGithubComDataDogDatadogAgentPkgSecurityProbe(out *jwriter.Writer, in HashActionReport) { + out.RawByte('{') + first := true + _ = first + { + const prefix string = ",\"type\":" + out.RawString(prefix[1:]) + out.String(string(in.Type)) + } + { + const prefix string = ",\"path\":" + out.RawString(prefix) + out.String(string(in.Path)) + } + { + const prefix string = ",\"state\":" + out.RawString(prefix) + out.String(string(in.State)) + } + { + const prefix string = ",\"trigger\":" + out.RawString(prefix) + out.String(string(in.Trigger)) + } + out.RawByte('}') +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v HashActionReport) MarshalEasyJSON(w *jwriter.Writer) { + easyjson7cab6e30EncodeGithubComDataDogDatadogAgentPkgSecurityProbe(w, v) +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *HashActionReport) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson7cab6e30DecodeGithubComDataDogDatadogAgentPkgSecurityProbe(l, v) +} diff --git a/pkg/security/probe/file_hasher.go b/pkg/security/probe/file_hasher.go new file mode 100644 index 0000000000000..d99f32a32d0f3 --- /dev/null +++ b/pkg/security/probe/file_hasher.go @@ -0,0 +1,117 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux + +// Package probe holds probe related files +package probe + +import ( + "slices" + "sync" + "time" + + "github.com/DataDog/datadog-agent/pkg/security/config" + "github.com/DataDog/datadog-agent/pkg/security/resolvers/hash" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" + "github.com/DataDog/datadog-agent/pkg/security/secl/rules" + "github.com/DataDog/datadog-agent/pkg/security/utils" +) + +const ( + defaultHashActionFlushDelay = 5 * time.Second +) + +// FileHasher defines a file hasher structure +type FileHasher struct { + sync.Mutex + + cfg *config.Config + resolver *hash.Resolver + + pendingReports []*HashActionReport +} + +// NewFileHasher returns a new FileHasher +func NewFileHasher(cfg *config.Config, resolver *hash.Resolver) *FileHasher { + return &FileHasher{ + cfg: cfg, + resolver: resolver, + } +} + +// AddPendingReports add a pending reports +func (p *FileHasher) AddPendingReports(report *HashActionReport) { + p.Lock() + defer p.Unlock() + + p.pendingReports = append(p.pendingReports, report) +} + +func (p *FileHasher) hash(report *HashActionReport) { + p.resolver.HashFileEvent(report.eventType, report.crtID, report.pid, &report.fileEvent) + report.resolved = true +} + +// FlushPendingReports flush pending reports +func (p *FileHasher) FlushPendingReports() { + p.Lock() + defer p.Unlock() + + p.pendingReports = slices.DeleteFunc(p.pendingReports, func(report *HashActionReport) bool { + report.Lock() + defer report.Unlock() + + if time.Now().After(report.seenAt.Add(defaultHashActionFlushDelay)) { + report.Trigger = HashTriggerTimeout + p.hash(report) + return true + } + return false + }) +} + +// HandleProcessExited handles process exited events +func (p *FileHasher) HandleProcessExited(event *model.Event) { + p.Lock() + defer p.Unlock() + + p.pendingReports = slices.DeleteFunc(p.pendingReports, func(report *HashActionReport) bool { + report.Lock() + defer report.Unlock() + + if report.pid == event.ProcessContext.Pid { + report.Trigger = HashTriggerProcessExit + p.hash(report) + return true + } + return false + }) +} + +// HashAndReport hash and report +func (p *FileHasher) HashAndReport(rule *rules.Rule, ev *model.Event) { + eventType := ev.GetEventType() + + // only open events are supported + if eventType != model.FileOpenEventType && eventType != model.ExecEventType { + return + } + + if ev.ProcessContext.Pid == utils.Getpid() { + return + } + + report := &HashActionReport{ + rule: rule, + pid: ev.ProcessContext.Pid, + crtID: ev.ProcessContext.ContainerID, + seenAt: ev.Timestamp, + fileEvent: ev.Open.File, + eventType: eventType, + } + ev.ActionReports = append(ev.ActionReports, report) + p.pendingReports = append(p.pendingReports, report) +} diff --git a/pkg/security/probe/probe_ebpf.go b/pkg/security/probe/probe_ebpf.go index 6be2b40c8d22f..b9d4aa3098ba3 100644 --- a/pkg/security/probe/probe_ebpf.go +++ b/pkg/security/probe/probe_ebpf.go @@ -149,6 +149,9 @@ type EBPFProbe struct { // On demand onDemandManager *OnDemandProbesManager onDemandRateLimiter *rate.Limiter + + // hash action + fileHasher *FileHasher } // GetProfileManager returns the Profile Managers @@ -856,8 +859,9 @@ func (p *EBPFProbe) handleEvent(CPU int, data []byte) { // update mount pid mapping p.Resolvers.MountResolver.DelPid(event.Exit.Pid) - // update kill action reports + // update action reports p.processKiller.HandleProcessExited(event) + p.fileHasher.HandleProcessExited(event) case model.SetuidEventType: // the process context may be incorrect, do not modify it if event.Error != nil { @@ -1038,8 +1042,9 @@ func (p *EBPFProbe) handleEvent(CPU int, data []byte) { p.Resolvers.ProcessResolver.DeleteEntry(event.ProcessContext.Pid, event.ResolveEventTime()) } - // flush pending kill actions + // flush pending actions p.processKiller.FlushPendingReports() + p.fileHasher.FlushPendingReports() } // AddDiscarderPushedCallback add a callback to the list of func that have to be called when a discarder is pushed to kernel @@ -1906,6 +1911,8 @@ func NewEBPFProbe(probe *Probe, config *config.Config, opts Opts, wmeta workload return nil, err } + p.fileHasher = NewFileHasher(config, p.Resolvers.HashResolver) + hostname, err := utils.GetHostname() if err != nil || hostname == "" { hostname = "unknown" @@ -2198,8 +2205,7 @@ func (p *EBPFProbe) HandleActions(ctx *eval.Context, rule *rules.Rule) { p.probe.DispatchCustomEvent(rule, event) } case action.Def.Hash != nil: - // force the resolution as it will force the hash resolution as well - ev.ResolveFields() + p.fileHasher.HashAndReport(rule, ev) } } } diff --git a/pkg/security/probe/probe_ebpfless.go b/pkg/security/probe/probe_ebpfless.go index b2ee591f4becf..9d4c409d2fcb1 100644 --- a/pkg/security/probe/probe_ebpfless.go +++ b/pkg/security/probe/probe_ebpfless.go @@ -77,8 +77,13 @@ type EBPFLessProbe struct { cancelFnc context.CancelFunc fieldHandlers *EBPFLessFieldHandlers clients map[net.Conn]*client - processKiller *ProcessKiller wg sync.WaitGroup + + // kill action + processKiller *ProcessKiller + + // hash action + fileHasher *FileHasher } // GetProfileManager returns the Profile Managers @@ -325,14 +330,16 @@ func (p *EBPFLessProbe) handleSyscallMsg(cl *client, syscallMsg *ebpfless.Syscal event.Exit.Code = syscallMsg.Exit.Code defer p.Resolvers.ProcessResolver.DeleteEntry(process.CacheResolverKey{Pid: syscallMsg.PID, NSID: cl.nsID}, event.ProcessContext.ExitTime) - // update kill action reports + // update action reports p.processKiller.HandleProcessExited(event) + p.fileHasher.HandleProcessExited(event) } p.DispatchEvent(event) - // flush pending kill actions + // flush pending actions p.processKiller.FlushPendingReports() + p.fileHasher.FlushPendingReports() } // DispatchEvent sends an event to the probe event handler @@ -598,8 +605,7 @@ func (p *EBPFLessProbe) HandleActions(ctx *eval.Context, rule *rules.Rule) { return p.processKiller.KillFromUserspace(pid, sig, ev) }) case action.Def.Hash != nil: - // force the resolution as it will force the hash resolution as well - ev.ResolveFields() + p.fileHasher.HashAndReport(rule, ev) } } } @@ -673,6 +679,8 @@ func NewEBPFLessProbe(probe *Probe, config *config.Config, opts Opts, telemetry return nil, err } + p.fileHasher = NewFileHasher(config, p.Resolvers.HashResolver) + hostname, err := utils.GetHostname() if err != nil || hostname == "" { hostname = "unknown" diff --git a/pkg/security/probe/process_killer.go b/pkg/security/probe/process_killer.go index d9b80b6e4bec1..75a1380250fef 100644 --- a/pkg/security/probe/process_killer.go +++ b/pkg/security/probe/process_killer.go @@ -254,7 +254,7 @@ func (p *ProcessKiller) KillAndReport(scope string, signal string, rule *rules.R CreatedAt: ev.ProcessContext.ExecTime, DetectedAt: ev.ResolveEventTime(), KilledAt: killedAt, - Rule: rule, + rule: rule, } ev.ActionReports = append(ev.ActionReports, report) p.pendingReports = append(p.pendingReports, report) diff --git a/pkg/security/resolvers/hash/resolver_linux.go b/pkg/security/resolvers/hash/resolver_linux.go index d4ab18efb6f8d..7de1ef8e8a13c 100644 --- a/pkg/security/resolvers/hash/resolver_linux.go +++ b/pkg/security/resolvers/hash/resolver_linux.go @@ -28,6 +28,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/metrics" "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup" + "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/utils" ) @@ -160,9 +161,17 @@ func NewResolver(c *config.RuntimeSecurityConfig, statsdClient statsd.ClientInte // ComputeHashesFromEvent calls ComputeHashes using the provided event func (resolver *Resolver) ComputeHashesFromEvent(event *model.Event, file *model.FileEvent) []string { + if !resolver.opts.Enabled { + return nil + } + // resolve FileEvent event.FieldHandlers.ResolveFilePath(event, file) - return resolver.ComputeHashes(event.GetEventType(), &event.ProcessContext.Process, file) + + process := event.ProcessContext.Process + resolver.HashFileEvent(event.GetEventType(), process.ContainerID, process.Pid, file) + + return file.Hashes } // ComputeHashes computes the hashes of the provided file event. @@ -172,23 +181,8 @@ func (resolver *Resolver) ComputeHashes(eventType model.EventType, process *mode return nil } - // check state - if file.HashState == model.Done { - return file.Hashes - } - if file.HashState != model.NoHash && file.HashState != model.HashWasRateLimited { - // this file was already processed and an error occurred, nothing else to do - return nil - } - - // check if the resolver is allowed to hash this event type - if !slices.Contains(resolver.opts.EventTypes, eventType) { - file.HashState = model.EventTypeNotConfigured - resolver.hashMiss[eventType][model.EventTypeNotConfigured].Inc() - return nil - } + resolver.HashFileEvent(eventType, process.ContainerID, process.Pid, file) - resolver.hash(eventType, process, file) return file.Hashes } @@ -227,8 +221,28 @@ func getFileInfo(path string) (fs.FileMode, int64, fileUniqKey, error) { return utils.UnixStatModeToGoFileMode(stat.Mode), stat.Size, fkey, nil } -// hash hashes the provided file event -func (resolver *Resolver) hash(eventType model.EventType, process *model.Process, file *model.FileEvent) { +// HashFileEvent hashes the provided file event +func (resolver *Resolver) HashFileEvent(eventType model.EventType, ctrID containerutils.ContainerID, pid uint32, file *model.FileEvent) { + if !resolver.opts.Enabled { + return + } + + // check state + if file.HashState == model.Done { + return + } + if file.HashState != model.NoHash && file.HashState != model.HashWasRateLimited { + // this file was already processed and an error occurred, nothing else to do + return + } + + // check if the resolver is allowed to hash this event type + if !slices.Contains(resolver.opts.EventTypes, eventType) { + file.HashState = model.EventTypeNotConfigured + resolver.hashMiss[eventType][model.EventTypeNotConfigured].Inc() + return + } + if !file.IsPathnameStrResolved || len(file.PathnameStr) == 0 { resolver.hashMiss[eventType][model.PathnameResolutionError].Inc() file.HashState = model.PathnameResolutionError @@ -244,7 +258,7 @@ func (resolver *Resolver) hash(eventType model.EventType, process *model.Process // check if the hash(es) of this file is in cache fileKey := LRUCacheKey{ path: file.PathnameStr, - containerID: string(process.ContainerID), + containerID: string(ctrID), inode: file.Inode, pathID: file.PathKey.PathID, } @@ -267,9 +281,10 @@ func (resolver *Resolver) hash(eventType model.EventType, process *model.Process return } - rootPIDs := []uint32{process.Pid} + // add pid one for hash resolution outside of a container + rootPIDs := []uint32{1, pid} if resolver.cgroupResolver != nil { - w, ok := resolver.cgroupResolver.GetWorkload(string(process.ContainerID)) + w, ok := resolver.cgroupResolver.GetWorkload(string(ctrID)) if ok { rootPIDs = w.GetPIDs() } diff --git a/pkg/security/secl/model/model.go b/pkg/security/secl/model/model.go index 77e44b0b6a86d..d8aebe7770aa5 100644 --- a/pkg/security/secl/model/model.go +++ b/pkg/security/secl/model/model.go @@ -313,8 +313,9 @@ type MatchedRule struct { // ActionReport defines an action report type ActionReport interface { - ToJSON() ([]byte, bool, error) + ToJSON() ([]byte, error) IsMatchingRule(ruleID eval.RuleID) bool + IsResolved() bool } // NewMatchedRule return a new MatchedRule instance diff --git a/pkg/security/secl/rules/errors.go b/pkg/security/secl/rules/errors.go index 8440b00eed692..8cbbc71a06ddc 100644 --- a/pkg/security/secl/rules/errors.go +++ b/pkg/security/secl/rules/errors.go @@ -186,3 +186,13 @@ type ErrFieldNotAvailable struct { func (e *ErrFieldNotAvailable) Error() string { return fmt.Sprintf("field `%s` not available for event type `%v`, available for `%v`", e.Field, e.EventType, e.RestrictedTo) } + +// ErrActionNotAvailable is returned when an action is not available +type ErrActionNotAvailable struct { + ActionName string + EventType eval.EventType +} + +func (e *ErrActionNotAvailable) Error() string { + return fmt.Sprintf("action `%s` not available for event type `%v`", e.ActionName, e.EventType) +} diff --git a/pkg/security/secl/rules/model.go b/pkg/security/secl/rules/model.go index 30783522b272c..388c8bdc96cc9 100644 --- a/pkg/security/secl/rules/model.go +++ b/pkg/security/secl/rules/model.go @@ -89,8 +89,14 @@ func (rd *RuleDefinition) GetTag(tagKey string) (string, bool) { type ActionName = string const ( - // KillAction name a the kill action + // KillAction name of the kill action KillAction ActionName = "kill" + // SetAction name of the set action + SetAction ActionName = "set" + // CoreDumpAction name of the core dump action + CoreDumpAction ActionName = "coredump" + // HashAction name of the hash action + HashAction ActionName = "hash" ) // ActionDefinition describes a rule action section @@ -102,6 +108,22 @@ type ActionDefinition struct { Hash *HashDefinition `yaml:"hash" json:"hash,omitempty" jsonschema:"oneof_required=HashAction"` } +// Name returns the name of the action +func (a *ActionDefinition) Name() ActionName { + switch { + case a.Set != nil: + return SetAction + case a.Kill != nil: + return KillAction + case a.CoreDump != nil: + return CoreDumpAction + case a.Hash != nil: + return HashAction + default: + return "" + } +} + // Scope describes the scope variables type Scope string diff --git a/pkg/security/secl/rules/ruleset.go b/pkg/security/secl/rules/ruleset.go index 8b53f15a27992..21188d1bd221b 100644 --- a/pkg/security/secl/rules/ruleset.go +++ b/pkg/security/secl/rules/ruleset.go @@ -284,6 +284,13 @@ func GetRuleEventType(rule *eval.Rule) (eval.EventType, error) { return eventType, nil } +func (rs *RuleSet) isActionAvailable(eventType eval.EventType, action *Action) bool { + if action.Def.Name() == HashAction && eventType != model.FileOpenEventType.String() && eventType != model.ExecEventType.String() { + return false + } + return true +} + // AddRule creates the rule evaluator and adds it to the bucket of its events func (rs *RuleSet) AddRule(parsingContext *ast.ParsingContext, pRule *PolicyRule) (*eval.Rule, error) { if pRule.Def.Disabled { @@ -339,6 +346,10 @@ func (rs *RuleSet) AddRule(parsingContext *ast.ParsingContext, pRule *PolicyRule } for _, action := range rule.PolicyRule.Actions { + if !rs.isActionAvailable(eventType, action) { + return nil, &ErrRuleLoad{Rule: pRule, Err: &ErrActionNotAvailable{ActionName: action.Def.Name(), EventType: eventType}} + } + // compile action filter if action.Def.Filter != nil { if err := action.CompileFilter(parsingContext, rs.model, rs.evalOpts); err != nil { diff --git a/pkg/security/serializers/helpers.go b/pkg/security/serializers/helpers.go index d4528f46f03ed..7ec853525ab30 100644 --- a/pkg/security/serializers/helpers.go +++ b/pkg/security/serializers/helpers.go @@ -7,17 +7,9 @@ package serializers // nolint: deadcode, unused -func getUint64Pointer(i *uint64) *uint64 { - if *i == 0 { +func createNumPointer[I uint32 | uint64](i I) *I { + if i == 0 { return nil } - return i -} - -// nolint: deadcode, unused -func getUint32Pointer(i *uint32) *uint32 { - if *i == 0 { - return nil - } - return i + return &i } diff --git a/pkg/security/serializers/patcher.go b/pkg/security/serializers/patcher.go new file mode 100644 index 0000000000000..80c5a8dce8a7f --- /dev/null +++ b/pkg/security/serializers/patcher.go @@ -0,0 +1,11 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package serializers + +// EventSerializerPatcher defines an event serializer patcher +type EventSerializerPatcher interface { + PatchEvent(*EventSerializer) +} diff --git a/pkg/security/serializers/serializers_linux.go b/pkg/security/serializers/serializers_linux.go index 2c855e9c34625..15e9b7bb701c9 100644 --- a/pkg/security/serializers/serializers_linux.go +++ b/pkg/security/serializers/serializers_linux.go @@ -658,15 +658,14 @@ func newFileSerializer(fe *model.FileEvent, e *model.Event, forceInode ...uint64 inode = forceInode[0] } - mode := uint32(fe.FileFields.Mode) fs := &FileSerializer{ Path: e.FieldHandlers.ResolveFilePath(e, fe), PathResolutionError: fe.GetPathResolutionError(), Name: e.FieldHandlers.ResolveFileBasename(e, fe), - Inode: getUint64Pointer(&inode), - MountID: getUint32Pointer(&fe.MountID), + Inode: createNumPointer(inode), + MountID: createNumPointer(fe.MountID), Filesystem: e.FieldHandlers.ResolveFileFilesystem(e, fe), - Mode: getUint32Pointer(&mode), // only used by open events + Mode: createNumPointer(uint32(fe.FileFields.Mode)), // only used by open events UID: int64(fe.UID), GID: int64(fe.GID), User: e.FieldHandlers.ResolveFileFieldsUser(e, &fe.FileFields), @@ -727,7 +726,7 @@ func newProcessSerializer(ps *model.Process, e *model.Event) *ProcessSerializer Pid: ps.Pid, Tid: ps.Tid, - PPid: getUint32Pointer(&ps.PPid), + PPid: createNumPointer(ps.PPid), Comm: ps.Comm, TTY: ps.TTYName, Executable: newFileSerializer(&ps.FileEvent, e), @@ -946,13 +945,13 @@ func newMountEventSerializer(e *model.Event) *MountEventSerializer { mountSerializer := &MountEventSerializer{ MountPoint: &FileSerializer{ Path: e.GetMountRootPath(), - MountID: &e.Mount.ParentPathKey.MountID, - Inode: &e.Mount.ParentPathKey.Inode, + MountID: createNumPointer(e.Mount.ParentPathKey.MountID), + Inode: createNumPointer(e.Mount.ParentPathKey.Inode), }, Root: &FileSerializer{ Path: e.GetMountMountpointPath(), - MountID: &e.Mount.RootPathKey.MountID, - Inode: &e.Mount.RootPathKey.Inode, + MountID: createNumPointer(e.Mount.RootPathKey.MountID), + Inode: createNumPointer(e.Mount.RootPathKey.Inode), }, MountID: e.Mount.MountID, ParentMountID: e.Mount.ParentPathKey.MountID, @@ -1174,7 +1173,7 @@ func NewEventSerializer(event *model.Event, opts *eval.Opts) *EventSerializer { s.FileEventSerializer = &FileEventSerializer{ FileSerializer: *newFileSerializer(&event.Chmod.File, event), Destination: &FileSerializer{ - Mode: &event.Chmod.Mode, + Mode: createNumPointer(event.Chmod.Mode), }, } s.EventContextSerializer.Outcome = serializeOutcome(event.Chmod.Retval) @@ -1210,7 +1209,7 @@ func NewEventSerializer(event *model.Event, opts *eval.Opts) *EventSerializer { if event.Open.Flags&syscall.O_CREAT > 0 { s.FileEventSerializer.Destination = &FileSerializer{ - Mode: &event.Open.Mode, + Mode: createNumPointer(event.Open.Mode), } } @@ -1223,7 +1222,7 @@ func NewEventSerializer(event *model.Event, opts *eval.Opts) *EventSerializer { s.FileEventSerializer = &FileEventSerializer{ FileSerializer: *newFileSerializer(&event.Mkdir.File, event), Destination: &FileSerializer{ - Mode: &event.Mkdir.Mode, + Mode: createNumPointer(event.Mkdir.Mode), }, } s.EventContextSerializer.Outcome = serializeOutcome(event.Mkdir.Retval) diff --git a/pkg/security/serializers/serializers_windows.go b/pkg/security/serializers/serializers_windows.go index f296ee9d8a440..b40b90b610284 100644 --- a/pkg/security/serializers/serializers_windows.go +++ b/pkg/security/serializers/serializers_windows.go @@ -152,7 +152,7 @@ func newProcessSerializer(ps *model.Process, e *model.Event) *ProcessSerializer ExitTime: utils.NewEasyjsonTimeIfNotZero(ps.ExitTime), Pid: ps.Pid, - PPid: getUint32Pointer(&ps.PPid), + PPid: createNumPointer(ps.PPid), Executable: newFileSerializer(&ps.FileEvent, e), CmdLine: e.FieldHandlers.ResolveProcessCmdLineScrubbed(e, ps), User: e.FieldHandlers.ResolveUser(e, ps), diff --git a/pkg/security/tests/action_test.go b/pkg/security/tests/action_test.go index 5214d6961619c..89cb86ed4c956 100644 --- a/pkg/security/tests/action_test.go +++ b/pkg/security/tests/action_test.go @@ -124,8 +124,8 @@ func TestActionKill(t *testing.T) { validateMessageSchema(t, string(msg.Data)) jsonPathValidation(test, msg.Data, func(testMod *testModule, obj interface{}) { - if _, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.signal="sigusr2")]`); err != nil { - t.Error(err) + if el, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.signal == 'SIGUSR2')]`); err != nil || el == nil || len(el.([]interface{})) == 0 { + t.Errorf("element not found %s => %v", string(msg.Data), err) } }) @@ -176,11 +176,11 @@ func TestActionKill(t *testing.T) { validateMessageSchema(t, string(msg.Data)) jsonPathValidation(test, msg.Data, func(testMod *testModule, obj interface{}) { - if _, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.signal="sigkill")]`); err != nil { - t.Error(err) + if el, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.signal == 'SIGKILL')]`); err != nil || el == nil || len(el.([]interface{})) == 0 { + t.Errorf("element not found %s => %v", string(msg.Data), err) } - if _, err = jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.exited_at=~/20.*/)]`); err != nil { - t.Error(err) + if el, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.exited_at =~ /20.*/)]`); err != nil || el == nil || len(el.([]interface{})) == 0 { + t.Errorf("element not found %s => %v", string(msg.Data), err) } }) @@ -325,11 +325,11 @@ func TestActionKillRuleSpecific(t *testing.T) { validateMessageSchema(t, string(msg.Data)) jsonPathValidation(test, msg.Data, func(testMod *testModule, obj interface{}) { - if _, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.signal="sigkill")]`); err != nil { - t.Error(err) + if el, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.signal == 'SIGKILL')]`); err != nil || el == nil || len(el.([]interface{})) == 0 { + t.Errorf("element not found %s => %v", string(msg.Data), err) } - if _, err = jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.exited_at=~/20.*/)]`); err != nil { - t.Error(err) + if el, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.exited_at =~ /20.*/)]`); err != nil || el == nil || len(el.([]interface{})) == 0 { + t.Errorf("element not found %s => %v", string(msg.Data), err) } }) @@ -346,7 +346,7 @@ func TestActionKillRuleSpecific(t *testing.T) { jsonPathValidation(test, msg.Data, func(testMod *testModule, obj interface{}) { if _, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions`); err == nil { - t.Error(errors.New("unexpected rule action")) + t.Errorf("unexpected rule action %s", string(msg.Data)) } }) @@ -455,11 +455,11 @@ func TestActionKillDisarm(t *testing.T) { validateMessageSchema(t, string(msg.Data)) jsonPathValidation(test, msg.Data, func(_ *testModule, obj interface{}) { - if _, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.signal="sigkill")]`); err != nil { - t.Error(err) + if el, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.signal == 'SIGKILL')]`); err != nil || el == nil || len(el.([]interface{})) == 0 { + t.Errorf("element not found %s => %v", string(msg.Data), err) } - if _, err = jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.exited_at=~/20.*/)]`); err != nil { - t.Error(err) + if el, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.exited_at =~ /20.*/)]`); err != nil || el == nil || len(el.([]interface{})) == 0 { + t.Errorf("element not found %s => %v", string(msg.Data), err) } }) @@ -489,7 +489,7 @@ func TestActionKillDisarm(t *testing.T) { jsonPathValidation(test, msg.Data, func(_ *testModule, obj interface{}) { if _, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions`); err == nil { - t.Error(errors.New("unexpected rule action")) + t.Errorf("unexpected rule action %s", string(msg.Data)) } }) @@ -563,3 +563,137 @@ func TestActionKillDisarm(t *testing.T) { }) }) } + +func TestActionHash(t *testing.T) { + SkipIfNotAvailable(t) + + if testEnvironment == DockerEnvironment { + t.Skip("skipping in docker, not sharing the same pid ns and doesn't have a container ID") + } + + ruleDefs := []*rules.RuleDefinition{ + { + ID: "hash_action", + Expression: `open.file.path == "{{.Root}}/test-hash-action" && open.flags&O_CREAT == O_CREAT`, + Actions: []*rules.ActionDefinition{ + { + Hash: &rules.HashDefinition{}, + }, + }, + }, + } + + test, err := newTestModule(t, nil, ruleDefs) + if err != nil { + t.Fatal(err) + } + defer test.Close() + + testFile, _, err := test.Path("test-hash-action") + if err != nil { + t.Fatal(err) + } + + syscallTester, err := loadSyscallTester(t, test, "syscall_tester") + if err != nil { + t.Fatal(err) + } + + done := make(chan bool, 10) + + t.Run("open-process-exit", func(t *testing.T) { + test.msgSender.flush() + test.WaitSignal(t, func() error { + go func() { + timeoutCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + if err := runSyscallTesterFunc( + timeoutCtx, t, syscallTester, + "slow-write", "2", testFile, "aaa", + ); err != nil { + t.Error(err) + } + + done <- true + }() + return nil + }, func(event *model.Event, rule *rules.Rule) { + assertTriggeredRule(t, rule, "hash_action") + }) + + err = retry.Do(func() error { + msg := test.msgSender.getMsg("hash_action") + if msg == nil { + return errors.New("not found") + } + validateMessageSchema(t, string(msg.Data)) + + jsonPathValidation(test, msg.Data, func(testMod *testModule, obj interface{}) { + if el, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.state == 'Done')]`); err != nil || el == nil || len(el.([]interface{})) == 0 { + t.Errorf("element not found %s => %v", string(msg.Data), err) + } + if el, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.trigger == 'process_exit')]`); err != nil || el == nil || len(el.([]interface{})) == 0 { + t.Errorf("element not found %s => %v", string(msg.Data), err) + } + if el, err := jsonpath.JsonPathLookup(obj, `$.file.hashes`); err != nil || el == nil || len(el.([]interface{})) == 0 { + t.Errorf("element not found %s => %v", string(msg.Data), err) + } + }) + + return nil + }, retry.Delay(500*time.Millisecond), retry.Attempts(30), retry.DelayType(retry.FixedDelay)) + assert.NoError(t, err) + + <-done + }) + + t.Run("open-timeout", func(t *testing.T) { + test.msgSender.flush() + test.WaitSignal(t, func() error { + go func() { + timeoutCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + if err := runSyscallTesterFunc( + timeoutCtx, t, syscallTester, + // exceed the file hasher timeout, use fork to force an event that will trigger the flush mechanism + "slow-write", "2", testFile, "aaa", ";", "sleep", "4", ";", "fork", ";", "sleep", "1", + ); err != nil { + t.Error(err) + } + + done <- true + }() + return nil + }, func(event *model.Event, rule *rules.Rule) { + assertTriggeredRule(t, rule, "hash_action") + }) + + err = retry.Do(func() error { + msg := test.msgSender.getMsg("hash_action") + if msg == nil { + return errors.New("not found") + } + validateMessageSchema(t, string(msg.Data)) + + jsonPathValidation(test, msg.Data, func(testMod *testModule, obj interface{}) { + if el, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.state == 'Done')]`); err != nil || el == nil || len(el.([]interface{})) == 0 { + t.Errorf("element not found %s => %v", string(msg.Data), err) + } + if el, err := jsonpath.JsonPathLookup(obj, `$.agent.rule_actions[?(@.trigger == 'timeout')]`); err != nil || el == nil || len(el.([]interface{})) == 0 { + t.Errorf("element not found %s => %v", string(msg.Data), err) + } + if el, err := jsonpath.JsonPathLookup(obj, `$.file.hashes`); err != nil || el == nil || len(el.([]interface{})) == 0 { + t.Errorf("element not found %s => %v", string(msg.Data), err) + } + }) + + return nil + }, retry.Delay(500*time.Millisecond), retry.Attempts(30), retry.DelayType(retry.FixedDelay)) + assert.NoError(t, err) + + <-done + }) + +} diff --git a/pkg/security/tests/main_linux.go b/pkg/security/tests/main_linux.go index 7de491a609fb9..faa73ac357fea 100644 --- a/pkg/security/tests/main_linux.go +++ b/pkg/security/tests/main_linux.go @@ -59,6 +59,7 @@ func SkipIfNotAvailable(t *testing.T) { "~TestOpen", "~TestUnlink", "~TestActionKill", + "~TestActionHash", "~TestRmdir", "~TestRename", "~TestMkdir", diff --git a/pkg/security/tests/module_tester_linux.go b/pkg/security/tests/module_tester_linux.go index b542dc52cb918..ee60c4c206085 100644 --- a/pkg/security/tests/module_tester_linux.go +++ b/pkg/security/tests/module_tester_linux.go @@ -259,6 +259,9 @@ rules: signal: {{$Action.Kill.Signal}} {{- end}} {{- end}} +{{- if $Action.Hash}} + - hash: {} +{{- end}} {{- end}} {{end}} ` diff --git a/pkg/security/tests/schemas/agent_context.json b/pkg/security/tests/schemas/agent_context.json index 93cef1abb240e..daf8233065056 100644 --- a/pkg/security/tests/schemas/agent_context.json +++ b/pkg/security/tests/schemas/agent_context.json @@ -33,6 +33,9 @@ "oneOf": [ { "$ref": "/schemas/kill.schema.json" + }, + { + "$ref": "/schemas/hash.schema.json" } ] } diff --git a/pkg/security/tests/schemas/hash.schema.json b/pkg/security/tests/schemas/hash.schema.json new file mode 100644 index 0000000000000..1415e736a96b8 --- /dev/null +++ b/pkg/security/tests/schemas/hash.schema.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "kill.json", + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { + "type": "string" + }, + "trigger": { + "type": "string" + } + }, + "required": [ + "type", + "path", + "state", + "trigger" + ] +} \ No newline at end of file diff --git a/pkg/security/tests/syscall_tester/c/syscall_tester.c b/pkg/security/tests/syscall_tester/c/syscall_tester.c index 948ff885ab198..1a1cc06e800dc 100644 --- a/pkg/security/tests/syscall_tester/c/syscall_tester.c +++ b/pkg/security/tests/syscall_tester/c/syscall_tester.c @@ -642,8 +642,8 @@ int test_sleep(int argc, char **argv) { if (duration <= 0) { fprintf(stderr, "Please specify at a valid sleep duration\n"); } - for (int i = 0; i < duration; i++) - sleep(1); + sleep(duration); + return EXIT_SUCCESS; } @@ -659,8 +659,28 @@ int test_slow_cat(int argc, char **argv) { if (duration <= 0) { fprintf(stderr, "Please specify at a valid sleep duration\n"); } - for (int i = 0; i < duration; i++) - sleep(1); + sleep(duration); + + close(fd); + + return EXIT_SUCCESS; +} + +int test_slow_write(int argc, char **argv) { + if (argc != 4) { + fprintf(stderr, "%s: Please pass a duration in seconds, a path, and a content.\n", __FUNCTION__); + return EXIT_FAILURE; + } + + int duration = atoi(argv[1]); + int fd = open(argv[2], O_CREAT|O_WRONLY); + + if (duration <= 0) { + fprintf(stderr, "Please specify at a valid sleep duration\n"); + } + sleep(duration); + + write(fd, argv[3], strlen(argv[3])); close(fd); @@ -793,7 +813,10 @@ int main(int argc, char **argv) { exit_code = test_new_netns_exec(sub_argc, sub_argv); } else if (strcmp(cmd, "slow-cat") == 0) { exit_code = test_slow_cat(sub_argc, sub_argv); - } else { + } else if (strcmp(cmd, "slow-write") == 0) { + exit_code = test_slow_write(sub_argc, sub_argv); + } + else { fprintf(stderr, "Unknown command `%s`\n", cmd); exit_code = EXIT_FAILURE; } diff --git a/tasks/libs/types/copyright.py b/tasks/libs/types/copyright.py index 301db649f32b0..3d19e49ba4603 100755 --- a/tasks/libs/types/copyright.py +++ b/tasks/libs/types/copyright.py @@ -34,6 +34,7 @@ '/pkg/remoteconfig/state/products/apmsampling/.*_gen(_test){,1}.go', '/pkg/security/security_profile/dump/activity_dump_easyjson.go', '/pkg/security/probe/actions_easyjson.go', + '/pkg/security/probe/actions_linux_easyjson.go', '/pkg/security/probe/custom_events_easyjson.go', '/pkg/security/serializers/serializers_easyjson.go', '/pkg/security/serializers/serializers_linux_easyjson.go', From aa902e15630327e014038cdeefc251eae0be6c8e Mon Sep 17 00:00:00 2001 From: David Ortiz Date: Fri, 13 Sep 2024 17:05:22 +0200 Subject: [PATCH 042/195] [workloadmeta/collectors/remote/process] Fix flaky test (#29297) --- .../processcollector/process_collector_test.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/comp/core/workloadmeta/collectors/internal/remote/processcollector/process_collector_test.go b/comp/core/workloadmeta/collectors/internal/remote/processcollector/process_collector_test.go index a9e46426cc829..4621575a14975 100644 --- a/comp/core/workloadmeta/collectors/internal/remote/processcollector/process_collector_test.go +++ b/comp/core/workloadmeta/collectors/internal/remote/processcollector/process_collector_test.go @@ -296,18 +296,25 @@ func TestCollection(t *testing.T) { require.NoError(t, err) // Number of events expected. Each response can hold multiple events, either Set or Unset - numberOfEvents := len(test.preEvents) + expectedNumberOfEvents := len(test.preEvents) for _, ev := range test.serverResponses { - numberOfEvents += len(ev.SetEvents) + len(ev.UnsetEvents) + expectedNumberOfEvents += len(ev.SetEvents) + len(ev.UnsetEvents) } // Keep listening to workloadmeta until enough events are received. It is possible that the // first bundle does not hold any events. Thus, it is required to look at the number of events // in the bundle. - for i := 0; i < numberOfEvents; { + // Also, when a problem occurs and a re-sync is triggered, we might + // receive duplicate events, so we need to keep a map of received + // events to account for duplicates. + eventsReceived := make(map[workloadmeta.Event]struct{}) + for len(eventsReceived) < expectedNumberOfEvents { bundle := <-ch - close(bundle.Ch) - i += len(bundle.Events) + bundle.Acknowledge() + + for _, ev := range bundle.Events { + eventsReceived[ev] = struct{}{} + } } mockStore.Unsubscribe(ch) From d75437a2f076228280d2cc2d28a0535c285be446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20Juli=C3=A1n?= Date: Fri, 13 Sep 2024 17:09:04 +0200 Subject: [PATCH 043/195] [EBPF] Common uprobe attacher (#27663) Co-authored-by: Guy Arbitman --- pkg/ebpf/config.go | 4 + pkg/ebpf/testdata/c/uprobe_attacher-test.c | 20 + pkg/ebpf/uprobes/attacher.go | 945 ++++++++++++++++++ pkg/ebpf/uprobes/attacher_test.go | 935 +++++++++++++++++ pkg/ebpf/uprobes/doc.go | 60 ++ pkg/ebpf/uprobes/inspector.go | 135 +++ pkg/ebpf/uprobes/inspector_test.go | 63 ++ pkg/ebpf/uprobes/procfs.go | 119 +++ pkg/ebpf/uprobes/testutil.go | 155 +++ pkg/network/config/config.go | 4 - pkg/network/usm/sharedlibraries/compile.go | 8 +- pkg/network/usm/sharedlibraries/ebpf.go | 45 +- .../usm/sharedlibraries/testutil/testutil.go | 4 +- pkg/network/usm/sharedlibraries/types.go | 4 +- .../usm/sharedlibraries/types_linux.go | 4 +- pkg/network/usm/sharedlibraries/watcher.go | 16 +- pkg/network/usm/utils/file_registry.go | 9 +- tasks/system_probe.py | 2 +- 18 files changed, 2495 insertions(+), 37 deletions(-) create mode 100644 pkg/ebpf/testdata/c/uprobe_attacher-test.c create mode 100644 pkg/ebpf/uprobes/attacher.go create mode 100644 pkg/ebpf/uprobes/attacher_test.go create mode 100644 pkg/ebpf/uprobes/doc.go create mode 100644 pkg/ebpf/uprobes/inspector.go create mode 100644 pkg/ebpf/uprobes/inspector_test.go create mode 100644 pkg/ebpf/uprobes/procfs.go create mode 100644 pkg/ebpf/uprobes/testutil.go diff --git a/pkg/ebpf/config.go b/pkg/ebpf/config.go index c400e69da049e..f787676bbd623 100644 --- a/pkg/ebpf/config.go +++ b/pkg/ebpf/config.go @@ -75,6 +75,10 @@ type Config struct { // AttachKprobesWithKprobeEventsABI uses the kprobe_events ABI to attach kprobes rather than the newer perf ABI. AttachKprobesWithKprobeEventsABI bool + + // BypassEnabled is used in tests only. + // It enables a ebpf-manager feature to bypass programs on-demand for controlled visibility. + BypassEnabled bool } func key(pieces ...string) string { diff --git a/pkg/ebpf/testdata/c/uprobe_attacher-test.c b/pkg/ebpf/testdata/c/uprobe_attacher-test.c new file mode 100644 index 0000000000000..bcc755a245786 --- /dev/null +++ b/pkg/ebpf/testdata/c/uprobe_attacher-test.c @@ -0,0 +1,20 @@ +// This program is used to test the UprobeAttacher object, it defines two simple probes that attach +// to userspace functions. +#include "kconfig.h" +#include "ktypes.h" +#include "bpf_metadata.h" +#include +#include "bpf_tracing.h" +#include "bpf_helpers.h" +#include "bpf_helpers_custom.h" +#include + +SEC("uprobe/SSL_connect") +int uprobe__SSL_connect(struct pt_regs *ctx) { + return 0; +} + +SEC("uprobe/main") +int uprobe__main(struct pt_regs *ctx) { + return 0; +} diff --git a/pkg/ebpf/uprobes/attacher.go b/pkg/ebpf/uprobes/attacher.go new file mode 100644 index 0000000000000..ae7c254f58dc7 --- /dev/null +++ b/pkg/ebpf/uprobes/attacher.go @@ -0,0 +1,945 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +//go:build linux_bpf + +package uprobes + +import ( + "bufio" + "errors" + "fmt" + "os" + "path/filepath" + "regexp" + "strconv" + "strings" + "sync" + "time" + + manager "github.com/DataDog/ebpf-manager" + "github.com/hashicorp/go-multierror" + "golang.org/x/exp/maps" + + "github.com/DataDog/datadog-agent/pkg/ebpf" + "github.com/DataDog/datadog-agent/pkg/network/go/bininspect" + "github.com/DataDog/datadog-agent/pkg/network/usm/sharedlibraries" + "github.com/DataDog/datadog-agent/pkg/network/usm/utils" + "github.com/DataDog/datadog-agent/pkg/process/monitor" + "github.com/DataDog/datadog-agent/pkg/util/kernel" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// ExcludeMode defines the different optiont to exclude processes from attachment +type ExcludeMode uint8 + +const ( + // ExcludeSelf excludes the agent's own PID + ExcludeSelf ExcludeMode = 1 << iota + // ExcludeInternal excludes internal DataDog processes + ExcludeInternal + // ExcludeBuildkit excludes buildkitd processes + ExcludeBuildkit + // ExcludeContainerdTmp excludes containerd tmp mounts + ExcludeContainerdTmp +) + +var ( + // ErrSelfExcluded is returned when the PID is the same as the agent's PID. + ErrSelfExcluded = errors.New("self-excluded") + // ErrInternalDDogProcessRejected is returned when the PID is an internal datadog process. + ErrInternalDDogProcessRejected = errors.New("internal datadog process rejected") + // ErrNoMatchingRule is returned when no rule matches the shared library path. + ErrNoMatchingRule = errors.New("no matching rule") + // regex that defines internal DataDog processes + internalProcessRegex = regexp.MustCompile("datadog-agent/.*/((process|security|trace)-agent|system-probe|agent)") +) + +// AttachTarget defines the target to which we should attach the probes, libraries or executables +type AttachTarget uint8 + +const ( + // AttachToExecutable attaches to the main executable + AttachToExecutable AttachTarget = 1 << iota + // AttachToSharedLibraries attaches to shared libraries + AttachToSharedLibraries +) + +// ProbeOptions is a structure that holds the options for a probe attachment. By default +// these values will be inferred from the probe name, but the user can override them if needed. +type ProbeOptions struct { + // IsManualReturn indicates that the probe is a manual return probe, which means that the inspector + // will find the return locations of the function and attach to them instead of using uretprobes. + IsManualReturn bool + + // Symbol is the symbol name to attach the probe to. This is useful when the symbol name is not a valid + // C identifier (e.g. Go functions) + Symbol string +} + +// AttachRule defines how to attach a certain set of probes. Uprobes can be attached +// to shared libraries or executables, this structure tells the attacher which ones to +// select and to which targets to do it. +type AttachRule struct { + // LibraryNameRegex defines which libraries should be matched by this rule + LibraryNameRegex *regexp.Regexp + // ExecutableFilter is a function that receives the path of the executable and returns true if it should be matched + ExecutableFilter func(string, *ProcInfo) bool + // Targets defines the targets to which we should attach the probes, shared libraries and/or executables + Targets AttachTarget + // ProbesSelectors defines which probes should be attached and how should we validate + // the attachment (e.g., whether we need all probes active or just one of them, or in a best-effort basis) + ProbesSelector []manager.ProbesSelector + // ProbeOptionsOverride allows the user to override the options for a probe that are inferred from the name + // of the probe. This way the user can set options such as manual return detection or symbol names for probes + // whose names aren't valid C identifiers. + ProbeOptionsOverride map[string]ProbeOptions +} + +// canTarget returns true if the rule matches the given AttachTarget +func (r *AttachRule) canTarget(target AttachTarget) bool { + return r.Targets&target != 0 +} + +func (r *AttachRule) matchesLibrary(path string) bool { + return r.canTarget(AttachToSharedLibraries) && r.LibraryNameRegex != nil && r.LibraryNameRegex.MatchString(path) +} + +func (r *AttachRule) matchesExecutable(path string, procInfo *ProcInfo) bool { + return r.canTarget(AttachToExecutable) && (r.ExecutableFilter == nil || r.ExecutableFilter(path, procInfo)) +} + +// getProbeOptions returns the options for a given probe, checking if we have specific overrides +// in this rule and, if not, using the options inferred from the probe name. +func (r *AttachRule) getProbeOptions(probeID manager.ProbeIdentificationPair) (ProbeOptions, error) { + if r.ProbeOptionsOverride != nil { + if options, ok := r.ProbeOptionsOverride[probeID.EBPFFuncName]; ok { + return options, nil + } + } + + symbol, isManualReturn, err := parseSymbolFromEBPFProbeName(probeID.EBPFFuncName) + if err != nil { + return ProbeOptions{}, err + } + + return ProbeOptions{ + Symbol: symbol, + IsManualReturn: isManualReturn, + }, nil +} + +// Validate checks whether the rule is valid, returns nil if it is, an error message otherwise +func (r *AttachRule) Validate() error { + var result error + + if r.Targets == 0 { + result = multierror.Append(result, errors.New("no targets specified")) + } + + if r.canTarget(AttachToSharedLibraries) && r.LibraryNameRegex == nil { + result = multierror.Append(result, errors.New("no library name regex specified")) + } + + for _, selector := range r.ProbesSelector { + for _, probeID := range selector.GetProbesIdentificationPairList() { + _, err := r.getProbeOptions(probeID) + if err != nil { + result = multierror.Append(result, fmt.Errorf("cannot get options for probe %s: %w", probeID.EBPFFuncName, err)) + } + } + } + + return result +} + +// AttacherConfig defines the configuration for the attacher +type AttacherConfig struct { + // Rules defines a series of rules that tell the attacher how to attach the probes + Rules []*AttachRule + + // ScanProcessesInterval defines the interval at which we scan for terminated processes and new processes we haven't seen + ScanProcessesInterval time.Duration + + // EnablePeriodicScanNewProcesses defines whether the attacher should scan for new processes periodically (with ScanProcessesInterval) + EnablePeriodicScanNewProcesses bool + + // ProcRoot is the root directory of the proc filesystem + ProcRoot string + + // ExcludeTargets defines the targets that should be excluded from the attacher + ExcludeTargets ExcludeMode + + // EbpfConfig is the configuration for the eBPF program + EbpfConfig *ebpf.Config + + // PerformInitialScan defines if the attacher should perform an initial scan of the processes before starting the monitor + PerformInitialScan bool + + // ProcessMonitorEventStream defines whether the process monitor is using the event stream + ProcessMonitorEventStream bool + + // EnableDetailedLogging makes the attacher log why it's attaching or not attaching to a process + // This is useful for debugging purposes, do not enable in production. + EnableDetailedLogging bool +} + +// SetDefaults configures the AttacherConfig with default values for those fields for which the compiler +// defaults are not enough +func (ac *AttacherConfig) SetDefaults() { + if ac.ScanProcessesInterval == 0 { + ac.ScanProcessesInterval = 30 * time.Second + } + + if ac.ProcRoot == "" { + ac.ProcRoot = kernel.HostProc() + } + + if ac.EbpfConfig == nil { + ac.EbpfConfig = ebpf.NewConfig() + } +} + +// Validate checks whether the configuration is valid, returns nil if it is, an error message otherwise +func (ac *AttacherConfig) Validate() error { + var errs []string + + if ac.EbpfConfig == nil { + errs = append(errs, "missing ebpf config") + } + + if ac.ProcRoot == "" { + errs = append(errs, "missing proc root") + } + + for _, rule := range ac.Rules { + err := rule.Validate() + if err != nil { + errs = append(errs, err.Error()) + } + } + + if len(errs) == 0 { + return nil + } + + return errors.New("invalid attacher configuration: " + strings.Join(errs, ", ")) +} + +// ProbeManager is an interface that defines the methods that a Manager implements, +// so that we can replace it in tests for a mock object +type ProbeManager interface { + // AddHook adds a hook to the manager with the given UID and probe + AddHook(UID string, probe *manager.Probe) error + + // DetachHook detaches the hook with the ID pair + DetachHook(manager.ProbeIdentificationPair) error + + // GetProbe returns the probe with the given ID pair, and a boolean indicating if it was found + GetProbe(manager.ProbeIdentificationPair) (*manager.Probe, bool) +} + +// FileRegistry is an interface that defines the methods that a FileRegistry implements, so that we can replace it in tests for a mock object +type FileRegistry interface { + // Register registers a file path to be tracked by the attacher for the given PID. The registry will call the activationCB when the file is opened + // the first time, and the deactivationCB when the file is closed. If the file is already registered, the alreadyRegistered callback + // will be called instead of the activationCB. + Register(namespacedPath string, pid uint32, activationCB, deactivationCB, alreadyRegistered utils.Callback) error + + // Unregister unregisters a file path from the attacher. The deactivation callback will be called for all + // files that were registered with the given PID and aren't used anymore. + Unregister(uint32) error + + // Clear clears the registry, removing all registered files + Clear() + + // GetRegisteredProcesses returns a map of all the processes that are currently registered in the registry + GetRegisteredProcesses() map[uint32]struct{} +} + +// AttachCallback is a callback that is called whenever a probe is attached successfully +type AttachCallback func(*manager.Probe, *utils.FilePath) + +// UprobeAttacher is a struct that handles the attachment of uprobes to processes and libraries +type UprobeAttacher struct { + // name contains the name of this attacher for identification + name string + + // done is a channel to signal the attacher to stop + done chan struct{} + + // wg is a wait group to wait for the attacher to stop + wg sync.WaitGroup + + // config holds the configuration of the attacher. Not a pointer as we want + // a copy of the configuration so that the user cannot change it, as we have + // certain cached values that we have no way to invalidate if the config + // changes after the attacher is created + config AttacherConfig + + // fileRegistry is used to keep track of the files we are attached to, and attach only once to each file + fileRegistry FileRegistry + + // manager is used to manage the eBPF probes (attach/detach to processes) + manager ProbeManager + + // inspector is used extract the metadata from the binaries + inspector BinaryInspector + + // pathToAttachedProbes maps a filesystem path to the probes attached to it. + // Used to detach them once the path is no longer used. + pathToAttachedProbes map[string][]manager.ProbeIdentificationPair + + // onAttachCallback is a callback that is called whenever a probe is attached + onAttachCallback AttachCallback + + // soWatcher is the program that launches events whenever shared libraries are + // opened + soWatcher *sharedlibraries.EbpfProgram + + // handlesLibrariesCached is a cache for the handlesLibraries function, avoiding + // recomputation every time + handlesLibrariesCached *bool + + // handlesExecutablesCached is a cache for the handlesExecutables function, avoiding + // recomputation every time + handlesExecutablesCached *bool +} + +// NewUprobeAttacher creates a new UprobeAttacher. Receives as arguments the +// name of the attacher, the configuration, the probe manager (ebpf.Manager +// usually), a callback to be called whenever a probe is attached (optional, can +// be nil), and the binary inspector to be used (e.g., while we usually want +// NativeBinaryInspector here, we might want the GoBinaryInspector to attach to +// Go functions in a different way). +// Note that the config is copied, not referenced. The attacher caches some values +// that depend on the configuration, so any changes to the configuration after the +// attacher would make those caches incoherent. This way we ensure that the attacher +// is always consistent with the configuration it was created with. +func NewUprobeAttacher(name string, config AttacherConfig, mgr ProbeManager, onAttachCallback AttachCallback, inspector BinaryInspector) (*UprobeAttacher, error) { + config.SetDefaults() + + if err := config.Validate(); err != nil { + return nil, fmt.Errorf("invalid attacher configuration: %w", err) + } + + ua := &UprobeAttacher{ + name: name, + config: config, + fileRegistry: utils.NewFileRegistry(name), + manager: mgr, + onAttachCallback: onAttachCallback, + pathToAttachedProbes: make(map[string][]manager.ProbeIdentificationPair), + done: make(chan struct{}), + inspector: inspector, + } + + utils.AddAttacher(name, ua) + + return ua, nil +} + +// handlesLibraries returns whether the attacher has rules configured to attach to shared libraries. +// It caches the result to avoid recalculating it every time we are attaching to a PID. +func (ua *UprobeAttacher) handlesLibraries() bool { + if ua.handlesLibrariesCached != nil { + return *ua.handlesLibrariesCached + } + + result := false + for _, rule := range ua.config.Rules { + if rule.canTarget(AttachToSharedLibraries) { + result = true + break + } + } + ua.handlesLibrariesCached = &result + return result +} + +// handlesLibraries returns whether the attacher has rules configured to attach to executables directly +// It caches the result to avoid recalculating it every time we are attaching to a PID. +func (ua *UprobeAttacher) handlesExecutables() bool { + if ua.handlesExecutablesCached != nil { + return *ua.handlesExecutablesCached + } + + result := false + for _, rule := range ua.config.Rules { + if rule.canTarget(AttachToExecutable) { + result = true + break + } + } + ua.handlesExecutablesCached = &result + return result +} + +// Start starts the attacher, attaching to the processes and libraries as needed +func (ua *UprobeAttacher) Start() error { + var cleanupExec, cleanupExit func() + procMonitor := monitor.GetProcessMonitor() + err := procMonitor.Initialize(ua.config.ProcessMonitorEventStream) + if err != nil { + return fmt.Errorf("error initializing process monitor: %w", err) + } + + if ua.handlesExecutables() { + cleanupExec = procMonitor.SubscribeExec(ua.handleProcessStart) + } + // We always want to track process deletions, to avoid memory leaks + cleanupExit = procMonitor.SubscribeExit(ua.handleProcessExit) + + if ua.handlesLibraries() { + if !sharedlibraries.IsSupported(ua.config.EbpfConfig) { + return errors.New("shared libraries tracing not supported for this platform") + } + + ua.soWatcher = sharedlibraries.NewEBPFProgram(ua.config.EbpfConfig) + + err := ua.soWatcher.Init() + if err != nil { + return fmt.Errorf("error initializing shared library program: %w", err) + } + err = ua.soWatcher.Start() + if err != nil { + return fmt.Errorf("error starting shared library program: %w", err) + } + } + + if ua.config.PerformInitialScan { + // Initial scan only looks at existing processes, and as it's the first scan + // we don't have to track deletions + err := ua.Sync(true, false) + if err != nil { + return fmt.Errorf("error during initial scan: %w", err) + } + } + + ua.wg.Add(1) + go func() { + processSync := time.NewTicker(ua.config.ScanProcessesInterval) + + defer func() { + processSync.Stop() + if cleanupExec != nil { + cleanupExec() + } + cleanupExit() + procMonitor.Stop() + ua.fileRegistry.Clear() + if ua.soWatcher != nil { + ua.soWatcher.Stop() + } + ua.wg.Done() + log.Infof("uprobe attacher %s stopped", ua.name) + }() + + var sharedLibDataChan <-chan ebpf.DataEvent + var sharedLibLostChan <-chan uint64 + + if ua.soWatcher != nil { + sharedLibDataChan = ua.soWatcher.GetPerfHandler().DataChannel() + sharedLibLostChan = ua.soWatcher.GetPerfHandler().LostChannel() + } + + for { + select { + case <-ua.done: + return + case <-processSync.C: + // We always track process deletions in the scan, to avoid memory leaks. + _ = ua.Sync(ua.config.EnablePeriodicScanNewProcesses, true) + case event, ok := <-sharedLibDataChan: + if !ok { + return + } + _ = ua.handleLibraryOpen(&event) + case <-sharedLibLostChan: + // Nothing to do in this case + break + } + } + }() + log.Infof("uprobe attacher %s started", ua.name) + + return nil +} + +// Sync scans the proc filesystem for new processes and detaches from terminated ones +func (ua *UprobeAttacher) Sync(trackCreations, trackDeletions bool) error { + if !trackDeletions && !trackCreations { + return nil // Nothing to do + } + + var deletionCandidates map[uint32]struct{} + if trackDeletions { + deletionCandidates = ua.fileRegistry.GetRegisteredProcesses() + } + thisPID, err := kernel.RootNSPID() + if err != nil { + return err + } + + _ = kernel.WithAllProcs(ua.config.ProcRoot, func(pid int) error { + if pid == thisPID { // don't scan ourselves + return nil + } + + if trackDeletions { + if _, ok := deletionCandidates[uint32(pid)]; ok { + // We have previously hooked into this process and it remains active, + // so we remove it from the deletionCandidates list, and move on to the next PID + delete(deletionCandidates, uint32(pid)) + return nil + } + } + + if trackCreations { + // This is a new PID so we attempt to attach SSL probes to it + _ = ua.AttachPID(uint32(pid)) + } + return nil + }) + + if trackDeletions { + // At this point all entries from deletionCandidates are no longer alive, so + // we should detach our SSL probes from them + for pid := range deletionCandidates { + ua.handleProcessExit(pid) + } + } + + return nil +} + +// Stop stops the attacher +func (ua *UprobeAttacher) Stop() { + close(ua.done) + ua.wg.Wait() +} + +// 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 +} + +// handleProcessExit is called when a process finishes, wraps DetachPID but ignoring the error +// for API compatibility with processMonitor +func (ua *UprobeAttacher) handleProcessExit(pid uint32) { + _ = ua.DetachPID(pid) +} + +func (ua *UprobeAttacher) handleLibraryOpen(event *ebpf.DataEvent) error { + defer event.Done() + + libpath := sharedlibraries.ToLibPath(event.Data) + path := sharedlibraries.ToBytes(&libpath) + + return ua.AttachLibrary(string(path), libpath.Pid) +} + +func (ua *UprobeAttacher) buildRegisterCallbacks(matchingRules []*AttachRule, procInfo *ProcInfo) (func(utils.FilePath) error, func(utils.FilePath) error) { + registerCB := func(p utils.FilePath) error { + err := ua.attachToBinary(p, matchingRules, procInfo) + if ua.config.EnableDetailedLogging { + log.Debugf("uprobes: attaching to %s (PID %d): err=%v", p.HostPath, procInfo.PID, err) + } + return err + } + unregisterCB := func(p utils.FilePath) error { + err := ua.detachFromBinary(p) + if ua.config.EnableDetailedLogging { + log.Debugf("uprobes: detaching from %s (PID %d): err=%v", p.HostPath, p.PID, err) + } + return err + } + + return registerCB, unregisterCB +} + +// AttachLibrary attaches the probes to the given library, opened by a given PID +func (ua *UprobeAttacher) AttachLibrary(path string, pid uint32) error { + if (ua.config.ExcludeTargets&ExcludeSelf) != 0 && int(pid) == os.Getpid() { + return ErrSelfExcluded + } + + matchingRules := ua.getRulesForLibrary(path) + if len(matchingRules) == 0 { + return ErrNoMatchingRule + } + + registerCB, unregisterCB := ua.buildRegisterCallbacks(matchingRules, NewProcInfo(ua.config.ProcRoot, pid)) + + return ua.fileRegistry.Register(path, pid, registerCB, unregisterCB, utils.IgnoreCB) +} + +// getRulesForLibrary returns the rules that match the given library path +func (ua *UprobeAttacher) getRulesForLibrary(path string) []*AttachRule { + var matchedRules []*AttachRule + + for _, rule := range ua.config.Rules { + if rule.matchesLibrary(path) { + matchedRules = append(matchedRules, rule) + } + } + return matchedRules +} + +// getRulesForExecutable returns the rules that match the given executable +func (ua *UprobeAttacher) getRulesForExecutable(path string, procInfo *ProcInfo) []*AttachRule { + var matchedRules []*AttachRule + + for _, rule := range ua.config.Rules { + if rule.matchesExecutable(path, procInfo) { + matchedRules = append(matchedRules, rule) + } + } + return matchedRules +} + +var errIterationStart = errors.New("iteration start") + +// getExecutablePath resolves the executable of the given PID looking in procfs. Automatically +// handles delays in procfs updates. Will return an error if the path cannot be resolved +func (ua *UprobeAttacher) getExecutablePath(pid uint32) (string, error) { + pidAsStr := strconv.FormatUint(uint64(pid), 10) + exePath := filepath.Join(ua.config.ProcRoot, pidAsStr, "exe") + + var binPath string + err := errIterationStart + end := time.Now().Add(procFSUpdateTimeout) + + for err != nil && end.After(time.Now()) { + binPath, err = os.Readlink(exePath) + if err != nil { + time.Sleep(time.Millisecond) + } + } + + if err != nil { + return "", err + } + + return binPath, nil +} + +const optionAttachToLibs = true + +// AttachPID attaches the corresponding probes to a given pid +func (ua *UprobeAttacher) AttachPID(pid uint32) error { + return ua.AttachPIDWithOptions(pid, optionAttachToLibs) +} + +// AttachPIDWithOptions attaches the corresponding probes to a given pid +func (ua *UprobeAttacher) AttachPIDWithOptions(pid uint32, attachToLibs bool) error { + if (ua.config.ExcludeTargets&ExcludeSelf) != 0 && int(pid) == os.Getpid() { + return ErrSelfExcluded + } + + procInfo := NewProcInfo(ua.config.ProcRoot, pid) + + // Only compute the binary path if we are going to need it. It's better to do these two checks + // (which are cheak, the handlesExecutables function is cached) than to do the syscall + // every time + var binPath string + var err error + if ua.handlesExecutables() || (ua.config.ExcludeTargets&ExcludeInternal) != 0 { + binPath, err = procInfo.Exe() + if err != nil { + return err + } + } + + if (ua.config.ExcludeTargets&ExcludeInternal) != 0 && internalProcessRegex.MatchString(binPath) { + return ErrInternalDDogProcessRejected + } + + if ua.handlesExecutables() { + matchingRules := ua.getRulesForExecutable(binPath, procInfo) + + if len(matchingRules) != 0 { + registerCB, unregisterCB := ua.buildRegisterCallbacks(matchingRules, procInfo) + err = ua.fileRegistry.Register(binPath, pid, registerCB, unregisterCB, utils.IgnoreCB) + if err != nil { + return err + } + } + } + + if attachToLibs && ua.handlesLibraries() { + return ua.attachToLibrariesOfPID(pid) + } + + return nil +} + +// DetachPID detaches the uprobes attached to a PID +func (ua *UprobeAttacher) DetachPID(pid uint32) error { + return ua.fileRegistry.Unregister(pid) +} + +const buildKitProcessName = "buildkitd" + +func isBuildKit(procInfo *ProcInfo) bool { + comm, err := procInfo.Comm() + if err != nil { + return false + } + return strings.HasPrefix(comm, buildKitProcessName) +} + +func isContainerdTmpMount(path string) bool { + return strings.Contains(path, "tmpmounts/containerd-mount") +} + +// getUID() return a key of length 5 as the kernel uprobe registration path is limited to a length of 64 +// ebpf-manager/utils.go:GenerateEventName() MaxEventNameLen = 64 +// MAX_EVENT_NAME_LEN (linux/kernel/trace/trace.h) +// +// Length 5 is arbitrary value as the full string of the eventName format is +// +// fmt.Sprintf("%s_%.*s_%s_%s", probeType, maxFuncNameLen, functionName, UID, attachPIDstr) +// +// functionName is variable but with a minimum guarantee of 10 chars +func getUID(lib utils.PathIdentifier) string { + return lib.Key()[:5] +} + +func parseSymbolFromEBPFProbeName(probeName string) (symbol string, isManualReturn bool, err error) { + parts := strings.Split(probeName, "__") + if len(parts) < 2 { + err = fmt.Errorf("invalid probe name %s, no double underscore (__) separating probe type and function name", probeName) + return + } + + symbol = parts[1] + if len(parts) > 2 { + if parts[2] == "return" { + isManualReturn = true + } else { + err = fmt.Errorf("invalid probe name %s, unexpected third part %s. Format should be probeType__funcName[__return]", probeName, parts[2]) + return + } + } + + return +} + +// attachToBinary attaches the probes to the given binary. Important: it does not perform any cleanup on failure. +// This is to match the behavior of the FileRegistry, which will call the deactivation callback on failure of the registration +// callback. +func (ua *UprobeAttacher) attachToBinary(fpath utils.FilePath, matchingRules []*AttachRule, procInfo *ProcInfo) error { + if ua.config.ExcludeTargets&ExcludeBuildkit != 0 && isBuildKit(procInfo) { + return fmt.Errorf("process %d is buildkitd, skipping", fpath.PID) + } else if ua.config.ExcludeTargets&ExcludeContainerdTmp != 0 && isContainerdTmpMount(fpath.HostPath) { + return fmt.Errorf("path %s from process %d is tempmount of containerd, skipping", fpath.HostPath, fpath.PID) + } + + symbolsToRequest, err := ua.computeSymbolsToRequest(matchingRules) + if err != nil { + return fmt.Errorf("error computing symbols to request for rules %+v: %w", matchingRules, err) + } + + inspectResult, isAttachable, err := ua.inspector.Inspect(fpath, symbolsToRequest) + if err != nil { + return fmt.Errorf("error inspecting %s: %w", fpath.HostPath, err) + } + if !isAttachable { + return fmt.Errorf("incompatible binary %s", fpath.HostPath) + } + + uid := getUID(fpath.ID) + + for _, rule := range matchingRules { + for _, selector := range rule.ProbesSelector { + err = ua.attachProbeSelector(selector, fpath, uid, rule, inspectResult) + if err != nil { + return err + } + } + } + + return nil +} + +func (ua *UprobeAttacher) attachProbeSelector(selector manager.ProbesSelector, fpath utils.FilePath, fpathUID string, rule *AttachRule, inspectResult map[string]bininspect.FunctionMetadata) error { + _, isBestEffort := selector.(*manager.BestEffort) + + for _, probeID := range selector.GetProbesIdentificationPairList() { + probeOpts, err := rule.getProbeOptions(probeID) + if err != nil { + return fmt.Errorf("error parsing probe name %s: %w", probeID.EBPFFuncName, err) + } + + data, found := inspectResult[probeOpts.Symbol] + if !found { + if isBestEffort { + return nil + } + // This should not happen, as Inspect should have already + // returned an error if mandatory symbols weren't found. + // However and for safety, we'll check again and return an + // error if the symbol is not found. + return fmt.Errorf("symbol %s not found in %s", probeOpts.Symbol, fpath.HostPath) + } + + var locationsToAttach []uint64 + var probeTypeCode string // to make unique UIDs between return/non-return probes + if probeOpts.IsManualReturn { + locationsToAttach = data.ReturnLocations + probeTypeCode = "r" + } else { + locationsToAttach = []uint64{data.EntryLocation} + probeTypeCode = "d" + } + + for i, location := range locationsToAttach { + newProbeID := manager.ProbeIdentificationPair{ + EBPFFuncName: probeID.EBPFFuncName, + UID: fmt.Sprintf("%s%s%d", fpathUID, probeTypeCode, i), // Make UID unique even if we have multiple locations + } + + probe, found := ua.manager.GetProbe(newProbeID) + if found { + // We have already probed this process, just ensure it's running and skip it + if !probe.IsRunning() { + err := probe.Attach() + if err != nil { + return fmt.Errorf("cannot attach running probe %v: %w", newProbeID, err) + } + } + if ua.config.EnableDetailedLogging { + log.Debugf("Probe %v already attached to %s", newProbeID, fpath.HostPath) + } + continue + } + + newProbe := &manager.Probe{ + ProbeIdentificationPair: newProbeID, + BinaryPath: fpath.HostPath, + UprobeOffset: location, + HookFuncName: probeOpts.Symbol, + } + err = ua.manager.AddHook("", newProbe) + if err != nil { + return fmt.Errorf("error attaching probe %+v: %w", newProbe, err) + } + + ebpf.AddProgramNameMapping(newProbe.ID(), newProbe.EBPFFuncName, ua.name) + ua.pathToAttachedProbes[fpath.HostPath] = append(ua.pathToAttachedProbes[fpath.HostPath], newProbeID) + + if ua.onAttachCallback != nil { + ua.onAttachCallback(newProbe, &fpath) + } + + // Update the probe IDs with the new UID, so that the validator can find them + // correctly (we're changing UIDs every time) + selector.EditProbeIdentificationPair(probeID, newProbeID) + + if ua.config.EnableDetailedLogging { + log.Debugf("Attached probe %v to %s (PID %d)", newProbeID, fpath.HostPath, fpath.PID) + } + } + } + + manager, ok := ua.manager.(*manager.Manager) + if ok { + if err := selector.RunValidator(manager); err != nil { + return fmt.Errorf("error validating probes: %w", err) + } + } + + return nil +} + +func (ua *UprobeAttacher) computeSymbolsToRequest(rules []*AttachRule) ([]SymbolRequest, error) { + var requests []SymbolRequest + for _, rule := range rules { + for _, selector := range rule.ProbesSelector { + _, isBestEffort := selector.(*manager.BestEffort) + for _, selector := range selector.GetProbesIdentificationPairList() { + opts, err := rule.getProbeOptions(selector) + if err != nil { + return nil, fmt.Errorf("error parsing probe name %s: %w", selector.EBPFFuncName, err) + } + + requests = append(requests, SymbolRequest{ + Name: opts.Symbol, + IncludeReturnLocations: opts.IsManualReturn, + BestEffort: isBestEffort, + }) + } + } + } + + return requests, nil +} + +func (ua *UprobeAttacher) detachFromBinary(fpath utils.FilePath) error { + for _, probeID := range ua.pathToAttachedProbes[fpath.HostPath] { + err := ua.manager.DetachHook(probeID) + if err != nil { + return fmt.Errorf("error detaching probe %+v: %w", probeID, err) + } + } + + ua.inspector.Cleanup(fpath) + + return nil +} + +func (ua *UprobeAttacher) getLibrariesFromMapsFile(pid int) ([]string, error) { + mapsPath := filepath.Join(ua.config.ProcRoot, strconv.Itoa(pid), "maps") + mapsFile, err := os.Open(mapsPath) + if err != nil { + return nil, fmt.Errorf("cannot open maps file at %s: %w", mapsPath, err) + } + defer mapsFile.Close() + + scanner := bufio.NewScanner(bufio.NewReader(mapsFile)) + libs := make(map[string]struct{}) + for scanner.Scan() { + line := scanner.Text() + cols := strings.Fields(line) + // ensuring we have exactly 6 elements (skip '(deleted)' entries) in the line, and the 4th element (inode) is + // not zero (indicates it is a path, and not an anonymous path). + if len(cols) == 6 && cols[4] != "0" { + libs[cols[5]] = struct{}{} + } + } + + return maps.Keys(libs), nil +} + +func (ua *UprobeAttacher) attachToLibrariesOfPID(pid uint32) error { + registerErrors := make([]error, 0) + successfulMatches := make([]string, 0) + libs, err := ua.getLibrariesFromMapsFile(int(pid)) + if err != nil { + return err + } + for _, libpath := range libs { + err := ua.AttachLibrary(libpath, pid) + + if err == nil { + successfulMatches = append(successfulMatches, libpath) + } else if !errors.Is(err, ErrNoMatchingRule) { + registerErrors = append(registerErrors, err) + } + } + + if len(successfulMatches) == 0 { + if len(registerErrors) == 0 { + return nil // No libraries found to attach + } + return 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 nil +} diff --git a/pkg/ebpf/uprobes/attacher_test.go b/pkg/ebpf/uprobes/attacher_test.go new file mode 100644 index 0000000000000..e71a62d771306 --- /dev/null +++ b/pkg/ebpf/uprobes/attacher_test.go @@ -0,0 +1,935 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +//go:build linux_bpf + +package uprobes + +import ( + "fmt" + "os" + "os/exec" + "path/filepath" + "regexp" + "strings" + "testing" + "time" + + manager "github.com/DataDog/ebpf-manager" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" + + ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" + "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode" + "github.com/DataDog/datadog-agent/pkg/ebpf/ebpftest" + eventmonitortestutil "github.com/DataDog/datadog-agent/pkg/eventmonitor/testutil" + "github.com/DataDog/datadog-agent/pkg/network/go/bininspect" + "github.com/DataDog/datadog-agent/pkg/network/usm/sharedlibraries" + fileopener "github.com/DataDog/datadog-agent/pkg/network/usm/sharedlibraries/testutil" + "github.com/DataDog/datadog-agent/pkg/network/usm/utils" + "github.com/DataDog/datadog-agent/pkg/process/monitor" + procmontestutil "github.com/DataDog/datadog-agent/pkg/process/monitor/testutil" + "github.com/DataDog/datadog-agent/pkg/util/kernel" +) + +// === Tests + +func TestCanCreateAttacher(t *testing.T) { + ua, err := NewUprobeAttacher("mock", AttacherConfig{}, &MockManager{}, nil, nil) + require.NoError(t, err) + require.NotNil(t, ua) +} + +func TestAttachPidExcludesInternal(t *testing.T) { + exe := "datadog-agent/bin/system-probe" + procRoot := CreateFakeProcFS(t, []FakeProcFSEntry{{Pid: 1, Cmdline: exe, Command: exe, Exe: exe}}) + config := AttacherConfig{ + ExcludeTargets: ExcludeInternal, + ProcRoot: procRoot, + } + ua, err := NewUprobeAttacher("mock", config, &MockManager{}, nil, nil) + require.NoError(t, err) + require.NotNil(t, ua) + + err = ua.AttachPIDWithOptions(1, false) + require.ErrorIs(t, err, ErrInternalDDogProcessRejected) +} + +func TestAttachPidExcludesSelf(t *testing.T) { + config := AttacherConfig{ + ExcludeTargets: ExcludeSelf, + } + ua, err := NewUprobeAttacher("mock", config, &MockManager{}, nil, nil) + require.NoError(t, err) + require.NotNil(t, ua) + + err = ua.AttachPIDWithOptions(uint32(os.Getpid()), false) + require.ErrorIs(t, err, ErrSelfExcluded) +} + +func TestGetExecutablePath(t *testing.T) { + exe := "/bin/bash" + procRoot := CreateFakeProcFS(t, []FakeProcFSEntry{{Pid: 1, Cmdline: "", Command: exe, Exe: exe}}) + config := AttacherConfig{ + ProcRoot: procRoot, + } + ua, err := NewUprobeAttacher("mock", config, &MockManager{}, nil, nil) + require.NoError(t, err) + require.NotNil(t, ua) + + path, err := ua.getExecutablePath(1) + require.NoError(t, err, "failed to get executable path for existing PID") + require.Equal(t, path, exe) + + path, err = ua.getExecutablePath(404) + require.Error(t, err, "should fail to get executable path for non-existing PID") + require.Empty(t, path, "should return empty path for non-existing PID") +} + +const mapsFileSample = ` +08048000-08049000 r-xp 00000000 03:00 8312 /opt/test +08049000-0804a000 rw-p 00001000 03:00 8312 /opt/test +0804a000-0806b000 rw-p 00000000 00:00 0 [heap] +a7cb1000-a7cb2000 ---p 00000000 00:00 0 +a7cb2000-a7eb2000 rw-p 00000000 00:00 0 +a7eb2000-a7eb3000 ---p 00000000 00:00 0 +a7eb3000-a7ed5000 rw-p 00000000 00:00 0 +a7ed5000-a8008000 r-xp 00000000 03:00 4222 /lib/libc.so.6 +a8008000-a800a000 r--p 00133000 03:00 4222 /lib/libc.so.6 +a800a000-a800b000 rw-p 00135000 03:00 4222 /lib/libc.so.6 +a800b000-a800e000 rw-p 00000000 00:00 0 +a800e000-a8022000 r-xp 00000000 03:00 14462 /lib/libpthread.so.0 +a8022000-a8023000 r--p 00013000 03:00 14462 /lib/libpthread.so.0 +a8023000-a8024000 rw-p 00014000 03:00 14462 /lib/libpthread.so.0 +a8024000-a8027000 rw-p 00000000 00:00 0 +a8027000-a8043000 r-xp 00000000 03:00 8317 /lib/ld-linux.so.2 +a8043000-a8044000 r--p 0001b000 03:00 8317 /lib/ld-linux.so.2 +a8044000-a8045000 rw-p 0001c000 03:00 8317 /lib/ld-linux.so.2 +aff35000-aff4a000 rw-p 00000000 00:00 0 [stack] +ffffe000-fffff000 r-xp 00000000 00:00 0 [vdso] +01c00000-02000000 rw-p 00000000 00:0d 6123886 /anon_hugepage (deleted) +` + +func TestGetLibrariesFromMapsFile(t *testing.T) { + pid := 1 + procRoot := CreateFakeProcFS(t, []FakeProcFSEntry{{Pid: uint32(pid), Maps: mapsFileSample}}) + config := AttacherConfig{ + ProcRoot: procRoot, + } + ua, err := NewUprobeAttacher("mock", config, &MockManager{}, nil, nil) + require.NoError(t, err) + require.NotNil(t, ua) + + libs, err := ua.getLibrariesFromMapsFile(pid) + require.NoError(t, err, "failed to get libraries from maps file") + require.NotEmpty(t, libs, "should return libraries from maps file") + expectedLibs := []string{"/opt/test", "/lib/libc.so.6", "/lib/libpthread.so.0", "/lib/ld-linux.so.2"} + require.ElementsMatch(t, expectedLibs, libs) +} + +func TestComputeRequestedSymbols(t *testing.T) { + ua, err := NewUprobeAttacher("mock", AttacherConfig{}, &MockManager{}, nil, nil) + require.NoError(t, err) + require.NotNil(t, ua) + + selectorsOnlyAllOf := []manager.ProbesSelector{ + &manager.AllOf{ + Selectors: []manager.ProbesSelector{ + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFFuncName: "uprobe__SSL_connect"}}, + }, + }, + } + + t.Run("OnlyMandatory", func(tt *testing.T) { + rules := []*AttachRule{{ProbesSelector: selectorsOnlyAllOf}} + requested, err := ua.computeSymbolsToRequest(rules) + require.NoError(tt, err) + require.ElementsMatch(tt, []SymbolRequest{{Name: "SSL_connect"}}, requested) + }) + + selectorsBestEffortAndMandatory := []manager.ProbesSelector{ + &manager.AllOf{ + Selectors: []manager.ProbesSelector{ + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFFuncName: "uprobe__SSL_connect"}}, + }, + }, + &manager.BestEffort{ + Selectors: []manager.ProbesSelector{ + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFFuncName: "uprobe__ThisFunctionDoesNotExistEver"}}, + }, + }, + } + + t.Run("MandatoryAndBestEffort", func(tt *testing.T) { + rules := []*AttachRule{{ProbesSelector: selectorsBestEffortAndMandatory}} + requested, err := ua.computeSymbolsToRequest(rules) + require.NoError(tt, err) + require.ElementsMatch(tt, []SymbolRequest{{Name: "SSL_connect"}, {Name: "ThisFunctionDoesNotExistEver", BestEffort: true}}, requested) + }) + + selectorsBestEffort := []manager.ProbesSelector{ + &manager.BestEffort{ + Selectors: []manager.ProbesSelector{ + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFFuncName: "uprobe__SSL_connect"}}, + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFFuncName: "uprobe__ThisFunctionDoesNotExistEver"}}, + }, + }, + } + + t.Run("OnlyBestEffort", func(tt *testing.T) { + rules := []*AttachRule{{ProbesSelector: selectorsBestEffort}} + requested, err := ua.computeSymbolsToRequest(rules) + require.NoError(tt, err) + require.ElementsMatch(tt, []SymbolRequest{{Name: "SSL_connect", BestEffort: true}, {Name: "ThisFunctionDoesNotExistEver", BestEffort: true}}, requested) + }) + + selectorsWithReturnFunctions := []manager.ProbesSelector{ + &manager.AllOf{ + Selectors: []manager.ProbesSelector{ + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFFuncName: "uprobe__SSL_connect__return"}}, + }, + }, + } + + t.Run("SelectorsWithReturnFunctions", func(tt *testing.T) { + rules := []*AttachRule{{ProbesSelector: selectorsWithReturnFunctions}} + requested, err := ua.computeSymbolsToRequest(rules) + require.NoError(tt, err) + require.ElementsMatch(tt, []SymbolRequest{{Name: "SSL_connect", IncludeReturnLocations: true}}, requested) + }) +} + +func TestStartAndStopWithoutLibraryWatcher(t *testing.T) { + ua, err := NewUprobeAttacher("mock", AttacherConfig{}, &MockManager{}, nil, nil) + require.NoError(t, err) + require.NotNil(t, ua) + + err = ua.Start() + require.NoError(t, err) + + ua.Stop() +} + +func TestStartAndStopWithLibraryWatcher(t *testing.T) { + ebpfCfg := ddebpf.NewConfig() + require.NotNil(t, ebpfCfg) + if !sharedlibraries.IsSupported(ebpfCfg) { + t.Skip("Kernel version does not support shared libraries") + return + } + + rules := []*AttachRule{{LibraryNameRegex: regexp.MustCompile(`libssl.so`), Targets: AttachToSharedLibraries}} + ua, err := NewUprobeAttacher("mock", AttacherConfig{Rules: rules, EbpfConfig: ebpfCfg}, &MockManager{}, nil, nil) + require.NoError(t, err) + require.NotNil(t, ua) + require.True(t, ua.handlesLibraries()) + + err = ua.Start() + require.NoError(t, err) + require.NotNil(t, ua.soWatcher) + + ua.Stop() +} + +func TestRuleMatches(t *testing.T) { + t.Run("Library", func(tt *testing.T) { + rule := AttachRule{ + LibraryNameRegex: regexp.MustCompile(`libssl.so`), + Targets: AttachToSharedLibraries, + } + require.True(tt, rule.matchesLibrary("pkg/network/usm/testdata/site-packages/dd-trace/libssl.so.arm64")) + require.False(tt, rule.matchesExecutable("pkg/network/usm/testdata/site-packages/dd-trace/libssl.so.arm64", nil)) + }) + + t.Run("Executable", func(tt *testing.T) { + rule := AttachRule{ + Targets: AttachToExecutable, + } + require.False(tt, rule.matchesLibrary("/bin/bash")) + require.True(tt, rule.matchesExecutable("/bin/bash", nil)) + }) + + t.Run("ExecutableWithFuncFilter", func(tt *testing.T) { + rule := AttachRule{ + Targets: AttachToExecutable, + ExecutableFilter: func(path string, _ *ProcInfo) bool { + return strings.Contains(path, "bash") + }, + } + require.False(tt, rule.matchesLibrary("/bin/bash")) + require.True(tt, rule.matchesExecutable("/bin/bash", nil)) + require.False(tt, rule.matchesExecutable("/bin/thing", nil)) + }) +} + +func TestMonitor(t *testing.T) { + ebpfCfg := ddebpf.NewConfig() + require.NotNil(t, ebpfCfg) + if !sharedlibraries.IsSupported(ebpfCfg) { + t.Skip("Kernel version does not support shared libraries") + return + } + + config := AttacherConfig{ + Rules: []*AttachRule{{ + LibraryNameRegex: regexp.MustCompile(`libssl.so`), + Targets: AttachToExecutable | AttachToSharedLibraries, + }}, + ProcessMonitorEventStream: false, + EbpfConfig: ebpfCfg, + } + ua, err := NewUprobeAttacher("mock", config, &MockManager{}, nil, nil) + require.NoError(t, err) + require.NotNil(t, ua) + + mockRegistry := &MockFileRegistry{} + ua.fileRegistry = mockRegistry + + // Tell mockRegistry to return on any calls, we will check the values later + mockRegistry.On("Clear").Return() + mockRegistry.On("Unregister", mock.Anything).Return(nil) + mockRegistry.On("Register", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + lib := getLibSSLPath(t) + + require.NoError(t, ua.Start()) + t.Cleanup(ua.Stop) + + cmd, err := fileopener.OpenFromAnotherProcess(t, lib) + require.NoError(t, err) + require.Eventually(t, func() bool { + return methodHasBeenCalledAtLeastTimes(mockRegistry, "Register", 2) + }, 1500*time.Millisecond, 10*time.Millisecond, "received calls %v", mockRegistry.Calls) + + mockRegistry.AssertCalled(t, "Register", lib, uint32(cmd.Process.Pid), mock.Anything, mock.Anything, mock.Anything) + mockRegistry.AssertCalled(t, "Register", cmd.Path, uint32(cmd.Process.Pid), mock.Anything, mock.Anything, mock.Anything) +} + +func TestSync(t *testing.T) { + selfPID, err := kernel.RootNSPID() + require.NoError(t, err) + rules := []*AttachRule{{ + Targets: AttachToExecutable | AttachToSharedLibraries, + LibraryNameRegex: regexp.MustCompile(`.*`), + ExecutableFilter: func(path string, _ *ProcInfo) bool { return !strings.Contains(path, "donttrack") }, + }} + + t.Run("DetectsExistingProcesses", func(tt *testing.T) { + procs := []FakeProcFSEntry{ + {Pid: 1, Cmdline: "/bin/bash", Command: "/bin/bash", Exe: "/bin/bash"}, + {Pid: 2, Cmdline: "/bin/bash", Command: "/bin/bash", Exe: "/bin/bash"}, + {Pid: 3, Cmdline: "/bin/donttrack", Command: "/bin/donttrack", Exe: "/bin/donttrack"}, + {Pid: uint32(selfPID), Cmdline: "datadog-agent/bin/system-probe", Command: "sysprobe", Exe: "sysprobe"}, + } + procFS := CreateFakeProcFS(t, procs) + + config := AttacherConfig{ + ProcRoot: procFS, + Rules: rules, + EnablePeriodicScanNewProcesses: true, + } + + ua, err := NewUprobeAttacher("mock", config, &MockManager{}, nil, nil) + require.NoError(tt, err) + require.NotNil(tt, ua) + + mockRegistry := &MockFileRegistry{} + ua.fileRegistry = mockRegistry + + // Tell mockRegistry which two processes to expect + mockRegistry.On("Register", "/bin/bash", uint32(1), mock.Anything, mock.Anything, mock.Anything).Return(nil) + mockRegistry.On("Register", "/bin/bash", uint32(2), mock.Anything, mock.Anything, mock.Anything).Return(nil) + + err = ua.Sync(true, false) + require.NoError(tt, err) + + mockRegistry.AssertExpectations(tt) + }) + + t.Run("RemovesDeletedProcesses", func(tt *testing.T) { + procs := []FakeProcFSEntry{ + {Pid: 1, Cmdline: "/bin/bash", Command: "/bin/bash", Exe: "/bin/bash"}, + {Pid: 2, Cmdline: "/bin/bash", Command: "/bin/bash", Exe: "/bin/bash"}, + {Pid: 3, Cmdline: "/bin/donttrack", Command: "/bin/donttrack", Exe: "/bin/donttrack"}, + {Pid: uint32(selfPID), Cmdline: "datadog-agent/bin/system-probe", Command: "sysprobe", Exe: "sysprobe"}, + } + procFS := CreateFakeProcFS(t, procs) + + config := AttacherConfig{ + ProcRoot: procFS, + Rules: rules, + EnablePeriodicScanNewProcesses: true, + } + + ua, err := NewUprobeAttacher("mock", config, &MockManager{}, nil, nil) + require.NoError(tt, err) + require.NotNil(tt, ua) + + mockRegistry := &MockFileRegistry{} + ua.fileRegistry = mockRegistry + + // Tell mockRegistry which two processes to expect + mockRegistry.On("Register", "/bin/bash", uint32(1), mock.Anything, mock.Anything, mock.Anything).Return(nil) + mockRegistry.On("Register", "/bin/bash", uint32(2), mock.Anything, mock.Anything, mock.Anything).Return(nil) + mockRegistry.On("GetRegisteredProcesses").Return(map[uint32]struct{}{}) + + err = ua.Sync(true, true) + require.NoError(tt, err) + mockRegistry.AssertExpectations(tt) + + // Now remove one process + require.NoError(t, os.RemoveAll(filepath.Join(procFS, "2"))) + mockRegistry.ExpectedCalls = nil // Clear expected calls + mockRegistry.On("GetRegisteredProcesses").Return(map[uint32]struct{}{1: {}, 2: {}}) + mockRegistry.On("Unregister", uint32(2)).Return(nil) + + require.NoError(t, ua.Sync(true, true)) + mockRegistry.AssertExpectations(tt) + }) +} + +func TestParseSymbolFromEBPFProbeName(t *testing.T) { + t.Run("ValidName", func(tt *testing.T) { + name := "uprobe__SSL_connect" + symbol, manualReturn, err := parseSymbolFromEBPFProbeName(name) + require.NoError(tt, err) + require.False(tt, manualReturn) + require.Equal(tt, "SSL_connect", symbol) + }) + t.Run("ValidNameWithReturnMarker", func(tt *testing.T) { + name := "uprobe__SSL_connect__return" + symbol, manualReturn, err := parseSymbolFromEBPFProbeName(name) + require.NoError(tt, err) + require.True(tt, manualReturn) + require.Equal(tt, "SSL_connect", symbol) + }) + t.Run("InvalidNameWithUnrecognizedThirdPart", func(tt *testing.T) { + name := "uprobe__SSL_connect__something" + _, _, err := parseSymbolFromEBPFProbeName(name) + require.Error(tt, err) + }) + t.Run("InvalidNameNoSymbol", func(tt *testing.T) { + name := "nothing" + _, _, err := parseSymbolFromEBPFProbeName(name) + require.Error(tt, err) + }) +} + +func TestAttachToBinaryAndDetach(t *testing.T) { + proc := FakeProcFSEntry{ + Pid: 1, + Cmdline: "/bin/bash", + Exe: "/bin/bash", + } + procFS := CreateFakeProcFS(t, []FakeProcFSEntry{proc}) + + config := AttacherConfig{ + ProcRoot: procFS, + Rules: []*AttachRule{ + { + Targets: AttachToExecutable, + ProbesSelector: []manager.ProbesSelector{ + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFFuncName: "uprobe__SSL_connect"}}, + }, + }, + }, + } + + mockMan := &MockManager{} + inspector := &MockBinaryInspector{} + ua, err := NewUprobeAttacher("mock", config, mockMan, nil, inspector) + require.NoError(t, err) + require.NotNil(t, ua) + + target := utils.FilePath{ + HostPath: proc.Exe, + PID: proc.Pid, + } + + // Tell the inspector to return a simple symbol + symbolToAttach := bininspect.FunctionMetadata{EntryLocation: 0x1234} + inspector.On("Inspect", target, mock.Anything).Return(map[string]bininspect.FunctionMetadata{"SSL_connect": symbolToAttach}, true, nil) + inspector.On("Cleanup", mock.Anything).Return(nil) + + // Tell the manager to return no probe when finding an existing one + var nilProbe *manager.Probe // we can't just pass nil directly, if we do that the mock cannot convert it to *manager.Probe + mockMan.On("GetProbe", mock.Anything).Return(nilProbe, false) + + // Tell the manager to accept the probe + uid := "1hipfd0" // this is the UID that the manager will generate, from a path identifier with 0/0 as device/inode + expectedProbe := &manager.Probe{ + ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFFuncName: "uprobe__SSL_connect", UID: uid}, + BinaryPath: target.HostPath, + UprobeOffset: symbolToAttach.EntryLocation, + HookFuncName: "SSL_connect", + } + mockMan.On("AddHook", mock.Anything, expectedProbe).Return(nil) + + err = ua.attachToBinary(target, config.Rules, NewProcInfo(procFS, proc.Pid)) + require.NoError(t, err) + mockMan.AssertExpectations(t) + + mockMan.On("DetachHook", expectedProbe.ProbeIdentificationPair).Return(nil) + err = ua.detachFromBinary(target) + require.NoError(t, err) + inspector.AssertExpectations(t) + mockMan.AssertExpectations(t) +} + +func TestAttachToBinaryAtReturnLocation(t *testing.T) { + proc := FakeProcFSEntry{ + Pid: 1, + Cmdline: "/bin/bash", + Exe: "/bin/bash", + } + procFS := CreateFakeProcFS(t, []FakeProcFSEntry{proc}) + + config := AttacherConfig{ + ProcRoot: procFS, + Rules: []*AttachRule{ + { + Targets: AttachToExecutable, + ProbesSelector: []manager.ProbesSelector{ + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFFuncName: "uprobe__SSL_connect__return"}}, + }, + }, + }, + } + + mockMan := &MockManager{} + inspector := &MockBinaryInspector{} + ua, err := NewUprobeAttacher("mock", config, mockMan, nil, inspector) + require.NoError(t, err) + require.NotNil(t, ua) + + target := utils.FilePath{ + HostPath: proc.Exe, + PID: proc.Pid, + } + + // Tell the inspector to return a simple symbol + symbolToAttach := bininspect.FunctionMetadata{EntryLocation: 0x1234, ReturnLocations: []uint64{0x0, 0x1}} + inspector.On("Inspect", target, mock.Anything).Return(map[string]bininspect.FunctionMetadata{"SSL_connect": symbolToAttach}, true, nil) + + // Tell the manager to return no probe when finding an existing one + var nilProbe *manager.Probe // we can't just pass nil directly, if we do that the mock cannot convert it to *manager.Probe + mockMan.On("GetProbe", mock.Anything).Return(nilProbe, false) + + // Tell the manager to accept the probe + uidBase := "1hipf" // this is the UID that the manager will generate, from a path identifier with 0/0 as device/inode + for n := 0; n < len(symbolToAttach.ReturnLocations); n++ { + expectedProbe := &manager.Probe{ + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFFuncName: "uprobe__SSL_connect__return", + UID: fmt.Sprintf("%sr%d", uidBase, n)}, + BinaryPath: target.HostPath, + UprobeOffset: symbolToAttach.ReturnLocations[n], + HookFuncName: "SSL_connect", + } + mockMan.On("AddHook", mock.Anything, expectedProbe).Return(nil) + } + + err = ua.attachToBinary(target, config.Rules, NewProcInfo(procFS, proc.Pid)) + require.NoError(t, err) + inspector.AssertExpectations(t) + mockMan.AssertExpectations(t) +} + +const mapsFileWithSSL = ` +08048000-08049000 r-xp 00000000 03:00 8312 /usr/lib/libssl.so +` + +func TestAttachToLibrariesOfPid(t *testing.T) { + proc := FakeProcFSEntry{ + Pid: 1, + Cmdline: "/bin/bash", + Exe: "/bin/bash", + Maps: mapsFileWithSSL, + } + procFS := CreateFakeProcFS(t, []FakeProcFSEntry{proc}) + + config := AttacherConfig{ + ProcRoot: procFS, + Rules: []*AttachRule{ + { + LibraryNameRegex: regexp.MustCompile(`libssl.so`), + ProbesSelector: []manager.ProbesSelector{ + &manager.ProbeSelector{ + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFFuncName: "uprobe__SSL_connect", + }, + }, + }, + Targets: AttachToSharedLibraries, + }, + { + LibraryNameRegex: regexp.MustCompile(`libtls.so`), + ProbesSelector: []manager.ProbesSelector{ + &manager.ProbeSelector{ + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFFuncName: "uprobe__TLS_connect", + }, + }, + }, + Targets: AttachToSharedLibraries, + }, + }, + } + + mockMan := &MockManager{} + inspector := &MockBinaryInspector{} + registry := &MockFileRegistry{} + ua, err := NewUprobeAttacher("mock", config, mockMan, nil, inspector) + require.NoError(t, err) + require.NotNil(t, ua) + ua.fileRegistry = registry + + target := utils.FilePath{ + HostPath: "/usr/lib/libssl.so", + PID: proc.Pid, + } + + // Tell the inspector to return a simple symbol + symbolToAttach := bininspect.FunctionMetadata{EntryLocation: 0x1234} + inspector.On("Inspect", target, mock.Anything).Return(map[string]bininspect.FunctionMetadata{"SSL_connect": symbolToAttach}, true, nil) + + // Tell the manager to return no probe when finding an existing one + var nilProbe *manager.Probe // we can't just pass nil directly, if we do that the mock cannot convert it to *manager.Probe + mockMan.On("GetProbe", mock.Anything).Return(nilProbe, false) + + // Tell the manager to accept the probe + uid := "1hipfd0" // this is the UID that the manager will generate, from a path identifier with 0/0 as device/inode + expectedProbe := &manager.Probe{ + ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFFuncName: "uprobe__SSL_connect", UID: uid}, + BinaryPath: target.HostPath, + UprobeOffset: symbolToAttach.EntryLocation, + HookFuncName: "SSL_connect", + } + mockMan.On("AddHook", mock.Anything, expectedProbe).Return(nil) + + // Tell the registry to expect the process + registry.On("Register", target.HostPath, uint32(proc.Pid), mock.Anything, mock.Anything, mock.Anything).Return(nil) + + // if this function calls the manager adding a probe with a different name than the one we requested, the test + // will fail + err = ua.attachToLibrariesOfPID(proc.Pid) + require.NoError(t, err) + + // We need to retrieve the calls from the registry and manually call the callback + // to simulate the process being registered + registry.AssertExpectations(t) + cb := registry.Calls[0].Arguments[2].(utils.Callback) + require.NoError(t, cb(target)) + + inspector.AssertExpectations(t) + mockMan.AssertExpectations(t) +} + +type attachedProbe struct { + probe *manager.Probe + fpath *utils.FilePath +} + +func (ap *attachedProbe) String() string { + return fmt.Sprintf("attachedProbe{probe: %s, PID: %d, path: %s}", ap.probe.EBPFFuncName, ap.fpath.PID, ap.fpath.HostPath) +} + +func stringifyAttachedProbes(probes []attachedProbe) []string { + var result []string + for _, ap := range probes { + result = append(result, ap.String()) + } + return result +} + +func TestUprobeAttacher(t *testing.T) { + lib := getLibSSLPath(t) + ebpfCfg := ddebpf.NewConfig() + require.NotNil(t, ebpfCfg) + + if !sharedlibraries.IsSupported(ebpfCfg) { + t.Skip("Kernel version does not support shared libraries") + return + } + + buf, err := bytecode.GetReader(ebpfCfg.BPFDir, "uprobe_attacher-test.o") + require.NoError(t, err) + t.Cleanup(func() { buf.Close() }) + + connectProbeID := manager.ProbeIdentificationPair{EBPFFuncName: "uprobe__SSL_connect"} + mainProbeID := manager.ProbeIdentificationPair{EBPFFuncName: "uprobe__main"} + + mgr := manager.Manager{} + + attacherCfg := AttacherConfig{ + Rules: []*AttachRule{ + { + LibraryNameRegex: regexp.MustCompile(`libssl.so`), + Targets: AttachToSharedLibraries, + ProbesSelector: []manager.ProbesSelector{ + &manager.ProbeSelector{ProbeIdentificationPair: connectProbeID}, + }, + }, + { + Targets: AttachToExecutable, + ProbesSelector: []manager.ProbesSelector{ + &manager.ProbeSelector{ProbeIdentificationPair: mainProbeID}, + }, + ProbeOptionsOverride: map[string]ProbeOptions{ + mainProbeID.EBPFFuncName: { + IsManualReturn: false, + Symbol: "main.main", + }, + }, + }, + }, + ExcludeTargets: ExcludeInternal | ExcludeSelf, + EbpfConfig: ebpfCfg, + EnableDetailedLogging: true, + } + + var attachedProbes []attachedProbe + + callback := func(probe *manager.Probe, fpath *utils.FilePath) { + attachedProbes = append(attachedProbes, attachedProbe{probe: probe, fpath: fpath}) + } + + ua, err := NewUprobeAttacher("test", attacherCfg, &mgr, callback, &NativeBinaryInspector{}) + require.NoError(t, err) + require.NotNil(t, ua) + + require.NoError(t, mgr.InitWithOptions(buf, manager.Options{})) + require.NoError(t, mgr.Start()) + t.Cleanup(func() { mgr.Stop(manager.CleanAll) }) + require.NoError(t, ua.Start()) + t.Cleanup(ua.Stop) + + cmd, err := fileopener.OpenFromAnotherProcess(t, lib) + require.NoError(t, err) + + var connectProbe, mainProbe *attachedProbe + require.Eventually(t, func() bool { + // Find the probes we want to attach. + // Note that we might attach to other processes, so filter by ours only + for _, ap := range attachedProbes { + if ap.probe.EBPFFuncName == "uprobe__SSL_connect" && ap.fpath.PID == uint32(cmd.Process.Pid) { + connectProbe = &ap + } else if ap.probe.EBPFFuncName == "uprobe__main" && ap.fpath.PID == uint32(cmd.Process.Pid) { + mainProbe = &ap + } + } + + return connectProbe != nil && mainProbe != nil + }, 5*time.Second, 50*time.Millisecond, "expected to attach 2 probes, got %d: %v (%v)", len(attachedProbes), attachedProbes, stringifyAttachedProbes(attachedProbes)) + + require.NotNil(t, connectProbe) + // Allow suffix, as sometimes the path reported is /proc//root/ + require.True(t, strings.HasSuffix(connectProbe.fpath.HostPath, lib), "expected to attach to %s, got %s", lib, connectProbe.fpath.HostPath) + require.Equal(t, uint32(cmd.Process.Pid), connectProbe.fpath.PID) + + require.NotNil(t, mainProbe) + require.Equal(t, uint32(cmd.Process.Pid), mainProbe.fpath.PID) +} + +func launchProcessMonitor(t *testing.T, useEventStream bool) { + pm := monitor.GetProcessMonitor() + t.Cleanup(pm.Stop) + require.NoError(t, pm.Initialize(useEventStream)) + if useEventStream { + eventmonitortestutil.StartEventMonitor(t, procmontestutil.RegisterProcessMonitorEventConsumer) + } +} + +func createTempTestFile(t *testing.T, name string) (string, utils.PathIdentifier) { + fullPath := filepath.Join(t.TempDir(), name) + + f, err := os.Create(fullPath) + f.WriteString("foobar") + require.NoError(t, err) + f.Close() + t.Cleanup(func() { + os.RemoveAll(fullPath) + }) + + pathID, err := utils.NewPathIdentifier(fullPath) + require.NoError(t, err) + + return fullPath, pathID +} + +type SharedLibrarySuite struct { + suite.Suite +} + +func TestAttacherSharedLibrary(t *testing.T) { + ebpftest.TestBuildModes(t, []ebpftest.BuildMode{ebpftest.Prebuilt, ebpftest.RuntimeCompiled, ebpftest.CORE}, "", func(tt *testing.T) { + if !sharedlibraries.IsSupported(ddebpf.NewConfig()) { + tt.Skip("shared library tracing not supported for this platform") + } + + tt.Run("netlink", func(ttt *testing.T) { + launchProcessMonitor(ttt, false) + suite.Run(ttt, new(SharedLibrarySuite)) + }) + + tt.Run("event stream", func(ttt *testing.T) { + launchProcessMonitor(ttt, true) + suite.Run(ttt, new(SharedLibrarySuite)) + }) + }) +} + +func (s *SharedLibrarySuite) TestSingleFile() { + t := s.T() + ebpfCfg := ddebpf.NewConfig() + + fooPath1, _ := createTempTestFile(t, "foo-libssl.so") + + attachCfg := AttacherConfig{ + Rules: []*AttachRule{{ + LibraryNameRegex: regexp.MustCompile(`foo-libssl.so`), + Targets: AttachToSharedLibraries, + }}, + EbpfConfig: ebpfCfg, + } + + ua, err := NewUprobeAttacher("test", attachCfg, &MockManager{}, nil, nil) + require.NoError(t, err) + + mockRegistry := &MockFileRegistry{} + ua.fileRegistry = mockRegistry + + // Tell mockRegistry to return on any calls, we will check the values later + mockRegistry.On("Clear").Return() + mockRegistry.On("Unregister", mock.Anything).Return(nil) + mockRegistry.On("Register", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + + require.NoError(t, ua.Start()) + t.Cleanup(ua.Stop) + + // open files + cmd, err := fileopener.OpenFromAnotherProcess(t, fooPath1) + require.NoError(t, err) + require.Eventually(t, func() bool { + return methodHasBeenCalledTimes(mockRegistry, "Register", 1) + }, 1500*time.Millisecond, 10*time.Millisecond, "received calls %v", mockRegistry.Calls) + + mockRegistry.AssertCalled(t, "Register", fooPath1, uint32(cmd.Process.Pid), mock.Anything, mock.Anything, mock.Anything) + + mockRegistry.Calls = nil + require.NoError(t, cmd.Process.Kill()) + + require.Eventually(t, func() bool { + // Other processes might have finished and forced the Unregister call to the registry + return methodHasBeenCalledWithPredicate(mockRegistry, "Unregister", func(call mock.Call) bool { + return call.Arguments[0].(uint32) == uint32(cmd.Process.Pid) + }) + }, time.Second*10, 200*time.Millisecond, "received calls %v", mockRegistry.Calls) + + mockRegistry.AssertCalled(t, "Unregister", uint32(cmd.Process.Pid)) +} + +func (s *SharedLibrarySuite) TestDetectionWithPIDAndRootNamespace() { + t := s.T() + ebpfCfg := ddebpf.NewConfig() + + _, err := os.Stat("/usr/bin/busybox") + if err != nil { + t.Skip("skip for the moment as some distro are not friendly with busybox package") + } + + tempDir := t.TempDir() + root := filepath.Join(tempDir, "root") + err = os.MkdirAll(root, 0755) + require.NoError(t, err) + + libpath := "/fooroot-crypto.so" + + err = exec.Command("cp", "/usr/bin/busybox", root+"/ash").Run() + require.NoError(t, err) + err = exec.Command("cp", "/usr/bin/busybox", root+"/sleep").Run() + require.NoError(t, err) + + attachCfg := AttacherConfig{ + Rules: []*AttachRule{{ + LibraryNameRegex: regexp.MustCompile(`fooroot-crypto.so`), + Targets: AttachToSharedLibraries, + }}, + EbpfConfig: ebpfCfg, + } + + ua, err := NewUprobeAttacher("test", attachCfg, &MockManager{}, nil, nil) + require.NoError(t, err) + + mockRegistry := &MockFileRegistry{} + ua.fileRegistry = mockRegistry + + // Tell mockRegistry to return on any calls, we will check the values later + mockRegistry.On("Clear").Return() + mockRegistry.On("Unregister", mock.Anything).Return(nil) + mockRegistry.On("Register", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + + require.NoError(t, ua.Start()) + t.Cleanup(ua.Stop) + + time.Sleep(10 * time.Millisecond) + // simulate a slow (1 second) : open, write, close of the file + // in a new pid and mount namespaces + o, err := exec.Command("unshare", "--fork", "--pid", "-R", root, "/ash", "-c", fmt.Sprintf("sleep 1 > %s", libpath)).CombinedOutput() + if err != nil { + t.Log(err, string(o)) + } + require.NoError(t, err) + + time.Sleep(10 * time.Millisecond) + + require.Eventually(t, func() bool { + return methodHasBeenCalledTimes(mockRegistry, "Register", 1) + }, time.Second*10, 100*time.Millisecond, "received calls %v", mockRegistry.Calls) + + // assert that soWatcher detected foo-crypto.so being opened and triggered the callback + foundCall := false + for _, call := range mockRegistry.Calls { + if call.Method == "Register" { + args := call.Arguments + require.True(t, strings.HasSuffix(args[0].(string), libpath)) + foundCall = true + } + } + require.True(t, foundCall) + + // must fail on the host + _, err = os.Stat(libpath) + require.Error(t, err) +} + +func methodHasBeenCalledTimes(registry *MockFileRegistry, methodName string, times int) bool { + calls := 0 + for _, call := range registry.Calls { + if call.Method == methodName { + calls++ + } + } + return calls == times +} + +func methodHasBeenCalledAtLeastTimes(registry *MockFileRegistry, methodName string, times int) bool { + calls := 0 + for _, call := range registry.Calls { + if call.Method == methodName { + calls++ + } + } + return calls >= times +} + +func methodHasBeenCalledWithPredicate(registry *MockFileRegistry, methodName string, predicate func(mock.Call) bool) bool { + for _, call := range registry.Calls { + if call.Method == methodName && predicate(call) { + return true + } + } + return false +} diff --git a/pkg/ebpf/uprobes/doc.go b/pkg/ebpf/uprobes/doc.go new file mode 100644 index 0000000000000..887d653ae8d82 --- /dev/null +++ b/pkg/ebpf/uprobes/doc.go @@ -0,0 +1,60 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +/* +Package uprobes contains methods to help handling the attachment of uprobes to +userspace programs + +The main type for this package is the UprobeAttacher type, created with +NewUprobeAttacher. The main configuration it requires is a list of rules that +define how to match the possible targets (shared libraries and/or executables) +and which probes to attach to them. Example usage: + + connectProbeID := manager.ProbeIdentificationPair{EBPFFuncName: "uprobe__SSL_connect"} + mainProbeID := manager.ProbeIdentificationPair{EBPFFuncName: "uprobe__main"} + + mgr := manager.Manager{} + + attacherCfg := AttacherConfig{ + Rules: []*AttachRule{ + { + LibraryNameRegex: regexp.MustCompile(`libssl.so`), + Targets: AttachToSharedLibraries, + ProbesSelector: []manager.ProbesSelector{ + &manager.ProbeSelector{ProbeIdentificationPair: connectProbeID}, + }, + }, + { + Targets: AttachToExecutable, + ProbesSelector: []manager.ProbesSelector{ + &manager.ProbeSelector{ProbeIdentificationPair: mainProbeID}, + }, + }, + }, + ExcludeTargets: ExcludeInternal | ExcludeSelf, + EbpfConfig: ebpfCfg, + } + + ua, err := NewUprobeAttacher("test", attacherCfg, &mgr, callback, &NativeBinaryInspector{}) + ua.Start() + +Once started, the attacher monitors new processes and `open` calls for new +shared libraries. For the first task it uses pkg/process/monitor/ProcessMonitor, +and for the second it uses the shared-libraries program in +pkg/network/usm/sharedlibraries. + +# Notes and things to take into account + + - When adding new probes, be sure to add the corresponding code to + match the libraries in + pkg/network/ebpf/c/shared-libraries/probes.h:do_sys_open_helper_exit, as an + initial filtering is performed there. + + - If multiple rules match a binary file, and we fail to attach the required probes for one of them, + the whole attach operation will be considered as failed, and the probes will be detached. If you want + to control which probes are optional and which are mandatory, you can use the manager.AllOf/manager.BestEffort + selectors in a single rule. +*/ +package uprobes diff --git a/pkg/ebpf/uprobes/inspector.go b/pkg/ebpf/uprobes/inspector.go new file mode 100644 index 0000000000000..16df19346b5e5 --- /dev/null +++ b/pkg/ebpf/uprobes/inspector.go @@ -0,0 +1,135 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +//go:build linux_bpf + +package uprobes + +import ( + "debug/elf" + "errors" + "fmt" + "runtime" + + manager "github.com/DataDog/ebpf-manager" + + "github.com/DataDog/datadog-agent/pkg/network/go/bininspect" + "github.com/DataDog/datadog-agent/pkg/network/usm/utils" + "github.com/DataDog/datadog-agent/pkg/util/common" +) + +// BinaryInspector implementors are responsible for extracting the metadata required to attach from a binary. +type BinaryInspector interface { + // Inspect returns the metadata required to attach to a binary. The first + // return is a map of symbol names to their corresponding metadata, the + // second return is a boolean indicating whether this binary is compatible + // and can be attached or not. It is encouraged to return early if the + // binary is not compatible, to avoid unnecessary work. In the future, the + // first and second return values should be merged into a single struct, but + // for now this allows us to keep the API compatible with the existing + // implementation. + Inspect(fpath utils.FilePath, requests []SymbolRequest) (map[string]bininspect.FunctionMetadata, bool, error) + + // Cleanup is called when a certain file path is not needed anymore, the implementation can clean up + // any resources associated with the file path. + Cleanup(fpath utils.FilePath) +} + +// SymbolRequest represents a request for symbols and associated data from a binary +type SymbolRequest struct { + // Name of the symbol to request + Name string + // BestEffort indicates that the symbol is not mandatory, and the inspector should not return an error if it is not found + BestEffort bool + // IncludeReturnLocations indicates that the inspector should also include the return locations of the function, for manual + // attachment into those return points instead of using uretprobes. + IncludeReturnLocations bool +} + +// NativeBinaryInspector is a BinaryInspector that uses the ELF format to extract the metadata directly from native functions. +type NativeBinaryInspector struct { +} + +// Ensure NativeBinaryInspector implements BinaryInspector +var _ BinaryInspector = &NativeBinaryInspector{} + +// Inspect extracts the metadata required to attach to a binary from the ELF file at the given path. +func (p *NativeBinaryInspector) Inspect(fpath utils.FilePath, requests []SymbolRequest) (map[string]bininspect.FunctionMetadata, bool, error) { + path := fpath.HostPath + elfFile, err := elf.Open(path) + if err != nil { + return nil, false, err + } + defer elfFile.Close() + + // This only allows amd64 and arm64 and not the 32-bit variants, but that + // is fine since we don't monitor 32-bit applications at all in the shared + // library watcher since compat syscalls aren't supported by the syscall + // trace points. We do actually monitor 32-bit applications for istio and + // nodejs monitoring, but our uprobe hooks only properly support 64-bit + // applications, so there's no harm in rejecting 32-bit applications here. + arch, err := bininspect.GetArchitecture(elfFile) + if err != nil { + return nil, false, fmt.Errorf("cannot get architecture of %s: %w", path, err) + } + + // Ignore foreign architectures. This can happen when running stuff under + // qemu-user, for example, and installing a uprobe will lead to segfaults + // since the foreign instructions will be patched with the native break + // instruction. + if string(arch) != runtime.GOARCH { + return nil, false, nil + } + + mandatorySymbols := make(common.StringSet, len(requests)) + bestEffortSymbols := make(common.StringSet, len(requests)) + + for _, req := range requests { + if req.BestEffort { + bestEffortSymbols.Add(req.Name) + } else { + mandatorySymbols.Add(req.Name) + } + + if req.IncludeReturnLocations { + return nil, false, errors.New("return locations are not supported by the native binary inspector") + } + } + + symbolMap, err := bininspect.GetAllSymbolsInSetByName(elfFile, mandatorySymbols) + if err != nil { + return nil, false, err + } + /* Best effort to resolve symbols, so we don't care about the error */ + symbolMapBestEffort, _ := bininspect.GetAllSymbolsInSetByName(elfFile, bestEffortSymbols) + + funcMap := make(map[string]bininspect.FunctionMetadata, len(symbolMap)+len(symbolMapBestEffort)) + for _, symMap := range []map[string]elf.Symbol{symbolMap, symbolMapBestEffort} { + for symbolName, symbol := range symMap { + m, err := p.symbolToFuncMetadata(elfFile, symbol) + if err != nil { + return nil, false, fmt.Errorf("failed to convert symbol %s to function metadata: %w", symbolName, err) + } + funcMap[symbolName] = *m + } + } + + return funcMap, true, nil +} + +func (*NativeBinaryInspector) symbolToFuncMetadata(elfFile *elf.File, sym elf.Symbol) (*bininspect.FunctionMetadata, error) { + manager.SanitizeUprobeAddresses(elfFile, []elf.Symbol{sym}) + offset, err := bininspect.SymbolToOffset(elfFile, sym) + if err != nil { + return nil, err + } + + return &bininspect.FunctionMetadata{EntryLocation: uint64(offset)}, nil +} + +// Cleanup is a no-op for the native inspector +func (*NativeBinaryInspector) Cleanup(_ utils.FilePath) { + // Nothing to do here for the native inspector +} diff --git a/pkg/ebpf/uprobes/inspector_test.go b/pkg/ebpf/uprobes/inspector_test.go new file mode 100644 index 0000000000000..56624eaff8673 --- /dev/null +++ b/pkg/ebpf/uprobes/inspector_test.go @@ -0,0 +1,63 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +//go:build linux_bpf + +package uprobes + +import ( + "fmt" + "path/filepath" + "runtime" + "testing" + + "github.com/stretchr/testify/require" + "golang.org/x/exp/maps" + + "github.com/DataDog/datadog-agent/pkg/network/protocols/http/testutil" + "github.com/DataDog/datadog-agent/pkg/network/usm/utils" +) + +func TestNativeBinarySymbolRetrieval(t *testing.T) { + curDir, err := testutil.CurDir() + require.NoError(t, err) + + libmmap := filepath.Join(curDir, "..", "..", "network", "usm", "testdata", "site-packages", "ddtrace") + lib := filepath.Join(libmmap, fmt.Sprintf("libssl.so.%s", runtime.GOARCH)) + fpath := utils.FilePath{HostPath: lib} + + allMandatoryExisting := []SymbolRequest{{Name: "SSL_connect"}} + allBestEffortExisting := []SymbolRequest{{Name: "SSL_connect", BestEffort: true}} + mandatoryExistBestEffortDont := []SymbolRequest{{Name: "SSL_connect"}, {Name: "ThisFunctionDoesNotExistEver", BestEffort: true}} + mandatoryNonExisting := []SymbolRequest{{Name: "ThisFunctionDoesNotExistEver"}} + + inspector := &NativeBinaryInspector{} + + t.Run("MandatoryAllExist", func(tt *testing.T) { + result, compat, err := inspector.Inspect(fpath, allMandatoryExisting) + require.NoError(tt, err) + require.True(tt, compat) + require.ElementsMatch(tt, []string{"SSL_connect"}, maps.Keys(result)) + }) + + t.Run("BestEffortAllExist", func(tt *testing.T) { + result, compat, err := inspector.Inspect(fpath, allBestEffortExisting) + require.NoError(tt, err) + require.True(tt, compat) + require.ElementsMatch(tt, []string{"SSL_connect"}, maps.Keys(result)) + }) + + t.Run("BestEffortDontExist", func(tt *testing.T) { + result, compat, err := inspector.Inspect(fpath, mandatoryExistBestEffortDont) + require.NoError(tt, err) + require.True(tt, compat) + require.ElementsMatch(tt, []string{"SSL_connect"}, maps.Keys(result)) + }) + + t.Run("SomeMandatoryDontExist", func(tt *testing.T) { + _, _, err := inspector.Inspect(fpath, mandatoryNonExisting) + require.Error(tt, err, "should have failed to find mandatory symbols") + }) +} diff --git a/pkg/ebpf/uprobes/procfs.go b/pkg/ebpf/uprobes/procfs.go new file mode 100644 index 0000000000000..ff355e2fe9e1b --- /dev/null +++ b/pkg/ebpf/uprobes/procfs.go @@ -0,0 +1,119 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +//go:build linux + +package uprobes + +import ( + "bytes" + "errors" + "os" + "path/filepath" + "strconv" + "sync" + "time" +) + +const procFSUpdateTimeout = 100 * time.Millisecond + +// ProcInfo holds the information extracted from procfs, to avoid repeat calls to the filesystem. +type ProcInfo struct { + procRoot string + PID uint32 + exe string + comm string +} + +// NewProcInfo creates a new ProcInfo object. +func NewProcInfo(procRoot string, pid uint32) *ProcInfo { + return &ProcInfo{ + procRoot: procRoot, + PID: pid, + } +} + +// Avoid allocations, reuse the error to mark "iteration start" in the loop +var errIterStart = errors.New("iteration start") + +func waitUntilSucceeds[T any](p *ProcInfo, procFile string, readFunc func(string) (T, error)) (T, error) { + // Read the exe link + pidAsStr := strconv.FormatUint(uint64(p.PID), 10) + filePath := filepath.Join(p.procRoot, pidAsStr, procFile) + + var result T + err := errIterStart + end := time.Now().Add(procFSUpdateTimeout) + + for err != nil && end.After(time.Now()) { + result, err = readFunc(filePath) + if err != nil { + time.Sleep(10 * time.Millisecond) + } + } + + return result, err +} + +// Exe returns the path to the executable of the process. +func (p *ProcInfo) Exe() (string, error) { + var err error + if p.exe == "" { + p.exe, err = waitUntilSucceeds(p, "exe", os.Readlink) + if err != nil { + return "", err + } + } + + if p.exe == "" { + return "", errors.New("exe link is empty") + } + + return p.exe, nil +} + +const ( + // Defined in https://man7.org/linux/man-pages/man5/proc.5.html. + taskCommLen = 16 +) + +var ( + taskCommLenBufferPool = sync.Pool{ + New: func() any { + buf := make([]byte, taskCommLen) + return &buf + }, + } +) + +func (p *ProcInfo) readComm(commFile string) (string, error) { + file, err := os.Open(commFile) + if err != nil { + return "", err + } + defer file.Close() + + buf := taskCommLenBufferPool.Get().(*[]byte) + defer taskCommLenBufferPool.Put(buf) + n, err := file.Read(*buf) + if err != nil { + // short living process can hit here, or slow start of another process. + return "", nil + } + return string(bytes.TrimSpace((*buf)[:n])), nil +} + +// Comm returns the command name of the process. +func (p *ProcInfo) Comm() (string, error) { + var err error + if p.comm == "" { + p.comm, err = waitUntilSucceeds(p, "comm", p.readComm) + if err != nil { + return "", err + } + } + + return p.comm, nil +} diff --git a/pkg/ebpf/uprobes/testutil.go b/pkg/ebpf/uprobes/testutil.go new file mode 100644 index 0000000000000..f61c45a8adb02 --- /dev/null +++ b/pkg/ebpf/uprobes/testutil.go @@ -0,0 +1,155 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +//go:build linux_bpf + +package uprobes + +import ( + "fmt" + "os" + "path/filepath" + "runtime" + "strconv" + "testing" + + manager "github.com/DataDog/ebpf-manager" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/network/go/bininspect" + "github.com/DataDog/datadog-agent/pkg/network/protocols/http/testutil" + "github.com/DataDog/datadog-agent/pkg/network/usm/utils" +) + +// === Mocks + +// MockManager is a mock implementation of the manager.Manager interface. +type MockManager struct { + mock.Mock +} + +// AddHook is a mock implementation of the manager.Manager.AddHook method. +func (m *MockManager) AddHook(name string, probe *manager.Probe) error { + args := m.Called(name, probe) + return args.Error(0) +} + +// DetachHook is a mock implementation of the manager.Manager.DetachHook method. +func (m *MockManager) DetachHook(probeID manager.ProbeIdentificationPair) error { + args := m.Called(probeID) + return args.Error(0) +} + +// GetProbe is a mock implementation of the manager.Manager.GetProbe method. +func (m *MockManager) GetProbe(probeID manager.ProbeIdentificationPair) (*manager.Probe, bool) { + args := m.Called(probeID) + return args.Get(0).(*manager.Probe), args.Bool(1) +} + +// MockFileRegistry is a mock implementation of the FileRegistry interface. +type MockFileRegistry struct { + mock.Mock +} + +// Register is a mock implementation of the FileRegistry.Register method. +func (m *MockFileRegistry) Register(namespacedPath string, pid uint32, activationCB, deactivationCB, alreadyRegistered utils.Callback) error { + args := m.Called(namespacedPath, pid, activationCB, deactivationCB) + return args.Error(0) +} + +// Unregister is a mock implementation of the FileRegistry.Unregister method. +func (m *MockFileRegistry) Unregister(pid uint32) error { + args := m.Called(pid) + return args.Error(0) +} + +// Clear is a mock implementation of the FileRegistry.Clear method. +func (m *MockFileRegistry) Clear() { + m.Called() +} + +// GetRegisteredProcesses is a mock implementation of the FileRegistry.GetRegisteredProcesses method. +func (m *MockFileRegistry) GetRegisteredProcesses() map[uint32]struct{} { + args := m.Called() + return args.Get(0).(map[uint32]struct{}) +} + +// MockBinaryInspector is a mock implementation of the BinaryInspector interface. +type MockBinaryInspector struct { + mock.Mock +} + +// Inspect is a mock implementation of the BinaryInspector.Inspect method. +func (m *MockBinaryInspector) Inspect(fpath utils.FilePath, requests []SymbolRequest) (map[string]bininspect.FunctionMetadata, bool, error) { + args := m.Called(fpath, requests) + return args.Get(0).(map[string]bininspect.FunctionMetadata), args.Bool(1), args.Error(2) +} + +// Cleanup is a mock implementation of the BinaryInspector.Cleanup method. +func (m *MockBinaryInspector) Cleanup(fpath utils.FilePath) { + _ = m.Called(fpath) +} + +// === Test utils + +// FakeProcFSEntry represents a fake /proc filesystem entry for testing purposes. +type FakeProcFSEntry struct { + Pid uint32 + Cmdline string + Command string + Exe string + Maps string +} + +// CreateFakeProcFS creates a fake /proc filesystem with the given entries, useful for testing attachment to processes. +func CreateFakeProcFS(t *testing.T, entries []FakeProcFSEntry) string { + procRoot := t.TempDir() + + for _, entry := range entries { + baseDir := filepath.Join(procRoot, strconv.Itoa(int(entry.Pid))) + + createFile(t, filepath.Join(baseDir, "cmdline"), entry.Cmdline) + createFile(t, filepath.Join(baseDir, "comm"), entry.Command) + createFile(t, filepath.Join(baseDir, "maps"), entry.Maps) + createSymlink(t, entry.Exe, filepath.Join(baseDir, "exe")) + } + + return procRoot +} + +func createFile(t *testing.T, path, data string) { + if data == "" { + return + } + + dir := filepath.Dir(path) + require.NoError(t, os.MkdirAll(dir, 0775)) + require.NoError(t, os.WriteFile(path, []byte(data), 0775)) +} + +func createSymlink(t *testing.T, target, link string) { + if target == "" { + return + } + + dir := filepath.Dir(link) + require.NoError(t, os.MkdirAll(dir, 0775)) + require.NoError(t, os.Symlink(target, link)) +} + +func getLibSSLPath(t *testing.T) string { + curDir, err := testutil.CurDir() + require.NoError(t, err) + + libmmap := filepath.Join(curDir, "..", "..", "network", "usm", "testdata", "site-packages", "ddtrace") + return filepath.Join(libmmap, fmt.Sprintf("libssl.so.%s", runtime.GOARCH)) +} + +// SetRegistry allows changing the file registry used by the attacher. This is useful for testing purposes, to +// replace the registry with a mock object +func (ua *UprobeAttacher) SetRegistry(registry FileRegistry) { + ua.fileRegistry = registry +} diff --git a/pkg/network/config/config.go b/pkg/network/config/config.go index 06dc994e0da48..ae182edc4ec95 100644 --- a/pkg/network/config/config.go +++ b/pkg/network/config/config.go @@ -310,10 +310,6 @@ type Config struct { // EnableUSMEventStream enables USM to use the event stream instead // of netlink for receiving process events. EnableUSMEventStream bool - - // BypassEnabled is used in tests only. - // It enables a ebpf-manager feature to bypass programs on-demand for controlled visibility. - BypassEnabled bool } func join(pieces ...string) string { diff --git a/pkg/network/usm/sharedlibraries/compile.go b/pkg/network/usm/sharedlibraries/compile.go index b33323d292444..be409112fc7d5 100644 --- a/pkg/network/usm/sharedlibraries/compile.go +++ b/pkg/network/usm/sharedlibraries/compile.go @@ -9,19 +9,19 @@ package sharedlibraries import ( + "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode/runtime" - "github.com/DataDog/datadog-agent/pkg/network/config" "github.com/DataDog/datadog-agent/pkg/process/statsd" ) //go:generate $GOPATH/bin/include_headers pkg/network/ebpf/c/runtime/shared-libraries.c pkg/ebpf/bytecode/build/runtime/shared-libraries.c pkg/ebpf/c pkg/network/ebpf/c/runtime pkg/network/ebpf/c //go:generate $GOPATH/bin/integrity pkg/ebpf/bytecode/build/runtime/shared-libraries.c pkg/ebpf/bytecode/runtime/shared-libraries.go runtime -func getRuntimeCompiledSharedLibraries(config *config.Config) (runtime.CompiledOutput, error) { - return runtime.SharedLibraries.Compile(&config.Config, getCFlags(config), statsd.Client) +func getRuntimeCompiledSharedLibraries(config *ebpf.Config) (runtime.CompiledOutput, error) { + return runtime.SharedLibraries.Compile(config, getCFlags(config), statsd.Client) } -func getCFlags(config *config.Config) []string { +func getCFlags(config *ebpf.Config) []string { cflags := []string{"-g"} if config.BPFDebug { diff --git a/pkg/network/usm/sharedlibraries/ebpf.go b/pkg/network/usm/sharedlibraries/ebpf.go index 3b67a6b14d3a6..4b32417132add 100644 --- a/pkg/network/usm/sharedlibraries/ebpf.go +++ b/pkg/network/usm/sharedlibraries/ebpf.go @@ -12,6 +12,7 @@ import ( "math" "os" "runtime" + "strings" manager "github.com/DataDog/ebpf-manager" "golang.org/x/sys/unix" @@ -19,7 +20,6 @@ import ( ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode" ebpftelemetry "github.com/DataDog/datadog-agent/pkg/ebpf/telemetry" - "github.com/DataDog/datadog-agent/pkg/network/config" netebpf "github.com/DataDog/datadog-agent/pkg/network/ebpf" "github.com/DataDog/datadog-agent/pkg/util/kernel" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -38,13 +38,31 @@ const ( var traceTypes = []string{"enter", "exit"} -type ebpfProgram struct { - cfg *config.Config +// EbpfProgram represents the shared libraries eBPF program. +type EbpfProgram struct { + cfg *ddebpf.Config perfHandler *ddebpf.PerfHandler *ddebpf.Manager } -func newEBPFProgram(c *config.Config) *ebpfProgram { +// IsSupported returns true if the shared libraries monitoring is supported on the current system. +func IsSupported(cfg *ddebpf.Config) bool { + kversion, err := kernel.HostVersion() + if err != nil { + log.Warn("could not determine the current kernel version. shared libraries monitoring disabled.") + return false + } + + if strings.HasPrefix(runtime.GOARCH, "arm") { + return kversion >= kernel.VersionCode(5, 5, 0) && (cfg.EnableRuntimeCompiler || cfg.EnableCORE) + } + + // Minimum version for shared libraries monitoring is 4.14 + return kversion >= kernel.VersionCode(4, 14, 0) +} + +// NewEBPFProgram creates a new EBPFProgram to monitor shared libraries +func NewEBPFProgram(c *ddebpf.Config) *EbpfProgram { perfHandler := ddebpf.NewPerfHandler(100) pm := &manager.PerfMap{ Map: manager.Map{ @@ -74,14 +92,15 @@ func newEBPFProgram(c *config.Config) *ebpfProgram { ) } - return &ebpfProgram{ + return &EbpfProgram{ cfg: c, Manager: ddebpf.NewManager(mgr, &ebpftelemetry.ErrorsTelemetryModifier{}), perfHandler: perfHandler, } } -func (e *ebpfProgram) Init() error { +// Init initializes the eBPF program. +func (e *EbpfProgram) Init() error { var err error if e.cfg.EnableCORE { err = e.initCORE() @@ -110,17 +129,19 @@ func (e *ebpfProgram) Init() error { return e.initPrebuilt() } -func (e *ebpfProgram) GetPerfHandler() *ddebpf.PerfHandler { +// GetPerfHandler returns the perf handler +func (e *EbpfProgram) GetPerfHandler() *ddebpf.PerfHandler { return e.perfHandler } -func (e *ebpfProgram) Stop() { +// Stop stops the eBPF program +func (e *EbpfProgram) Stop() { ebpftelemetry.UnregisterTelemetry(e.Manager.Manager) e.Manager.Stop(manager.CleanAll) //nolint:errcheck e.perfHandler.Stop() } -func (e *ebpfProgram) init(buf bytecode.AssetReader, options manager.Options) error { +func (e *EbpfProgram) init(buf bytecode.AssetReader, options manager.Options) error { options.RLimit = &unix.Rlimit{ Cur: math.MaxUint64, Max: math.MaxUint64, @@ -138,12 +159,12 @@ func (e *ebpfProgram) init(buf bytecode.AssetReader, options manager.Options) er return e.InitWithOptions(buf, &options) } -func (e *ebpfProgram) initCORE() error { +func (e *EbpfProgram) initCORE() error { assetName := getAssetName("shared-libraries", e.cfg.BPFDebug) return ddebpf.LoadCOREAsset(assetName, e.init) } -func (e *ebpfProgram) initRuntimeCompiler() error { +func (e *EbpfProgram) initRuntimeCompiler() error { bc, err := getRuntimeCompiledSharedLibraries(e.cfg) if err != nil { return err @@ -152,7 +173,7 @@ func (e *ebpfProgram) initRuntimeCompiler() error { return e.init(bc, manager.Options{}) } -func (e *ebpfProgram) initPrebuilt() error { +func (e *EbpfProgram) initPrebuilt() error { bc, err := netebpf.ReadSharedLibrariesModule(e.cfg.BPFDir, e.cfg.BPFDebug) if err != nil { return err diff --git a/pkg/network/usm/sharedlibraries/testutil/testutil.go b/pkg/network/usm/sharedlibraries/testutil/testutil.go index 1cf1bcee23e3a..80f6832cd2f63 100644 --- a/pkg/network/usm/sharedlibraries/testutil/testutil.go +++ b/pkg/network/usm/sharedlibraries/testutil/testutil.go @@ -21,6 +21,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/network/protocols/http/testutil" protocolstestutil "github.com/DataDog/datadog-agent/pkg/network/protocols/testutil" usmtestutil "github.com/DataDog/datadog-agent/pkg/network/usm/testutil" + "github.com/DataDog/datadog-agent/pkg/util/log" ) // mutex protecting build process @@ -35,6 +36,7 @@ func OpenFromProcess(t *testing.T, programExecutable string, paths ...string) (* cmd.Stderr = patternScanner require.NoError(t, cmd.Start()) + log.Infof("exec prog=%s, paths=%v | PID = %d", programExecutable, paths, cmd.Process.Pid) t.Cleanup(func() { if cmd.Process == nil { @@ -50,7 +52,7 @@ func OpenFromProcess(t *testing.T, programExecutable string, paths ...string) (* case <-time.After(time.Second * 5): patternScanner.PrintLogs(t) // please don't use t.Fatalf() here as we could test if it failed later - return nil, fmt.Errorf("couldn't luanch process in time") + return nil, fmt.Errorf("couldn't launch process in time") } } } diff --git a/pkg/network/usm/sharedlibraries/types.go b/pkg/network/usm/sharedlibraries/types.go index 906bcb7188967..066b69fbc2b0a 100644 --- a/pkg/network/usm/sharedlibraries/types.go +++ b/pkg/network/usm/sharedlibraries/types.go @@ -12,8 +12,8 @@ package sharedlibraries */ import "C" -type libPath C.lib_path_t +type LibPath C.lib_path_t const ( - libPathMaxSize = C.LIB_PATH_MAX_SIZE + LibPathMaxSize = C.LIB_PATH_MAX_SIZE ) diff --git a/pkg/network/usm/sharedlibraries/types_linux.go b/pkg/network/usm/sharedlibraries/types_linux.go index c857c249155e7..3240185a07632 100644 --- a/pkg/network/usm/sharedlibraries/types_linux.go +++ b/pkg/network/usm/sharedlibraries/types_linux.go @@ -3,12 +3,12 @@ package sharedlibraries -type libPath struct { +type LibPath struct { Pid uint32 Len uint32 Buf [120]byte } const ( - libPathMaxSize = 0x78 + LibPathMaxSize = 0x78 ) diff --git a/pkg/network/usm/sharedlibraries/watcher.go b/pkg/network/usm/sharedlibraries/watcher.go index 1342e2c8fd50b..ab0a9a4bfff81 100644 --- a/pkg/network/usm/sharedlibraries/watcher.go +++ b/pkg/network/usm/sharedlibraries/watcher.go @@ -32,11 +32,13 @@ const ( scanTerminatedProcessesInterval = 30 * time.Second ) -func toLibPath(data []byte) libPath { - return *(*libPath)(unsafe.Pointer(&data[0])) +// ToLibPath casts the perf event data to the LibPath structure +func ToLibPath(data []byte) LibPath { + return *(*LibPath)(unsafe.Pointer(&data[0])) } -func toBytes(l *libPath) []byte { +// ToBytes converts the libpath to a byte array containing the path +func ToBytes(l *LibPath) []byte { return l.Buf[:l.Len] } @@ -56,7 +58,7 @@ type Watcher struct { loadEvents *ddebpf.PerfHandler processMonitor *monitor.ProcessMonitor registry *utils.FileRegistry - ebpfProgram *ebpfProgram + ebpfProgram *EbpfProgram // telemetry libHits *telemetry.Counter @@ -68,7 +70,7 @@ var _ utils.Attacher = &Watcher{} // NewWatcher creates a new Watcher instance func NewWatcher(cfg *config.Config, rules ...Rule) (*Watcher, error) { - ebpfProgram := newEBPFProgram(cfg) + ebpfProgram := NewEBPFProgram(&cfg.Config) err := ebpfProgram.Init() if err != nil { return nil, fmt.Errorf("error initializing shared library program: %w", err) @@ -255,7 +257,7 @@ func (w *Watcher) Start() { return } - lib := toLibPath(event.Data) + lib := ToLibPath(event.Data) if int(lib.Pid) == thisPID { // don't scan ourself event.Done() @@ -263,7 +265,7 @@ func (w *Watcher) Start() { } w.libHits.Add(1) - path := toBytes(&lib) + path := ToBytes(&lib) for _, r := range w.rules { if r.Re.Match(path) { w.libMatches.Add(1) diff --git a/pkg/network/usm/utils/file_registry.go b/pkg/network/usm/utils/file_registry.go index 5ea71e3838603..2b212074a7413 100644 --- a/pkg/network/usm/utils/file_registry.go +++ b/pkg/network/usm/utils/file_registry.go @@ -78,7 +78,8 @@ func NewFilePath(procRoot, namespacedPath string, pid uint32) (FilePath, error) return FilePath{HostPath: path, ID: pathID, PID: pid}, nil } -type callback func(FilePath) error +// Callback is a function that is executed when a file becomes active or inactive +type Callback func(FilePath) error // IgnoreCB is just a dummy callback that doesn't do anything // Meant for testing purposes @@ -122,7 +123,7 @@ var ( // If no current registration exists for the given `PathIdentifier`, we execute // its *activation* callback. Otherwise, we increment the reference counter for // the existing registration if and only if `pid` is new; -func (r *FileRegistry) Register(namespacedPath string, pid uint32, activationCB, deactivationCB, alreadyRegistered callback) error { +func (r *FileRegistry) Register(namespacedPath string, pid uint32, activationCB, deactivationCB, alreadyRegistered Callback) error { if activationCB == nil || deactivationCB == nil { return errCallbackIsMissing } @@ -281,7 +282,7 @@ func (r *FileRegistry) Clear() { r.stopped = true } -func (r *FileRegistry) newRegistration(sampleFilePath string, deactivationCB callback) *registration { +func (r *FileRegistry) newRegistration(sampleFilePath string, deactivationCB Callback) *registration { return ®istration{ deactivationCB: deactivationCB, uniqueProcessesCount: atomic.NewInt32(1), @@ -292,7 +293,7 @@ func (r *FileRegistry) newRegistration(sampleFilePath string, deactivationCB cal type registration struct { uniqueProcessesCount *atomic.Int32 - deactivationCB callback + deactivationCB Callback // we are sharing the telemetry from FileRegistry telemetry *registryTelemetry diff --git a/tasks/system_probe.py b/tasks/system_probe.py index a0e218e222fbd..e83b349ee1195 100644 --- a/tasks/system_probe.py +++ b/tasks/system_probe.py @@ -333,7 +333,7 @@ def ninja_test_ebpf_programs(nw: NinjaWriter, build_dir): ebpf_c_dir = os.path.join(ebpf_bpf_dir, "testdata", "c") test_flags = "-g -DDEBUG=1" - test_programs = ["logdebug-test", "error_telemetry"] + test_programs = ["logdebug-test", "error_telemetry", "uprobe_attacher-test"] for prog in test_programs: infile = os.path.join(ebpf_c_dir, f"{prog}.c") From e7715df43b089834037cb4e3e22fef36ec6cb1d3 Mon Sep 17 00:00:00 2001 From: pducolin <45568537+pducolin@users.noreply.github.com> Date: Fri, 13 Sep 2024 17:14:24 +0200 Subject: [PATCH 044/195] [e2e] attempt to add logs and remove potential panics in AML test (#29298) --- .../log-agent/k8s-logs/file_tailing_test.go | 39 +++++++++++++------ .../log-agent/utils/file_tailing_utils.go | 12 +++--- .../file-tailing/file_tailing_test.go | 21 +++++----- 3 files changed, 43 insertions(+), 29 deletions(-) diff --git a/test/new-e2e/tests/agent-metrics-logs/log-agent/k8s-logs/file_tailing_test.go b/test/new-e2e/tests/agent-metrics-logs/log-agent/k8s-logs/file_tailing_test.go index 958f2988e0ea9..bbf6d8ccf524e 100644 --- a/test/new-e2e/tests/agent-metrics-logs/log-agent/k8s-logs/file_tailing_test.go +++ b/test/new-e2e/tests/agent-metrics-logs/log-agent/k8s-logs/file_tailing_test.go @@ -7,8 +7,8 @@ package k8sfiletailing import ( "context" + _ "embed" "fmt" - "os" "testing" "time" @@ -61,18 +61,23 @@ func (v *k8sSuite) TestSingleLogAndMetadata() { } _, err = v.Env().KubernetesCluster.Client().BatchV1().Jobs("default").Create(context.TODO(), jobSpcec, metav1.CreateOptions{}) - assert.NoError(v.T(), err, "Could not properly start job") + require.NoError(v.T(), err, "Could not properly start job") v.EventuallyWithT(func(c *assert.CollectT) { logsServiceNames, err := v.Env().FakeIntake.Client().GetLogServiceNames() assert.NoError(c, err, "Error starting job") + if err != nil { + return + } if assert.Contains(c, logsServiceNames, "ubuntu", "Ubuntu service not found") { filteredLogs, err := v.Env().FakeIntake.Client().FilterLogs("ubuntu") assert.NoError(c, err, "Error filtering logs") - if assert.NotEmpty(v.T(), filteredLogs, "Fake Intake returned no logs even though log service name exists") { + if err != nil { + return + } + if assert.NotEmpty(c, filteredLogs, "Fake Intake returned no logs even though log service name exists") { assert.Equal(c, testLogMessage, filteredLogs[0].Message, "Test log doesn't match") - // Check container metatdata assert.Equal(c, filteredLogs[0].Service, "ubuntu", "Could not find service") assert.NotNil(c, filteredLogs[0].HostName, "Hostname not found") @@ -83,12 +88,13 @@ func (v *k8sSuite) TestSingleLogAndMetadata() { }, 1*time.Minute, 10*time.Second) } +//go:embed long_line_log.txt +var longLineLog string + func (v *k8sSuite) TestLongLogLine() { err := v.Env().FakeIntake.Client().FlushServerAndResetAggregators() require.NoError(v.T(), err, "Could not reset the FakeIntake") var backOffLimit int32 = 4 - file, err := os.ReadFile("long_line_log.txt") - assert.NoError(v.T(), err, "Could not open long line file.") jobSpcec := &batchv1.Job{ ObjectMeta: metav1.ObjectMeta{ @@ -102,7 +108,7 @@ func (v *k8sSuite) TestLongLogLine() { { Name: "long-line-job", Image: "ubuntu", - Command: []string{"echo", string(file)}, + Command: []string{"echo", longLineLog}, }, }, RestartPolicy: corev1.RestartPolicyNever, @@ -113,17 +119,23 @@ func (v *k8sSuite) TestLongLogLine() { } _, err = v.Env().KubernetesCluster.Client().BatchV1().Jobs("default").Create(context.TODO(), jobSpcec, metav1.CreateOptions{}) - assert.NoError(v.T(), err, "Could not properly start job") + require.NoError(v.T(), err, "Could not properly start job") v.EventuallyWithT(func(c *assert.CollectT) { logsServiceNames, err := v.Env().FakeIntake.Client().GetLogServiceNames() assert.NoError(c, err, "Error starting job") + if err != nil { + return + } if assert.Contains(c, logsServiceNames, "ubuntu", "Ubuntu service not found") { filteredLogs, err := v.Env().FakeIntake.Client().FilterLogs("ubuntu") assert.NoError(c, err, "Error filtering logs") - if assert.NotEmpty(v.T(), filteredLogs, "Fake Intake returned no logs even though log service name exists") { - assert.Equal(c, string(file), fmt.Sprintf("%s%s", filteredLogs[0].Message, "\n"), "Test log doesn't match") + if err != nil { + return + } + if assert.NotEmpty(c, filteredLogs, "Fake Intake returned no logs even though log service name exists") { + assert.Equal(c, longLineLog, fmt.Sprintf("%s%s", filteredLogs[0].Message, "\n"), "Test log doesn't match") } } @@ -142,7 +154,7 @@ func (v *k8sSuite) TestContainerExclude() { }, } _, err = v.Env().KubernetesCluster.Client().CoreV1().Namespaces().Create(context.TODO(), namespace, metav1.CreateOptions{}) - assert.NoError(v.T(), err, "Could not create namespace") + require.NoError(v.T(), err, "Could not create namespace") var backOffLimit int32 = 4 testLogMessage := "Test log message here" @@ -170,11 +182,14 @@ func (v *k8sSuite) TestContainerExclude() { } _, err = v.Env().KubernetesCluster.Client().BatchV1().Jobs(namespaceName).Create(context.TODO(), jobSpcec, metav1.CreateOptions{}) - assert.NoError(v.T(), err, "Could not properly start job") + require.NoError(v.T(), err, "Could not properly start job") v.EventuallyWithT(func(c *assert.CollectT) { logsServiceNames, err := v.Env().FakeIntake.Client().GetLogServiceNames() assert.NoError(c, err, "Error starting job") + if err != nil { + return + } assert.NotContains(c, logsServiceNames, "alpine", "Alpine service found after excluded") }, 1*time.Minute, 10*time.Second) } diff --git a/test/new-e2e/tests/agent-metrics-logs/log-agent/utils/file_tailing_utils.go b/test/new-e2e/tests/agent-metrics-logs/log-agent/utils/file_tailing_utils.go index 65eeaa1d19089..f8950e85c532a 100644 --- a/test/new-e2e/tests/agent-metrics-logs/log-agent/utils/file_tailing_utils.go +++ b/test/new-e2e/tests/agent-metrics-logs/log-agent/utils/file_tailing_utils.go @@ -117,9 +117,8 @@ func CheckLogFilePresence(ls LogsTestSuite, logFileName string) { } // FetchAndFilterLogs fetches logs from the fake intake server and filters them by service and content. -func FetchAndFilterLogs(t *testing.T, fakeIntake *components.FakeIntake, service, content string) ([]*aggregator.Log, error) { +func FetchAndFilterLogs(fakeIntake *components.FakeIntake, service, content string) ([]*aggregator.Log, error) { client := fakeIntake.Client() - t.Helper() names, err := client.GetLogServiceNames() if err != nil { @@ -154,7 +153,8 @@ func CheckLogsExpected(t *testing.T, fakeIntake *components.FakeIntake, service, t.Helper() assert.EventuallyWithT(t, func(c *assert.CollectT) { - logs, err := FetchAndFilterLogs(t, fakeIntake, service, content) + logs, err := FetchAndFilterLogs(fakeIntake, service, content) + if assert.NoErrorf(c, err, "Error fetching logs: %s", err) { intakeLog := logsToString(logs) if assert.NotEmpty(c, logs, "Expected logs with content: '%s' not found. Instead, found: %s", content, intakeLog) { @@ -171,11 +171,11 @@ func CheckLogsExpected(t *testing.T, fakeIntake *components.FakeIntake, service, // CheckLogsNotExpected verifies the absence of unexpected logs. func CheckLogsNotExpected(t *testing.T, fakeIntake *components.FakeIntake, service, content string) { t.Helper() - + t.Logf("Checking for logs from service: '%s' with content: '%s' are not collected", service, content) assert.EventuallyWithT(t, func(c *assert.CollectT) { - logs, err := FetchAndFilterLogs(t, fakeIntake, service, content) - intakeLog := logsToString(logs) + logs, err := FetchAndFilterLogs(fakeIntake, service, content) if assert.NoErrorf(c, err, "Error fetching logs: %s", err) { + intakeLog := logsToString(logs) if assert.Empty(c, logs, "Unexpected logs with content: '%s' found. Instead, found: %s", content, intakeLog) { t.Logf("No logs from service: '%s' with content: '%s' collected as expected", service, content) } diff --git a/test/new-e2e/tests/agent-metrics-logs/log-agent/windows-log/file-tailing/file_tailing_test.go b/test/new-e2e/tests/agent-metrics-logs/log-agent/windows-log/file-tailing/file_tailing_test.go index 2f13e89793c07..c2becb766729a 100644 --- a/test/new-e2e/tests/agent-metrics-logs/log-agent/windows-log/file-tailing/file_tailing_test.go +++ b/test/new-e2e/tests/agent-metrics-logs/log-agent/windows-log/file-tailing/file_tailing_test.go @@ -14,13 +14,14 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/DataDog/test-infra-definitions/components/datadog/agentparams" + testos "github.com/DataDog/test-infra-definitions/components/os" + "github.com/DataDog/test-infra-definitions/scenarios/aws/ec2" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" awshost "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/host" "github.com/DataDog/datadog-agent/test/new-e2e/tests/agent-metrics-logs/log-agent/utils" - "github.com/DataDog/test-infra-definitions/components/datadog/agentparams" - testos "github.com/DataDog/test-infra-definitions/components/os" - "github.com/DataDog/test-infra-definitions/scenarios/aws/ec2" ) // WindowsFakeintakeSuite defines a test suite for the log agent interacting with a virtual machine and fake intake. @@ -137,17 +138,15 @@ func (s *WindowsFakeintakeSuite) testLogNoPermission() { assert.NoErrorf(t, err, "Unable to adjust permissions for the log file %s.", logFilePath) t.Logf("Read permissions revoked") - // Generate logs and check the intake for no new logs because of revoked permissions + // wait for agent to be ready after restart s.EventuallyWithT(func(c *assert.CollectT) { - agentReady := s.Env().Agent.Client.IsReady() - if assert.Truef(c, agentReady, "Agent is not ready after restart") { - // Generate log - utils.AppendLog(s, logFileName, "access-denied", 1) - // Check intake for new logs - utils.CheckLogsNotExpected(s.T(), s.Env().FakeIntake, "hello", "access-denied") - } + assert.Truef(c, s.Env().Agent.Client.IsReady(), "Agent is not ready after restart") }, 2*time.Minute, 5*time.Second) + // Generate logs and check the intake for no new logs because of revoked permissions + utils.AppendLog(s, logFileName, "access-denied", 1) + // Check intake for new logs + utils.CheckLogsNotExpected(s.T(), s.Env().FakeIntake, "hello", "access-denied") } func (s *WindowsFakeintakeSuite) testLogCollectionAfterPermission() { From 9fc174bc03d8759cb52d0d9e0ff7c513a2a6d51a Mon Sep 17 00:00:00 2001 From: Sylvain Afchain Date: Fri, 13 Sep 2024 18:08:30 +0200 Subject: [PATCH 045/195] [CWS] change a log level in AD (#29344) --- pkg/security/security_profile/dump/manager.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/security/security_profile/dump/manager.go b/pkg/security/security_profile/dump/manager.go index e98d13dcad655..f66c9ece22dc5 100644 --- a/pkg/security/security_profile/dump/manager.go +++ b/pkg/security/security_profile/dump/manager.go @@ -432,7 +432,7 @@ func (adm *ActivityDumpManager) HandleCGroupTracingEvent(event *model.CgroupTrac defer adm.Unlock() if len(event.ContainerContext.ContainerID) == 0 { - seclog.Errorf("received a cgroup tracing event with an empty container ID") + seclog.Warnf("received a cgroup tracing event with an empty container ID") return } From 39cd38632c796e7ef2da686bdb7aadbb97320ca9 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Fri, 13 Sep 2024 18:11:37 +0200 Subject: [PATCH 046/195] [CWS] remove RC based security profiles provider (#29343) --- pkg/config/setup/system_probe_cws.go | 1 - pkg/security/config/config.go | 3 - pkg/security/rconfig/profiles.go | 150 ------------------ .../security_profile/profile/manager.go | 10 -- 4 files changed, 164 deletions(-) delete mode 100644 pkg/security/rconfig/profiles.go diff --git a/pkg/config/setup/system_probe_cws.go b/pkg/config/setup/system_probe_cws.go index 3497ffc143007..e904416d75d7e 100644 --- a/pkg/config/setup/system_probe_cws.go +++ b/pkg/config/setup/system_probe_cws.go @@ -86,7 +86,6 @@ func initCWSSystemProbeConfig(cfg pkgconfigmodel.Config) { cfg.BindEnvAndSetDefault("runtime_security_config.security_profile.watch_dir", true) cfg.BindEnvAndSetDefault("runtime_security_config.security_profile.cache_size", 10) cfg.BindEnvAndSetDefault("runtime_security_config.security_profile.max_count", 400) - cfg.BindEnvAndSetDefault("runtime_security_config.security_profile.remote_configuration.enabled", false) cfg.BindEnvAndSetDefault("runtime_security_config.security_profile.dns_match_max_depth", 3) // CWS - Auto suppression diff --git a/pkg/security/config/config.go b/pkg/security/config/config.go index 95a261f32963d..91b7cae6ce1a4 100644 --- a/pkg/security/config/config.go +++ b/pkg/security/config/config.go @@ -156,8 +156,6 @@ type RuntimeSecurityConfig struct { SecurityProfileCacheSize int // SecurityProfileMaxCount defines the maximum number of Security Profiles that may be evaluated concurrently SecurityProfileMaxCount int - // SecurityProfileRCEnabled defines if remote-configuration is enabled - SecurityProfileRCEnabled bool // SecurityProfileDNSMatchMaxDepth defines the max depth of subdomain to be matched for DNS anomaly detection (0 to match everything) SecurityProfileDNSMatchMaxDepth int @@ -410,7 +408,6 @@ func NewRuntimeSecurityConfig() (*RuntimeSecurityConfig, error) { SecurityProfileWatchDir: coreconfig.SystemProbe().GetBool("runtime_security_config.security_profile.watch_dir"), SecurityProfileCacheSize: coreconfig.SystemProbe().GetInt("runtime_security_config.security_profile.cache_size"), SecurityProfileMaxCount: coreconfig.SystemProbe().GetInt("runtime_security_config.security_profile.max_count"), - SecurityProfileRCEnabled: coreconfig.SystemProbe().GetBool("runtime_security_config.security_profile.remote_configuration.enabled"), SecurityProfileDNSMatchMaxDepth: coreconfig.SystemProbe().GetInt("runtime_security_config.security_profile.dns_match_max_depth"), // auto suppression diff --git a/pkg/security/rconfig/profiles.go b/pkg/security/rconfig/profiles.go deleted file mode 100644 index 5441d8621ed5b..0000000000000 --- a/pkg/security/rconfig/profiles.go +++ /dev/null @@ -1,150 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build linux - -// Package rconfig holds rconfig related files -package rconfig - -import ( - "context" - "encoding/json" - "fmt" - "sync" - - proto "github.com/DataDog/agent-payload/v5/cws/dumpsv1" - "github.com/DataDog/datadog-go/v5/statsd" - - "github.com/DataDog/datadog-agent/pkg/api/security" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/config/remote/client" - "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" - cgroupModel "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup/model" - "github.com/DataDog/datadog-agent/pkg/security/utils" - "github.com/DataDog/datadog-agent/pkg/util/log" -) - -const ( - // image name/image tag separator - separator = ":::" -) - -// ProfileConfig defines a profile config -type ProfileConfig struct { - Tags []string - Profile []byte -} - -// RCProfileProvider defines a RC profile provider -type RCProfileProvider struct { - sync.RWMutex - - client *client.Client - - onNewProfileCallback func(selector cgroupModel.WorkloadSelector, profile *proto.SecurityProfile) -} - -// Stop stops the client -func (r *RCProfileProvider) Stop() error { - r.client.Close() - return nil -} - -func (r *RCProfileProvider) rcProfilesUpdateCallback(configs map[string]state.RawConfig, _ func(string, state.ApplyStatus)) { - for _, config := range configs { - var profCfg ProfileConfig - if err := json.Unmarshal(config.Config, &profCfg); err != nil { - log.Errorf("couldn't decode json profile: %s", err) - continue - } - - profile := &proto.SecurityProfile{} - if err := profile.UnmarshalVT([]byte(profCfg.Profile)); err != nil { - log.Errorf("couldn't decode protobuf profile: %s", err) - continue - } - - selector, err := cgroupModel.NewWorkloadSelector(profile.Selector.ImageName, profile.Selector.ImageTag) - if err != nil { - log.Errorf("selector error %s/%s: %v", profile.Selector.ImageName, profile.Selector.ImageTag, err) - continue - } - - log.Tracef("got a new profile for %v : %v", selector, profile) - r.onNewProfileCallback(selector, profile) - } -} - -// Start starts the Remote Config profile provider and subscribes to updates -func (r *RCProfileProvider) Start(ctx context.Context) error { - log.Info("remote-config profile provider started") - - r.client.Start() - r.client.Subscribe(state.ProductCWSProfiles, r.rcProfilesUpdateCallback) - - go func() { - <-ctx.Done() - _ = r.Stop() - }() - - return nil -} - -func selectorToTag(selector *cgroupModel.WorkloadSelector) string { - return selector.Image + separator + selector.Tag -} - -// UpdateWorkloadSelectors updates the selectors used to query profiles -func (r *RCProfileProvider) UpdateWorkloadSelectors(selectors []cgroupModel.WorkloadSelector) { - r.Lock() - defer r.Unlock() - - log.Tracef("updating workload selector: %v", selectors) - - var tags []string - - for _, selector := range selectors { - tags = append(tags, selectorToTag(&selector)) - } - - r.client.SetCWSWorkloads(tags) -} - -// SetOnNewProfileCallback sets the onNewProfileCallback function -func (r *RCProfileProvider) SetOnNewProfileCallback(onNewProfileCallback func(selector cgroupModel.WorkloadSelector, profile *proto.SecurityProfile)) { - r.onNewProfileCallback = onNewProfileCallback -} - -// SendStats sends the metrics of the directory provider -func (r *RCProfileProvider) SendStats(_ statsd.ClientInterface) error { - return nil -} - -// NewRCProfileProvider returns a new Remote Config based policy provider -func NewRCProfileProvider() (*RCProfileProvider, error) { - agentVersion, err := utils.GetAgentSemverVersion() - if err != nil { - return nil, fmt.Errorf("failed to parse agent version: %v", err) - } - - ipcAddress, err := config.GetIPCAddress() - if err != nil { - return nil, fmt.Errorf("failed to get ipc address: %w", err) - } - - c, err := client.NewGRPCClient(ipcAddress, config.GetIPCPort(), func() (string, error) { return security.FetchAuthToken(config.Datadog()) }, - client.WithAgent(agentName, agentVersion.String()), - client.WithProducts(state.ProductCWSProfiles), - client.WithPollInterval(securityAgentRCPollInterval)) - if err != nil { - return nil, err - } - - r := &RCProfileProvider{ - client: c, - } - - return r, nil -} diff --git a/pkg/security/security_profile/profile/manager.go b/pkg/security/security_profile/profile/manager.go index c3c67ea27aaab..c256ae847b488 100644 --- a/pkg/security/security_profile/profile/manager.go +++ b/pkg/security/security_profile/profile/manager.go @@ -28,7 +28,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/metrics" "github.com/DataDog/datadog-agent/pkg/security/proto/api" - "github.com/DataDog/datadog-agent/pkg/security/rconfig" "github.com/DataDog/datadog-agent/pkg/security/resolvers" "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup" cgroupModel "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup/model" @@ -182,15 +181,6 @@ func NewSecurityProfileManager(config *config.Config, statsdClient statsd.Client m.onLocalStorageCleanup = dirProvider.OnLocalStorageCleanup } - // instantiate remote-config provider - if config.RuntimeSecurity.RemoteConfigurationEnabled && config.RuntimeSecurity.SecurityProfileRCEnabled { - rcProvider, err := rconfig.NewRCProfileProvider() - if err != nil { - return nil, fmt.Errorf("couldn't instantiate a new security profile remote-config provider: %w", err) - } - m.providers = append(m.providers, rcProvider) - } - m.initMetricsMap() // register the manager to the provider(s) From 3f19d9941e6466b97cadcdb8ee0dba08b557a83e Mon Sep 17 00:00:00 2001 From: Hasan Mahmood <6599778+hmahmood@users.noreply.github.com> Date: Fri, 13 Sep 2024 11:51:23 -0500 Subject: [PATCH 047/195] [NPM] Fix panic and add more context to errors (#29278) --- test/fakeintake/client/client.go | 6 +++++- test/new-e2e/tests/npm/common_1host.go | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/test/fakeintake/client/client.go b/test/fakeintake/client/client.go index 54df7e45a9df8..d31e22c992628 100644 --- a/test/fakeintake/client/client.go +++ b/test/fakeintake/client/client.go @@ -784,7 +784,11 @@ func (c *Client) get(route string) ([]byte, error) { defer tmpResp.Body.Close() if tmpResp.StatusCode != http.StatusOK { - return fmt.Errorf("expected %d got %d", http.StatusOK, tmpResp.StatusCode) + var errStr string + if errBody, _ := io.ReadAll(tmpResp.Body); len(errBody) > 0 { + errStr = string(errBody) + } + return fmt.Errorf("expected %d got %d: %s", http.StatusOK, tmpResp.StatusCode, errStr) } // If strictFakeintakeIDCheck is enabled, we check that the fakeintake ID is the same as the one we expect // If the fakeintake ID is not set yet we set the one we get from the first request diff --git a/test/new-e2e/tests/npm/common_1host.go b/test/new-e2e/tests/npm/common_1host.go index 7a1fcd5824189..2f0456786a2ba 100644 --- a/test/new-e2e/tests/npm/common_1host.go +++ b/test/new-e2e/tests/npm/common_1host.go @@ -164,6 +164,10 @@ func test1HostFakeIntakeNPMTCPUDPDNS[Env any](v *e2e.BaseSuite[Env], FakeIntake v.EventuallyWithT(func(c *assert.CollectT) { cnx, err := FakeIntake.Client().GetConnections() assert.NoError(c, err, "GetConnections() errors") + if !assert.NotNil(c, cnx, "GetConnections() returned nil ConnectionsAggregator") { + return + } + if !assert.NotEmpty(c, cnx.GetNames(), "no connections yet") { return } From a0be446465e35fe5f9d969d46d7f2cfc5fb7a79f Mon Sep 17 00:00:00 2001 From: pducolin <45568537+pducolin@users.noreply.github.com> Date: Fri, 13 Sep 2024 19:27:19 +0200 Subject: [PATCH 048/195] [kmt] mark TestBasic as flaky (#29350) --- .../corechecks/servicediscovery/module/impl_linux_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go b/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go index ba93cf883c933..ef9c853dc0099 100644 --- a/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go +++ b/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go @@ -53,6 +53,7 @@ import ( usmtestutil "github.com/DataDog/datadog-agent/pkg/network/usm/testutil" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/kernel" + "github.com/DataDog/datadog-agent/pkg/util/testutil/flake" ) func setupDiscoveryModule(t *testing.T) string { @@ -184,6 +185,7 @@ func startProcessWithFile(t *testing.T, f *os.File) *exec.Cmd { // Check that we get (only) listening processes for all expected protocols. func TestBasic(t *testing.T) { + flake.Mark(t) url := setupDiscoveryModule(t) var expectedPIDs []int From e99d8db72c73d4ac6da87d2d352b7e336eb8028d Mon Sep 17 00:00:00 2001 From: shreyamalpani Date: Fri, 13 Sep 2024 16:28:41 -0400 Subject: [PATCH 049/195] [SVLS-5551] Add lambda threads enhanced metrics (#29274) --- pkg/serverless/metrics/enhanced_metrics.go | 70 +++++++++++- .../metrics/enhanced_metrics_test.go | 40 ++++++- pkg/serverless/proc/proc.go | 100 ++++++++++++++++-- pkg/serverless/proc/proc_test.go | 63 ++++++++--- .../invalid_malformed/31/limits | 2 +- .../invalid_malformed/9/limits | 2 +- .../invalid_missing/31/limits | 1 - .../invalid_missing/9/limits | 3 +- .../valid/31/fd/1 | 0 .../valid/31/fd/2 | 0 .../valid/31/limits | 0 .../fd/1 => process/valid/31/task/1/.gitkeep} | 0 .../fd/2 => process/valid/31/task/2/.gitkeep} | 0 .../valid/9/fd => process/valid/31/task}/3 | 0 .../proc/testData/process/valid/9/fd/1 | 0 .../proc/testData/process/valid/9/fd/2 | 0 .../proc/testData/process/valid/9/fd/3 | 0 .../valid/9/limits | 0 .../testData/process/valid/9/task/1/.gitkeep | 0 .../testData/process/valid/9/task/2/.gitkeep | 0 .../testData/process/valid/9/task/3/.gitkeep | 0 pkg/serverless/serverless.go | 2 +- .../serverless/snapshots/error-csharp | 96 +++++++++++++++++ .../serverless/snapshots/error-java | 96 +++++++++++++++++ .../serverless/snapshots/error-node | 96 +++++++++++++++++ .../serverless/snapshots/error-proxy | 96 +++++++++++++++++ .../serverless/snapshots/error-python | 96 +++++++++++++++++ .../serverless/snapshots/metric-csharp | 96 +++++++++++++++++ .../serverless/snapshots/metric-go | 96 +++++++++++++++++ .../serverless/snapshots/metric-java | 96 +++++++++++++++++ .../serverless/snapshots/metric-node | 96 +++++++++++++++++ .../serverless/snapshots/metric-proxy | 96 +++++++++++++++++ .../serverless/snapshots/metric-python | 96 +++++++++++++++++ 33 files changed, 1305 insertions(+), 34 deletions(-) rename pkg/serverless/proc/testData/{file-descriptor => process}/invalid_malformed/31/limits (93%) rename pkg/serverless/proc/testData/{file-descriptor => process}/invalid_malformed/9/limits (98%) rename pkg/serverless/proc/testData/{file-descriptor => process}/invalid_missing/31/limits (93%) rename pkg/serverless/proc/testData/{file-descriptor => process}/invalid_missing/9/limits (92%) rename pkg/serverless/proc/testData/{file-descriptor => process}/valid/31/fd/1 (100%) rename pkg/serverless/proc/testData/{file-descriptor => process}/valid/31/fd/2 (100%) rename pkg/serverless/proc/testData/{file-descriptor => process}/valid/31/limits (100%) rename pkg/serverless/proc/testData/{file-descriptor/valid/9/fd/1 => process/valid/31/task/1/.gitkeep} (100%) rename pkg/serverless/proc/testData/{file-descriptor/valid/9/fd/2 => process/valid/31/task/2/.gitkeep} (100%) rename pkg/serverless/proc/testData/{file-descriptor/valid/9/fd => process/valid/31/task}/3 (100%) create mode 100644 pkg/serverless/proc/testData/process/valid/9/fd/1 create mode 100644 pkg/serverless/proc/testData/process/valid/9/fd/2 create mode 100644 pkg/serverless/proc/testData/process/valid/9/fd/3 rename pkg/serverless/proc/testData/{file-descriptor => process}/valid/9/limits (100%) create mode 100644 pkg/serverless/proc/testData/process/valid/9/task/1/.gitkeep create mode 100644 pkg/serverless/proc/testData/process/valid/9/task/2/.gitkeep create mode 100644 pkg/serverless/proc/testData/process/valid/9/task/3/.gitkeep diff --git a/pkg/serverless/metrics/enhanced_metrics.go b/pkg/serverless/metrics/enhanced_metrics.go index 3d81c71fce4a2..7ec1ceb921575 100644 --- a/pkg/serverless/metrics/enhanced_metrics.go +++ b/pkg/serverless/metrics/enhanced_metrics.go @@ -63,6 +63,8 @@ const ( tmpMaxMetric = "aws.lambda.enhanced.tmp_max" fdMaxMetric = "aws.lambda.enhanced.fd_max" fdUseMetric = "aws.lambda.enhanced.fd_use" + threadsMaxMetric = "aws.lambda.enhanced.threads_max" + threadsUseMetric = "aws.lambda.enhanced.threads_use" enhancedMetricsEnvVar = "DD_ENHANCED_METRICS" // Bottlecap @@ -574,6 +576,14 @@ type generateFdEnhancedMetricsArgs struct { Time float64 } +type generateThreadEnhancedMetricsArgs struct { + ThreadsMax float64 + ThreadsUse float64 + Tags []string + Demux aggregator.Demultiplexer + Time float64 +} + // generateFdEnhancedMetrics generates enhanced metrics for the maximum number of file descriptors available and in use func generateFdEnhancedMetrics(args generateFdEnhancedMetricsArgs) { args.Demux.AggregateSample(metrics.MetricSample{ @@ -594,25 +604,61 @@ func generateFdEnhancedMetrics(args generateFdEnhancedMetricsArgs) { }) } -func SendFdEnhancedMetrics(sendMetrics chan bool, tags []string, metricAgent *ServerlessMetricAgent) { +// generateThreadEnhancedMetrics generates enhanced metrics for the maximum number of threads available and in use +func generateThreadEnhancedMetrics(args generateThreadEnhancedMetricsArgs) { + args.Demux.AggregateSample(metrics.MetricSample{ + Name: threadsMaxMetric, + Value: args.ThreadsMax, + Mtype: metrics.DistributionType, + Tags: args.Tags, + SampleRate: 1, + Timestamp: args.Time, + }) + args.Demux.AggregateSample(metrics.MetricSample{ + Name: threadsUseMetric, + Value: args.ThreadsUse, + Mtype: metrics.DistributionType, + Tags: args.Tags, + SampleRate: 1, + Timestamp: args.Time, + }) +} + +func SendProcessEnhancedMetrics(sendMetrics chan bool, tags []string, metricAgent *ServerlessMetricAgent) { if enhancedMetricsDisabled { return } - fdMaxData, err := proc.GetFileDescriptorMaxData() + pids := proc.GetPidList(proc.ProcPath) + + fdMaxData, err := proc.GetFileDescriptorMaxData(pids) if err != nil { log.Debug("Could not emit file descriptor enhanced metrics. %v", err) return } - fdUseData, err := proc.GetFileDescriptorUseData() + fdUseData, err := proc.GetFileDescriptorUseData(pids) if err != nil { log.Debugf("Could not emit file descriptor enhanced metrics. %v", err) return } + threadsMaxData, err := proc.GetThreadsMaxData(pids) + if err != nil { + log.Debugf("Could not emit thread enhanced metrics. %v", err) + return + } + + threadsUseData, err := proc.GetThreadsUseData(pids) + if err != nil { + log.Debugf("Could not emit thread enhanced metrics. %v", err) + return + } + fdMax := fdMaxData.MaximumFileHandles fdUse := fdUseData.UseFileHandles + threadsMax := threadsMaxData.ThreadsMax + threadsUse := threadsUseData.ThreadsUse ticker := time.NewTicker(1 * time.Millisecond) defer ticker.Stop() @@ -627,15 +673,31 @@ func SendFdEnhancedMetrics(sendMetrics chan bool, tags []string, metricAgent *Se Demux: metricAgent.Demux, Time: float64(time.Now().UnixNano()) / float64(time.Second), }) + generateThreadEnhancedMetrics(generateThreadEnhancedMetricsArgs{ + ThreadsMax: threadsMax, + ThreadsUse: threadsUse, + Tags: tags, + Demux: metricAgent.Demux, + Time: float64(time.Now().UnixNano()) / float64(time.Second), + }) return } case <-ticker.C: - fdUseData, err := proc.GetFileDescriptorUseData() + pids := proc.GetPidList(proc.ProcPath) + + fdUseData, err := proc.GetFileDescriptorUseData(pids) if err != nil { log.Debugf("Could not emit file descriptor enhanced metrics. %v", err) return } fdUse = math.Max(fdUse, fdUseData.UseFileHandles) + + threadsUseData, err := proc.GetThreadsUseData(pids) + if err != nil { + log.Debugf("Could not emit thread enhanced metric. %v", err) + return + } + threadsUse = math.Max(threadsUse, threadsUseData.ThreadsUse) } } } diff --git a/pkg/serverless/metrics/enhanced_metrics_test.go b/pkg/serverless/metrics/enhanced_metrics_test.go index 1c274229ba145..81de716f01226 100644 --- a/pkg/serverless/metrics/enhanced_metrics_test.go +++ b/pkg/serverless/metrics/enhanced_metrics_test.go @@ -766,7 +766,43 @@ func TestSendFdEnhancedMetrics(t *testing.T) { assert.Len(t, timedMetrics, 0) } -func TestSendFdEnhancedMetricsDisabled(t *testing.T) { +func TestSendThreadEnhancedMetrics(t *testing.T) { + demux := createDemultiplexer(t) + tags := []string{"functionname:test-function"} + now := float64(time.Now().UnixNano()) / float64(time.Second) + args := generateThreadEnhancedMetricsArgs{ + ThreadsMax: 1024, + ThreadsUse: 41, + Tags: tags, + Demux: demux, + Time: now, + } + go generateThreadEnhancedMetrics(args) + generatedMetrics, timedMetrics := demux.WaitForNumberOfSamples(3, 0, 100*time.Millisecond) + assert.Equal(t, []metrics.MetricSample{ + { + Name: threadsMaxMetric, + Value: 1024, + Mtype: metrics.DistributionType, + Tags: tags, + SampleRate: 1, + Timestamp: now, + }, + { + Name: threadsUseMetric, + Value: 41, + Mtype: metrics.DistributionType, + Tags: tags, + SampleRate: 1, + Timestamp: now, + }, + }, + generatedMetrics, + ) + assert.Len(t, timedMetrics, 0) +} + +func TestSendProcessEnhancedMetricsDisabled(t *testing.T) { var wg sync.WaitGroup enhancedMetricsDisabled = true demux := createDemultiplexer(t) @@ -776,7 +812,7 @@ func TestSendFdEnhancedMetricsDisabled(t *testing.T) { wg.Add(1) go func() { defer wg.Done() - SendFdEnhancedMetrics(make(chan bool), tags, &metricAgent) + SendProcessEnhancedMetrics(make(chan bool), tags, &metricAgent) }() generatedMetrics, timedMetrics := demux.WaitForNumberOfSamples(1, 0, 100*time.Millisecond) diff --git a/pkg/serverless/proc/proc.go b/pkg/serverless/proc/proc.go index b8e612de91938..2cb4e297f47be 100644 --- a/pkg/serverless/proc/proc.go +++ b/pkg/serverless/proc/proc.go @@ -27,10 +27,11 @@ const ( ProcPath = "/proc" PidLimitsPathFormat = "/%d/limits" PidFdPathFormat = "/%d/fd" + PidTaskPathFormat = "/%d/task" lambdaNetworkInterface = "vinternal_1" ) -func getPidList(procPath string) []int { +func GetPidList(procPath string) []int { files, err := os.ReadDir(procPath) pids := []int{} if err != nil { @@ -74,7 +75,7 @@ func getEnvVariablesFromPid(procPath string, pid int) map[string]string { // it returns a slice since a value could be found in more than one process func SearchProcsForEnvVariable(procPath string, envName string) []string { result := []string{} - pidList := getPidList(procPath) + pidList := GetPidList(procPath) for _, pid := range pidList { envMap := getEnvVariablesFromPid(procPath, pid) if value, ok := envMap[envName]; ok { @@ -207,12 +208,11 @@ type FileDescriptorMaxData struct { } // GetFileDescriptorMaxData returns the maximum limit of file descriptors the function can use -func GetFileDescriptorMaxData() (*FileDescriptorMaxData, error) { - return getFileDescriptorMaxData(ProcPath) +func GetFileDescriptorMaxData(pids []int) (*FileDescriptorMaxData, error) { + return getFileDescriptorMaxData(ProcPath, pids) } -func getFileDescriptorMaxData(path string) (*FileDescriptorMaxData, error) { - pids := getPidList(path) +func getFileDescriptorMaxData(path string, pids []int) (*FileDescriptorMaxData, error) { fdMax := math.Inf(1) for _, pid := range pids { @@ -260,12 +260,11 @@ type FileDescriptorUseData struct { } // GetFileDescriptorUseData returns the maximum number of file descriptors the function has used at a time -func GetFileDescriptorUseData() (*FileDescriptorUseData, error) { - return getFileDescriptorUseData(ProcPath) +func GetFileDescriptorUseData(pids []int) (*FileDescriptorUseData, error) { + return getFileDescriptorUseData(ProcPath, pids) } -func getFileDescriptorUseData(path string) (*FileDescriptorUseData, error) { - pids := getPidList(path) +func getFileDescriptorUseData(path string, pids []int) (*FileDescriptorUseData, error) { fdUse := 0 for _, pid := range pids { @@ -281,3 +280,84 @@ func getFileDescriptorUseData(path string) (*FileDescriptorUseData, error) { UseFileHandles: float64(fdUse), }, nil } + +type ThreadsMaxData struct { + ThreadsMax float64 +} + +// GetThreadsMaxData returns the maximum limit of threads the function can use +func GetThreadsMaxData(pids []int) (*ThreadsMaxData, error) { + return getThreadsMaxData(ProcPath, pids) +} + +func getThreadsMaxData(path string, pids []int) (*ThreadsMaxData, error) { + threadsMax := math.Inf(1) + + for _, pid := range pids { + limitsPath := fmt.Sprint(path + fmt.Sprintf(PidLimitsPathFormat, pid)) + file, err := os.Open(limitsPath) + if err != nil { + return nil, err + } + defer file.Close() + + scanner := bufio.NewScanner(file) + for scanner.Scan() { + line := scanner.Text() + if strings.HasPrefix(line, "Max processes") { + fields := strings.Fields(line) + if len(fields) < 5 { + log.Debugf("threads max data not found in file '%s'", limitsPath) + break + } + + threadsMaxPidStr := fields[2] + threadsMaxPid, err := strconv.Atoi(threadsMaxPidStr) + if err != nil { + log.Debugf("file descriptor max data not found in file '%s'", limitsPath) + break + } + + threadsMax = math.Min(float64(threadsMax), float64(threadsMaxPid)) + break + } + } + } + + if threadsMax != math.Inf(1) { + return &ThreadsMaxData{ + ThreadsMax: threadsMax, + }, nil + } + + return nil, fmt.Errorf("threads max data not found") +} + +type ThreadsUseData struct { + ThreadsUse float64 +} + +// GetThreadsUseData returns the maximum number of threads the function has used at a time +func GetThreadsUseData(pids []int) (*ThreadsUseData, error) { + return getThreadsUseData(ProcPath, pids) +} + +func getThreadsUseData(path string, pids []int) (*ThreadsUseData, error) { + threadCount := 0 + for _, pid := range pids { + taskPath := fmt.Sprint(path + fmt.Sprintf(PidTaskPathFormat, pid)) + files, err := os.ReadDir(taskPath) + if err != nil { + return nil, fmt.Errorf("threads use data not found in directory '%s'", taskPath) + } + for _, file := range files { + if file.IsDir() { + threadCount++ + } + } + } + + return &ThreadsUseData{ + ThreadsUse: float64(threadCount), + }, nil +} diff --git a/pkg/serverless/proc/proc_test.go b/pkg/serverless/proc/proc_test.go index 6b445db35596c..a43e700ed7112 100644 --- a/pkg/serverless/proc/proc_test.go +++ b/pkg/serverless/proc/proc_test.go @@ -15,12 +15,12 @@ import ( ) func TestGetPidListInvalid(t *testing.T) { - pids := getPidList("/incorrect/folder") + pids := GetPidList("/incorrect/folder") assert.Equal(t, 0, len(pids)) } func TestGetPidListValid(t *testing.T) { - pids := getPidList("./testData") + pids := GetPidList("./testData") sort.Ints(pids) assert.Equal(t, 2, len(pids)) assert.Equal(t, 13, pids[0]) @@ -145,30 +145,69 @@ func TestGetNetworkData(t *testing.T) { } func TestGetFileDescriptorMaxData(t *testing.T) { - path := "./testData/file-descriptor/valid" - fileDescriptorMaxData, err := getFileDescriptorMaxData(path) + path := "./testData/process/valid" + pids := GetPidList(path) + fileDescriptorMaxData, err := getFileDescriptorMaxData(path, pids) assert.Nil(t, err) assert.Equal(t, float64(1024), fileDescriptorMaxData.MaximumFileHandles) - path = "./testData/file-descriptor/invalid_malformed" - fileDescriptorMaxData, err = getFileDescriptorMaxData(path) + path = "./testData/process/invalid_malformed" + pids = GetPidList(path) + fileDescriptorMaxData, err = getFileDescriptorMaxData(path, pids) assert.NotNil(t, err) assert.Nil(t, fileDescriptorMaxData) - path = "./testData/file-descriptor/invalid_missing" - fileDescriptorMaxData, err = getFileDescriptorMaxData(path) + path = "./testData/process/invalid_missing" + pids = GetPidList(path) + fileDescriptorMaxData, err = getFileDescriptorMaxData(path, pids) assert.NotNil(t, err) assert.Nil(t, fileDescriptorMaxData) } func TestGetFileDescriptorUseData(t *testing.T) { - path := "./testData/file-descriptor/valid" - fileDescriptorUseData, err := getFileDescriptorUseData(path) + path := "./testData/process/valid" + pids := GetPidList(path) + fileDescriptorUseData, err := getFileDescriptorUseData(path, pids) assert.Nil(t, err) assert.Equal(t, float64(5), fileDescriptorUseData.UseFileHandles) - path = "./testData/file-descriptor/invalid_missing" - fileDescriptorUseData, err = getFileDescriptorUseData(path) + path = "./testData/process/invalid_missing" + pids = GetPidList(path) + fileDescriptorUseData, err = getFileDescriptorUseData(path, pids) assert.NotNil(t, err) assert.Nil(t, fileDescriptorUseData) } + +func TestGetThreadsMaxData(t *testing.T) { + path := "./testData/process/valid" + pids := GetPidList(path) + threadsMaxData, err := getThreadsMaxData(path, pids) + assert.Nil(t, err) + assert.Equal(t, float64(1024), threadsMaxData.ThreadsMax) + + path = "./testData/process/invalid_malformed" + pids = GetPidList(path) + threadsMaxData, err = getThreadsMaxData(path, pids) + assert.NotNil(t, err) + assert.Nil(t, threadsMaxData) + + path = "./testData/process/invalid_missing" + pids = GetPidList(path) + threadsMaxData, err = getThreadsMaxData(path, pids) + assert.NotNil(t, err) + assert.Nil(t, threadsMaxData) +} + +func TestGetThreadsUseData(t *testing.T) { + path := "./testData/process/valid" + pids := GetPidList(path) + threadsUseData, err := getThreadsUseData(path, pids) + assert.Nil(t, err) + assert.Equal(t, float64(5), threadsUseData.ThreadsUse) + + path = "./testData/process/invalid_missing" + pids = GetPidList(path) + threadsUseData, err = getThreadsUseData(path, pids) + assert.NotNil(t, err) + assert.Nil(t, threadsUseData) +} diff --git a/pkg/serverless/proc/testData/file-descriptor/invalid_malformed/31/limits b/pkg/serverless/proc/testData/process/invalid_malformed/31/limits similarity index 93% rename from pkg/serverless/proc/testData/file-descriptor/invalid_malformed/31/limits rename to pkg/serverless/proc/testData/process/invalid_malformed/31/limits index 45c06574a388c..2436ec08542cc 100644 --- a/pkg/serverless/proc/testData/file-descriptor/invalid_malformed/31/limits +++ b/pkg/serverless/proc/testData/process/invalid_malformed/31/limits @@ -5,7 +5,7 @@ Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size unlimited unlimited bytes Max resident set unlimited unlimited bytes -Max processes 1024 1024 processes +Max processes 1024 Max open files 1024 1024 Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes diff --git a/pkg/serverless/proc/testData/file-descriptor/invalid_malformed/9/limits b/pkg/serverless/proc/testData/process/invalid_malformed/9/limits similarity index 98% rename from pkg/serverless/proc/testData/file-descriptor/invalid_malformed/9/limits rename to pkg/serverless/proc/testData/process/invalid_malformed/9/limits index 3ad780c33f48d..2d25ac3010bd4 100644 --- a/pkg/serverless/proc/testData/file-descriptor/invalid_malformed/9/limits +++ b/pkg/serverless/proc/testData/process/invalid_malformed/9/limits @@ -5,7 +5,7 @@ Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size unlimited unlimited bytes Max resident set unlimited unlimited bytes -Max processes 1024 1024 processes +Max processes 1024 1024 Max open files 1024 Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes diff --git a/pkg/serverless/proc/testData/file-descriptor/invalid_missing/31/limits b/pkg/serverless/proc/testData/process/invalid_missing/31/limits similarity index 93% rename from pkg/serverless/proc/testData/file-descriptor/invalid_missing/31/limits rename to pkg/serverless/proc/testData/process/invalid_missing/31/limits index 34925a8f557f9..c7dc2c55dc689 100644 --- a/pkg/serverless/proc/testData/file-descriptor/invalid_missing/31/limits +++ b/pkg/serverless/proc/testData/process/invalid_missing/31/limits @@ -5,7 +5,6 @@ Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size unlimited unlimited bytes Max resident set unlimited unlimited bytes -Max processes 1024 1024 processes Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks diff --git a/pkg/serverless/proc/testData/file-descriptor/invalid_missing/9/limits b/pkg/serverless/proc/testData/process/invalid_missing/9/limits similarity index 92% rename from pkg/serverless/proc/testData/file-descriptor/invalid_missing/9/limits rename to pkg/serverless/proc/testData/process/invalid_missing/9/limits index 17e615740c934..07de49ec476ae 100644 --- a/pkg/serverless/proc/testData/file-descriptor/invalid_missing/9/limits +++ b/pkg/serverless/proc/testData/process/invalid_missing/9/limits @@ -4,8 +4,7 @@ Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size unlimited unlimited bytes -Max resident set unlimited unlimited bytes -Max processes 1024 1024 processes +Max resident set unlimited unlimited bytes Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks diff --git a/pkg/serverless/proc/testData/file-descriptor/valid/31/fd/1 b/pkg/serverless/proc/testData/process/valid/31/fd/1 similarity index 100% rename from pkg/serverless/proc/testData/file-descriptor/valid/31/fd/1 rename to pkg/serverless/proc/testData/process/valid/31/fd/1 diff --git a/pkg/serverless/proc/testData/file-descriptor/valid/31/fd/2 b/pkg/serverless/proc/testData/process/valid/31/fd/2 similarity index 100% rename from pkg/serverless/proc/testData/file-descriptor/valid/31/fd/2 rename to pkg/serverless/proc/testData/process/valid/31/fd/2 diff --git a/pkg/serverless/proc/testData/file-descriptor/valid/31/limits b/pkg/serverless/proc/testData/process/valid/31/limits similarity index 100% rename from pkg/serverless/proc/testData/file-descriptor/valid/31/limits rename to pkg/serverless/proc/testData/process/valid/31/limits diff --git a/pkg/serverless/proc/testData/file-descriptor/valid/9/fd/1 b/pkg/serverless/proc/testData/process/valid/31/task/1/.gitkeep similarity index 100% rename from pkg/serverless/proc/testData/file-descriptor/valid/9/fd/1 rename to pkg/serverless/proc/testData/process/valid/31/task/1/.gitkeep diff --git a/pkg/serverless/proc/testData/file-descriptor/valid/9/fd/2 b/pkg/serverless/proc/testData/process/valid/31/task/2/.gitkeep similarity index 100% rename from pkg/serverless/proc/testData/file-descriptor/valid/9/fd/2 rename to pkg/serverless/proc/testData/process/valid/31/task/2/.gitkeep diff --git a/pkg/serverless/proc/testData/file-descriptor/valid/9/fd/3 b/pkg/serverless/proc/testData/process/valid/31/task/3 similarity index 100% rename from pkg/serverless/proc/testData/file-descriptor/valid/9/fd/3 rename to pkg/serverless/proc/testData/process/valid/31/task/3 diff --git a/pkg/serverless/proc/testData/process/valid/9/fd/1 b/pkg/serverless/proc/testData/process/valid/9/fd/1 new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/pkg/serverless/proc/testData/process/valid/9/fd/2 b/pkg/serverless/proc/testData/process/valid/9/fd/2 new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/pkg/serverless/proc/testData/process/valid/9/fd/3 b/pkg/serverless/proc/testData/process/valid/9/fd/3 new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/pkg/serverless/proc/testData/file-descriptor/valid/9/limits b/pkg/serverless/proc/testData/process/valid/9/limits similarity index 100% rename from pkg/serverless/proc/testData/file-descriptor/valid/9/limits rename to pkg/serverless/proc/testData/process/valid/9/limits diff --git a/pkg/serverless/proc/testData/process/valid/9/task/1/.gitkeep b/pkg/serverless/proc/testData/process/valid/9/task/1/.gitkeep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/pkg/serverless/proc/testData/process/valid/9/task/2/.gitkeep b/pkg/serverless/proc/testData/process/valid/9/task/2/.gitkeep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/pkg/serverless/proc/testData/process/valid/9/task/3/.gitkeep b/pkg/serverless/proc/testData/process/valid/9/task/3/.gitkeep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/pkg/serverless/serverless.go b/pkg/serverless/serverless.go index 2528e71d81e7a..27ada0cfcb013 100644 --- a/pkg/serverless/serverless.go +++ b/pkg/serverless/serverless.go @@ -162,7 +162,7 @@ func callInvocationHandler(daemon *daemon.Daemon, arn string, deadlineMs int64, uptimeOffset, uptimeOffsetErr := proc.GetUptime() networkOffsetData, networkOffsetErr := proc.GetNetworkData() sendFdMetrics := make(chan bool) - go metrics.SendFdEnhancedMetrics(sendFdMetrics, daemon.ExtraTags.Tags, daemon.MetricAgent) + go metrics.SendProcessEnhancedMetrics(sendFdMetrics, daemon.ExtraTags.Tags, daemon.MetricAgent) sendTmpMetrics := make(chan bool) go metrics.SendTmpEnhancedMetrics(sendTmpMetrics, daemon.ExtraTags.Tags, daemon.MetricAgent) diff --git a/test/integration/serverless/snapshots/error-csharp b/test/integration/serverless/snapshots/error-csharp index b96bb73eee4ce..eedb59e5c8b87 100644 --- a/test/integration/serverless/snapshots/error-csharp +++ b/test/integration/serverless/snapshots/error-csharp @@ -1152,6 +1152,102 @@ "version:integration-tests-version" ] }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-csharp", + "functionname:integration-tests-extension-XXXXXX-error-csharp", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-csharp", + "runtime:dotnet6", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-csharp", + "functionname:integration-tests-extension-XXXXXX-error-csharp", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-csharp", + "runtime:dotnet6", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-csharp", + "functionname:integration-tests-extension-XXXXXX-error-csharp", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-csharp", + "runtime:dotnet6", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-csharp", + "functionname:integration-tests-extension-XXXXXX-error-csharp", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-csharp", + "runtime:dotnet6", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, { "distributions": null, "dogsketches": [], diff --git a/test/integration/serverless/snapshots/error-java b/test/integration/serverless/snapshots/error-java index 754e7f0733ffd..61b596cc46b25 100644 --- a/test/integration/serverless/snapshots/error-java +++ b/test/integration/serverless/snapshots/error-java @@ -1152,6 +1152,102 @@ "version:integration-tests-version" ] }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-java", + "functionname:integration-tests-extension-XXXXXX-error-java", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-java", + "runtime:java8.al2", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-java", + "functionname:integration-tests-extension-XXXXXX-error-java", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-java", + "runtime:java8.al2", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-java", + "functionname:integration-tests-extension-XXXXXX-error-java", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-java", + "runtime:java8.al2", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-java", + "functionname:integration-tests-extension-XXXXXX-error-java", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-java", + "runtime:java8.al2", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, { "distributions": null, "dogsketches": [], diff --git a/test/integration/serverless/snapshots/error-node b/test/integration/serverless/snapshots/error-node index 97b02cd4fd0dd..2061aaf660e7e 100644 --- a/test/integration/serverless/snapshots/error-node +++ b/test/integration/serverless/snapshots/error-node @@ -1156,6 +1156,102 @@ "version:integration-tests-version" ] }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-node", + "functionname:integration-tests-extension-XXXXXX-error-node", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-node", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-node", + "functionname:integration-tests-extension-XXXXXX-error-node", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-node", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-node", + "functionname:integration-tests-extension-XXXXXX-error-node", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-node", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-node", + "functionname:integration-tests-extension-XXXXXX-error-node", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-node", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, { "distributions": null, "dogsketches": [], diff --git a/test/integration/serverless/snapshots/error-proxy b/test/integration/serverless/snapshots/error-proxy index 58e810c64e07a..00fe9b830d005 100644 --- a/test/integration/serverless/snapshots/error-proxy +++ b/test/integration/serverless/snapshots/error-proxy @@ -1152,6 +1152,102 @@ "version:integration-tests-version" ] }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-proxy", + "functionname:integration-tests-extension-XXXXXX-error-proxy", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-proxy", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-proxy", + "functionname:integration-tests-extension-XXXXXX-error-proxy", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-proxy", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-proxy", + "functionname:integration-tests-extension-XXXXXX-error-proxy", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-proxy", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-proxy", + "functionname:integration-tests-extension-XXXXXX-error-proxy", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-proxy", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, { "distributions": null, "dogsketches": [], diff --git a/test/integration/serverless/snapshots/error-python b/test/integration/serverless/snapshots/error-python index e7bd220d86bf5..fdb7620cf1e98 100644 --- a/test/integration/serverless/snapshots/error-python +++ b/test/integration/serverless/snapshots/error-python @@ -1158,6 +1158,102 @@ "version:integration-tests-version" ] }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-python", + "functionname:integration-tests-extension-XXXXXX-error-python", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-python", + "runtime:python3.8", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-python", + "functionname:integration-tests-extension-XXXXXX-error-python", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-python", + "runtime:python3.8", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-python", + "functionname:integration-tests-extension-XXXXXX-error-python", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-python", + "runtime:python3.8", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-error-python", + "functionname:integration-tests-extension-XXXXXX-error-python", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-error-python", + "runtime:python3.8", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, { "distributions": null, "dogsketches": [], diff --git a/test/integration/serverless/snapshots/metric-csharp b/test/integration/serverless/snapshots/metric-csharp index 87d214181a82a..92fb2db40cac3 100644 --- a/test/integration/serverless/snapshots/metric-csharp +++ b/test/integration/serverless/snapshots/metric-csharp @@ -1104,6 +1104,102 @@ "version:integration-tests-version" ] }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-csharp", + "functionname:integration-tests-extension-XXXXXX-metric-csharp", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-csharp", + "runtime:dotnet6", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-csharp", + "functionname:integration-tests-extension-XXXXXX-metric-csharp", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-csharp", + "runtime:dotnet6", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-csharp", + "functionname:integration-tests-extension-XXXXXX-metric-csharp", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-csharp", + "runtime:dotnet6", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-csharp", + "functionname:integration-tests-extension-XXXXXX-metric-csharp", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-csharp", + "runtime:dotnet6", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, { "distributions": null, "dogsketches": [], diff --git a/test/integration/serverless/snapshots/metric-go b/test/integration/serverless/snapshots/metric-go index 950cacf5bd7b6..4abcdeff4f064 100644 --- a/test/integration/serverless/snapshots/metric-go +++ b/test/integration/serverless/snapshots/metric-go @@ -1104,6 +1104,102 @@ "version:integration-tests-version" ] }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-go", + "functionname:integration-tests-extension-XXXXXX-metric-go", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-go", + "runtime:provided.al2", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-go", + "functionname:integration-tests-extension-XXXXXX-metric-go", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-go", + "runtime:provided.al2", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-go", + "functionname:integration-tests-extension-XXXXXX-metric-go", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-go", + "runtime:provided.al2", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-go", + "functionname:integration-tests-extension-XXXXXX-metric-go", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-go", + "runtime:provided.al2", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, { "distributions": null, "dogsketches": [], diff --git a/test/integration/serverless/snapshots/metric-java b/test/integration/serverless/snapshots/metric-java index 168e525ffc408..2f7655ad42374 100644 --- a/test/integration/serverless/snapshots/metric-java +++ b/test/integration/serverless/snapshots/metric-java @@ -1104,6 +1104,102 @@ "version:integration-tests-version" ] }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-java", + "functionname:integration-tests-extension-XXXXXX-metric-java", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-java", + "runtime:java8.al2", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-java", + "functionname:integration-tests-extension-XXXXXX-metric-java", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-java", + "runtime:java8.al2", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-java", + "functionname:integration-tests-extension-XXXXXX-metric-java", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-java", + "runtime:java8.al2", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-java", + "functionname:integration-tests-extension-XXXXXX-metric-java", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-java", + "runtime:java8.al2", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, { "distributions": null, "dogsketches": [], diff --git a/test/integration/serverless/snapshots/metric-node b/test/integration/serverless/snapshots/metric-node index c74d07d228aea..3576559a1be30 100644 --- a/test/integration/serverless/snapshots/metric-node +++ b/test/integration/serverless/snapshots/metric-node @@ -1104,6 +1104,102 @@ "version:integration-tests-version" ] }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-node", + "functionname:integration-tests-extension-XXXXXX-metric-node", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-node", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-node", + "functionname:integration-tests-extension-XXXXXX-metric-node", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-node", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-node", + "functionname:integration-tests-extension-XXXXXX-metric-node", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-node", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-node", + "functionname:integration-tests-extension-XXXXXX-metric-node", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-node", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, { "distributions": null, "dogsketches": [], diff --git a/test/integration/serverless/snapshots/metric-proxy b/test/integration/serverless/snapshots/metric-proxy index 9156964619d76..4948ad17b6646 100644 --- a/test/integration/serverless/snapshots/metric-proxy +++ b/test/integration/serverless/snapshots/metric-proxy @@ -1104,6 +1104,102 @@ "version:integration-tests-version" ] }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-proxy", + "functionname:integration-tests-extension-XXXXXX-metric-proxy", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-proxy", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-proxy", + "functionname:integration-tests-extension-XXXXXX-metric-proxy", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-proxy", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-proxy", + "functionname:integration-tests-extension-XXXXXX-metric-proxy", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-proxy", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-proxy", + "functionname:integration-tests-extension-XXXXXX-metric-proxy", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-proxy", + "runtime:nodejs18.x", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, { "distributions": null, "dogsketches": [], diff --git a/test/integration/serverless/snapshots/metric-python b/test/integration/serverless/snapshots/metric-python index 65d8ec77aa3f6..b630d6bc3fa25 100644 --- a/test/integration/serverless/snapshots/metric-python +++ b/test/integration/serverless/snapshots/metric-python @@ -1104,6 +1104,102 @@ "version:integration-tests-version" ] }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-python", + "functionname:integration-tests-extension-XXXXXX-metric-python", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-python", + "runtime:python3.8", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_max", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-python", + "functionname:integration-tests-extension-XXXXXX-metric-python", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-python", + "runtime:python3.8", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-python", + "functionname:integration-tests-extension-XXXXXX-metric-python", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-python", + "runtime:python3.8", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, + { + "distributions": null, + "dogsketches": [], + "metric": "aws.lambda.enhanced.threads_use", + "tags": [ + "account_id:############", + "architecture:XXX", + "aws_account:############", + "dd_extension_version:123", + "env:integration-tests-env", + "function_arn:arn:aws:lambda:eu-west-1:############:function:integration-tests-extension-XXXXXX-metric-python", + "functionname:integration-tests-extension-XXXXXX-metric-python", + "memorysize:1024", + "region:eu-west-1", + "resource:integration-tests-extension-XXXXXX-metric-python", + "runtime:python3.8", + "service:integration-tests-service", + "taga:valuea", + "tagb:valueb", + "tagc:valuec", + "tagd:valued", + "version:integration-tests-version" + ] + }, { "distributions": null, "dogsketches": [], From 2b692c756d3f047fa85485e52d002e64a87db439 Mon Sep 17 00:00:00 2001 From: Adam Karpowich Date: Fri, 13 Sep 2024 17:00:27 -0400 Subject: [PATCH 050/195] [NPM] Fix TCP connection reset unit test (#29351) --- pkg/network/tracer/tracer_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/network/tracer/tracer_test.go b/pkg/network/tracer/tracer_test.go index 5f71e511658ab..2bf25aee07b66 100644 --- a/pkg/network/tracer/tracer_test.go +++ b/pkg/network/tracer/tracer_test.go @@ -1341,6 +1341,7 @@ func (s *TracerSuite) TestTCPFailureConnectionResetNoData() { if tcpConn, ok := c.(*net.TCPConn); ok { tcpConn.SetLinger(0) } + time.Sleep(10 * time.Millisecond) // Close the connection immediately to trigger a reset c.Close() }) From 846ea6e220a46ac680b284f8368d71421bec5b27 Mon Sep 17 00:00:00 2001 From: Steven Blumenthal Date: Fri, 13 Sep 2024 19:37:56 -0400 Subject: [PATCH 051/195] Fix memory leak caused by container check (#29349) --- .../containers/generic/processor_network.go | 1 + .../fix-container-check-memleak-d9ff028d5499197c.yaml | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 releasenotes/notes/fix-container-check-memleak-d9ff028d5499197c.yaml diff --git a/pkg/collector/corechecks/containers/generic/processor_network.go b/pkg/collector/corechecks/containers/generic/processor_network.go index 12d9538d4b5cf..d83fd0f215043 100644 --- a/pkg/collector/corechecks/containers/generic/processor_network.go +++ b/pkg/collector/corechecks/containers/generic/processor_network.go @@ -87,6 +87,7 @@ func (pn *ProcessorNetwork) processGroupedContainerNetwork() { for _, containerNetwork := range pn.ungroupedContainerNetwork { pn.generateNetworkMetrics(containerNetwork.tags, containerNetwork.stats) } + pn.ungroupedContainerNetwork = nil for _, containerNetworks := range pn.groupedContainerNetwork { // If we have multiple containers, tagging with container tag is incorrect as the metrics refer to whole isolation group. diff --git a/releasenotes/notes/fix-container-check-memleak-d9ff028d5499197c.yaml b/releasenotes/notes/fix-container-check-memleak-d9ff028d5499197c.yaml new file mode 100644 index 0000000000000..1166a23c8be7e --- /dev/null +++ b/releasenotes/notes/fix-container-check-memleak-d9ff028d5499197c.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + Fixes memory leak caused by container check. From 10d974e4d2761fa3f52fc5515bf6b82c94e0f85e Mon Sep 17 00:00:00 2001 From: alexn-dd Date: Fri, 13 Sep 2024 18:29:57 -0700 Subject: [PATCH 052/195] Replace Windows system probe socket endpoint localhost:3333 with named pipe (#29028) Co-authored-by: --- .../subcommands/flare/command_other_test.go | 36 +++++ cmd/agent/subcommands/flare/command_test.go | 59 ++++++-- .../subcommands/flare/command_windows_test.go | 63 ++++++++ cmd/system-probe/api/server.go | 4 +- .../system/wincrashdetect/probe/crashparse.go | 1 + .../wincrashdetect_windows_test.go | 14 +- pkg/languagedetection/detector_linux_test.go | 2 +- pkg/process/net/common.go | 6 +- pkg/process/net/common_linux.go | 6 + pkg/process/net/common_unsupported.go | 7 + pkg/process/net/common_windows.go | 3 + pkg/process/net/uds.go | 14 +- pkg/process/net/uds_test.go | 6 +- pkg/process/net/windows_pipe.go | 53 ++++++- pkg/process/net/windows_pipe_testutil.go | 14 ++ ...probe_socket_to_pipe-089738b8f07a56ad.yaml | 7 + .../tests/sysprobe-functional/apmtags_test.go | 3 + .../usmtest/NamedPipeCmd.exe | Bin 0 -> 17542146 bytes .../sysprobe-functional/usmtest/test_tags.ps1 | 6 +- tools/NamedPipeCmd/main.go | 142 ++++++++++++++++++ 20 files changed, 411 insertions(+), 35 deletions(-) create mode 100644 cmd/agent/subcommands/flare/command_other_test.go create mode 100644 cmd/agent/subcommands/flare/command_windows_test.go create mode 100644 pkg/process/net/windows_pipe_testutil.go create mode 100644 releasenotes/notes/windows_sysprobe_socket_to_pipe-089738b8f07a56ad.yaml create mode 100644 test/new-e2e/tests/sysprobe-functional/usmtest/NamedPipeCmd.exe create mode 100644 tools/NamedPipeCmd/main.go diff --git a/cmd/agent/subcommands/flare/command_other_test.go b/cmd/agent/subcommands/flare/command_other_test.go new file mode 100644 index 0000000000000..6730af25dcece --- /dev/null +++ b/cmd/agent/subcommands/flare/command_other_test.go @@ -0,0 +1,36 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +//go:build !windows + +// Package flare implements 'agent flare'. +package flare + +import ( + "net/http" + "net/http/httptest" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/config/model" +) + +// NewSystemProbeTestServer starts a new mock server to handle System Probe requests. +func NewSystemProbeTestServer(_ http.Handler) (*httptest.Server, error) { + // Linux still uses a port-based system-probe, it does not need a dedicated system probe server + // for the tests. + return nil, nil +} + +// InjectConnectionFailures injects a failure in TestReadProfileDataErrors. +func InjectConnectionFailures(_ model.Config, _ model.Config) { +} + +// CheckExpectedConnectionFailures checks the expected errors after simulated +// connection failures. +func CheckExpectedConnectionFailures(c *commandTestSuite, err error) { + // System probe by default is disabled and no connection is attempted for it in the test. + require.Regexp(c.T(), "^4 errors occurred:\n", err.Error()) +} diff --git a/cmd/agent/subcommands/flare/command_test.go b/cmd/agent/subcommands/flare/command_test.go index 5dbeeb2c68376..b555c751f58b5 100644 --- a/cmd/agent/subcommands/flare/command_test.go +++ b/cmd/agent/subcommands/flare/command_test.go @@ -31,24 +31,38 @@ type commandTestSuite struct { sysprobeSocketPath string tcpServer *httptest.Server unixServer *httptest.Server + systemProbeServer *httptest.Server } func (c *commandTestSuite) SetupSuite() { t := c.T() c.sysprobeSocketPath = path.Join(t.TempDir(), "sysprobe.sock") - c.tcpServer, c.unixServer = c.getPprofTestServer() } -func (c *commandTestSuite) TearDownSuite() { - c.tcpServer.Close() - if c.unixServer != nil { - c.unixServer.Close() - } +// startTestServers starts test servers from a clean state to ensure no cache responses are used. +// This should be called by each test that requires them. +func (c *commandTestSuite) startTestServers() { + t := c.T() + c.tcpServer, c.unixServer, c.systemProbeServer = c.getPprofTestServer() + + t.Cleanup(func() { + if c.tcpServer != nil { + c.tcpServer.Close() + c.tcpServer = nil + } + if c.unixServer != nil { + c.unixServer.Close() + c.unixServer = nil + } + if c.systemProbeServer != nil { + c.systemProbeServer.Close() + c.systemProbeServer = nil + } + }) } -func (c *commandTestSuite) getPprofTestServer() (tcpServer *httptest.Server, unixServer *httptest.Server) { - t := c.T() - handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { +func newMockHandler() http.HandlerFunc { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case "/debug/pprof/heap": w.Write([]byte("heap_profile")) @@ -67,17 +81,28 @@ func (c *commandTestSuite) getPprofTestServer() (tcpServer *httptest.Server, uni w.WriteHeader(500) } }) +} +func (c *commandTestSuite) getPprofTestServer() (tcpServer *httptest.Server, unixServer *httptest.Server, sysProbeServer *httptest.Server) { + var err error + t := c.T() + + handler := newMockHandler() tcpServer = httptest.NewServer(handler) if runtime.GOOS == "linux" { unixServer = httptest.NewUnstartedServer(handler) - var err error unixServer.Listener, err = net.Listen("unix", c.sysprobeSocketPath) require.NoError(t, err, "could not create listener for unix socket on %s", c.sysprobeSocketPath) unixServer.Start() } - return tcpServer, unixServer + sysProbeServer, err = NewSystemProbeTestServer(handler) + require.NoError(c.T(), err, "could not restart system probe server") + if sysProbeServer != nil { + sysProbeServer.Start() + } + + return tcpServer, unixServer, sysProbeServer } func TestCommandTestSuite(t *testing.T) { @@ -86,6 +111,8 @@ func TestCommandTestSuite(t *testing.T) { func (c *commandTestSuite) TestReadProfileData() { t := c.T() + c.startTestServers() + u, err := url.Parse(c.tcpServer.URL) require.NoError(t, err) port := u.Port() @@ -154,6 +181,8 @@ func (c *commandTestSuite) TestReadProfileData() { func (c *commandTestSuite) TestReadProfileDataNoTraceAgent() { t := c.T() + c.startTestServers() + u, err := url.Parse(c.tcpServer.URL) require.NoError(t, err) port := u.Port() @@ -217,6 +246,8 @@ func (c *commandTestSuite) TestReadProfileDataNoTraceAgent() { func (c *commandTestSuite) TestReadProfileDataErrors() { t := c.T() + c.startTestServers() + mockConfig := configmock.New(t) // setting Core Agent Expvar port to 0 to ensure failing on fetch (using the default value can lead to // successful request when running next to an Agent) @@ -226,9 +257,13 @@ func (c *commandTestSuite) TestReadProfileDataErrors() { mockConfig.SetWithoutSource("process_config.enabled", true) mockConfig.SetWithoutSource("process_config.expvar_port", 0) + mockSysProbeConfig := configmock.NewSystemProbe(t) + InjectConnectionFailures(mockSysProbeConfig, mockConfig) + data, err := readProfileData(10) + require.Error(t, err) - require.Regexp(t, "^4 errors occurred:\n", err.Error()) + CheckExpectedConnectionFailures(c, err) require.Len(t, data, 0) } diff --git a/cmd/agent/subcommands/flare/command_windows_test.go b/cmd/agent/subcommands/flare/command_windows_test.go new file mode 100644 index 0000000000000..87318816f8863 --- /dev/null +++ b/cmd/agent/subcommands/flare/command_windows_test.go @@ -0,0 +1,63 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +//go:build windows + +// Package flare implements 'agent flare'. +package flare + +import ( + "net/http" + "net/http/httptest" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/config/model" + process_net "github.com/DataDog/datadog-agent/pkg/process/net" +) + +const ( + // SystemProbeTestPipeName is the test named pipe for system-probe + SystemProbeTestPipeName = `\\.\pipe\dd_system_probe_test` +) + +// NewSystemProbeTestServer starts a new mock server to handle System Probe requests. +func NewSystemProbeTestServer(handler http.Handler) (*httptest.Server, error) { + server := httptest.NewUnstartedServer(handler) + + // Override the named pipe path for tests to avoid conflicts with the locally installed Datadog agent. + process_net.OverrideSystemProbeNamedPipePath(SystemProbeTestPipeName) + conn, err := process_net.NewSystemProbeListener("") + if err != nil { + return nil, err + } + + server.Listener = conn.GetListener() + return server, nil +} + +// InjectConnectionFailures injects a failure in TestReadProfileDataErrors. +func InjectConnectionFailures(mockSysProbeConfig model.Config, mockConfig model.Config) { + // Explicitly enabled system probe to exercise connections to it. + mockSysProbeConfig.SetWithoutSource("system_probe_config.enabled", true) + + // Exercise connection failures for the Windows system probe named pipe clients by + // making them use a bad path. + // The system probe http server must be setup before this override. + process_net.OverrideSystemProbeNamedPipePath(`\\.\pipe\dd_system_probe_test_bad`) + + // The security-agent connection is expected to fail too in this test, but + // by enabling system probe, a port will be provided to it (security agent). + // Here we make sure the security agent port is a bad one. + mockConfig.SetWithoutSource("security_agent.expvar_port", 0) +} + +// CheckExpectedConnectionFailures checks the expected errors after simulated +// connection failures. +func CheckExpectedConnectionFailures(c *commandTestSuite, err error) { + // In Windows, this test explicitly simulates a system probe connection failure. + // We expect the standard socket errors (4) and a named pipe failure for system probe. + require.Regexp(c.T(), "^5 errors occurred:\n", err.Error()) +} diff --git a/cmd/system-probe/api/server.go b/cmd/system-probe/api/server.go index 8ab6909d3db54..a2d20995b9804 100644 --- a/cmd/system-probe/api/server.go +++ b/cmd/system-probe/api/server.go @@ -27,9 +27,9 @@ import ( // StartServer starts the HTTP and gRPC servers for the system-probe, which registers endpoints from all enabled modules. func StartServer(cfg *sysconfigtypes.Config, telemetry telemetry.Component, wmeta workloadmeta.Component, settings settings.Component) error { - conn, err := net.NewListener(cfg.SocketAddress) + conn, err := net.NewSystemProbeListener(cfg.SocketAddress) if err != nil { - return fmt.Errorf("error creating IPC socket: %s", err) + return err } mux := gorilla.NewRouter() diff --git a/pkg/collector/corechecks/system/wincrashdetect/probe/crashparse.go b/pkg/collector/corechecks/system/wincrashdetect/probe/crashparse.go index 40fa3c04cb655..c4fb188d2e5d2 100644 --- a/pkg/collector/corechecks/system/wincrashdetect/probe/crashparse.go +++ b/pkg/collector/corechecks/system/wincrashdetect/probe/crashparse.go @@ -5,6 +5,7 @@ //go:build windows +// Package probe parses Windows crash dumps. package probe /* diff --git a/pkg/collector/corechecks/system/wincrashdetect/wincrashdetect_windows_test.go b/pkg/collector/corechecks/system/wincrashdetect/wincrashdetect_windows_test.go index b4a7de8bfba57..6b73c51afbcea 100644 --- a/pkg/collector/corechecks/system/wincrashdetect/wincrashdetect_windows_test.go +++ b/pkg/collector/corechecks/system/wincrashdetect/wincrashdetect_windows_test.go @@ -8,7 +8,6 @@ package wincrashdetect import ( - "fmt" "net" "net/http" @@ -24,18 +23,19 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/metrics/event" - //process_net "github.com/DataDog/datadog-agent/pkg/process/net" + process_net "github.com/DataDog/datadog-agent/pkg/process/net" "golang.org/x/sys/windows/registry" ) func createSystemProbeListener() (l net.Listener, close func()) { - l, err := net.Listen("tcp", "127.0.0.1:0") + // No socket address. Windows uses a fixed name pipe + conn, err := process_net.NewSystemProbeListener("") if err != nil { panic(err) } - return l, func() { - _ = l.Close() + return conn.GetListener(), func() { + _ = conn.GetListener().Close() } } @@ -69,8 +69,8 @@ func TestWinCrashReporting(t *testing.T) { } defer server.Close() - sock := fmt.Sprintf("localhost:%d", listener.Addr().(*net.TCPAddr).Port) - config.SystemProbe().SetWithoutSource("system_probe_config.sysprobe_socket", sock) + // no socket address is set in config for Windows since system probe + // utilizes a fixed named pipe. /* * the underlying system probe connector is a singleton. Therefore, we can't set up different diff --git a/pkg/languagedetection/detector_linux_test.go b/pkg/languagedetection/detector_linux_test.go index d38572df36c1f..bd6ad87f808ae 100644 --- a/pkg/languagedetection/detector_linux_test.go +++ b/pkg/languagedetection/detector_linux_test.go @@ -29,7 +29,7 @@ func startTestUnixServer(t *testing.T, handler http.Handler) string { t.Helper() socketPath := path.Join(t.TempDir(), "test.sock") - listener, err := net.NewListener(socketPath) + listener, err := net.NewSystemProbeListener(socketPath) require.NoError(t, err) t.Cleanup(listener.Stop) diff --git a/pkg/process/net/common.go b/pkg/process/net/common.go index 2480dc1d69f84..a4eb94ee7ca04 100644 --- a/pkg/process/net/common.go +++ b/pkg/process/net/common.go @@ -321,7 +321,7 @@ func newSystemProbe(path string) *RemoteSysProbeUtil { MaxIdleConns: 2, IdleConnTimeout: 30 * time.Second, DialContext: func(_ context.Context, _, _ string) (net.Conn, error) { - return net.Dial(netType, path) + return DialSystemProbe(netType, path) }, TLSHandshakeTimeout: 1 * time.Second, ResponseHeaderTimeout: 5 * time.Second, @@ -331,7 +331,7 @@ func newSystemProbe(path string) *RemoteSysProbeUtil { pprofClient: http.Client{ Transport: &http.Transport{ DialContext: func(_ context.Context, _, _ string) (net.Conn, error) { - return net.Dial(netType, path) + return DialSystemProbe(netType, path) }, }, }, @@ -340,7 +340,7 @@ func newSystemProbe(path string) *RemoteSysProbeUtil { // is that the caller will set a timeout on each request Transport: &http.Transport{ DialContext: func(_ context.Context, _, _ string) (net.Conn, error) { - return net.Dial(netType, path) + return DialSystemProbe(netType, path) }, }, }, diff --git a/pkg/process/net/common_linux.go b/pkg/process/net/common_linux.go index 7fee3ffdb1cb9..c7b9f0692bb13 100644 --- a/pkg/process/net/common_linux.go +++ b/pkg/process/net/common_linux.go @@ -9,6 +9,7 @@ package net import ( "fmt" + "net" "os" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" @@ -40,3 +41,8 @@ func CheckPath(path string) error { } return nil } + +// DialSystemProbe connects to the system-probe service endpoint +func DialSystemProbe(netType string, path string) (net.Conn, error) { + return net.Dial(netType, path) +} diff --git a/pkg/process/net/common_unsupported.go b/pkg/process/net/common_unsupported.go index ebdea5968e5bb..18619eca49c7c 100644 --- a/pkg/process/net/common_unsupported.go +++ b/pkg/process/net/common_unsupported.go @@ -9,6 +9,8 @@ package net import ( + "net" + model "github.com/DataDog/agent-payload/v5/process" "github.com/DataDog/datadog-agent/pkg/languagedetection/languagemodels" @@ -73,3 +75,8 @@ func (r *RemoteSysProbeUtil) DetectLanguage([]int32) ([]languagemodels.Language, func (r *RemoteSysProbeUtil) GetPprof(_ string) ([]byte, error) { return nil, ErrNotImplemented } + +// DialSystemProbe connects to the system-probe service endpoint +func DialSystemProbe(netType string, path string) (net.Conn, error) { + return net.Dial(netType, path) +} diff --git a/pkg/process/net/common_windows.go b/pkg/process/net/common_windows.go index 83d8440825e4a..67785fe08d0c8 100644 --- a/pkg/process/net/common_windows.go +++ b/pkg/process/net/common_windows.go @@ -29,6 +29,9 @@ const ( procStatsURL = "http://localhost:3333/" + string(sysconfig.ProcessModule) + "stats" // pingURL is not used in windows, the value is added to avoid compilation error in windows pingURL = "http://localhost:3333/" + string(sysconfig.PingModule) + "/ping/" + + // SystemProbePipeName is the production named pipe for system probe + SystemProbePipeName = `\\.\pipe\dd_system_probe` ) // CheckPath is used to make sure the globalSocketPath has been set before attempting to connect diff --git a/pkg/process/net/uds.go b/pkg/process/net/uds.go index bfbbb4ed3b796..85c46b70354c5 100644 --- a/pkg/process/net/uds.go +++ b/pkg/process/net/uds.go @@ -22,8 +22,8 @@ type UDSListener struct { socketPath string } -// NewListener returns an idle UDSListener -func NewListener(socketAddr string) (*UDSListener, error) { +// newSocketListener creates a Unix Domain Socket Listener +func newSocketListener(socketAddr string) (*UDSListener, error) { if len(socketAddr) == 0 { return nil, fmt.Errorf("uds: empty socket path provided") } @@ -73,6 +73,16 @@ func NewListener(socketAddr string) (*UDSListener, error) { return listener, nil } +// NewSystemProbeListener returns an idle UDSListener +func NewSystemProbeListener(socketAddr string) (*UDSListener, error) { + var listener, err = newSocketListener(socketAddr) + if err != nil { + return nil, fmt.Errorf("error creating IPC socket: %s", err) + } + + return listener, err +} + // GetListener will return the underlying Conn's net.Listener func (l *UDSListener) GetListener() net.Listener { return l.conn diff --git a/pkg/process/net/uds_test.go b/pkg/process/net/uds_test.go index 3e8290966bc41..51affd4815d5f 100644 --- a/pkg/process/net/uds_test.go +++ b/pkg/process/net/uds_test.go @@ -25,7 +25,7 @@ func testSocketExistsNewUDSListener(t *testing.T, socketPath string) { assert.NoError(t, err) // Create a new socket using UDSListener - l, err := NewListener(socketPath) + l, err := NewSystemProbeListener(socketPath) require.NoError(t, err) l.Stop() @@ -38,12 +38,12 @@ func testSocketExistsAsRegularFileNewUDSListener(t *testing.T, socketPath string defer f.Close() // Create a new socket using UDSListener - _, err = NewListener(socketPath) + _, err = NewSystemProbeListener(socketPath) require.Error(t, err) } func testWorkingNewUDSListener(t *testing.T, socketPath string) { - s, err := NewListener(socketPath) + s, err := NewSystemProbeListener(socketPath) require.NoError(t, err) defer s.Stop() diff --git a/pkg/process/net/windows_pipe.go b/pkg/process/net/windows_pipe.go index c3969b81fd54d..0ef9c89b9b918 100644 --- a/pkg/process/net/windows_pipe.go +++ b/pkg/process/net/windows_pipe.go @@ -8,7 +8,17 @@ package net import ( + "fmt" "net" + "time" + + "github.com/Microsoft/go-winio" +) + +const ( + // winio seems to use a fixed buffer size 4096 for its client. + namedPipeInputBufferSize = int32(4096) + namedPipeOutputBufferSize = int32(4096) ) // WindowsPipeListener for communicating with Probe @@ -17,10 +27,31 @@ type WindowsPipeListener struct { pipePath string } -// NewListener sets up a TCP listener for now, will eventually be a named pipe -func NewListener(socketAddr string) (*WindowsPipeListener, error) { - l, err := net.Listen("tcp", socketAddr) - return &WindowsPipeListener{l, "path"}, err +// activeSystemProbePipeName is the effective named pipe path for system probe +var activeSystemProbePipeName = SystemProbePipeName + +// newPipeListener creates a standardized named pipe server and with hardened ACL +func newPipeListener(namedPipeName string) (net.Listener, error) { + config := winio.PipeConfig{ + InputBufferSize: namedPipeInputBufferSize, + OutputBufferSize: namedPipeOutputBufferSize, + } + + // TODO: Apply hardened ACL + + return winio.ListenPipe(namedPipeName, &config) +} + +// NewSystemProbeListener sets up a named pipe listener for the system probe service. +func NewSystemProbeListener(_ string) (*WindowsPipeListener, error) { + // socketAddr not used + + namedPipe, err := newPipeListener(activeSystemProbePipeName) + if err != nil { + return nil, fmt.Errorf("error named pipe %s : %s", activeSystemProbePipeName, err) + } + + return &WindowsPipeListener{namedPipe, activeSystemProbePipeName}, nil } // GetListener will return underlying Listener's conn @@ -32,3 +63,17 @@ func (wp *WindowsPipeListener) GetListener() net.Listener { func (wp *WindowsPipeListener) Stop() { wp.conn.Close() } + +// DialSystemProbe connects to the system-probe service endpoint +func DialSystemProbe(_ string, _ string) (net.Conn, error) { + // Unused netType and path + + var timeout = time.Duration(5 * time.Second) + + namedPipe, err := winio.DialPipe(activeSystemProbePipeName, &timeout) + if err != nil { + return nil, fmt.Errorf("error connecting to named pipe %s : %s", activeSystemProbePipeName, err) + } + + return namedPipe, nil +} diff --git a/pkg/process/net/windows_pipe_testutil.go b/pkg/process/net/windows_pipe_testutil.go new file mode 100644 index 0000000000000..80acb7bee9997 --- /dev/null +++ b/pkg/process/net/windows_pipe_testutil.go @@ -0,0 +1,14 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +//go:build test && windows + +package net + +// OverrideSystemProbeNamedPipePath sets the active named pipe path for System Probe connections. +// This is used by tests only to avoid conflicts with an existing locally installed Datadog agent. +func OverrideSystemProbeNamedPipePath(path string) { + activeSystemProbePipeName = path +} diff --git a/releasenotes/notes/windows_sysprobe_socket_to_pipe-089738b8f07a56ad.yaml b/releasenotes/notes/windows_sysprobe_socket_to_pipe-089738b8f07a56ad.yaml new file mode 100644 index 0000000000000..db928f821df4a --- /dev/null +++ b/releasenotes/notes/windows_sysprobe_socket_to_pipe-089738b8f07a56ad.yaml @@ -0,0 +1,7 @@ +other: + - | + On Windows, the TCP socket transport mechanism for system probe + communications has been replaced with a named pipe. + This entails that the system_probe_config.sysprobe_socket configuration + entry for Windows is deprecated. + The new fixed named pipe path is \\.\pipe\dd_system_probe. diff --git a/test/new-e2e/tests/sysprobe-functional/apmtags_test.go b/test/new-e2e/tests/sysprobe-functional/apmtags_test.go index 7d75096f107cd..8aebfecaa08c0 100644 --- a/test/new-e2e/tests/sysprobe-functional/apmtags_test.go +++ b/test/new-e2e/tests/sysprobe-functional/apmtags_test.go @@ -295,6 +295,9 @@ func (v *apmvmSuite) TestUSMAutoTaggingSuite() { testExe := path.Join("c:", "users", "administrator", "littleget.exe") vm.CopyFile("usmtest/littleget.exe", testExe) + pipeExe := path.Join("c:", "users", "administrator", "NamedPipeCmd.exe") + vm.CopyFile("usmtest/NamedPipeCmd.exe", pipeExe) + pscommand := "%s -TargetHost localhost -TargetPort %s -TargetPath %s -ExpectedClientTags %s -ExpectedServerTags %s -ConnExe %s" for _, test := range usmTaggingTests { diff --git a/test/new-e2e/tests/sysprobe-functional/usmtest/NamedPipeCmd.exe b/test/new-e2e/tests/sysprobe-functional/usmtest/NamedPipeCmd.exe new file mode 100644 index 0000000000000000000000000000000000000000..7cd8ad103db82553b463124c1d62ff8d3377c51f GIT binary patch literal 17542146 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

#7tdQOBQP~}|Kh)=R0e8`epLjKt1rd5gQ>w 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≫QXHw<4cX6f7A$j-8UvoQ~y7-tZ-uExZe#kJ6 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ěeTrHL^Gd$MRZzsHH`W9j>>~|e>vYPMu?@syO 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

$-UQP=3eM40ZffZ-^xTCe&GQ@-&;1G7tC% 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 %S$3Z3C|sF2Zixr$v@=V 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
cZ}j47(r)6EMr^=3zEg*#K5=A@o#o|~yRI#Mg# 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
iYS{a(i>c;wnQM+1{ZpmZo;~=#t9*xAGs`( z&y>k$I!j*5u0Hf7ODDTS5WhNddB&IuDp14Z@xy?1}{8} zqc@8^ueAL>B#$!R(OPNqIHaBaH#CJTUe$*zk(WDWC%KP%MY$iF$hwc70b!IU29w6% zk^y#w(v^INGK5=b@|R%5C}Wl~=CHmxwbF{w%%(ij0f@o65qZ!?>HBiYt{&09(r0{2 zh|DShS?BoHDled`*D!@F{0Q#}-ifzoM^jzprp294MIXPtfnnNCHv@_1Yi^`9f;Mu?9V*BpjGYH8u-c~UYF>t z8jpBNd1SV`l0xNBroyF+U9K3MY$%P+R<%0 zEP#$%NlEu$C|oF6EICyx`|qNA)P^Ii3d;u)9Xzh}c(|17#p}D$v3yIz0@615N+5LD zlTc{|gx7^x8U%V2tZYe}kQl&eP*k)D%$j1D`BI9IXs#lpzlbk=Fj{5XmF4ER z^fmXim62vBHW&75yFshFK`RMTJ5rrEs$eYa-AWerSu!rM_3E0My-XTkWW;Jdyfdu# z#Y&Sg=pjcMag!QVu4o9>(2H8!8~zxvpyz!%36^-@j((jcvFe)97w%P^odX}!4G_3b zL_JKfQ9%rF##2Ey5@Z-Ox5mn6UfI*aHRo{X=(9?WkH!ebT`PgYo?T}p(UO_nR|lhU#^h3FOu<;nsHu%O@xM&ak5SwBGwS5LHwfWP>Zp~u zmWWifqgEu7)B3*5s1*-ogPs+ER9hGanL@f&Av>meoa+*uRcGf?BvxyU5i{?AO04*$ z*nSs&vV01?q-~$FTl8YUAsqbtCwZG%@bg{fXJidtQ4;TQi$nyGwl^l!roe#O?zcr+ z5wQcbnV=qON>ktlAm}Plpr)lMa9*PskXolGmmyQ&mi?n4@wULmJ`P)`HgUHb5duTC zl`cA2o@=Y#Ple$)C;nYHo`=AWDm{#`B0My0b-I5p3rNohvqpGquLEjSzQvAL*srvn ze}w-b9oC5T)QMbJRmy!()hDUiRK`wAnC#NOYa#v|8RU>0f-;kv$Rn#}yVcihU>S~paO`AEg zEdWG7FViN8MCd}hA|KL}$upKxbdmq-ja=*@_Jg5pfos!2ty$@#D^L8@KtSL4$0vo}G)Lad;+rYBQR zf`kncL67n6pm=#E=Y%4rV5wmX_l3X13|K#;aJ;k5-!(&8-~XkQR|s- zk%-rRyeUgXD@uRuQz7W_z~ko^_)i&6nZ-`olD8}f3#!BVE^rU-bItw#CRS-$Z|Gm= zvTj+wPhSVVEi-6QqJN#sx@G+)!srsz>*D~pJnbfPfWhcSV`ba|5CYpu`ph53!q3EqQ;#xEbK$q7bh+>oT?u>PHy2?R zezDjaC>MKP^-Ys(RFEkG=-%42i&fuYitbwVePgz3)%Vu#b+7tL?}yg=sqG!~ANPK0 zdt=@A&o6$ux9f@1_C`C=wCB@(UD550ccN+HY44|YJv*yF+vByt(;jCX&&OF=Hx|9xg=cB0w;$_TOBJ*R zHzfk#UDwt=k0cW4BLFTqJrJPQbB6ei7YFYwTJN^9UrdE8M;EUq9RoaoMlv zsZy<0HF=Q#ieJ`~rKK4Wz*WDbr%Q#hgbsjf-lr!_>SsZbc7M{(&hpf4K08aIYk22Y@BHFzMrr4Q9oSx~cW1AD3#dWq zPw6e*eUn0Kj&0qs@@$(_>iZ?+w zD#H1SUss(2Ml|bvL*(ay+h=&T?UrkJ;PyG5r@dqkXz)Dk)%?Har>K~B+-|vu*KM~{ z`F>uveMa?O!t1stRPAMFQIQI`;&s%a%C4$VydJo%SDvp|o~>6NuU8(ZSMIG>*oJ!r z37|*GD_FeQbv_pjh7Z0r`R#hYHN_M12S0~Q(Di^T@bQEf`JKq`q`oQEremUsnr1S= ztiNfLR8-n3BPfo@1Y(vb4AIDjzJ8K;xt&71mx;xf8C+`z*W1C3c5pL;7PY0tI#j7F zV!NGqrybN_%mf;!8SHBZtsT1gkS?TwFqR<5#F7{plr+iUcsp3MgAz}fU^0WA3gR{~ z6+G2WG1Cstwu5u+;Cwr{)D9lbpr;mSte>KB3p|cj*$Th9G=qC*IyHl(laIgjTB_oyyJjY!)4Y@52*khL5v8K)eC z`xRb`@UX(l2YgK7Ey9$+g-rg7&>)Oh$%if-5bNa&y<)rO+x|Eoat$U7WDA~b{lvdO zKSPC_(xY)s`rTW0y|Ah$Yn6m2Tkj{fz>ul;YG0Qxth!7+Wy)O&&A!tM)cdu6*ebL2 zzN((EjWT&(?wTwWGwROS2cGcDrCp`o`hT8|X3;8gu*ipd<7HW+`Q9wB*sJ{&O6@%m zui|!X!Aj0)p)d*oxU?Q{w=!-{I|OcjF)AN=D{pb@5&CGsleNp z+;5%z^H-I}q(kW!>#HR*V3aG)fG9-s~CdjIFVtOvL9o$&*Y?WXVV?5^jzo6k_s z2cn+VW4?N&HaX*ul^)^@7azJ7mOE1~{^>v8)tYP1RLgy&qcyEs2HLfJBx@NcKBT8K z<1OB9jX+vW@PD!o9PN9)-M(?PX~KeQ$bU!iFdq8jH=pzQ;?}Ef{^CFWz+09+8(TED ze)z209{A|()pzUXXmRTYKQQ-j_40QN>L=?3+IsoW&}ZLH(K=JHu+f}(uc>fgsH5P| z|N0g4#jXG2)O%j3zx!#7659K@^~)Fi-R0l;slR+>7JTtT*Z#rvJ^$!~S@5OuaK4b2 zNIQyeo=e$caiS*r3Y!{4^kU%y#qkSE`u_uwXFPko`H8=k9e(l@3y{<3QvTHbqk1x? z7#$(XDaJD)Q;R3OgD+L~UjJvbbng6~z1M%6fJOZP!@z;jGN1{`kUj$Ws%zlM?Ja=h zmMg&_nA2^QWr<%6naX4{eD$w5lv)5fu;UKly{9zjz|;EjdrRr~tvtoz=-xiwNPPp3 zq4w>q{v~(})?xjx#C!YRu($fUy?uX)mBZ|G52~uB35s*> z<+7L+6@yh{Srr{T{;Vt>OAg=h4i&3}F1GodU&z94P!h5=n|Etkhv^5f&8iIQB$#xt0 zhjA$f*+wy^Wok%{g=Nm z3R(0p^2T}XhmmKg>3{3upF^)-QSQaeeO~1LXaDwBGWWmOm3!4`79MT>@%)Rg{r>M? z@0_+YN3fzfFf?%TLQi0l?|<)CbMER}T71)cW!jy4|MmN%Ss
y{i%wuR?ZA>HK;5DWwyV0)(3dd9{u$^Bqi@E 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

o}!?|B0k9izxM5JzzkqgkE|BQcNGMq8N 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
Yz3FnC*q-`{2+5^I?HK7% z223O<4nfI1M(SYhKQkKDO-^=ZbkkMpL#4Nf%(1|7pyC)BVZ!_pqoMX+)9o$?pBkc& z1tE$UHfSBRC>eavdY+WphpH!RgbYsN|7pdMCF3uOr#dz>eDPE=&pJ9^jMoUInV;>Y zJ$&irMLHCv@Xy{wdSEQC33M#vT|O=DrInDFe6P#7w&dYr~I`6h(V+Nv=1*Sp3r3+rTRA{}?`W75%H$3bJ zsZhHs;83ZMXrGMVW9=s;o);=EEo$ z4@fN(PHec(y5OBJYC4At&YgB4cQn=E7~}j>)th`xv3k-)7oK+r{+kDu^!5=n%}&m$ z*1y*d;p!)6=+E&Q`s|s*eTDedyT0jaM1m_q;LBolTg{XL#H}ddaMjIOe*HWa(W7$3qce+is$`x+!|o1l(&oaK0|$?!<-aDS(S;eMQ zJSE&t7=By)-mii-=wV#J%|_Co>sWbk4x*^_3aMfgiFAYW{Re2m#@W`xQI1stI5|uE zo?R2wzniRiul0RJi(duC7CPHK6(^po0G5?!;W_$g=Zm!e(Cr&;h$@(Meux(G>Rl{& z!=&&ldI*Vgu#xX*`g-TT8%lY`@`=LX@!2O<+wi%$hv-04i*l$F2uqNQQCmCk61;7A)HfD z`+a*<*bOo3G7V`#cTG(U+9q*!~uuWcUUt z`_t8bEMVu9T!pWF!h%%-B5+}W@f02&TX%l;SB(<}lto4w$DA=sl-fCA=Vz~jWg+j^ zQ~b4_^}tQhz4ypY(Q=WCBL~rNUh8S?%NE(oNq|23DY>U%UkeWO@Yj!RzM+`PL?VrLOkEvZ zs%Fv!7relUx`uh66hJreTVzR`YLih;h!y1h95vL*N@NNvF}k`|+*QvuJrmXMH2OL2 zHb*#L?{@5d8fNIGnn!aD?cZYesSl4!DaGF6n9x~eMdnH*ob%Jj7Pt2(+#;L$)E z=3#9(NzNC_64lpPlY7}dgA5Y))tTNCg6_*j{-_!F+0;z8wUgkqOfD1eK=Hsr`&l=w z&Q}hnpH0qRHyLyZav(bXM2{xwnkhp#ojm-h~SeVNC? z{Kcd>wMvIxS9J(FdgaI|%l%W$aH9E9btrjTJ�nx9V~smDW+R_n6>*tCjl^=GTxT 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�nSD7xebHT2EQy_G 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 z

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%0A9BAqCyV5>Ngje{48yZx89> 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