KoderKoder.ai
PrezziEnterpriseIstruzionePer gli investitori
AccediInizia ora

Prodotto

PrezziEnterprisePer gli investitori

Risorse

ContattaciAssistenzaIstruzioneBlog

Note legali

Informativa sulla privacyTermini di utilizzoSicurezzaNorme di utilizzoSegnala un abuso

Social

LinkedInTwitter
Koder.ai
Lingua

© 2026 Koder.ai. Tutti i diritti riservati.

Home›Blog›Pacchetto iniziale di osservabilità in produzione per il monitoraggio dal giorno uno
12 set 2025·8 min

Pacchetto iniziale di osservabilità in produzione per il monitoraggio dal giorno uno

Pacchetto iniziale di osservabilità in produzione per il giorno uno: i log, le metriche e i trace minimi da aggiungere, più un semplice flusso di triage per segnalazioni “è lento”.

Pacchetto iniziale di osservabilità in produzione per il monitoraggio dal giorno uno

Cosa si rompe per primo quando una nuova app incontra utenti reali

La prima cosa che si rompe raramente è l'intera app. Di solito è un singolo passo che all'improvviso si sovraccarica, una query che andava bene nei test, o una dipendenza che comincia a dare timeout. Gli utenti reali portano varietà reale: telefoni più lenti, reti instabili, input strani e picchi di traffico nei momenti meno opportuni.

Quando qualcuno dice “è lento”, può significare cose molto diverse. La pagina può impiegare troppo a caricarsi, le interazioni possono laggare, una singola chiamata API può andare in timeout, i job in background possono accumularsi, o un servizio di terze parti può trascinare tutto giù.

Per questo servono segnali prima delle dashboard. Il giorno uno non ti servono grafici perfetti per ogni endpoint. Ti servono abbastanza log, metriche e trace per rispondere in fretta a una domanda: dove va il tempo?

C'è anche un rischio reale nel sovra-strumentare troppo presto. Troppi eventi creano rumore, costano soldi e possono persino rallentare l'app. Peggio ancora, i team smettono di fidarsi della telemetria perché sembra disordinata e incoerente.

Un obiettivo realistico per il giorno uno è semplice: quando ricevi un report “è lento”, devi poter trovare il passo lento in meno di 15 minuti. Dovresti essere in grado di dire se il collo di bottiglia è nel rendering client, nell'handler API e nelle sue dipendenze, nel database o nella cache, o in un worker in background o servizio esterno.

Esempio: un nuovo flusso di checkout sembra lento. Anche senza montagne di tooling, vuoi poter dire “il 95% del tempo è nelle chiamate al provider di pagamenti” oppure “la query del carrello sta scansionando troppe righe”. Se costruisci app velocemente con strumenti come Koder.ai, quella baseline del giorno uno conta ancora di più, perché la velocità di rilascio serve a poco se non riesci a fare debug rapidamente.

Log vs metriche vs trace in parole semplici

Un buon pacchetto iniziale di osservabilità in produzione usa tre diverse “viste” della stessa app, perché ognuna risponde a una domanda diversa.

I log raccontano la storia. Dicono cosa è successo per una richiesta, un utente o un job in background. Una riga di log può dire “payment failed for order 123” o “DB timeout after 2s”, più dettagli come request ID, user ID e il messaggio di errore. Quando qualcuno segnala un problema isolato, i log sono spesso il modo più veloce per confermare che è successo e chi ne è stato coinvolto.

Le metriche sono il tabellone. Sono numeri che puoi trendare e su cui impostare alert: rate di richieste, tasso di errori, percentili di latenza, CPU, profondità delle code. Le metriche ti dicono se qualcosa è raro o diffuso e se sta peggiorando. Se la latenza è salita per tutti alle 10:05, le metriche lo mostreranno.

I trace sono la mappa. Un trace segue una singola richiesta mentre attraversa il sistema (web -> API -> database -> terze parti). Mostra dove si spende il tempo, passo dopo passo. Questo è importante perché “è lento” quasi mai è un grande mistero: di solito è un singolo hop lento.

Durante un incidente, un flusso pratico assomiglia a questo:

  • Usa le metriche per confermare l'impatto (quanti utenti, quanto grave, quando è iniziato).
  • Usa i trace per trovare il passo più lento (un collo di bottiglia su cui intervenire).
  • Usa i log per spiegare il collo di bottiglia (errori specifici, input o casi limite).

Una regola semplice: se dopo pochi minuti non riesci a indicare un singolo collo di bottiglia, non ti servono più alert. Ti servono trace migliori e ID coerenti che colleghino trace e log.

Convenzioni del giorno uno che prevengono il caos dopo

La maggior parte degli incidenti “non riusciamo a trovarlo” non è causata da dati mancanti. Succede perché la stessa cosa viene registrata in modo diverso tra i servizi. Alcune convenzioni condivise sin dal giorno uno fanno collimare log, metriche e trace quando hai bisogno di risposte rapide.

Inizia scegliendo un nome servizio per ogni unità deployable e mantienilo stabile. Se “checkout-api” diventa “checkout” in metà delle dashboard, perdi storico e rompi gli alert. Fai lo stesso per le etichette d'ambiente. Scegli un piccolo set come prod e staging e usali ovunque.

Poi rendi ogni richiesta facile da seguire. Genera un request ID al bordo (API gateway, web server o primo handler) e trasportalo nelle chiamate HTTP, nelle code di messaggi e nei job in background. Se un ticket di supporto dice “era lento alle 10:42”, un singolo ID ti permette di estrarre i log e il trace esatti senza indovinare.

Un set di convenzioni che funziona bene il giorno uno:

  • Identity: nome del servizio, environment, versione (o SHA del build)
  • Correlazione: request ID propagato tra servizi e job
  • Tag core: route (o handler), method, status code e tenant/org ID se sei multi-tenant
  • Operazioni di tracing: nomina le operazioni con i nomi degli endpoint e dei job in background (non nomi di funzione casuali)
  • Coerenza: uno stile di naming e un'unità di tempo unica per le durate

Accordati sulle unità di tempo fin da subito. Scegli i millisecondi per la latenza API e i secondi per i job più lunghi, e mantienili. Le unità miste creano grafici che sembrano corretti ma raccontano la storia sbagliata.

Un esempio concreto: se ogni API registra duration_ms, route, status e request_id, allora un report come “checkout è lento per il tenant 418” diventa un filtro rapido, non un dibattito da dove partire.

Log minimi da aggiungere il giorno uno

Se puoi fare una sola cosa nel tuo pacchetto iniziale di osservabilità in produzione, rendi i log facili da cercare. Questo inizia con log strutturati (di solito JSON) e gli stessi campi in tutti i servizi. I log in testo libero vanno bene per lo sviluppo locale, ma diventano rumore quando hai traffico reale, retry e istanze multiple.

Una buona regola: registra quello che userai davvero durante un incidente. La maggior parte dei team deve rispondere a: Qual era la richiesta? Chi l'ha fatta? Dove ha fallito? Cosa ha toccato? Se una riga di log non aiuta con una di queste domande, probabilmente non dovrebbe esistere.

Per il giorno uno, mantieni un piccolo set coerente di campi così puoi filtrare e unire eventi tra i servizi:

  • Timestamp, level e identità del servizio (service name, version, environment)
  • Correlazione della richiesta (request_id, trace_id se ce l'hai)
  • Chi/dove (user_id o session_id, route, method)
  • Risultato (status code, duration_ms)
  • Contesto di deploy (region/instance, release o commit)

Quando avviene un errore, loggalo una sola volta, con contesto. Includi un tipo di errore (o codice), un messaggio breve, uno stack trace per gli errori server e la dipendenza a monte coinvolta (per esempio: postgres, payment provider, cache). Evita di ripetere lo stesso stack trace a ogni retry. Invece, allega il request_id così puoi seguire la catena.

Esempio: un utente segnala che non riesce a salvare le impostazioni. Una sola ricerca per request_id mostra un 500 su PATCH /settings, poi un timeout downstream verso Postgres con duration_ms. Non ti servivano i payload completi, solo la route, user/session e il nome della dipendenza.

La privacy è parte del logging, non un compito futuro. Non registrare password, token, header di auth, corpi di richiesta completi o PII sensibili. Se devi identificare un utente, registra un ID stabile (o un valore hashato) invece di email o numeri di telefono.

Se costruisci app su Koder.ai (React, Go, Flutter), vale la pena integrare questi campi in ogni servizio generato fin dall'inizio così non finisci per “sistemare i log” durante il primo incidente.

Metriche minime che catturano la maggior parte dei problemi in produzione

Rendilo ripetibile per ogni app
Invita il tuo team su Koder.ai e concordate i campi e le etichette del giorno uno prima del primo incidente.
Inizia gratis

Un buon pacchetto iniziale di osservabilità in produzione parte con un piccolo set di metriche che rispondono a una domanda veloce: il sistema è sano ora, e se no, dove fa male?

I segnali d'oro

La maggior parte dei problemi in produzione si manifesta con quattro “segnali d'oro”: latenza (risposte lente), traffico (carico cambiato), errori (fallimenti) e saturazione (una risorsa condivisa è al massimo). Se vedi questi quattro segnali per le parti principali della tua app, puoi triageare la maggior parte degli incidenti senza indovinare.

La latenza va fatta vedere con percentili, non con medie. Traccia p50, p95 e p99 così vedi quando un piccolo gruppo di utenti ha problemi. Per il traffico, inizia con richieste al secondo (o job al minuto per i worker). Per gli errori, separa 4xx e 5xx: un aumento dei 4xx spesso indica comportamento client o cambi di validazione; un aumento dei 5xx punta alla tua app o alle sue dipendenze. La saturazione è il segnale “stiamo esaurendo qualcosa” (CPU, memoria, connessioni DB, backlog della coda).

Checklist di metriche per componente

Un set minimo che copre la maggior parte delle app:

  • HTTP/API: richieste al secondo, latenza p50/p95/p99, tasso 4xx, tasso 5xx
  • Database: latenza query (almeno p95), uso pool di connessioni (in-use vs max), timeout, conteggio query lente
  • Workers/code: profondità della coda, runtime job p95, retry, conteggio dead-letter (o job falliti)
  • Risorse: % CPU, uso memoria, spazio disco (e I/O se ti crea problemi), restart dei container
  • Salute del deploy: versione corrente, tasso di errori dopo il deploy, loop di restart (spesso il primo segnale di un release fallato)

Un esempio concreto: se gli utenti segnalano “è lento” e la p95 API sale mentre il traffico rimane stabile, controlla la saturazione. Se l'uso del pool DB è vicino al massimo e i timeout aumentano, hai probabilmente trovato un collo di bottiglia. Se il DB sembra a posto ma la profondità delle code cresce rapidamente, il lavoro in background potrebbe consumare risorse condivise.

Se costruisci app su Koder.ai, tratta questa checklist come parte della definizione di fatto del giorno uno. È più facile aggiungere queste metriche quando l'app è piccola che durante il primo incidente reale.

Tracing minimo che rende “è lento” diagnostico

Se un utente dice “è lento”, i log spesso ti dicono cosa è successo e le metriche quanto spesso. I trace ti dicono dove è andato il tempo dentro una singola richiesta. Quella singola timeline trasforma un reclamo vago in una correzione chiara.

Inizia dal lato server. Strumenta le richieste in ingresso al bordo della tua app (il primo handler che riceve la richiesta) in modo che ogni richiesta possa generare un trace. Il tracing lato client può aspettare.

Un buon trace del giorno uno ha span che mappano alle parti che di solito causano lentezza:

  • Span dell'handler della richiesta per l'intera richiesta
  • Span di chiamata al database per ogni query o transazione
  • Span di chiamata alla cache (get/set) quando usi una cache
  • Span di chiamata HTTP esterna per ogni dipendenza che chiami
  • Span di job in background quando la richiesta mette in coda lavoro di cui dipende

Per rendere i trace ricercabili e comparabili, cattura alcuni attributi chiave e mantienili coerenti tra i servizi.

Per lo span della richiesta in ingresso, registra la route (usa un template come /orders/:id, non l'URL completo), il metodo HTTP, lo status code e la latenza. Per gli span DB, registra il sistema DB (PostgreSQL, MySQL), il tipo di operazione (select, update) e il nome della tabella se è facile da aggiungere. Per le chiamate esterne, registra il nome della dipendenza (payments, email, maps), l'host target e lo status.

Il sampling conta il giorno uno, altrimenti costi e rumore crescono in fretta. Usa una regola semplice head-based: traccia il 100% degli errori e delle richieste lente (se il tuo SDK lo supporta), e campiona una piccola percentuale del traffico normale (come 1–10%). Inizia più alto se il traffico è basso, poi riduci col crescere dell'uso.

Cosa significa “buono”: un trace dove puoi leggere la storia dall'inizio alla fine. Esempio: GET /checkout ha impiegato 2.4s, il DB ha speso 120ms, la cache 10ms e una chiamata di pagamento esterna ha preso 2.1s con un retry. Ora sai che il problema è la dipendenza, non il tuo codice. Questo è il nucleo di un pacchetto iniziale di osservabilità in produzione.

Un flusso di triage semplice per segnalazioni “è lento”

Quando qualcuno dice “è lento”, la vittoria più rapida è trasformare quella sensazione vaga in poche domande concrete. Questo flusso di triage del pacchetto iniziale funziona anche se la tua app è appena nata.

Il triage in 5 passaggi

Inizia restringendo il problema, poi segui le prove in ordine. Non saltare subito al database.

  1. Conferma l'ambito. È un solo utente, un account cliente, una regione o tutti? Chiedi anche: succede su Wi‑Fi e su rete mobile, e su più browser/dispositivi?
  2. Controlla cosa è cambiato prima. Il volume di richieste è aumentato, il tasso di errori è salito o è salita solo la latenza? Un aumento di traffico spesso causa accodamento; un aumento degli errori punta spesso a una dipendenza rotta.
  3. Dividi la lentezza per route o operazione. Guarda la latenza p95 per endpoint (o per tipo di job) e trova il peggior colpevole. Se una sola route è lenta, concentrati su quella. Se tutte le route sono più lente, pensa a dipendenze condivise o capacità.
  4. Apri un trace per il percorso lento. Prendi un trace di una richiesta lenta e ordina gli span per durata. L'obiettivo è una frase: “La maggior parte del tempo è in X.”
  5. Valida le dipendenze e decidi un rollback. Controlla la saturazione del DB, query lente, hit rate della cache e tempi di risposta di terze parti. Se la lentezza è iniziata subito dopo un deploy o una modifica di configurazione, il rollback è spesso la mossa più sicura.

Dopo aver stabilizzato, fai un piccolo miglioramento: annota cosa è successo e aggiungi un segnale mancante. Per esempio, se non riuscivi a dire se la lentezza era solo in una regione, aggiungi un tag di regione alle metriche di latenza. Se hai visto uno span DB lungo senza sapere quale query, aggiungi etichette di query con attenzione, o un campo “query name”.

Un esempio veloce: se la p95 di checkout sale da 400 ms a 3 s e i trace mostrano uno span di 2.4 s nella chiamata di pagamento, puoi smettere di discutere sul codice e concentrarti sul provider, sui retry e sui timeout.

Controlli rapidi che puoi fare in 5 minuti

Distribuisci e verifica velocemente
Dall'idea a un'app ospitata, poi verifica p95 di latenza e tasso di errori subito dopo il rilascio.
Distribuisci app

Quando qualcuno dice “è lento”, puoi perdere un'ora solo per capire cosa intende. Un pacchetto iniziale di osservabilità in produzione è utile solo se ti aiuta a restringere il problema velocemente.

Inizia con tre domande chiarificatrici:

  • Chi è interessato (un utente, un segmento cliente, tutti)?
  • Quale azione esatta è lenta (caricamento pagina, ricerca, checkout, login)?
  • Da quando è iniziato (minuti fa, dopo un deploy, da stamattina)?

Poi guarda qualche numero che di solito ti indica dove andare dopo. Non cercare la dashboard perfetta. Vuoi solo segnali “peggiori del normale”.

  • Tasso di errori corrente (i picchi spesso vengono percepiti come lentezza dagli utenti)
  • Latenza p95 per l'endpoint interessato (non la media)
  • Saturazione: CPU, memoria, connessioni DB o profondità della coda (scegli quella che la tua app raggiunge prima)

Se la p95 è salita ma gli errori sono stabili, apri un trace per la route più lenta negli ultimi 15 minuti. Un singolo trace spesso mostra se il tempo è speso nel database, in una API esterna o in attese su lock.

Poi fai una ricerca nei log. Se hai un report utente specifico, cerca per request_id (o correlation ID) e leggi la timeline. Se non ce l'hai, cerca il messaggio di errore più comune nella stessa finestra temporale e verifica se coincide con la lentezza.

Infine, decidi se mitigare ora o approfondire. Se gli utenti sono bloccati e la saturazione è alta, una mitigazione rapida (scalare, rollback o disabilitare una feature non essenziale) può comprare tempo. Se l'impatto è ridotto e il sistema è stabile, continua l'indagine con trace e slow query log.

Esempio: diagnosticare un checkout lento senza indovinare

Poche ore dopo un rilascio, arrivano ticket di supporto: “Il checkout impiega 20–30 secondi.” Nessuno riesce a riprodurlo localmente, così iniziano le ipotesi. Qui il pacchetto iniziale ripaga.

Prima vai sulle metriche e confermi il sintomo. Il grafico della latenza p95 per le richieste HTTP mostra un picco chiaro, ma solo per POST /checkout. Altre route sono normali e il tasso di errori è stabile. Questo restringe il problema da “tutto il sito è lento” a “un endpoint è peggiorato dopo il rilascio”.

Poi apri un trace per una richiesta lenta POST /checkout. Il waterfall del trace rende l'autore del problema ovvio. Due esiti comuni:

  • Lo span PaymentProvider.charge impiega 18 secondi, con la maggior parte del tempo in attesa.
  • Lo span DB: insert order è lento, mostrando una lunga attesa prima che la query ritorni.

Ora valida con i log, usando lo stesso request ID del trace (o il trace ID se lo memorizzi nei log). Nei log di quella richiesta vedi avvisi ripetuti come “payment timeout reached” o “context deadline exceeded”, più retry aggiunti nella nuova release. Se è la strada del database, i log possono mostrare messaggi di lock o la query lenta che è stata registrata sopra la soglia.

Con tutti e tre i segnali allineati, la correzione diventa semplice:

  • Roll back alla release precedente per fermare l'impatto.
  • Aggiungi un timeout esplicito per la chiamata di pagamento (e limita i retry).
  • Aggiungi una metrica per la latenza della dipendenza, per esempio p95 payment provider duration e p95 DB query duration.

La chiave è che non hai fatto caccia. Le metriche hanno indicato l'endpoint, i trace il passo lento e i log hanno confermato la modalità di errore con la richiesta esatta in mano.

Errori comuni che fanno perdere tempo negli incidenti

Mantieni il controllo con l'export del codice
Esporta il codice sorgente in qualsiasi momento e mantieni le convenzioni di osservabilità mentre l'app cresce.
Inizia a costruire

La maggior parte del tempo di incidente si perde per gap evitabili: i dati ci sono, ma sono rumorosi, rischiosi o manca il dettaglio che ti collega sintomo e causa. Un pacchetto iniziale di osservabilità in produzione aiuta solo se resta utilizzabile sotto stress.

Una trappola comune è loggare troppo, specialmente i corpi delle richieste grezzi. Sembra utile finché non paghi enormi storage, le ricerche diventano lente e catturi accidentalmente password, token o dati personali. Preferisci campi strutturati (route, status code, latency, request_id) e logga solo piccoli frammenti di input esplicitamente permessi.

Un altro spreco di tempo è avere metriche apparentemente dettagliate ma impossibili da aggregare. Label ad alta cardinalità come user ID completi, email o numeri d'ordine unici possono esplodere il numero di serie metriche e rendere le dashboard inaffidabili. Usa label grossolane (route name, metodo HTTP, classe di status, nome dipendenza) e tieni le informazioni utente-specifiche nei log.

Errori che bloccano ripetutamente diagnosi rapide:

  • Guardare solo le medie. Le medie nascondono il dolore reale; controlla p95 e p99 quando gli utenti dicono “è lento”.
  • Trace senza contesto. Se gli span non hanno nomi di route e nomi chiari delle dipendenze, un trace è un'immagine senza etichette.
  • Nessun marker di release. Se non vedi quando è cambiata una versione, indovini se un deploy ha causato il problema.
  • Alert senza proprietario. Quando un alert scatta e nessuno sa cosa fare, diventa rumore e poi ignorato.
  • Log non ricercabili. Log in testo libero senza chiavi coerenti trasformano ogni incidente in un grep manuale.

Un piccolo esempio pratico: se la p95 di checkout sale da 800ms a 4s, vuoi rispondere in pochi minuti a due domande: è iniziato subito dopo un deploy, e il tempo è speso nella tua app o in una dipendenza (DB, payment provider, cache)? Con percentili, un tag di release e trace con route e nomi dipendenza chiari, ci arrivi rapidamente. Senza, bruci tempo in discussioni e ipotesi.

Prossimi passi: rendilo ripetibile per ogni nuova app

Il vero vantaggio è la coerenza. Un pacchetto iniziale di osservabilità aiuta solo se ogni nuovo servizio viene spedito con le stesse basi, nominate nello stesso modo e facili da trovare quando qualcosa si rompe.

Trasforma le scelte del giorno uno in un template breve che il team riusa. Tienilo piccolo ma specifico.

  • Genera un request ID per ogni richiesta in ingresso e portalo nei log e nei trace.
  • Registra i pochi eventi che servono sempre: inizio/fine richiesta, errori (con tipo chiaro) e richieste lente sopra una soglia.
  • Traccia un pugno di metriche golden: traffico, tasso di errori, latenza (p50 e p95) e un segnale di saturazione (CPU, memoria, pool DB o profondità coda).
  • Aggiungi trace di base per le route chiave e le dipendenze principali (DB e una API esterna).
  • Allegagli etichette di release/version a log, metriche e trace così puoi rispondere: “è iniziato dopo il deploy?”

Crea una vista “home” che chiunque possa aprire durante un incidente. Uno schermo dovrebbe mostrare richieste al minuto, tasso di errori, p95 di latenza e la tua metrica di saturazione principale, con filtri per environment e version.

Mantieni l'alerting minimo all'inizio. Due alert ne coprono molti: un picco di errori su una route chiave e un picco di p95 sulla stessa route. Se ne aggiungi altri, assicurati che ciascuno abbia un'azione chiara.

Infine, imposta una review mensile ricorrente. Rimuovi alert rumorosi, stringi la nomenclatura e aggiungi un segnale mancante che avrebbe fatto risparmiare tempo nell'ultimo incidente.

Per integrare questo nel processo di build, aggiungi una “porta di osservabilità” alla checklist di rilascio: niente deploy senza request ID, tag di versione, la vista home e i due alert di base. Se spedisci con Koder.ai, puoi definire questi segnali del giorno uno in modalità pianificazione prima del deploy, poi iterare in sicurezza usando snapshot e rollback quando devi adattare rapidamente.

Domande frequenti

What usually breaks first when real users hit a new app?

Inizia dal primo punto dove gli utenti entrano nel sistema: il web server, l'API gateway o il tuo primo handler.

  • Aggiungi un request_id e trasportalo in ogni chiamata interna.
  • Registra route, method, status e duration_ms per ogni richiesta.
  • Monitora la latenza p95 e il tasso di 5xx per route.

Questo di solito ti porta rapidamente a un endpoint specifico e a una finestra temporale precisa.

What’s a realistic day-one observability goal?

Punta a questo obiettivo di base: sii in grado di identificare il passo lento in meno di 15 minuti.

Non servono dashboard perfette il primo giorno. Ti servono segnali sufficienti per rispondere a:

  • È lato client, lato API, database/cache, job in background o una dipendenza esterna?
  • Quale route o tipo di job è coinvolto?
  • È iniziato dopo un deploy o una modifica di configurazione?
When should I use logs vs metrics vs traces?

Usali insieme, perché ciascuno risponde a una domanda diversa:

  • Metriche: “È diffuso e sta peggiorando?” (tassi, percentili, saturazione)
  • Trace: “Dove è andato il tempo dentro questa richiesta?” (salto lento)
  • Log: “Cosa è successo esattamente per questo utente/richiesta?” (errori, input, contesto)

Durante un incidente: conferma l'impatto con le metriche, trova il collo di bottiglia con i trace, spiegalo con i log.

What naming and tagging conventions prevent chaos later?

Scegli un piccolo insieme di convenzioni e applicale ovunque:

What’s the minimum logging I should add on day one?

Preferisci log strutturati (spesso JSON) con le stesse chiavi ovunque.

Campi minimi che ripagano subito:

What are the minimum metrics that catch most production issues?

Inizia con le quattro “golden signals” per ogni componente principale:

  • Latenza: p50/p95/p99 (evita le medie)
  • Traffico: richieste/sec (o job/min)
  • Errori: tassi 4xx vs 5xx
  • Saturazione: un limite di risorsa (CPU, memoria, connessioni DB, profondità delle code)

Poi aggiungi una piccola checklist per componente:

What’s the minimum tracing setup that makes “it’s slow” debuggable?

Strumenta prima il lato server in modo che ogni richiesta in ingresso possa produrre un trace.

Un trace utile del giorno uno include span per:

  • L'handler della richiesta
  • Ogni query/transazione al database
  • Operazioni di cache get/set (se usata)
  • Ogni chiamata HTTP esterna
  • L'enqueue o l'attesa di lavoro in background

Rendi gli span ricercabili con attributi coerenti come (in forma template), e un nome di dipendenza chiaro (per esempio , , ).

How should I handle trace sampling on day one?

Una semplice impostazione sicura di default è:

  • Trace il 100% degli errori e le richieste lente (se supportato)
  • Campiona 1–10% del traffico normale

Inizia con percentuali più alte quando il traffico è basso, poi riduci col crescere dell'uso.

L'obiettivo è mantenere i trace utili senza far esplodere costi o rumore, e avere comunque esempi del percorso lento per diagnosticarlo.

What’s a good triage flow when someone reports “it’s slow”?

Usa un flusso ripetibile che segua le prove:

  1. Scope: chi è interessato (un utente/tenant/regione vs tutti)?
  2. Change: è cambiato prima il traffico, gli errori o la latenza?
  3. Route/job: quale endpoint o tipo di job ha il p95 peggiore?
What common observability mistakes waste the most incident time?

Questi errori consumano tempo (e talvolta soldi):

  • Loggare dati sensibili (password, token, corpi completi) invece di ID sicuri
  • Guardare solo le medie invece di p95/p99
  • (ID utente completi, email, numeri ordine) che fanno esplodere le serie
Indice
Cosa si rompe per primo quando una nuova app incontra utenti realiLog vs metriche vs trace in parole sempliciConvenzioni del giorno uno che prevengono il caos dopoLog minimi da aggiungere il giorno unoMetriche minime che catturano la maggior parte dei problemi in produzioneTracing minimo che rende “è lento” diagnosticoUn flusso di triage semplice per segnalazioni “è lento”Controlli rapidi che puoi fare in 5 minutiEsempio: diagnosticare un checkout lento senza indovinareErrori comuni che fanno perdere tempo negli incidentiProssimi passi: rendilo ripetibile per ogni nuova appDomande frequenti
Condividi
Koder.ai
Build your own app with Koder today!

The best way to understand the power of Koder is to see it for yourself.

Start FreeBook a Demo
  • service_name stabile, environment (come prod/staging) e version
  • Un request_id generato al bordo e propagato in chiamate e job
  • Tag coerenti: route, method, status_code e tenant_id (se multi-tenant)
  • Un'unità di tempo unica per le durate (per esempio duration_ms)
  • L'obiettivo è che un unico filtro funzioni attraverso i servizi invece di ricominciare ogni volta.

  • timestamp, level, service_name, environment, version
  • request_id (e trace_id se disponibile)
  • route, method, status_code, duration_ms
  • user_id o session_id (un ID stabile, non un'email)
  • Registra gli errori una sola volta con contesto (tipo/codice dell'errore + messaggio + nome della dipendenza). Evita di ripetere lo stesso stack trace ad ogni retry.

    • HTTP: p95 latenza + tasso 5xx per route
    • DB: p95 latenza query + uso pool + timeout
    • Worker: profondità code + contatori retry/falliti
    • Deploy: etichetta di versione e tasso di errori post-deploy
    route
    status_code
    payments
    postgres
    cache
  • Trace: apri un trace lento e identifica lo span più lungo.
  • Validate: controlla saturazione/pool DB, profondità code e latenza dipendenze; rollback se è iniziato dopo un deploy.
  • Annota il segnale mancante che avrebbe reso tutto più veloce da diagnosticare e aggiungilo dopo.

    Label metriche ad alta cardinalità
  • Trace senza contesto (nessun template di route, nomi dipendenza poco chiari)
  • Nessun marcatore di release/versione, quindi non si sa se un deploy ha scatenato il problema
  • Mantieni le cose semplici: ID stabili, percentili, nomi di dipendenze chiari e tag di versione ovunque.