From 60133d73d512fb41af3b82fd3f5ff1741a4959c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrik=20Bostr=C3=B6m?= Date: Fri, 5 Jun 2026 10:01:43 +0200 Subject: [PATCH] feat(telemetry): append DD_TAGS to forwarder telemetry metric tags --- aws/logs_monitoring/telemetry.py | 6 +- aws/logs_monitoring/tests/test_telemetry.py | 71 +++++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 aws/logs_monitoring/tests/test_telemetry.py diff --git a/aws/logs_monitoring/telemetry.py b/aws/logs_monitoring/telemetry.py index 862eba89a..af0b79c8c 100644 --- a/aws/logs_monitoring/telemetry.py +++ b/aws/logs_monitoring/telemetry.py @@ -10,7 +10,7 @@ except ImportError: DD_SUBMIT_ENHANCED_METRICS = False -from settings import DD_FORWARDER_VERSION +from settings import DD_FORWARDER_VERSION, DD_TAGS DD_FORWARDER_TELEMETRY_NAMESPACE_PREFIX = "aws.dd_forwarder" DD_FORWARDER_TELEMETRY_TAGS = [] @@ -27,6 +27,10 @@ def set_forwarder_telemetry_tags(context, event_type): f"forwarder_version:{DD_FORWARDER_VERSION}", f"event_type:{event_type}", ] + if DD_TAGS: + DD_FORWARDER_TELEMETRY_TAGS += [ + tag.strip() for tag in DD_TAGS.split(",") if tag.strip() + ] def send_forwarder_internal_metrics(name, additional_tags=[]): diff --git a/aws/logs_monitoring/tests/test_telemetry.py b/aws/logs_monitoring/tests/test_telemetry.py new file mode 100644 index 000000000..ed70e0a35 --- /dev/null +++ b/aws/logs_monitoring/tests/test_telemetry.py @@ -0,0 +1,71 @@ +import unittest +from unittest.mock import MagicMock, patch + +import telemetry + + +def make_context(function_name="my-forwarder", memory_limit_in_mb=128): + context = MagicMock() + context.function_name = function_name + context.memory_limit_in_mb = memory_limit_in_mb + return context + + +class TestSetForwarderTelemetryTags(unittest.TestCase): + def setUp(self): + telemetry.DD_FORWARDER_TELEMETRY_TAGS = [] + + @patch("telemetry.DD_TAGS", "") + def test_base_tags_without_dd_tags(self): + context = make_context() + telemetry.set_forwarder_telemetry_tags(context, "cloudwatch-logs") + tags = telemetry.DD_FORWARDER_TELEMETRY_TAGS + self.assertIn("forwardername:my-forwarder", tags) + self.assertIn("forwarder_memorysize:128", tags) + self.assertIn("event_type:cloudwatch-logs", tags) + self.assertEqual(len(tags), 4) + + @patch("telemetry.DD_TAGS", "env:prod,account:123456789") + def test_dd_tags_appended(self): + context = make_context() + telemetry.set_forwarder_telemetry_tags(context, "s3") + tags = telemetry.DD_FORWARDER_TELEMETRY_TAGS + self.assertIn("env:prod", tags) + self.assertIn("account:123456789", tags) + self.assertEqual(len(tags), 6) + + @patch("telemetry.DD_TAGS", "env:staging") + def test_single_dd_tag_appended(self): + context = make_context() + telemetry.set_forwarder_telemetry_tags(context, "kinesis") + tags = telemetry.DD_FORWARDER_TELEMETRY_TAGS + self.assertIn("env:staging", tags) + self.assertEqual(len(tags), 5) + + @patch("telemetry.DD_TAGS", "env:prod, account:123") + def test_dd_tags_whitespace_stripped(self): + context = make_context() + telemetry.set_forwarder_telemetry_tags(context, "s3") + tags = telemetry.DD_FORWARDER_TELEMETRY_TAGS + self.assertIn("account:123", tags) + self.assertNotIn(" account:123", tags) + + @patch("telemetry.DD_TAGS", "env:prod,,account:123") + def test_empty_tag_segments_ignored(self): + context = make_context() + telemetry.set_forwarder_telemetry_tags(context, "s3") + tags = telemetry.DD_FORWARDER_TELEMETRY_TAGS + self.assertIn("env:prod", tags) + self.assertIn("account:123", tags) + self.assertNotIn("", tags) + + @patch("telemetry.DD_TAGS", "env:prod,account:123456789") + def test_function_name_lowercased(self): + context = make_context(function_name="My-Forwarder") + telemetry.set_forwarder_telemetry_tags(context, "s3") + tags = telemetry.DD_FORWARDER_TELEMETRY_TAGS + self.assertIn("forwardername:my-forwarder", tags) + + +if __name__ == "__main__": + unittest.main()