Skip to main content

Stack di Monitoring: Panoramica

Introduzione

La piattaforma Impronto Enterprise utilizza uno stack di monitoring cloud-native basato su kube-prometheus-stack, esteso con componenti custom per la visibilità a livello applicativo dei microservizi Moleculer.

Tutti i componenti risiedono nel namespace monitoring del cluster Kubernetes, separati dal namespace applicativo pos-enterprise.


Architettura Generale

┌─────────────────────────────────────────────────────────────┐
│ Grafana (porta 3000) │
│ Dashboard, Explore, Alerting UI │
└──────┬──────────────┬──────────────┬────────────────────────┘
│ │ │
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ Prometheus │ │ Loki │ │ Tempo │
│ (metriche)│ │ (log) │ │ (tracce) │
│ porta 9090│ │ porta 3100│ │ porta 3200│
└──────┬─────┘ └──────┬─────┘ └──────┬─────┘
│ │ │
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌──────────────────┐
│ Exporters │ │ Promtail │ │ OpenTelemetry │
│ & Targets │ │ (agente) │ │ Collector (OTLP)│
└────────────┘ └────────────┘ └──────────────────┘

Componenti Principali

ComponenteVersioneRuoloNamespace
Prometheus2.53+Raccolta e storage metriche (TSDB)monitoring
Grafana11.xVisualizzazione, dashboard, alertingmonitoring
Loki3.xAggregazione log (modalità SimpleScalable)monitoring
Promtail3.xAgente di raccolta log (DaemonSet)monitoring
Tempo2.xDistributed tracing backendmonitoring
Alertmanager0.27+Routing e deduplicazione alertmonitoring
kube-state-metrics2.xMetriche sullo stato degli oggetti K8smonitoring
node-exporter1.xMetriche hardware/OS per nodomonitoring

Flusso Dati

Metriche (Prometheus)

  1. I pod Moleculer espongono metriche Prometheus sulla porta 3030 (/metrics)
  2. I ServiceMonitor definiscono i target di scraping nel namespace pos-enterprise
  3. Prometheus esegue scrape ogni 15s (default) o 30s (servizi a basso traffico)
  4. Le metriche vengono conservate per 15 giorni (retention locale)
# Esempio ServiceMonitor per i nodi Moleculer
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: moleculer-services
namespace: monitoring
spec:
namespaceSelector:
matchNames: ["pos-enterprise"]
selector:
matchLabels:
app.kubernetes.io/part-of: impronto-enterprise
endpoints:
- port: metrics
interval: 15s
path: /metrics

Log (Loki + Promtail)

  1. I servizi Moleculer scrivono log JSON su stdout/stderr
  2. Promtail (DaemonSet) raccoglie i log dai container via /var/log/pods/
  3. Promtail arricchisce con label: namespace, pod, container, node_type
  4. I log vengono inviati a Loki via push API
  5. Retention: 30 giorni (configurabile in loki.yaml)

Tracce (Tempo)

  1. I servizi Moleculer instrumentati con OpenTelemetry inviano span via OTLP gRPC (porta 4317)
  2. Il Collector elabora e inoltra a Tempo
  3. Correlation: traceId incluso nei log strutturati per collegamento log-tracce in Grafana

Metriche Custom Moleculer

Il mixin health.mixin.js e il servizio infrastructure-monitor.service.js espongono metriche specifiche della piattaforma:

# Metriche di servizio
moleculer_action_duration_seconds{service, action, tenant}
moleculer_action_errors_total{service, action, error_type}
moleculer_action_requests_total{service, action, status}

# Metriche business
pos_orders_total{tenant, channel}
pos_active_sessions{tenant}
pos_sync_lag_seconds{tenant, device}

# Metriche infrastruttura custom
pos_mongodb_pool_size{cluster, database}
pos_redis_memory_used_bytes{instance}
pos_nats_reconnections_total{node}

Porte e Endpoint

ServizioPorta InternaPorta Esterna (Ingress)Path
Grafana3000443grafana.platform.sellogic.cloud
Prometheus9090-Accesso solo interno
Alertmanager9093-Accesso solo interno
Loki3100-Accesso solo interno
Tempo3200 / 4317 (OTLP)-Accesso solo interno
Health HTTP (pod)3001-Vedi Health Check
Metrics (pod)3030-/metrics
Accesso Esterno

Solo Grafana e accessibile dall'esterno tramite Ingress HTTPS. Prometheus, Loki e Alertmanager sono raggiungibili solo via kubectl port-forward o dalla VPN del team.


Risorse Utilizzate

Risorse allocate ai componenti di monitoring (valori di produzione):

ComponenteCPU RequestCPU LimitMemory RequestMemory LimitStorage
Prometheus500m2000m2Gi4Gi50Gi PVC
Grafana200m500m256Mi512Mi10Gi PVC
Loki (write)250m1000m512Mi1Gi20Gi PVC
Loki (read)250m1000m512Mi1Gi-
Promtail100m200m128Mi256Mi-
Alertmanager100m200m128Mi256Mi5Gi PVC
Tempo250m1000m512Mi1Gi30Gi PVC

Totale approssimativo dello stack: ~1.7 CPU request, ~8 Gi RAM request.


Comandi Utili

# Verifica stato dei pod di monitoring
kubectl get pods -n monitoring

# Port-forward a Prometheus per query dirette
kubectl port-forward -n monitoring svc/prometheus-kube-prometheus-prometheus 9090:9090

# Port-forward a Grafana (se non raggiungibile via Ingress)
kubectl port-forward -n monitoring svc/prometheus-grafana 3000:80

# Verifica i target di scraping Prometheus
kubectl port-forward -n monitoring svc/prometheus-kube-prometheus-prometheus 9090:9090
# Poi aprire: http://localhost:9090/targets

# Verifica che Promtail stia raccogliendo log
kubectl logs -n monitoring daemonset/promtail --tail=50

# Stato di Alertmanager
kubectl port-forward -n monitoring svc/prometheus-kube-prometheus-alertmanager 9093:9093

Riferimenti Incrociati

Questa pagina ti è stata utile?