Skip to content

Commit 2fb6b61

Browse files
committed
Filter invalid resource attribute pairs
1 parent a1903c9 commit 2fb6b61

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2020
([#1887](https://github.com/open-telemetry/opentelemetry-python/pull/1887))
2121
- Make batch processor fork aware and reinit when needed
2222
([#2242](https://github.com/open-telemetry/opentelemetry-python/pull/2242))
23+
- `opentelemetry-sdk` Sanitize env var resource attribute pairs
24+
([#2256](https://github.com/open-telemetry/opentelemetry-python/pull/2256))
2325

2426
## [1.6.2-0.25b2](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.6.2-0.25b2) - 2021-10-19
2527

opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -266,13 +266,20 @@ class OTELResourceDetector(ResourceDetector):
266266
def detect(self) -> "Resource":
267267
env_resources_items = os.environ.get(OTEL_RESOURCE_ATTRIBUTES)
268268
env_resource_map = {}
269+
269270
if env_resources_items:
270-
env_resource_map = {
271-
key.strip(): value.strip()
272-
for key, value in (
273-
item.split("=") for item in env_resources_items.split(",")
274-
)
275-
}
271+
for item in env_resources_items.split(","):
272+
try:
273+
key, value = item.split("=")
274+
except ValueError as exc:
275+
logger.warning(
276+
"Invalid key value resource attribute pair %s: %s",
277+
item,
278+
exc,
279+
)
280+
continue
281+
env_resource_map[key.strip()] = value.strip()
282+
276283
service_name = os.environ.get(OTEL_SERVICE_NAME)
277284
if service_name:
278285
env_resource_map[SERVICE_NAME] = service_name

opentelemetry-sdk/tests/resources/test_resources.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,15 @@ def test_multiple_with_whitespace(self):
482482
detector.detect(), resources.Resource({"k": "v", "k2": "v2"})
483483
)
484484

485+
def test_invalid_key_value_pairs(self):
486+
detector = resources.OTELResourceDetector()
487+
os.environ[
488+
resources.OTEL_RESOURCE_ATTRIBUTES
489+
] = "k=v,k2=v2,invalid,,foo=bar=baz,"
490+
self.assertEqual(
491+
detector.detect(), resources.Resource({"k": "v", "k2": "v2"})
492+
)
493+
485494
@mock.patch.dict(
486495
os.environ,
487496
{resources.OTEL_SERVICE_NAME: "test-srv-name"},

0 commit comments

Comments
 (0)