Skip to content

Commit cdbaed6

Browse files
authored
feat(otel): add deployment.environment.name from service_environment to the resource (#353)
1 parent 83877be commit cdbaed6

3 files changed

Lines changed: 21 additions & 2 deletions

File tree

‎docs/introduction/configuration.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ OTEL_EXPERIMENTAL_RESOURCE_DETECTORS=process,os
205205
`OTEL_RESOURCE_ATTRIBUTES` is honoured as well.
206206

207207
The attributes lite-bootstrap sets (`service.name`, `service.namespace`, `service.version`,
208-
`container.name`) are merged last and override anything a detector or environment variable supplies.
208+
`container.name`, and `deployment.environment.name` from `service_environment`) are merged last and override anything a detector or environment variable supplies.
209209
`service_name` defaults to `"micro-service"`, so `OTEL_SERVICE_NAME` is overridden unless `service_name`
210210
is empty: set `opentelemetry_service_name` or `service_name` instead.
211211

‎lite_bootstrap/instruments/opentelemetry_instrument.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ def _build_resource(self) -> "resources.Resource":
243243
resources.SERVICE_NAMESPACE: config.opentelemetry_namespace,
244244
resources.SERVICE_VERSION: config.service_version,
245245
resources.CONTAINER_NAME: config.opentelemetry_container_name,
246+
"deployment.environment.name": config.service_environment,
246247
}
247248
return resources.Resource.create(attributes={k: v for k, v in attributes.items() if v})
248249

‎tests/instruments/test_opentelemetry_instrument.py‎

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,21 @@ def test_opentelemetry_configured_service_name_wins_over_env(
149149
instrument.teardown()
150150

151151

152+
@pytest.mark.parametrize(("service_environment", "expected"), [("prod", "prod"), (None, None)])
153+
def test_opentelemetry_resource_carries_deployment_environment(
154+
service_environment: str | None, expected: str | None
155+
) -> None:
156+
instrument = OpenTelemetryInstrument(
157+
bootstrap_config=OpenTelemetryConfig(service_environment=service_environment, opentelemetry_log_traces=True)
158+
)
159+
try:
160+
instrument.bootstrap()
161+
assert instrument._tracer_provider is not None # noqa: SLF001
162+
assert instrument._tracer_provider.resource.attributes.get("deployment.environment.name") == expected # noqa: SLF001
163+
finally:
164+
instrument.teardown()
165+
166+
152167
def test_opentelemetry_resource_detectors_enrich_resource(monkeypatch: pytest.MonkeyPatch) -> None:
153168
monkeypatch.setenv("OTEL_EXPERIMENTAL_RESOURCE_DETECTORS", "process")
154169
monkeypatch.setenv("OTEL_RESOURCE_ATTRIBUTES", "deployment.environment=from-env")
@@ -504,7 +519,9 @@ def test_metrics_endpoint_installs_a_meter_provider_carrying_the_resource() -> N
504519
"""The metrics pipeline is opt-in through its own endpoint and shares the trace resource."""
505520
instrument = OpenTelemetryInstrument(
506521
bootstrap_config=OpenTelemetryConfig(
507-
service_name="metrics-svc", opentelemetry_metrics_endpoint="localhost:4317"
522+
service_name="metrics-svc",
523+
service_environment="prod",
524+
opentelemetry_metrics_endpoint="localhost:4317",
508525
)
509526
)
510527
try:
@@ -514,6 +531,7 @@ def test_metrics_endpoint_installs_a_meter_provider_carrying_the_resource() -> N
514531
assert isinstance(meter_provider, SDKMeterProvider)
515532
assert meter_provider is instrument._meter_provider # noqa: SLF001
516533
assert meter_provider._sdk_config.resource.attributes["service.name"] == "metrics-svc" # noqa: SLF001
534+
assert meter_provider._sdk_config.resource.attributes["deployment.environment.name"] == "prod" # noqa: SLF001
517535
(reader,) = meter_provider._metric_readers # noqa: SLF001
518536
assert isinstance(reader, PeriodicExportingMetricReader)
519537
assert isinstance(reader._exporter, OTLPGrpcMetricExporter) # noqa: SLF001

0 commit comments

Comments
 (0)