From ebcdbdb660bd0138b1d84d5251f3d5d01166b682 Mon Sep 17 00:00:00 2001 From: "(Eliseo) Nathaniel Ruiz Nowell" Date: Fri, 13 Aug 2021 09:25:14 -0700 Subject: [PATCH] Exit AWS ECS and EKS Detector container file reads early if container id found (#612) --- .../sdk/extension/aws/resource/ecs.py | 2 ++ .../sdk/extension/aws/resource/eks.py | 2 ++ .../tests/resource/test_ecs.py | 24 +++++++++---------- .../tests/resource/test_eks.py | 24 +++++++++---------- 4 files changed, 28 insertions(+), 24 deletions(-) diff --git a/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/ecs.py b/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/ecs.py index ad8269dfa..3b0d6d79a 100644 --- a/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/ecs.py +++ b/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/ecs.py @@ -49,8 +49,10 @@ class AwsEcsResourceDetector(ResourceDetector): ) as container_info_file: for raw_line in container_info_file.readlines(): line = raw_line.strip() + # Subsequent IDs should be the same, exit if found one if len(line) > _CONTAINER_ID_LENGTH: container_id = line[-_CONTAINER_ID_LENGTH:] + break except FileNotFoundError as exception: logger.warning( "Failed to get container ID on ECS: %s.", exception diff --git a/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/eks.py b/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/eks.py index 3619024f7..6a5c6a4d0 100644 --- a/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/eks.py +++ b/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/eks.py @@ -94,8 +94,10 @@ def _get_container_id(): with open("/proc/self/cgroup", encoding="utf8") as container_info_file: for raw_line in container_info_file.readlines(): line = raw_line.strip() + # Subsequent IDs should be the same, exit if found one if len(line) > _CONTAINER_ID_LENGTH: container_id = line[-_CONTAINER_ID_LENGTH:] + break return container_id diff --git a/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_ecs.py b/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_ecs.py index 9b0e6f3a6..5e1aeea90 100644 --- a/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_ecs.py +++ b/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_ecs.py @@ -44,18 +44,18 @@ class AwsEcsResourceDetectorTest(unittest.TestCase): new_callable=mock_open, read_data=f"""14:name=systemd:/docker/{MockEcsResourceAttributes[ResourceAttributes.CONTAINER_ID]} 13:rdma:/ -12:pids:/docker/{MockEcsResourceAttributes[ResourceAttributes.CONTAINER_ID]} -11:hugetlb:/docker/{MockEcsResourceAttributes[ResourceAttributes.CONTAINER_ID]} -10:net_prio:/docker/{MockEcsResourceAttributes[ResourceAttributes.CONTAINER_ID]} -9:perf_event:/docker/{MockEcsResourceAttributes[ResourceAttributes.CONTAINER_ID]} -8:net_cls:/docker/{MockEcsResourceAttributes[ResourceAttributes.CONTAINER_ID]} -7:freezer:/docker/{MockEcsResourceAttributes[ResourceAttributes.CONTAINER_ID]} -6:devices:/docker/{MockEcsResourceAttributes[ResourceAttributes.CONTAINER_ID]} -5:memory:/docker/{MockEcsResourceAttributes[ResourceAttributes.CONTAINER_ID]} -4:blkio:/docker/{MockEcsResourceAttributes[ResourceAttributes.CONTAINER_ID]} -3:cpuacct:/docker/{MockEcsResourceAttributes[ResourceAttributes.CONTAINER_ID]} -2:cpu:/docker/{MockEcsResourceAttributes[ResourceAttributes.CONTAINER_ID]} -1:cpuset:/docker/{MockEcsResourceAttributes[ResourceAttributes.CONTAINER_ID]} +12:pids:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +11:hugetlb:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +10:net_prio:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +9:perf_event:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +8:net_cls:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +7:freezer:/docker/ +6:devices:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +5:memory:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +4:blkio:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +3:cpuacct:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +2:cpu:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +1:cpuset:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked """, ) def test_simple_create(self, mock_open_function, mock_socket_gethostname): diff --git a/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_eks.py b/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_eks.py index 2fb6c8bc7..f5b665856 100644 --- a/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_eks.py +++ b/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_eks.py @@ -68,18 +68,18 @@ class AwsEksResourceDetectorTest(unittest.TestCase): new_callable=mock_open, read_data=f"""14:name=systemd:/docker/{MockEksResourceAttributes[ResourceAttributes.CONTAINER_ID]} 13:rdma:/ -12:pids:/docker/{MockEksResourceAttributes[ResourceAttributes.CONTAINER_ID]} -11:hugetlb:/docker/{MockEksResourceAttributes[ResourceAttributes.CONTAINER_ID]} -10:net_prio:/docker/{MockEksResourceAttributes[ResourceAttributes.CONTAINER_ID]} -9:perf_event:/docker/{MockEksResourceAttributes[ResourceAttributes.CONTAINER_ID]} -8:net_cls:/docker/{MockEksResourceAttributes[ResourceAttributes.CONTAINER_ID]} -7:freezer:/docker/{MockEksResourceAttributes[ResourceAttributes.CONTAINER_ID]} -6:devices:/docker/{MockEksResourceAttributes[ResourceAttributes.CONTAINER_ID]} -5:memory:/docker/{MockEksResourceAttributes[ResourceAttributes.CONTAINER_ID]} -4:blkio:/docker/{MockEksResourceAttributes[ResourceAttributes.CONTAINER_ID]} -3:cpuacct:/docker/{MockEksResourceAttributes[ResourceAttributes.CONTAINER_ID]} -2:cpu:/docker/{MockEksResourceAttributes[ResourceAttributes.CONTAINER_ID]} -1:cpuset:/docker/{MockEksResourceAttributes[ResourceAttributes.CONTAINER_ID]} +12:pids:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +11:hugetlb:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +10:net_prio:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +9:perf_event:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +8:net_cls:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +7:freezer:/docker/ +6:devices:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +5:memory:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +4:blkio:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +3:cpuacct:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +2:cpu:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked +1:cpuset:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked """, ) def test_simple_create(