Observability Layer - Deployment Kubernetes
L'Observability Layer implementa lo stack completo per monitoring, logging e distributed tracing dell'applicazione HabitQuest. Segue i principi dei Three Pillars of Observability: Metrics, Logs e Traces.
Three Pillars of Observability
1. Metrics (Prometheus)
- Misurazioni numeriche time-series (CPU, memoria, request rate, latency)
- Prometheus scraping di
/actuator/prometheus, metriche esposte tramite Spring Boot Actuator - Namespace
prometheus-system
Prometheus usa Kubernetes Service Discovery per trovare automaticamente i pod da scrapare: Annotation richieste nei pod:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8080"
prometheus.io/path: "/actuator/prometheus"
2. Logs (Loki + Fluent Bit)
- Stream di logs presi da stdout dall'applicazione
- Fluent Bit è presente come DaemonSet su ogni node, raccoglie i log e li invia a Loki.
- Loki è l'aggregatore di log, permette di fare raccogliere e fare query
- Namespace
logging
Metadati aggiunti ad ogni log:
namespace: Kubernetes namespacepod: Pod namecontainer: Container namelabels: Tutti i label Kubernetes del pod
3. Traces (Tempo)
- Traccia il flusso distribuito delle richieste attraverso i vari microservizi
- Spring Boot invia traces usando lo standard OpenTelemetry
- Namespace
prometheus-system
I servizi Spring Boot inviano traces a Tempo tramite configurazione:
env:
- name: MANAGEMENT_OTLP_TRACING_ENDPOINT
value: http://tempo.prometheus-system:4318/v1/traces
Spring Boot Micrometer produce le traces automaticamente: 1. Instrumenta le richieste HTTP 2. Propaga trace context 3. Invia spans a Tempo via OTLP
4. Grafana
- Visualizzazione unificata di metriche, log e traces
- Dashboard impostate per i principali aspetti dell'applicazione
- Namespace
logging
Dashboard disponibili:
circuit-breaker.json: Resilience4j circuit breakers statuses and metricshttp-rest-controllers.json: REST endpoint performance and http trafficjvm.json: JVM heap, threads, GC metricslogs.json: Log aggregation of all servicesspring-cloud-gateway.json: Gateway routing metricstraces.json: Distributed tracing visualization
Tutti i componenti dello stack di osservabilità vengono deployati usando Helm charts parametrizzati.