From 45a992f5a8be266c7c0ccfbe728fac9867af2297 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sat, 16 May 2026 15:18:13 +0200 Subject: [PATCH] fix(obs): fix OTLP transport port and add application metrics tag - Change OTEL default endpoint from port 4317 (gRPC) to 4318 (HTTP) to match Spring Boot's HttpExporter; sending HTTP/1.1 to a gRPC listener caused "Connection reset" errors - Add otel.logs.exporter=none: Promtail captures Docker logs via the logging driver; sending logs to Tempo's OTLP endpoint (which only handles traces) produced 404 errors - Add management.metrics.tags.application to every metric so Grafana's Spring Boot Observability dashboard (ID 17175) can filter by the application label_values() template variable - Add MANAGEMENT_METRICS_TAGS_APPLICATION and OTEL_LOGS_EXPORTER env vars to docker-compose.prod.yml; production Tempo endpoint already uses 4318 - Add MANAGEMENT_TRACING_SAMPLING_PROBABILITY to prod compose with 0.1 default to avoid 100% trace sampling in production Co-Authored-By: Claude Sonnet 4.6 --- backend/src/main/resources/application.yaml | 12 ++++++++++-- docker-compose.prod.yml | 5 ++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/backend/src/main/resources/application.yaml b/backend/src/main/resources/application.yaml index 5f4fb207..1d502776 100644 --- a/backend/src/main/resources/application.yaml +++ b/backend/src/main/resources/application.yaml @@ -64,6 +64,11 @@ management: metrics: export: enabled: true + metrics: + tags: + # Common tag applied to every metric so Grafana's Spring Boot dashboard can filter by application name. + # Override via MANAGEMENT_METRICS_TAGS_APPLICATION env var. + application: ${spring.application.name} health: mail: enabled: false @@ -72,13 +77,16 @@ management: probability: 1.0 # 100% in dev; override via MANAGEMENT_TRACING_SAMPLING_PROBABILITY in prod compose # OpenTelemetry trace export — failures are non-fatal (app starts cleanly without Tempo running) -# The default http://localhost:4317 ensures CI compatibility when no observability stack is present. +# Port 4318 = OTLP HTTP (the default transport for Spring Boot's HttpExporter). +# Port 4317 is gRPC-only; sending HTTP/1.1 to it produces "Connection reset". otel: service: name: familienarchiv-backend exporter: otlp: - endpoint: ${OTEL_EXPORTER_OTLP_ENDPOINT:http://localhost:4317} + endpoint: ${OTEL_EXPORTER_OTLP_ENDPOINT:http://localhost:4318} + logs: + exporter: none # Promtail captures Docker logs; disable OTLP log export to Tempo (which doesn't accept logs) springdoc: api-docs: diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 28730f7e..ff8db357 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -213,7 +213,10 @@ services: APP_MAIL_FROM: ${APP_MAIL_FROM:-noreply@raddatz.cloud} SPRING_MAIL_PROPERTIES_MAIL_SMTP_AUTH: ${MAIL_SMTP_AUTH:-true} SPRING_MAIL_PROPERTIES_MAIL_SMTP_STARTTLS_ENABLE: ${MAIL_STARTTLS_ENABLE:-true} - OTEL_EXPORTER_OTLP_ENDPOINT: http://tempo:4317 + OTEL_EXPORTER_OTLP_ENDPOINT: http://tempo:4318 + OTEL_LOGS_EXPORTER: none + MANAGEMENT_METRICS_TAGS_APPLICATION: Familienarchiv + MANAGEMENT_TRACING_SAMPLING_PROBABILITY: ${MANAGEMENT_TRACING_SAMPLING_PROBABILITY:-0.1} networks: - archiv-net healthcheck: