From c0c8e334289edaf17f1c8ee6e7b584f034040afa Mon Sep 17 00:00:00 2001 From: David Goffredo Date: Wed, 25 Oct 2023 15:24:47 -0400 Subject: [PATCH] Datadog: restore "resource.name" tag (#30503) Signed-off-by: David Goffredo --- .../tracers/datadog/demo/docker-compose.yaml | 2 ++ source/extensions/tracers/datadog/demo/envoy | 2 +- source/extensions/tracers/datadog/span.cc | 16 ++++++++++++++-- test/extensions/tracers/datadog/span_test.cc | 12 +++++++++++- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/source/extensions/tracers/datadog/demo/docker-compose.yaml b/source/extensions/tracers/datadog/demo/docker-compose.yaml index 40b81aa75c333..1f42ec52daa19 100644 --- a/source/extensions/tracers/datadog/demo/docker-compose.yaml +++ b/source/extensions/tracers/datadog/demo/docker-compose.yaml @@ -8,9 +8,11 @@ services: dd-agent: volumes: - '/var/run/docker.sock:/var/run/docker.sock:ro' + - '/run/user:/run/user:ro' - '/proc/:/host/proc/:ro' - '/sys/fs/cgroup/:/host/sys/fs/cgroup:ro' environment: + - DOCKER_HOST - DD_API_KEY - DD_APM_ENABLED=true - DD_LOG_LEVEL=ERROR diff --git a/source/extensions/tracers/datadog/demo/envoy b/source/extensions/tracers/datadog/demo/envoy index 2a29dc40f391c..a84b13ed97e03 100755 --- a/source/extensions/tracers/datadog/demo/envoy +++ b/source/extensions/tracers/datadog/demo/envoy @@ -1,4 +1,4 @@ #!/bin/sh here=$(dirname "$0") -"$(bazelisk info bazel-genfiles)"/source/exe/envoy-static --config-path "$here"/envoy.yaml "$@" +"$here"/../../../../../bazel-bin/source/exe/envoy-static --config-path "$here"/envoy.yaml "$@" diff --git a/source/extensions/tracers/datadog/span.cc b/source/extensions/tracers/datadog/span.cc index 45922a20e620f..d027419152187 100644 --- a/source/extensions/tracers/datadog/span.cc +++ b/source/extensions/tracers/datadog/span.cc @@ -41,7 +41,9 @@ void Span::setOperation(absl::string_view operation) { return; } - span_->set_name(operation); + // What Envoy calls the operation name more closely corresponds to what + // Datadog calls the resource name. + span_->set_resource_name(operation); } void Span::setTag(absl::string_view name, absl::string_view value) { @@ -49,7 +51,17 @@ void Span::setTag(absl::string_view name, absl::string_view value) { return; } - span_->set_tag(name, value); + // The special "resource.name" tag is a holdover from when the Datadog tracer + // was OpenTracing-based, and so there was no way to set the Datadog resource + // name directly. + // In Envoy, it's still the case that there's no way to set the Datadog + // resource name directly; so, here if the tag name is "resource.name", we + // actually set the resource name instead of setting a tag. + if (name == "resource.name") { + span_->set_resource_name(value); + } else { + span_->set_tag(name, value); + } } void Span::log(SystemTime, const std::string&) { diff --git a/test/extensions/tracers/datadog/span_test.cc b/test/extensions/tracers/datadog/span_test.cc index 70b4fafd93525..aec618037cb55 100644 --- a/test/extensions/tracers/datadog/span_test.cc +++ b/test/extensions/tracers/datadog/span_test.cc @@ -128,7 +128,10 @@ TEST_F(DatadogTracerSpanTest, SetOperation) { ASSERT_NE(nullptr, data_ptr); const datadog::tracing::SpanData& data = *data_ptr; - EXPECT_EQ("gastric bypass", data.name); + // Setting the operation name actually sets the resource name, because Envoy's + // notion of operation name more closely matches Datadog's notion of resource + // name. + EXPECT_EQ("gastric bypass", data.resource); } TEST_F(DatadogTracerSpanTest, SetTag) { @@ -136,6 +139,7 @@ TEST_F(DatadogTracerSpanTest, SetTag) { span.setTag("foo", "bar"); span.setTag("boom", "bam"); span.setTag("foo", "new"); + span.setTag("resource.name", "vespene gas"); span.finishSpan(); ASSERT_EQ(1, collector_->chunks.size()); @@ -152,6 +156,12 @@ TEST_F(DatadogTracerSpanTest, SetTag) { found = data.tags.find("boom"); ASSERT_NE(data.tags.end(), found); EXPECT_EQ("bam", found->second); + + // The "resource.name" tag is special. It doesn't set a tag, but instead the + // span's resource name. + found = data.tags.find("resource.name"); + ASSERT_EQ(data.tags.end(), found); + EXPECT_EQ("vespene gas", data.resource); } TEST_F(DatadogTracerSpanTest, InjectContext) {