diff --git a/CHANGELOG.md b/CHANGELOG.md index 1087875acd..9be7b9b60b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `opentelemetry-instrumentation-botocore` Add type check when extracting tool use from Bedrock request message content ([#3548](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3548)) - `opentelemetry-instrumentation-dbapi` Respect suppress_instrumentation functionality ([#3460](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3460)) +- `opentelemetry-resource-detector-container` Correctly parse container id when using systemd and cgroupsv1 + ([#3429](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3429)) ### Breaking changes diff --git a/resource/opentelemetry-resource-detector-container/src/opentelemetry/resource/detector/container/__init__.py b/resource/opentelemetry-resource-detector-container/src/opentelemetry/resource/detector/container/__init__.py index 8e7db6a7a8..a25f4ce4f6 100644 --- a/resource/opentelemetry-resource-detector-container/src/opentelemetry/resource/detector/container/__init__.py +++ b/resource/opentelemetry-resource-detector-container/src/opentelemetry/resource/detector/container/__init__.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import re from logging import getLogger from opentelemetry.sdk.resources import Resource, ResourceDetector @@ -31,9 +32,14 @@ def _get_container_id_v1(): ) as container_info_file: for raw_line in container_info_file.readlines(): line = raw_line.strip() - if len(line) > _CONTAINER_ID_LENGTH: - container_id = line[-_CONTAINER_ID_LENGTH:] + + match = re.search( + r"^.*/(?:.*[-:])?([0-9a-f]+)(?:\.|\s*$)", line + ) + if match is not None: + container_id = match.group(1) break + except FileNotFoundError as exception: logger.warning("Failed to get container id. Exception: %s", exception) return container_id diff --git a/resource/opentelemetry-resource-detector-container/tests/test_container.py b/resource/opentelemetry-resource-detector-container/tests/test_container.py index ac55afa291..ae831ee50e 100644 --- a/resource/opentelemetry-resource-detector-container/tests/test_container.py +++ b/resource/opentelemetry-resource-detector-container/tests/test_container.py @@ -51,6 +51,20 @@ def test_container_id_detect_from_cgroup_file(self, mock_cgroup_file): actual.attributes.copy(), MockContainerResourceAttributes ) + @patch( + "builtins.open", + new_callable=mock_open, + read_data=f"""0::/system.slice/docker-{MockContainerResourceAttributes[ResourceAttributes.CONTAINER_ID]}.scope + """, + ) + def test_container_id_detect_from_cgroup_file_with_suffix( + self, mock_cgroup_file + ): + actual = ContainerResourceDetector().detect() + self.assertDictEqual( + actual.attributes.copy(), MockContainerResourceAttributes + ) + @patch( "opentelemetry.resource.detector.container._get_container_id_v1", return_value=None,