Severity Matrix

Severity Matrix

This matrix defines severity levels for all incidents handled by the ML Incident Response API. Severity is set at triage time and drives SLO, paging, and post-incident review (PIR) obligations.

Severity labels map directly to alert severity labels in observability/alert_rules.yml and to the IncidentSeverity enum in src/domain/incident.py.


Level Definitions

LevelNameDefinitionUser / Business Impact
SEV-1CriticalFull outage or critical production failure. Core ML inference path is down or returning incorrect results for ≥ 20% of requests.Large customer or business impact. Executive visibility likely. Contractual SLO breach possible.
SEV-2HighMajor degradation with measurable user or business impact. A primary API path is degraded but not fully down. Workaround may exist.Visible to a significant portion of users. Cross-functional coordination required.
SEV-3MediumLimited or partial degradation. No broad outage. A secondary subsystem (e.g. metrics export, non-critical alert rule) is affected.Minimal direct user impact. Standard incident handling sufficient.
SEV-4LowLow-impact issue. No immediate production risk. Cosmetic, logging, or non-critical configuration drift.No broad user impact. Track and remediate in normal workflow.

Response SLOs

LevelAcknowledgeInitial ResponseResolution TargetPIR Required
SEV-15 min15 min4 hoursYes — within 48 hours
SEV-215 min30 min8 hoursYes — within 5 business days
SEV-32 hours4 hours3 business daysRecommended
SEV-4Next business dayNext business day2 sprintsNo

Alert → Severity Mapping

The following table maps Prometheus alert names from alert_rules.yml to their corresponding incident severity level. Alerts fire with a severity label of critical or warning; the column below shows the equivalent incident severity when a human on-call triages the alert.

Alertseverity labelIncident SEV
APILatencyCriticalcriticalSEV-1
APICriticalErrorRatecriticalSEV-1
ModelMajorDriftcriticalSEV-1
ModelDriftEventSpikecriticalSEV-1
PredictionVolumeSilencecriticalSEV-1
JWTAuthFailureCriticalcriticalSEV-1
PodRestartLoopcriticalSEV-1
APIHighP99LatencywarningSEV-2
APIHighErrorRatewarningSEV-2
ModelMinorDriftwarningSEV-2
AnomalyBreachRateHighwarningSEV-2
PredictionLatencyDegradedwarningSEV-3
JWTAuthFailureSpikewarningSEV-3
AlembicMigrationLagwarningSEV-3
RedisHighMemoryUsagewarningSEV-3
JWTKeyRotationOverdueinfoSEV-4

Escalation Policy

  1. SEV-1 / SEV-2: Page the primary on-call immediately via AlertManager. If no acknowledgement within the SLO window, auto-escalate to the secondary on-call and notify the engineering lead.
  2. SEV-3: Notify the on-call channel in Slack. No immediate page required unless the issue worsens to SEV-2 within 2 hours.
  3. SEV-4: File a GitHub issue with the incident label. No paging.

Runbook links for each alert are in observability/alert_rules.yml under the runbook_url annotation and are published to mlops.zrl.dev/runbooks.


Downgrade / Upgrade Policy

  • Any responder may upgrade severity at any time during active triage if new information indicates broader impact than initially assessed.
  • Only the incident commander may downgrade severity, and only after confirming that the original trigger condition has fully resolved.
  • Severity changes must be logged in the incident record with a timestamp and rationale.