Notes / Projects / Platform Shipsolid / 04 Operations Incident Response

Visualization, Alerting & SLOs

An effective observability system translates raw telemetry into actionable insights through

Updated May 1, 2026 · §202603241245-12 ·

Visualization, Alerting & SLOs

An effective observability system translates raw telemetry into actionable insights through intuitive dashboards and targeted alerting. Visualization and alerting are tailored to the needs of different stakeholders, aligned with SLOs, and tightly integrated into incident response workflows.

1. Dashboard Templates for Key Personas

Scope:

  • Persona-based dashboards are designed to surface relevant insights to each stakeholder group, balancing depth, usability, and business context.

Dashboards include:

PersonaFocus Areas
SREsInfra health, service uptime, latency, error rates, golden signals
DevelopersApplication-level logs, traces, exception heatmaps, deploy impact analysis
Product TeamsFeature adoption, usage funnels, business SLIs
Business UsersKPIs, high-level SLAs, system availability, geographic breakdowns

Design Principles:

  • Unified theme and consistent panel layouts
  • Linked time ranges and template variables (e.g., env, service, region)
  • Use of shared Grafana folders and access roles to control visibility

1.1 Developers Persona

Main Concern: Debugging application-level issues, exception heatmaps, deployment impact.

SLO-centric KPI’s

SectionPanelPurposeData SourcePanel Type
KPIsAvailability (success rate)SLO healthPrometheusGauge / Stat
KPIsp95 LatencyUser performancePrometheus (histogram), Tempo exemplarsTime series
KPIsTraffic (RPS)Request volumePrometheusTime series
KPIs5xx Error RateReliabilityPrometheusTime series / Stat
KPIsRetry RateResiliency checkPrometheusTime series
KPIsDB CPU %Data tier loadAzure Monitor (MI)Gauge / Time series
KPIsTop DB Wait TypeBottleneck insightSQL DMVsTable / Pie
KPIsActive IncidentsCurrent alertsGrafana AlertingStat / Table

Application (ACA + .NET)

SectionPanelPurposeData SourcePanel Type
A1 – RequestsSuccess vs 4xx/5xxError trendsPrometheusTime series / Bar
Latency (p50/p90/p95)Performance baselinePrometheusTime series
RPS by route/methodHot endpointsPrometheusTime series / Table
A2 – ErrorsTop error routesDebug failing APIsPrometheus + LokiTable / Bar
Top exception typesSee failure patternsLokiTable / Pie
Failed dependency callsDownstream reliabilityPrometheusTable
A3 – ResourcesCPU% / Memory% per revisionApp healthAzure Monitor / PrometheusTime series
Container restartsCrash loopsAzure MonitorStat / Time series
Replica countAutoscaling checkAzure MonitorTime series
A4 – Deploy OverlayErrors/latency vs deploysCorrelate regressionsPrometheus + AnnotationsTime series + Annotation markers
A5 – TracesService mapTopology viewTempoNode graph
Slowest tracesRoot cause triageTempoTable
N+1 calls detectorChatty call detectionTempoTable
A6 – Async / QueuesQueue depthBacklog riskAzure Monitor / CustomGauge / Time series
Dequeue rate & handler latencyThroughput analysisPrometheusTime series
DLQ countPoison messagesAzure MonitorStat

Data Tier (Azure SQL MI)

SectionPanelPurposeData SourcePanel Type
B1 – HealthCPU %, IO %, Log Write %DB saturationAzure Monitor (MI)Time series / Gauge
Storage used / freeCapacity planningAzure MonitorTime series / Gauge
Sessions / connectionsPool stressAzure MonitorTime series
B2 – WaitsTop wait types“Why slow”SQL DMVs / Query StoreTable / Bar
Waits trend timelineSpike correlationSQLTime series
B3 – QueriesExpensive queries (duration/reads/CPU)TuningSQL DMVsTable
Query text + plan handleDeveloper actionableSQL DMVsTable
Last 10 executionsVariability checkQuery StoreTable
B4 – ContentionBlocking treeConcurrency diagnosisSQL DMVsNode graph / Table
Deadlocks countDetect correctness issuesSQL DMVs / EventsStat / Time series
B5 – App SymptomsSQL timeoutsApp-side visibilityLoki logsTable / Stat
Transient retriesResiliencyPrometheusTime series

Alerts (Mapped to Panels)

AlertTrigger ExamplePurposeSourcePanel Type
HighErrorRate5xx% > 2% for 5mCatch breakagesPrometheusAlert
LatencyP95Highp95 > 500ms for 10mPerformance guardrailPrometheusAlert
ContainerRestarts>3 restarts / 15mDetect crash loopsAzure MonitorAlert
Ingress4xxSpike4xx% > 8%Detect bad config/clientsPrometheusAlert
MI_CPUHighCPU > 80%DB saturationAzure MonitorAlert
MI_WriteLogHighLog write % > 80%Log bottleneckAzure MonitorAlert
DeadlocksDetectedDeadlocks > 0Data correctnessSQL DMVsAlert
BlockingSessions>5 blocked sessionsContentionSQL DMVsAlert
ErrorBudgetBurnMulti-window burnProtect SLOPrometheusAlert

1.2 SRE Persona

Main concern: Service uptime, reliability, resource utilization, golden signals.

Executive Overview

PanelPurposeData SourceType
Fleet Health (mdixai & OT)Red/Amber/Green view of service & plant healthPrometheus (SLO rules) + Grafana Alerting APIStat
Error Budget Burn (1h/24h/7d)Early warning for reliabilityPrometheus burn rate rulesTime series
Incidents & MTTR (7/30d)Track MTTA/MTTR trendsLoki (incident logs) + Alertmanager metricsBar gauge
Deployments Today# of prod deploys + failuresGitHub Actions exporter/API → PromStat
Top 3 Risk HotspotsShow highest-risk services/plantsProm + Loki joinTable

Golden Signals (User Journey)

PanelPurposeData SourceType
Global AvailabilityEnd-user uptimeSynthetic Monitoring / BlackboxState timeline
P95/P99 Latency (key APIs)Performance regressionsApp Insights / OTel → PromTime series
Error Rate by EndpointReliability issuesApp InsightsTime series
Failing ChecksQuick triage drill-downSynthetic MonitoringLinks

MDIxAI Services (Azure Container Apps & Web Apps)

PanelPurposeData SourceType
Replicas / InstancesDesired vs availableAzure Monitor / PrometheusState timeline
RPS • Error% • P95Golden signalsApp Insights / OTel → PromTime series
CPU & Memory UtilizationCapacity monitoringAzure Monitor / PromTime series
Container RestartsStability checkPrometheusBar chart
Error Logs (Top N)Fast triageLoki (service, env)Logs

OT Plants (Fleet & Host Health)

PanelPurposeData SourceType
Plant Availability MapWhich plants are up/downProm (Alloy agent heartbeat)State timeline
Critical Lines at RiskPriority ≤2Prometheus ruleTable
CPU/Memory/Disk (Top Hosts)Capacity hotspotsnode/windows exporter → PromTime series
Service/Process HealthBusiness-critical serviceswindows_exporter perf countersTable
OT Error LogsQuick triageLoki (Event Log/Syslog)Logs

SLOs & Error Budgets

PanelPurposeData SourceType
SLO Status (30d)Pass/Fail view by service/plantPrometheus (SLO rules)Table
Burn Rates (1h/6h/24h)Early warning guardrailsPrometheusTime series
Error Budget RemainingStakeholder-friendlyPrometheusGauge
Top Violations (7d)Where to focusProm + LogQL metricizationBar chart

Alerts & On-Call

PanelPurposeData SourceType
Active Alerts by SeverityLive triageGrafana Alerting API / 3 — AlertmanagerTable
Alert Volume TrendNoise analysisAlertmanager metricsTime series
Noisiest Rules (Top N)Tuning candidates3 — Alertmanager → PromBar chart
Paging EffectivenessAck/Resolve timesPagerDuty/BigPanda webhooksStat + Time series

2. Standardized Alert Rules

Scope

To ensure consistency, actionability, and maintainability across environments, alerting rules are standardized by taxonomy and scope:

  • Environment-Specific Thresholds
    • Dev/Staging: Relaxed thresholds to avoid noise.
    • Prod: Strict thresholds with high precision and sensitivity.
  • Rule Design Patterns:
    • Multi-condition Alerts Example: High latency AND high error rate to reduce false positives.
    • Threshold-Based Alerts
      • Based on fixed thresholds (e.g., CPU > 90%, error rate > 5%)
      • Used for resource saturation or SLO violations
    • Anomaly Detection
      • Powered by Grafana Cloud Machine Learning or Azure Monitor Dynamic Thresholds
      • Detects unusual patterns without manually defined baselines

Alert Types

TypeDescriptionExamples
InfrastructureMonitors compute and platform resourcesCPU, memory, disk usage, node readiness
ApplicationTracks service health and performance metrics5xx error rates, dependency latency
BusinessTied to key business outcomes and KPIsDrop in order volume, failed checkouts

Key Pillars of Standardized Alerts

PillarDescription
TaxonomyUse a consistent classification: infra, app, business alerts
Severity LevelsStandard priority levels (P1–P5) based on impact and urgency
StructureStandard alert labels (service, team, severity, env, region)
Message FormatConsistent subject line, annotations, and alert body
Environment SensitivityDifferent thresholds for dev, stage, prod environments
Routing LogicUnified routing based on tags (e.g., team, env, severity)
TemplatesReusable templates for alert rules and notification messages
DocumentationAll alerts link to a runbook and contain troubleshooting steps

Naming Pattern

A modular naming pattern helps organize alerts by domain, resource, condition, and severity.

<env> <product> <infra_type> <dimension> <condition> <priority> <team>

[prod] [OT_Lelystad] [vm] [cpu] [gt_90pct_5m] [p1] [OT_Team]

[prod] [MDIxAI] [az_container_apps] [cpu] [gt_90pct_5m] [p1] [SRE_Team]

Alert Name Fields (Breakdown)

FieldPurposeAllowed/Recommended Values
envEnvironmentdev, qa, prod, sandbox
productProgram or business domainmdixai, ot, data
infra_typePlatform/infra classaz_container_apps, aks, app_gateway, key_vault, cosmosdb, sql_mi, linux_vm, win_vm, network
serviceLogical service/appe.g., api-gateway, orders-api, billing-worker
componentSub-parte.g., ingress, backend, db, queue, os
alert_typePattern categoryslo_burn, threshold, log_spike, synthetic, security, quota, deployment
conditionMachine-friendly conditionerror_rate_5m_and_1h, p95_latency_gt_500ms_5m, cpu_gt_90_for_10m, restart_rate_gt_5_5m
severityHuman severitycritical, warning, info
teamOwning groupplatform, sre, infra, network, data, api, etc.

Priority defaults:

  • severity=critical → priority=P1 (prod) / P2 (non-prod)
  • severity=warning → P3
  • severity=info → P4/P5

Priority Defaults

SeverityEnvironmentPriorityTypical Use CaseEscalation Target
criticalprodP1Customer-facing outage, SLO burn, synthetic down in ≥2 regionsImmediate page to BigPanda → On-call engineer; management visibility
criticalnon-prod (dev/qa/sandbox)P2Blocking CI/CD pipelines, critical test envs down, widespread developer impactMS Teams alert; optional on-call if blocking release
warningprodP3Capacity nearing limits, error rate spikes, failed jobs without user impact, Expiring secrets, approaching quotas, config driftMS Teams notifications; triaged during working hours
infonon-prodP4Expiring secrets, approaching quotas, config driftTeams/Email DL; backlog item in Jira
infonon-prodP5Routine noise, deprecated resource usage, minor anomaliesLog only, optional Teams post; no escalation

Benefits of Standardizing Alerts

  • Reduces Alert Fatigue: Less noise, more signal
  • Faster Triage: Clear severity, context, and ownership
  • Improved SLO/SLA Tracking: Alerts aligned with business impact
  • Better Routing & Escalation: Alerts reach the right people, in the right way
  • Easier Reporting: Uniform tags and labels improve dashboards and KPIs

3. Alert Routing & Escalation Policies

Escalation Targets

  • P1 → Page on-call immediately (BigPanda → MS Teams War Room).
  • P2 → Notify team leads + MS Teams; escalate if no acknowledgement in 30 min.
  • P3 → Team channel notification; captured in weekly ops review.
  • P4/P5 → Logged; visible in dashboards and daily digest emails, not actionable in real time.

Routing Logic (Notification Policy Tree)

  • Matchers:
    • severity=critical, env=prod → route to BigPanda contact point.
    • severity=critical, env!=prod → route to MS Teams (with priority=P2 label).
    • severity=warning → route to MS Teams (priority=P3).
    • severity=info → route to MS Teams Digest DL or log_only contact point.

Time-to-Action Expectations

PriorityMTTA TargetMTTR Target
P1≤ 5 minutes≤ 30 minutes
P2≤ 15 minutes≤ 2 hours
P3≤ 1 hour≤ 4 hours
P4≤ 4 hours≤ 24 hours
P5Best effortN/A (backlog only)

Local graph

Full graph →