mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-30 21:56:07 +08:00
[exporter/datadog]: fix service name resolution (#570)
This commit is contained in:
@ -55,6 +55,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
([#581](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/581))
|
([#581](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/581))
|
||||||
- `opentelemetry-instrumentation-botocore` Suppress botocore downstream instrumentation like urllib3
|
- `opentelemetry-instrumentation-botocore` Suppress botocore downstream instrumentation like urllib3
|
||||||
([#563](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/563))
|
([#563](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/563))
|
||||||
|
- `opentelemetry-exporter-datadog` Datadog exporter should not use `unknown_service` as fallback resource service name.
|
||||||
|
([#570](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/570))
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- `opentelemetry-instrumentation-httpx` Add `httpx` instrumentation
|
- `opentelemetry-instrumentation-httpx` Add `httpx` instrumentation
|
||||||
|
@ -135,12 +135,12 @@ class DatadogSpanExporter(SpanExporter):
|
|||||||
[
|
[
|
||||||
resource_tags,
|
resource_tags,
|
||||||
resource_service_name,
|
resource_service_name,
|
||||||
] = _extract_tags_from_resource(span.resource)
|
] = _extract_tags_from_resource(span.resource, self.service)
|
||||||
|
|
||||||
datadog_span = DatadogSpan(
|
datadog_span = DatadogSpan(
|
||||||
tracer,
|
tracer,
|
||||||
_get_span_name(span),
|
_get_span_name(span),
|
||||||
service=resource_service_name or self.service,
|
service=resource_service_name,
|
||||||
resource=_get_resource(span),
|
resource=_get_resource(span),
|
||||||
span_type=_get_span_type(span),
|
span_type=_get_span_type(span),
|
||||||
trace_id=trace_id,
|
trace_id=trace_id,
|
||||||
@ -312,19 +312,23 @@ def _parse_tags_str(tags_str):
|
|||||||
return parsed_tags
|
return parsed_tags
|
||||||
|
|
||||||
|
|
||||||
def _extract_tags_from_resource(resource):
|
def _extract_tags_from_resource(resource, fallback_service_name):
|
||||||
"""Parse tags from resource.attributes, except service.name which
|
"""Parse tags from resource.attributes, except service.name which
|
||||||
has special significance within datadog"""
|
has special significance within datadog"""
|
||||||
tags = {}
|
tags = {}
|
||||||
service_name = None
|
|
||||||
if not (resource and getattr(resource, "attributes", None)):
|
if not (resource and getattr(resource, "attributes", None)):
|
||||||
return [tags, service_name]
|
return [tags, fallback_service_name]
|
||||||
|
|
||||||
|
service_name = None
|
||||||
for attribute_key, attribute_value in resource.attributes.items():
|
for attribute_key, attribute_value in resource.attributes.items():
|
||||||
if attribute_key == SERVICE_NAME_TAG:
|
if attribute_key == SERVICE_NAME_TAG:
|
||||||
service_name = attribute_value
|
service_name = attribute_value
|
||||||
else:
|
else:
|
||||||
tags[attribute_key] = attribute_value
|
tags[attribute_key] = attribute_value
|
||||||
|
|
||||||
|
if service_name is None or service_name == "unknown_service":
|
||||||
|
service_name = fallback_service_name
|
||||||
|
|
||||||
return [tags, service_name]
|
return [tags, service_name]
|
||||||
|
|
||||||
|
|
||||||
|
@ -612,3 +612,41 @@ class TestDatadogSpanExporter(unittest.TestCase):
|
|||||||
]
|
]
|
||||||
expected = [0.5]
|
expected = [0.5]
|
||||||
self.assertListEqual(actual, expected)
|
self.assertListEqual(actual, expected)
|
||||||
|
|
||||||
|
def test_service_name_fallback(self):
|
||||||
|
context = trace_api.SpanContext(
|
||||||
|
trace_id=0x000000000000000000000000DEADBEEF,
|
||||||
|
span_id=0x34BF92DEEFC58C92,
|
||||||
|
is_remote=False,
|
||||||
|
trace_flags=trace_api.TraceFlags(trace_api.TraceFlags.SAMPLED),
|
||||||
|
)
|
||||||
|
trace_api.get_tracer_provider().sampler = sampling.TraceIdRatioBased(
|
||||||
|
0.5
|
||||||
|
)
|
||||||
|
|
||||||
|
resource_with_default_name = Resource(
|
||||||
|
attributes={
|
||||||
|
"key_resource": "some_resource",
|
||||||
|
"service.name": "unknown_service",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
span = trace._Span(
|
||||||
|
name="sampled",
|
||||||
|
context=context,
|
||||||
|
parent=None,
|
||||||
|
resource=resource_with_default_name,
|
||||||
|
)
|
||||||
|
span.start()
|
||||||
|
span.end()
|
||||||
|
|
||||||
|
# pylint: disable=protected-access
|
||||||
|
exporter = datadog.DatadogSpanExporter(service="fallback_service_name")
|
||||||
|
datadog_spans = [
|
||||||
|
span.to_dict() for span in exporter._translate_to_datadog([span])
|
||||||
|
]
|
||||||
|
|
||||||
|
self.assertEqual(len(datadog_spans), 1)
|
||||||
|
|
||||||
|
span = datadog_spans[0]
|
||||||
|
self.assertEqual(span["service"], "fallback_service_name")
|
||||||
|
Reference in New Issue
Block a user