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›Come costruire un'app web che monitora con precisione la conformità SLA
29 apr 2025·8 min

Come costruire un'app web che monitora con precisione la conformità SLA

Impara a progettare e costruire un'app web che monitora la conformità SLA: definisci metriche, raccogli eventi, calcola risultati, allerta le violazioni e genera report difendibili.

Come costruire un'app web che monitora con precisione la conformità SLA

Definire la conformità SLA e cosa stai costruendo

Conformità SLA significa rispettare le promesse misurabili in un Service Level Agreement (SLA)—un contratto tra fornitore e cliente. Il compito della tua app è rispondere a una domanda semplice con prove: Abbiamo rispettato ciò che abbiamo promesso, per questo cliente, in questo periodo?

È utile separare tre termini correlati:

  • SLI (Service Level Indicator): la misura grezza (per esempio, “percentuale di check riusciti”, “tempo alla prima risposta”, o “tempo per ripristinare il servizio”).
  • SLO (Service Level Objective): un obiettivo interno per un SLI (spesso più rigoroso dell'SLA). Esempio: “obiettivo 99,95% di uptime.”
  • SLA: l'impegno concordato esternamente, spesso legato a crediti o penalità. Esempio: “99,9% di uptime mensile.”

Metriche SLA comuni da tracciare

La maggior parte delle app per il monitoraggio SLA parte da un piccolo insieme di metriche che si mappano ai dati operativi reali:

  • Uptime / disponibilità: percentuale di tempo in cui il servizio è “up” durante il periodo di rendiconto.
  • Tempo di risposta (supporto): tempo dalla creazione del ticket cliente alla prima risposta umana.
  • Tempo di risoluzione: tempo dalla creazione dell'incidente/ticket alla chiusura o al ripristino.
  • Finestre di disponibilità: regole come “conta solo orario d'ufficio”, “escludi manutenzioni programmate” o “misura solo dalle 08:00 alle 18:00 nel fuso orario del cliente”.

Chi usa l'app—e perché

Utenti diversi vogliono la stessa verità, presentata in modo differente:

  • Ops/SRE: rilevare le violazioni presto e validare le timeline degli incidenti.
  • Team di supporto: monitorare gli impegni di risposta e risoluzione per cliente.
  • Manager: vedere trend, rischi e se i team rispettano gli obiettivi in modo consistente.
  • Clienti: visualizzare report trasparenti (e talvolta una pagina di stato) che mostrano cosa è successo.

Cosa stai costruendo (e cosa non)

Questo prodotto riguarda tracciamento, prova e reportistica: raccogliere segnali, applicare regole concordate e generare risultati adatti ad audit. Non garantisce prestazioni; le misura—con precisione, coerenza e in modo difendibile in seguito.

Requisiti: metriche, regole e chi ha bisogno di cosa

Prima di progettare tabelle o scrivere codice, chiarisci in modo rigoroso cosa significa “conformità” per la tua attività. La maggior parte dei problemi di tracking SLA non è tecnica—sono problemi di requisiti.

Raccogli gli input (e non fare affidamento sulla memoria)

Inizia raccogliendo le fonti di verità:

  • Contratti cliente e MSA (inclusi allegati e addendum sul ticketing)
  • Tier di servizio (es. Basic vs Premium) e mappatura clienti per tier
  • Orari di lavoro e fusi orari per cliente (o per servizio)
  • Esclusioni e regole speciali: finestre di manutenzione programmate, forza maggiore, ritardi causati dal cliente, dipendenze di terze parti, periodi di grazia

Scrivi queste regole esplicitamente. Se una regola non si può enunciare chiaramente, non può essere calcolata in modo affidabile.

Decidi cosa deve essere tracciato

Elenca le “cose” del mondo reale che possono influenzare un numero SLA:

  • Incidenti/interruzioni (inizio, fine, severità, servizi impattati)
  • Richieste/ticket (creazione, prima risposta, risoluzione, in attesa del cliente)
  • Manutenzione (programmata vs emergenza; se conta o meno contro la disponibilità)
  • Interruzioni parziali (degradazione delle prestazioni) e se vengono conteggiate

Identifica anche chi ha bisogno di cosa: il support vuole rischio di violazione in tempo reale, i manager riepiloghi settimanali, i clienti riepiloghi semplici (spesso per una status page).

Scegli 1–3 metriche per la prima versione

Mantieni lo scope piccolo. Scegli il minimo necessario per dimostrare che il sistema funziona end-to-end, ad esempio:

  • % disponibilità per servizio per mese
  • Tempo di risposta all'incidente (prima risposta umana) durante l'orario di lavoro
  • Tempo di risoluzione per incidenti di severità 1

Checklist di requisiti e criteri di successo

Crea una checklist di una pagina che puoi testare più tardi:

  • Definizioni metriche chiare (timestamps di inizio/fine, time zone, arrotondamento)
  • Regole di inclusione/esclusione (manutenzione, attesa cliente)
  • Soglie target per tier (es. 99,9%, risposta 1 ora)
  • Requisiti di output (report cliente, dashboard interno, esportazione)

Il successo è quando due persone calcolano lo stesso mese di esempio manualmente e la tua app corrisponde esattamente.

Modello dati per SLA, servizi, incidenti ed eventi

Un tracker SLA corretto parte da un modello dati che può spiegare perché un numero è quello che è. Se non puoi ricondurre una percentuale mensile alle esatte regole ed eventi usati, affronterai controversie con i clienti e incertezza interna.

Entità principali (mantienile semplici e esplicite)

Al minimo, modella:

  • Customer (tenant/account): possiede servizi, calendari, contatti e preferenze di report.
  • Service: ciò che viene misurato (API, web app, componente regionale). Includi una relazione parent/child opzionale se aggregherai componenti.
  • Plan: involucro commerciale (es. “Gold”), usato per allegare un set di policy SLA di default.
  • SLA policy: regole misurabili: obiettivo uptime, obiettivo tempo di risposta, finestra di misura e cosa è “escluso”.
  • Incident: raggruppamento a livello umano (titolo, severità, timeline) che fa riferimento agli eventi sottostanti.
  • Event: fatti immutabili (cambi di stato, segnali di monitoring, acknowledgements) che guidano i calcoli.

Una relazione utile: customer → service → SLA policy (eventualmente via plan). Incidenti ed eventi referenziano servizio e cliente.

Schema minimo per il tracciamento temporale

I bug legati al tempo sono la causa #1 di errori nei calcoli SLA. Conserva:

  • occurred_at come UTC (timestamp con semantica di fuso)
  • received_at (quando il sistema lo ha visto)
  • source (nome del monitor, integrazione, manuale)
  • external_id (per deduplicare retry)
  • payload (JSON grezzo per debug futuro)

Conserva anche customer.timezone (stringa IANA tipo America/New_York) per la visualizzazione e la logica di “orari di lavoro”, ma non usarla per riscrivere il tempo dell'evento.

Orari di lavoro e festività

Se gli SLA di risposta mettono in pausa il conteggio fuori orario, modella i calendari esplicitamente:

  • working_hours per cliente (o per regione/servizio): giorno della settimana + orari di inizio/fine
  • holiday_calendar collegato a una regione o cliente, con intervalli di date e etichette

Mantieni le regole guidate dai dati così ops può aggiornare una festività senza deploy.

Auditabilità: raw vs calcolato

Conserva eventi grezzi in una tabella append-only e i risultati calcolati separatamente (es. sla_period_result). Ogni riga risultato dovrebbe includere: confini del periodo, versione degli input (versione policy + versione motore) e riferimenti agli ID evento usati. Questo rende la ricalcolazione sicura e fornisce una traccia di audit quando i clienti chiedono “Quali minuti di outage avete conteggiato?”.

Ingestione eventi: come i dati entrano nella tua app

I numeri SLA sono affidabili quanto gli eventi che ingerisci. L'obiettivo è semplice: catturare ogni cambiamento significativo (outage iniziato, incidente acknowledged, servizio ripristinato) con timestamp coerenti e abbastanza contesto per calcolare la conformità in seguito.

Sorgenti eventi comuni

La maggior parte dei team aggrega da sistemi misti:

  • Ticketing / strumenti incident (Jira Service Management, ServiceNow, Zendesk): timestamps di creato/acknowledged/resolved, cambi di priorità, cambi assegnatario.
  • Tool di monitoring (Pingdom, Datadog, CloudWatch, Prometheus Alertmanager): segnali up/down, alert fired/cleared, risultati check sintetici.
  • Log infrastruttura e applicazione: eventi di deploy, picchi di errori, fallimenti health check (utili quando il monitoring è rumoroso o mancante).
  • Inserimenti manuali: una piccola UI per “outage verificato dal business start/end” o “manutenzione iniziata” quando l'automazione non può sapere la verità.

Opzioni di ingestione (e quando usarle)

Webhooks sono generalmente la scelta migliore per accuratezza in tempo reale e minor carico: il sistema sorgente spinge eventi al tuo endpoint.

Polling è un buon fallback quando i webhooks non sono disponibili: la tua app recupera periodicamente le modifiche dal cursore. Ti serviranno gestione rate-limit e logica “since” accurata.

Import CSV aiuta con backfill e migrazioni. Trattalo come un percorso di ingestione di prima classe così puoi rielaborare periodi storici senza hacks.

Un formato evento raccomandato (con idempotenza)

Normalizza tutto in un unico “evento” interno, anche se i payload upstream differiscono:

  • event_id (obbligatorio): univoco e stabile across retry. Preferisci il GUID sorgente; altrimenti genera un hash deterministico.
  • source (obbligatorio): es. datadog, servicenow, manual.
  • event_type (obbligatorio): es. incident_opened, incident_acknowledged, service_down, service_up.
  • occurred_at (obbligatorio): quando l'evento è successo (non quando l'hai ricevuto), con fuso orario.
  • received_at (sistema): quando la tua app l'ha ingerito.
  • service_id (obbligatorio): il servizio rilevante per l'SLA.
  • incident_id (opzionale ma raccomandato): collega più eventi a un incidente.
  • attributes (opzionale): priority, region, customer segment, ecc.

Conserva event_id con una constraint unica per rendere l'ingestione idempotente: i retry non creeranno duplicati.

Regole di validazione che prevengono dati sporchi

Rifiuta o metti in quarantena eventi che:

  • Hanno timestamp mancanti/invalidi, o occurred_at molto nel futuro.
  • Non mappano a un service_id noto (o richiedi un workflow esplicito “unmapped”).
  • Duplicano un event_id esistente.
  • Arrivano fuori ordine in modo da rompere le tue regole (conservali ma marca come “needs review” invece di sovrascrivere silenziosamente).

Questa disciplina evita discussioni sui report SLA più avanti—perché potrai indicare input puliti e tracciabili.

Motore di calcolo SLA: trasformare eventi in conformità

Il motore di calcolo è dove gli “eventi grezzi” diventano esiti SLA che puoi difendere. La chiave è trattarlo come contabilità: regole deterministiche, input chiari e una traccia riproducibile.

Parti da una timeline normalizzata

Converti tutto in un unico stream ordinato per incidente (o per impatto su servizio):

  • timestamps (UTC) per: incident started, acknowledged/first response, mitigated, resolved, reopened
  • cambi di stato: paused/unpaused, customer-waiting, maintenance window active
  • scope: quali servizio/i e cliente/i sono impattati e con quale severità

Da questa timeline, calcola durate sommando intervalli, non sottraendo due timestamp a caso.

Time-to-first-response (TTFR) e time-to-resolution (TTR)

Definisci TTFR come il tempo trascorso “addebitabile” tra incident_start e first_agent_response (o acknowledged, a seconda della formulazione dell'SLA). Definisci TTR come il tempo trascorso “addebitabile” tra incident_start e resolved.

“Addebitabile” significa rimuovere intervalli che non dovrebbero contare:

  • fuori orario di lavoro (per SLA limitati all'orario)
  • pause esplicite (es. “in attesa del cliente”)
  • esclusioni come manutenzione programmata o ritardi causati dal cliente

Dettaglio di implementazione: memorizza una funzione calendario (orari di lavoro, festività) e una funzione regola che prende una timeline e restituisce gli intervalli fatturabili.

Outage parziali e incidenti multi-servizio

Decidi in anticipo se calcoli:

  • SLA per servizio (consigliato): un incidente può produrre più record di impatto servizio, ciascuno con proprio TTFR/TTR
  • SLA per cliente: lo stesso outage può impattare solo una sottoinsieme di tenant

Per outage parziali, pondera per impatto solo se il contratto lo richiede; altrimenti tratta “degradato” come categoria di violazione separata.

Tracciabilità: conserva input, output e replays

Ogni calcolo deve essere riproducibile. Persisti:

  • gli esatti eventi usati (con id, timestamp e source)
  • gli intervalli derivati (cosa è stato escluso e perché)
  • i risultati finali (TTFR, TTR, flag di violazione e versione della regola)

Quando le regole cambiano, puoi ricalcolare per versione senza riscrivere la storia—cruciale per audit e dispute.

Logica di report: periodi, disponibilità e casi limite

Rendi i report difendibili
Genera report mensili difendibili con input e versioni tracciabili.
Crea report

Il reporting è il punto in cui il monitoraggio SLA guadagna (o perde) fiducia. La tua app deve chiarire qual è l'intervallo di tempo misurato, quali minuti contano e come sono stati derivati i numeri finali.

Periodi: calendario, fatturazione e finestre rolling

Supporta i periodi di rendiconto che i clienti realmente usano:

  • Mensile/trimestrale di calendario (es. 1–31 marzo)
  • Cicli di fatturazione (es. 15–14, allineati alle fatture)
  • Finestre rolling (es. “ultimi 30 giorni” aggiornati giornalmente)

Conserva i periodi come timestamp espliciti di inizio/fine (non “mese = 3”) così puoi rielaborare calcoli e spiegare i risultati.

Disponibilità: minuti totali vs minuti eleggibili

Una fonte frequente di confusione è se il denominatore sia l'intero periodo o solo il tempo “eleggibile”.

Definisci due valori per periodo:

  • Eligible minutes: minuti che contano per l'SLA (spesso esclude manutenzioni programmate, outage causati dal cliente o orari fuori supporto)
  • Downtime minutes: minuti eleggibili in cui il servizio è considerato down

Poi calcola:

availability_percent = 100 * (eligible_minutes - downtime_minutes) / eligible_minutes

Se gli eligible minutes possono essere zero (es. un servizio monitorato solo in orario e il periodo non contiene ore), definisci la regola: “N/A” o trattalo come 100%—ma sii coerente e documentalo.

Trasformare i numeri in un chiaro pass/fail

La maggior parte degli SLA richiede sia una percentuale che un esito binario.

  • Percentuale: es. 99,95% per il periodo
  • Pass/Fail: confronta con l'obiettivo SLA (es. pass se ≥ 99,9%)

Conserva anche la “distanza dalla violazione” (budget downtime rimanente) così i cruscotti possono avvisare prima che la soglia venga superata.

Casi limite da gestire deliberatamente

  • Fusi orari: scegli un fuso di report per cliente/contratto (spesso quello del cliente) e converti gli eventi in modo coerente.
  • Ora legale: non assumere che un giorno abbia 1440 minuti. Usa timestamp con awareness del fuso così la lunghezza del periodo è corretta nelle transizioni DST.
  • End time mancanti: gli incidenti a volte non hanno timestamp di risoluzione. Trattali come “aperti” e limita la durata alla fine del report, segnalandoli per pulizia.

Infine, conserva gli input grezzi (eventi inclusi/esclusi e aggiustamenti) così ogni report può rispondere “perché questo numero è così?” senza risposte vaghe.

UI e dashboard che rendono lo stato SLA ovvio

Il motore di calcolo può essere perfetto ma fallire con gli utenti se l'interfaccia non risponde alla domanda base: “Stiamo rispettando l'SLA ora, e perché?” Progetta l'app in modo che ogni schermata inizi con uno stato chiaro, poi permetta il drill-down nei numeri e negli eventi grezzi che li hanno prodotti.

Viste principali da costruire

Cruscotto panoramico (per operatori e manager). Inizia con poche tessere: conformità periodo corrente, disponibilità, conformità tempi di risposta e “tempo rimanente prima della violazione” quando applicabile. Etichette esplicite (es. “Disponibilità (questo mese)”) e, se supporti più SLA per cliente, mostra prima lo stato peggiore e lascia espandere.

Dettaglio cliente (per le squadre account e reporting verso il cliente). Una pagina cliente dovrebbe riassumere tutti i servizi e i tier SLA, con uno stato semplice pass/warn/fail e una breve spiegazione (“2 incidenti conteggiati; 18m downtime conteggiati”). Aggiungi riferimenti a /status e all'esportazione report.

Dettaglio servizio (per investigazioni approfondite). Qui mostri le regole SLA esatte, la finestra di calcolo e una scomposizione di come è stato formato il numero di conformità. Includi un grafico della disponibilità nel tempo e la lista di incidenti conteggiati.

Timeline incidente (per audit). Una vista incidente deve mostrare la timeline di eventi (rilevato, acknowledged, mitigated, resolved) e quali timestamp sono stati usati per le metriche di “response” e “resolution”.

Filtri che rispondono a domande reali

Rendi i filtri coerenti: range date, cliente, servizio, tier, severità. Usa le stesse unità ovunque (minuti vs secondi; percentuali con le stesse decimali). Quando l'utente cambia il range, aggiorna tutte le metriche sulla pagina per evitare disallineamenti.

Drill-down senza perdere fiducia

Ogni metrica di sintesi deve avere un percorso “Perché?”:

  • Dalla percentuale di conformità → elenco incidenti conteggiati nel periodo.
  • Da un incidente → eventi grezzi e i timestamp derivati usati nei calcoli.
  • Dalla disponibilità → intervalli di downtime con le sorgenti (evento monitoring vs aggiustamento manuale).

Usa tooltip con parsimonia per definire termini come “Downtime escluso” o “Orari di lavoro”, e mostra il testo regola esatto sulla pagina servizio così gli utenti non indovinano.

Mantieni semplicità ma chiarezza

Preferisci linguaggio semplice agli acronimi (“Tempo di risposta” invece di “MTTA” a meno che il tuo pubblico non lo richieda). Per lo stato combina colore e testo (“A rischio: 92% del budget errori usato”) per evitare ambiguità. Se supporti log di audit, aggiungi una piccola casella “Ultima modifica” sulle regole SLA con riferimento a /audit così gli utenti possono verificare quando le definizioni sono cambiate.

Alerting e notifiche per le violazioni

Vai live velocemente
Distribuisci e ospita la tua app SLA, poi aggiungi un dominio personalizzato quando sei pronto.
Distribuisci ora

L'alerting è il punto in cui la tua app SLA passa da report passivo a strumento che aiuta a evitare penali. I migliori alert sono tempestivi, specifici e azionabili—ossia dicono cosa fare dopo, non solo che qualcosa è “male”.

Definisci trigger che supportano decisioni reali

Inizia con tre tipi di trigger:

  • Avvicinamento alla violazione: es. “Hai 30 minuti per rispettare l'SLA di risposta”, o “Disponibilità del mese a 99,92% con SLA 99,9%.” Questo alert è il più prezioso perché abilita il recupero.
  • Violazione avvenuta: si attiva quando il motore conferma che l'SLA è mancato per la finestra rilevante.
  • Violazioni ripetute: rileva pattern come “3 violazioni in 30 giorni” o “stesso servizio violato due volte questa settimana”, che indicano problemi sistemici.

Rendi i trigger configurabili per cliente/servizio/SLA, dato che contratti diversi tollerano soglie diverse.

Scegli canali e rendi i messaggi azionabili

Invia gli alert dove le persone rispondono davvero:

  • Email per notifiche tracciabili e stakeholder esterni.
  • Slack per coordinamento rapido interno.
  • SMS (opzionale) per escalation ad alta severità.

Ogni alert dovrebbe includere riferimenti a /alerts, /customers/{id}, /services/{id} e alla pagina dettaglio dell'incidente o dell'evento così i rispondenti possono verificare rapidamente i numeri.

Riduci il rumore: deduplicazione, quiet hours, escalation

Implementa deduplicazione raggruppando alert con la stessa chiave (customer + service + SLA + period) e sopprimendo ripetizioni per una finestra di cooldown.

Aggiungi quiet hours (per timezone del team) così gli alert non critici di “approaching breach” attendono l'orario lavorativo, mentre “breach occurred” può sovrascrivere le quiet hours se la severità è alta.

Infine, supporta regole di escalation (es. notifica on-call dopo 10 minuti, scala al manager dopo 30) per evitare che alert restino bloccati in una sola casella.

Controllo accessi, autenticazione e log di audit

I dati SLA sono sensibili perché possono esporre performance interne e diritti cliente-specifici. Tratta il controllo accessi come parte della “matematica” SLA: lo stesso incidente può produrre risultati diversi a seconda dell'SLA applicata.

Ruoli da supportare fin da subito

Mantieni ruoli semplici, poi amplia le autorizzazioni:

  • Admin: configura impostazioni globali, gestisce servizi, SLA, utenti, integrazioni e fatturazione.
  • Agent: crea/aggiorna incidenti e finestre di manutenzione, allega eventi e aggiunge note postmortem.
  • Manager: legge tutto nel proprio ambito, approva definizioni SLA ed esporta report.
  • Customer viewer: vede solo i propri servizi, obiettivi SLA, storici incidenti e report rivolti al cliente.

Un default pratico è RBAC + tenant scoping:

  • Ogni record ha un owner tenant/customer.\n- Gli utenti interni possono essere scansionati su più tenant; i customer viewer su uno solo.\n- I permessi di modifica sono più ristretti della visualizzazione: es. gli agent possono modificare incidenti ma non cambiare le regole SLA.

Cosa ogni ruolo può visualizzare/modificare

Sii esplicito sui dati cliente-specifici:

  • I customer viewer non devono mai vedere campi internal-only (ipotesi di root cause, severità interna, note on-call, tag privati).
  • Le policy SLA devono essere versionate così un cliente può vedere i termini SLA applicati al momento dell'incidente.

Opzioni di autenticazione che non ti chiudono le porte

Inizia con email/password e richiedi MFA per ruoli interni. Pianifica SSO (SAML/OIDC) separando identità (chi sono) da autorizzazione (cosa possono fare). Per integrazioni, emetti API key legate a un account di servizio con scope ridotti e supporto rotazione.

Log di audit che apprezzerai

Aggiungi voci di audit immutabili per:

  • Cambiamenti alle regole SLA (soglie, calendari, esclusioni, mapping a servizi/clienti)
  • Modifiche agli incidenti (timestamp, transizioni di stato, override downtime manuali)
  • Cambiamenti di permessi e API key

Memorizza chi, cosa è cambiato (prima/dopo), quando, dove (IP/user agent) e un correlation ID. Rendi i log ricercabili ed esportabili (es. /settings/audit-log).

API per integrazioni e automazione

Un'app SLA raramente è isolata. Vuoi un'API che permetta a monitoring, ticketing e workflow interni di creare incidenti, pushare eventi e recuperare report senza lavoro manuale.

Parti essenziali e prevedibili

Usa un percorso versionato (es. /api/v1/...) così puoi evolvere i payload senza rompere integrazioni.

Endpoint essenziali:

  • Events: POST /api/v1/events per ingerire cambi di stato (up/down, campioni latenza, finestre manutenzione). GET /api/v1/events per audit e debug.
  • Incidents: POST /api/v1/incidents, PATCH /api/v1/incidents/{id} (acknowledge, resolve, assign), GET /api/v1/incidents.
  • SLAs: GET /api/v1/slas, POST /api/v1/slas, PUT /api/v1/slas/{id} per gestire contratti e soglie.
  • Reports: GET /api/v1/reports/sla?service_id=...\u0026from=...\u0026to=... per riepiloghi di conformità.
  • Alerts: POST /api/v1/alerts/subscriptions per gestire webhook/target email; GET /api/v1/alerts per la cronistoria degli alert.

Pagina e filtri coerenti

Scegli una convenzione di paginazione e usala ovunque (es. limit, cursor) più filtri standard come service_id, sla_id, status, from, to. Mantieni l'ordinamento prevedibile (es. sort=-created_at).

Error response affidabili per gli integratori

Ritorna errori strutturati con campi stabili:

{ \"error\": { \"code\": \"VALIDATION_ERROR\", \"message\": \"service_id is required\", \"fields\": { \"service_id\": \"missing\" } } }

Usa status HTTP chiari (400 validation, 401/403 auth, 404 not found, 409 conflict, 429 rate limit). Per ingestione eventi considera l'idempotenza (Idempotency-Key) così i retry non duplicano incidenti.

Rate limit e sicurezza di base

Applica rate limit ragionevoli per token (e più restrittivi per endpoint di ingestione), sanitizza gli input e valida timestamp/time zone. Preferisci token API con scope (read-only reporting vs write incidents) e registra sempre chi ha chiamato quale endpoint per tracciabilità (vedi la sezione audit logs).

Strategia di testing: dimostra che i numeri sono corretti

Rilascia un semplice MVP per SLA
Genera la prima versione con uptime, TTFR e TTR per un servizio.
Crea MVP

I numeri SLA sono utili solo se ci si può fidare. I test per un'app SLA dovrebbero concentrarsi meno sul “carica la pagina” e più su “la matematica del tempo si comporta esattamente come dice il contratto”. Tratta le regole di calcolo come una feature prodotto con una propria suite di test.

Unit test delle regole con timeline fisse

Inizia con unit test del motore di calcolo usando input deterministici: una timeline di eventi (incident opened, acknowledged, mitigated, resolved) e un set di regole SLA chiaramente definite.

Usa timestamp fissi e “freeze time” così i test non dipendono dall'orologio. Copri casi limite che spesso rompono i report SLA:

  • Incidente inizia prima del periodo di rendiconto e finisce dentro
  • Incidenti sovrapposti (il downtime deve fondersi o sommarsi?)
  • Pause multiple (manutenzioni, attesa cliente)
  • Minuti/secondi al limite (esattamente 00:00, fine mese, anno bisestile)

Test end-to-end per la pipeline completa

Aggiungi pochi test end-to-end che eseguono il flusso completo: ingest eventi → calcola conformità → genera report → render UI. Questi catturano mismatch tra “ciò che il motore ha calcolato” e “ciò che il dashboard mostra.” Mantieni gli scenari pochi ma di alto valore e asserisci sui numeri finali (%, breach si/no, tempo-to-ack).

Fixture riutilizzabili per calendari e fusi

Crea fixture di test per orari di lavoro, festività e fusi orari. Vuoi casi ripetibili come “incidente il venerdì alle 17:55 ora locale” e “una festività sposta il conteggio del tempo di risposta.”

Monitora l'app SLA stessa

Il testing non finisce al deploy. Aggiungi monitoraggio per failure job, dimensione code/backlog, durata ricalcolo ed error rate. Se l'ingestione è in ritardo o un job notturno fallisce, il report SLA può essere sbagliato anche se il codice è corretto.

Deployment, operazioni e una roadmap MVP pratica

Rilasciare un'app SLA riguarda meno l'infrastruttura sofisticata e più operazioni prevedibili: i calcoli devono girare in tempo, i dati devono essere al sicuro e i report riproducibili.

Un percorso di deployment semplice e affidabile

Inizia con servizi gestiti così puoi concentrarti sulla correttezza.

  • Database gestito (PostgreSQL): backup automatici, point-in-time recovery, cifratura.
  • Hosting container per web/API: rollback semplici e ambienti coerenti.
  • Object storage per export (CSV/PDF) e artefatti grandi, con regole di lifecycle.

Mantieni ambienti minimi: dev → staging → prod, ciascuno con proprio DB e segreti.

Job di background necessari dal giorno uno

Il tracking SLA non è solo request/response; dipende da lavori schedulati.

  • Calculation jobs: ricalcolano finestre SLA da nuovi eventi e ritrattano dati tardivi.
  • Report generation: riepiloghi giornalieri/mensili, export per clienti.
  • Data hygiene: archivia eventi grezzi vecchi, compatta tabelle derivate, verifica integrità referenziale.

Esegui i job con worker + queue o un scheduler gestito che richiama endpoint interni. Rendi i job idempotenti e logga ogni esecuzione per audit.

Retention ed export (senza promettere troppo)

Definisci retention per tipo di dato: conserva risultati derivati più a lungo dello stream di eventi grezzi. Per export, offri CSV prima (veloce, trasparente), poi template PDF. Sii chiaro: gli export sono “formattazione best-effort”, il DB rimane la fonte di verità.

Roadmap a fasi per mantenere lo scope sotto controllo

  1. MVP: un servizio, una SLA, un fuso, dashboard base + report mensile.
  2. Più metriche: SLA tempo di risposta, finestre di manutenzione, esclusioni, calendari multipli.
  3. Portale cliente: viste per cliente, controllo accessi, report scaricabili.
  4. Pagina di stato: pagine pubbliche/private basate sulla disponibilità calcolata (vedi /blog/status-pages).

Prototipare più veloce con Koder.ai (opzionale)

Se vuoi validare modello dati, flusso di ingestione e UI di reporting rapidamente, una piattaforma vibe-coding come Koder.ai può aiutare a ottenere un prototipo end-to-end senza impegnare un intero ciclo ingegneristico. Perché Koder.ai genera applicazioni complete via chat (UI web + backend), è pratico per mettere in piedi:

  • una dashboard React per conformità, budget errori e timeline drill-down,
  • un backend Go + PostgreSQL per memorizzare eventi grezzi e risultati periodici,
  • endpoint export/report e viste portale cliente semplici.

Una volta che requisiti e calcoli sono provati (la parte difficile), puoi iterare, esportare il codice sorgente e muoverti verso un workflow build-and-operate tradizionale—mantenendo snapshot e rollback utili durante l'iterazione rapida.

Domande frequenti

Cosa significa “conformità SLA” in un'app per il monitoraggio SLA?

Un tracker SLA risponde a una domanda con prove: avete rispettato gli impegni contrattuali per un determinato cliente e periodo di tempo?

Nella pratica significa ingerire segnali grezzi (monitoraggio, ticket, aggiornamenti manuali), applicare le regole del cliente (orari di lavoro, esclusioni) e produrre un risultato auditabile con pass/fail e dettagli di supporto.

In cosa si differenziano SLI, SLO e SLA — e perché l'app dovrebbe modellarli separatamente?

Usa:

  • SLI per la misura grezza (es. % controlli riusciti, tempo alla prima risposta).
  • SLO per l'obiettivo interno (spesso più restrittivo del contratto).
  • SLA per l'impegno esterno (spesso legato a crediti/penalità).

Modellarli separatamente permette di migliorare l'affidabilità (SLO) senza modificare involontariamente i report contrattuali (SLA).

Quali metriche SLA dovrei implementare per prime in un MVP?

Un buon MVP tiene traccia di 1–3 metriche end-to-end:

  • % di disponibilità per servizio per mese
  • Time to first human response (TTFR) (spesso solo in orario d'ufficio)
  • Time to resolution (TTR) per incidenti ad alta severità

Queste metriche si collegano facilmente a sorgenti reali e ti obbligano a implementare parti complesse (periodi, calendari, esclusioni) fin da subito.

Quali input servono prima di progettare il database o scrivere il calcolatore?

I fallimenti nei requisiti nascono da regole non dichiarate. Raccogli e documenta:

  • Testo del contratto/SLA (inclusi allegati)
  • Mappatura dei tier (quale cliente è su quale piano)
  • Time zone e orari di lavoro per cliente/servizio
  • Esclusioni esplicite (manutenzioni, ritardi causati dal cliente, forza maggiore, periodi di grazia)

Se una regola non si può esprimere chiaramente, non provare a “indovinarla” in codice: segnala e chiariscila.

Qual è il modello dati minimo per un tracker SLA affidabile?

Inizia con entità noiose e esplicite:

  • Cliente (tenant)
  • Servizio (ciò che si misura)
  • Piano (wrapping commerciale)
  • Politica SLA (obiettivi + finestre + esclusioni)
  • Incidente (contenitore a livello umano)
  • Evento (fatti immutabili usati per i calcoli)

Punta alla tracciabilità: ogni numero riportato dovrebbe collegarsi a e .

Come dovrei memorizzare i timestamp e gestire i fusi orari (incluso DST)?

Salva il tempo correttamente e coerentemente:

  • Conserva occurred_at in UTC con semantica di fuso orario
  • Conserva anche received_at (quando lo hai ingerito)
  • Mantieni la time zone IANA del cliente per visualizzazione e logica degli orari di lavoro, non per riscrivere la storia

Poi rendi i periodi espliciti (timestamp di inizio/fine) così puoi riprodurre i report anche attraverso cambi DST.

Come ingerire eventi in modo affidabile senza duplicati o dati corrotti?

Normalizza tutto in un unico formato evento interno con un ID stabile:

  • event_id (unico, stabile su retry)
  • source, event_type, ,
Come calcolare correttamente TTFR/TTR quando si applicano orari di lavoro, pause ed esclusioni?

Calcola le durate sommando intervalli su una timeline, non sottraendo semplicemente due timestamp.

Definisci il “tempo addebitabile” rimuovendo gli intervalli che non contano, come:

  • fuori dall'orario di lavoro
  • pause "in attesa del cliente"
  • manutenzioni programmate (se escluse dalla policy)

Persisti gli intervalli derivati e i codici motivo così potrai spiegare esattamente cosa è stato conteggiato.

Come dovrebbe essere calcolata la disponibilità (minuti eleggibili vs minuti totali)?

Traccia due denominatori espliciti:

  • Eligible minutes (minuti che contano per l'SLA)
  • Downtime minutes (minuti idonei in cui il servizio è considerato down)

Poi calcola:

availability_percent = 100 * (eligible_minutes - downtime_minutes) / eligible_minutes

Decidi anche cosa fare se è zero (es. mostrare ) e documenta la regola.

Cosa dovrebbero includere dashboard e alert per essere utili (e non rumorosi)?

Progetta l'interfaccia in modo che risponda subito: “Stiamo rispettando l'SLA ora, e perché?”

  • Mostra conformità nel periodo corrente e la “distanza dalla violazione” (budget downtime rimanente)
  • Fornisci percorsi di drill-down: metrica → incidenti conteggiati → eventi/intervali grezzi
  • Etichetta esplicitamente le metriche e mostra il testo integrale della policy sul servizio

Per gli alert, priorizza trigger azionabili: avvicinamento alla violazione, violazione, violazioni ripetute—ognuno con link ai dettagli rilevanti come /customers/{id} o /services/{id}.

Indice
Definire la conformità SLA e cosa stai costruendoRequisiti: metriche, regole e chi ha bisogno di cosaModello dati per SLA, servizi, incidenti ed eventiIngestione eventi: come i dati entrano nella tua appMotore di calcolo SLA: trasformare eventi in conformitàLogica di report: periodi, disponibilità e casi limiteUI e dashboard che rendono lo stato SLA ovvioAlerting e notifiche per le violazioniControllo accessi, autenticazione e log di auditAPI per integrazioni e automazioneStrategia di testing: dimostra che i numeri sono correttiDeployment, operazioni e una roadmap MVP praticaDomande 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
specifici ID evento
una versione di policy
occurred_at
service_id
  • Opzionale incident_id e attributes
  • Applica l'idempotenza con una constraint unica su event_id. Per mapping mancanti o arrivi fuori ordine, quarantena/flagga—non “sistemare” i dati silenziosamente.

    eligible_minutes
    N/A