opentelemetry-sdk-extension-aws: make ecs and beanstalk resource detector silent when loaded outside AWS (#3076)

* opentelemetry-sdk-extension-aws: make ecs detector less chatty

Don't print warnings if we are not running inside an ecs instance so we can load the
resource detector more generally and avoid warnings in stderr.

* opentelemetry-sdk-extension-aws: make beanstalk detector less chatty

Don't print warnings if we are not running inside beanstalk so we can load the
resource detector more generally and avoid warnings in stderr.

* Add changelog
This commit is contained in:
Riccardo Magliocchetti 2024-12-16 11:28:18 +01:00 committed by GitHub
parent 38f0e33641
commit 770003dd17
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 22 additions and 4 deletions

View File

@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
- Make ecs and beanstalk resource detector silent when loaded outside AWS
([#3076](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3076))
- Make EKS resource detector don't warn when not running in EKS
([#3074](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3074))

View File

@ -41,6 +41,9 @@ class AwsBeanstalkResourceDetector(ResourceDetector):
else:
conf_file_path = "/var/elasticbeanstalk/xray/environment.conf"
if not os.path.exists(conf_file_path):
return Resource.get_empty()
try:
with open(conf_file_path, encoding="utf-8") as conf_file:
parsed_data = json.load(conf_file)

View File

@ -41,9 +41,7 @@ class AwsEcsResourceDetector(ResourceDetector):
if not os.environ.get(
"ECS_CONTAINER_METADATA_URI"
) and not os.environ.get("ECS_CONTAINER_METADATA_URI_V4"):
raise RuntimeError(
"Missing ECS_CONTAINER_METADATA_URI therefore process is not on ECS."
)
return Resource.get_empty()
container_id = ""
try:

View File

@ -41,9 +41,19 @@ class AwsBeanstalkResourceDetectorTest(unittest.TestCase):
new_callable=mock_open,
read_data=f'{{"deployment_id":"{MockBeanstalkResourceAttributes[ResourceAttributes.SERVICE_INSTANCE_ID]}","environment_name":"{MockBeanstalkResourceAttributes[ResourceAttributes.SERVICE_NAMESPACE]}","version_label":"{MockBeanstalkResourceAttributes[ResourceAttributes.SERVICE_VERSION]}"}}',
)
def test_simple_create(self, mock_open_function):
@patch("os.path.exists", return_value=True)
def test_simple_create(self, mock_path_exists, mock_open_function):
actual = AwsBeanstalkResourceDetector().detect()
self.assertDictEqual(
actual.attributes.copy(),
OrderedDict(MockBeanstalkResourceAttributes),
)
@patch("os.name", "posix")
@patch("os.path.exists", return_value=False)
def test_not_on_beanstalk(self, mock_path_exists):
actual = AwsBeanstalkResourceDetector().detect()
self.assertDictEqual(actual.attributes.copy(), {})
mock_path_exists.assert_called_once_with(
"/var/elasticbeanstalk/xray/environment.conf"
)

View File

@ -79,6 +79,11 @@ def _http_get_function_fargate(url: str, *args, **kwargs) -> str:
class AwsEcsResourceDetectorTest(unittest.TestCase):
@patch.dict("os.environ", {}, clear=True)
def test_not_on_ecs(self):
actual = AwsEcsResourceDetector().detect()
self.assertDictEqual(actual.attributes.copy(), {})
@patch.dict(
"os.environ",
{"ECS_CONTAINER_METADATA_URI": "mock-uri"},