Add observability: real OTLP metrics/traces to grafana/otel-lgtm, Docker Compose auto-wiring, and a dual-version (Boot 4.0 vs 4.1) proof of the new OTEL_* env var support

Companion module for the rewritten ankurm.com Prometheus/Grafana monitoring post. Verified
against a real running grafana/otel-lgtm container (not mocked): 8 real requests produce a real
orders_placed_total metric queried back from the bundled Prometheus-compatible API with zero
management.otlp.* properties, auto-wired entirely by Boot's Docker Compose service-connection
detection. Two real findings surfaced along the way and documented rather than smoothed over:
@Observed silently produces no span without an explicit ObservedAspect bean (AspectJ weaving
alone is not sufficient, despite Micrometer Tracing being active), and OTEL_EXPORTER_OTLP_ENDPOINT
already worked on Boot 4.0 via Micrometer's own OtlpConfig fallback -- what's actually new in 4.1
is the rest of the standard OTEL_* surface (verified with OTEL_METRIC_EXPORT_INTERVAL against
identical source compiled on both Boot 4.0.8 and 4.1.1).

Also fixes the root README's module table, which was missing a row for
resilience4j-circuit-breaker (added in a previous commit but never indexed here).
This commit is contained in:
Claude
2026-09-18 09:32:34 +00:00
parent 320733265f
commit 03bdf7ee87
28 changed files with 1027 additions and 2 deletions
@@ -0,0 +1,31 @@
server:
port: 8080
spring:
application:
name: order-service
management:
endpoints:
web:
exposure:
include: health
metrics:
tags:
application: ${spring.application.name}
# No management.otlp.* export properties here on purpose -- see docs/03-otel-env-vars.md.
# In development, Boot's Docker Compose support (see compose.yaml) auto-configures the OTLP
# export endpoints for metrics, traces and logs the moment it detects the grafana/otel-lgtm
# image, without a single management.otlp.* property in this file.
# management.tracing.sampling.probability defaults to 0.10 -- see docs/output/02-low-sampling-demo.txt
# for what that does to a short burst of local traffic, and the "fulltrace" profile below for the fix.
---
spring:
config:
activate:
on-profile: fulltrace
management:
tracing:
sampling:
probability: 1.0