GH GambleHub

Pila di osservabilità

1) Perché una pila di osservabilità

RCA rapido e riduzione di MTTR da sintomo a causa in minuti.
Gestione SLO: misurazione degli errori/latitanza, allerting del budget errato.
Controllo dei rilasci: cartelle canarie, auto-rollback per metriche.
Sicurezza e controllo: piste di accesso, anomalie, Legale Hold.
Trasparenza FinOps: costo di archiviazione/query, cost-per-SLO.

Metodologie: Golden Signals (latency/traffic/errors/saturation), RED, USA.

2) Architettura base stack

Componenti per livello

Raccoglimento/agenti: Exporters, Promtail/Fluent Bit, OTel SDK/Auto-Instr, Blackbox-probes.
Шина/ingest: Prometheus remote_write → Mimir/Thanos, Loki distributors/ingesters, Tempo/Jaeger ingesters.
Depositi: S3/GCS/MinIO di oggetti (freddo prolungato), SSD (righe calde).
Query/visualizzazione: Grafana (pannelli, widget SLO), Kibana (se ELK).
Gestione: Alertmanager/Grafano-alert, servizio-catalogo, RBAC, segreto-manager.

Pattern di distribuzione

Managed (Grafana Cloud/Cloud Services) è veloce e costoso in quantità.
Self-hosted in K8s - controllo completo, ha bisogno di essere utilizzato e FinOps.

3) Standard di dati: un unico «schema di osservabilità»

3. 1 Metriche (Prometheus/OpenMetrics)

Etichette obbligatorie: «env», «region», «cluster», «namespace», «service», «variante», «tenant», «endpoint».
Nome: «snake _ case», suffissi «_ total», «_ seconds», «_ byties».
Istogrammi fissi «buckets» (SLO-orientati).
Cardinalità: non includere «user _ id», «sollest _ id» nelle etichette.

3. 2 Loghi

Formato: JSON; i campi obbligatori «ts», «level», «service», «env», «trace _ id», «span _ id», «msg».
PII - Maschera su agente (PAN, token, e-mail, ecc.).
Etichette di Loki: solo bassa cardinalità («app», «namespace», «level», «tenant»).

3. 3 Piste

OTTEL semantica: 'service. name`, `deployment. environment`, `db. system`, `http.`.
Sampling: i percorsi di destinazione p99 sono «always _ on »/tail-sampling, il resto è« part/ratio ».
Incorporare l'ID: scorrere «trace _ id/span _ id» nei fogli e nelle metriche (labels/fields).

4) Correlazione M-L-T (Metrics/Logs/Pista)

Dal grafico dell'alert (metrico) vengono i loghi filtrati sù trace _ id "per una pista specifica.
Dalla pista (span lento) viene richiesta una metrica di un backend specifico all'intervallo di span.
I pulsanti Drilldown nei pannelli sono «ai fogli» e «alle piste» con la sostituzione delle variabili («$ env», «$ service», «$ trace _ id»).

5) OpenTelemetry Raccoglitore: pipline di riferimento

yaml receivers:
otlp:
protocols: { http: {}, grpc: {} }
prometheus:
config:
scrape_configs:
- job_name: kube-nodes static_configs: [{ targets: ['kubelet:9100'] }]

processors:
batch: {}
memory_limiter: { check_interval: 1s, limit_mib: 512 }
attributes:
actions:
- key: deployment. environment value: ${ENV}
action: insert tail_sampling:
decision_wait: 5s policies:
- name: errors type: status_code status_code: { status_codes: [ERROR] }
- name: important-routes type: string_attribute string_attribute: { key: http. target, values: ["/payments","/login"] }
- name: probabilistic type: probabilistic probabilistic: { sampling_percentage: 10 }

exporters:
otlphttp/mimir: { endpoint: "https://mimir/api/v1/push" }
otlphttp/tempo: { endpoint: "https://tempo/api/traces" }
loki:
endpoint: https://loki/loki/api/v1/push labels:
attributes:
env: "deployment. environment"
service: "service. name"

service:
pipelines:
metrics: { receivers: [prometheus, otlp], processors: [memory_limiter, batch], exporters: [otlphttp/mimir] }
logs:   { receivers: [otlp], processors: [batch], exporters: [loki] }
traces:  { receivers: [otlp], processors: [memory_limiter, attributes, tail_sampling, batch], exporters: [otlphttp/tempo] }

6) Alerting: SLO e multi-burn

L'idea è che l'alertim non è CPU> 80%, bensì su Errore Budget.

Modelli PromQL:
promql
5-minute error rate err_ratio_5m =
sum(rate(http_requests_total{status=~"5.."}[5m])) /
sum(rate(http_requests_total[5m]))

Quick burn (1m window)
(err_ratio_1m / (1 - SLO)) > 14. 4

Slow burn (30m)
(err_ratio_30m / (1 - SLO)) > 2
Latenza (istogrammi):
promql latency_p95 =
histogram_quantile(0. 95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))

7) Dashboard: struttura delle cartelle

00 _ Overview - piattaforma: SLO, p95, 5xx%, capacity, incidenti attivi.
10 _ Services - RPS, p95/p99, errori, release (annotazioni).
20 _ Infra - K8s/nodi/store/rete, etcd, controller.
30_DB/Queues — PostgreSQL/Redis/Kafka/RabbitMQ.
40 _ Edge/DNS/CDN/WAF - ingress, LB, regole WAF.
50 _ Synthetic - farmacia e script headless.
60_Cost/FinOps - stoccaggio, richieste, caldo/freddo, prognosi.

Ogni pannello descrive, unità, proprietario, link runbook, drilldown.

8) Logi:
logql
API errors
{app="api", level="error"}     = "Exception"

Nginx 5xx in 5 minutes
{app="nginx"}      json      status=~"5.."      count_over_time([5m])

Extract Fields
{app="payments"}      json      code!=""      unwrap duration      avg()

9) Piste: TraceQL e trucchi

Trova lo span più lento:

{ service. name = "api" }      duration > 500ms
Sandwich «SQL lento in richiesta lenta»:

{ name = "HTTP GET /order" }      child. span. name = "SELECT" & child. duration > 50ms

10) Sintetica e farmacia

Blackbox-exporter: HTTP/TCP/TLS/DNS da regioni ≥3/ASN.
Headless: login/deposit script pianificato.
Quorum-alert: attivazione se le regioni ≥2 vedono un rifiuto.
Stato pagina - Update automatici + commenti manuali.

11) Conservazione e ritocco

Metriche: più caldo di 7-30 giorni (righe veloci), downsampling/recording rule, fredda di archiviazione oggetti (mesi).
Loghi: caldo 3-7 giorni, seguito da S3/GCS con indice (Loki chunk store/ELK ILM).
Piste: 3-7 giornì always _ on '+ conservazione prolungata per campionamenti (tail-sampled/scartoffie).

Raccomandazioni:
  • Rollover per dimensioni e tempo; budget per le richieste (quote/limiti).
  • Criteri separati per prod/stage e dati di protezione.

12) Multi-tenenza e accessibilità

Suddivide in tenant/namespace/space, indice-pattern e autorizzazioni.
Etichetta le risorse per il biling: «tenant», «service», «team».
Dashboard/alert importati - in spazi specifici comandi.

13) Sicurezza e compliance

TLS/mTLS da agenti a beckend, HMAC per health private.
RBAC per la lettura/scrittura, controllo di tutte le richieste e gli alert.
Redazione PII sul bordo; Vietare i segreti nei reparti; DSAR/Legal Hold.
Isolamento: singoli cluster/neimspace per domini sensibili.

14) FinOps: costo di osservazione

Riduciamo la cardinalità delle etichette e la logica in ingest (non nelle richieste).
Pista di sampling + bersaglio always-on per vie critiche.
Downsampling/recording rule per aggregazioni pesanti.
Archiviazione di un raro accesso a oggetti freddi.
Метрики: `storage_cost_gb_day`, `query_cost_hour`, `cost_per_rps`, `cost_per_9`.

15) CI/CD e test di osservabilità

Linting metriche/loghi in CI: divieto di «esplosione» della radicalità, controllo istogrammi/unità.
Test di osservabilità Contract: metriche/campi di logi obbligatori, 'trace _ id' in middleware.
Canary - Annotazioni di release su grafici, SLO-auto-rollback.

16) Casi: query rapide

Top endpoint per errori:
promql topk(10, sum by (route) (rate(http_requests_total{status=~"5.."}[5m])))
CPU throttling:
promql sum by (namespace, pod) (rate(container_cpu_cfs_throttled_seconds_total[5m])) > 0
Kafka lag:
promql max by (topic, group) (kafka_consumergroup_lag)

Da logi a piste (Loki → Tempo): passa «trace _ id» come linfa a Tempo UI/dashboard.

17) Qualità della pila: foglio di assegno

  • Diagrammi di metriche/fogli/piste e unità di misura coerenti.
  • 'trace _ id', nei fogli e nelle metriche, drilldown dei pannelli.
  • Multi-burn SLO-alert senza flapping (quorum/multi-window).
  • Downsampling, quote di query, limiti per passo/intervallo.
  • Le retenschn e le classi di conservazione sono documentate e applicate.
  • RBAC/controllo/Revisione PII sono inclusi.
  • Dashboard: proprietario, runbooks, ≤2 -3 schermate, risposta rapida.
  • FinOps-dashboard (volumi, valore, top-board).

18) Piano di implementazione (3 iterazioni)

1. MVP (2 settimane): Prometheus→Mimir, Loki, Tempo; OTel Collector; dashboard di base e SLO-alert; blackbox-test.
2. Scale (3-4 settimane): tail-sampling, downsampling, multi-regione ingest, RBAC/Space, FinOps-dashboard.
3. Pro (4 + settimane): auto-rollback SLO, headless-sintetico percorsi chiave, Legale Hold, portafoglio SLO e reporting.

19) Anti-pattern

«Belli grafici senza SLO», niente azione.
Etichette ad alta radicalità («user _ id», «sollest _ id») - Esplosione di memoria e costo.
Nessuna correlazione tra i loghi senza JSON e senza «trace _ id».
Alert per risorse invece dei sintomi - rumore e bruciatura on-call.
L'assenza di politiche di restrizione è un aumento incontrollato dei costi.

20) Mini FAQ

Cosa scegliere tra Loki o ELK?
ELK per la ricerca/sfaccettatura complessa Loki è più economico e veloce per questi scenari grep. Usano spesso l'ibrido.

Tutti hanno bisogno delle piste?
Sì, almeno nei percorsi chiave (login, checkout, payments) con tail-sampling - questo accelera drasticamente RCA.

Come si ricomincia da zero?
OtTel Collector di Mimir/Loki/Tempo ha SLO di base e blackbox-provini, poi dashboard e burn-alert.

Totale

La pila di osservabilità non è un insieme di strumenti separati, ma un sistema coerente: standard di dati uniformi, correlazione M-L-T-SLO-alerting e sintetico, sicurezza e . Fissare gli schemi, la disciplina delle etichette e delle retensioni, collegare OTEL, aggiungere drilldown e auto-rollback - e ottenere affidabilità gestita con un costo comprensibile.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Telegram
@Gamble_GC
Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.