惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Archives - TechRepublic
Security Archives - TechRepublic
C
CXSECURITY Database RSS Feed - CXSecurity.com
NISL@THU
NISL@THU
S
Schneier on Security
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
Hacker News: Ask HN
Hacker News: Ask HN
T
Tenable Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Google Online Security Blog
Google Online Security Blog
GbyAI
GbyAI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
Forbes - Security
Forbes - Security
博客园 - 叶小钗
量子位
I
Intezer
腾讯CDC
博客园 - Franky
Microsoft Security Blog
Microsoft Security Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
F
Fortinet All Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
Jina AI
Jina AI
Project Zero
Project Zero
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
Google Developers Blog
Latest news
Latest news
Cyberwarzone
Cyberwarzone
Security Latest
Security Latest
Spread Privacy
Spread Privacy
M
MIT News - Artificial intelligence
F
Full Disclosure
P
Proofpoint News Feed
B
Blog
W
WeLiveSecurity
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
AWS News Blog
AWS News Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
The GitHub Blog
The GitHub Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
博客园 - 聂微东
小众软件
小众软件
Schneier on Security
Schneier on Security
PCI Perspectives
PCI Perspectives

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
Energy Grid Observability: What the Power Sector Can Learn from Google SRE
Nijo George · 2026-05-19 · via DEV Community

On August 14, 2003, a software bug silenced an alarm. The alarm was part of the state estimation system at FirstEnergy Corporation in Ohio — a system whose job was to model the real-time health of the transmission network and alert operators when that model diverged from a safe operating envelope. The bug had been present for months. It had suppressed alerts for hours before that afternoon. By the time operators understood what was happening, three high-voltage transmission lines had sagged into untrimmed trees, the cascading failure had crossed four state boundaries and into Canada, and fifty-five million people were without power in the largest blackout in North American history.

The official investigation report ran to two hundred and thirty-eight pages. Its conclusion, at root, was simple: the grid failed because the humans operating it had lost situational awareness. Not because the sensors stopped working. Not because the transmission infrastructure was inadequate. Because the software layer between the physical grid and the human operators had stopped faithfully representing reality — and no one knew it.

That is an observability failure. And it is the same class of failure that Site Reliability Engineering was designed to prevent in software systems. The power sector has not yet fully recognised that it is running the same problem under a different name.


Two Reliability Disciplines Separated by Vocabulary

Grid operations and Site Reliability Engineering evolved independently, serving different physical systems and different regulatory regimes. But their foundational concerns are identical: how do you know the current state of a complex, distributed system? How do you define and measure acceptable failure? How do you detect degradation before it becomes catastrophe?

Grid operators have answered these questions with decades of engineering practice. SCADA systems provide real-time telemetry from thousands of sensors. Energy Management Systems (EMS) run continuous state estimation to model grid topology under current load conditions. Protection relay systems execute sub-second automated fault isolation when abnormal conditions are detected. The grid, in narrow technical terms, is one of the most instrumented physical systems ever built.

And yet the 2003 Northeast blackout happened. Texas Winter Storm Uri in February 2021 caused the failure of over one-third of the state's generating capacity. The California heat dome events of 2020 and 2022 pushed the grid to rolling blackouts despite years of grid modernisation investment.

The common thread is not sensor failure or infrastructure inadequacy. It is the gap between monitoring and observability — between knowing that something is happening and understanding why, between seeing individual metric thresholds breach and comprehending the causal chain that connects them.

The core distinction: Monitoring tells you a transmission line is at 98% capacity. Observability tells you why it got there, what will happen next, and which of seventeen possible interventions will resolve it without triggering a cascading failure elsewhere in the network.


Mapping the Four Golden Signals to Grid Operations

Google SRE's Four Golden Signals — Latency, Traffic, Errors, and Saturation — were formulated for software services, but their underlying logic is domain-agnostic. Each characterises a different dimension of system health from the perspective of the entity being served.

Latency — Control System Response Time and State Estimation Convergence

In software services, latency measures how long it takes to serve a request. In grid operations, the equivalent is the time dimension of control system responsiveness: how long does it take for a SCADA command to be executed and confirmed? How long does the state estimation algorithm take to converge after a topology change?

The 2003 Northeast blackout was materially worsened because FirstEnergy's state estimation system had been running in a degraded mode for hours — producing a stale model of the network that operators were trusting as current. The latency of the state estimation update cycle was the hidden variable that turned a manageable contingency into a cascading failure.

Grid observability requires tracking not just whether state estimation is running, but how fresh its output is. A state estimation system that converges in 30 seconds normally but 8 minutes during a topology change is exhibiting a reliability signal that warrants an alert — because 8-minute-old models during fast-moving contingencies are operationally dangerous.

Traffic — Load Demand, Frequency Deviation, and Interchange Flows

Traffic in SRE terms is the demand signal. On the grid, the more operationally sensitive metric is frequency deviation: the departure of grid frequency from its nominal value (60 Hz in North America) as the system balances generation against demand in real time.

The rate of frequency change (ROCOF — Rate of Change of Frequency) is the derivative signal that provides early warning of generation-load imbalance events before frequency has deviated enough to trigger protection systems.

ROCOF is an SRE burn rate metric applied to the physical grid. A high ROCOF means the error budget — the grid's tolerance for frequency deviation — is being consumed faster than the system can respond. The analogy is not decorative; the mathematical structure is identical.

Errors — Protection Relay Operations, SCADA Command Failures, and Communication Outages

Grid errors require careful categorisation, in exactly the same way that HTTP error codes require categorisation to distinguish user errors (4xx) from system failures (5xx). A protection relay operation may be a correctly executed fault isolation. But a relay operation not followed by the expected reclosing sequence is a signal that warrants investigation.

SCADA command failures are the grid equivalent of failed write operations in a database: the operator believes a state change has occurred when it has not. These are the silent errors that accumulate into the situational awareness gap that precedes major events.

Saturation — Thermal Loading, Voltage Margins, and Short-Circuit Capacity

The critical insight from SRE practice is that saturation signals are predictive: you see saturation approaching before the error occurs. A transmission line at 85% of its thermal rating is a leading indicator; the sag-into-tree contact that initiated the 2003 blackout is the lagging consequence. An observability architecture that alerts on saturation approaching threshold provides the intervention window that reactive monitoring misses.

────────────────────────────────────────────────────────────────────────────
GOLDEN SIGNAL    GRID EQUIVALENT                   KEY METRIC
────────────────────────────────────────────────────────────────────────────
Latency          State estimation convergence       Time-to-stable-model (s)
                 SCADA command round-trip           Command confirm latency (ms)
                 EMS display refresh lag            Telemetry staleness (s)

Traffic          Real-time load demand              MW by zone/area
                 Frequency deviation                Hz delta from 60.00
                 Rate of Change of Frequency        Hz/s (ROCOF)

Errors           Unplanned protection relay ops     Events/hour by substation
                 SCADA command failures             Failed commands / total
                 Communication outages              Unobservable assets count

Saturation       Transmission line loading          % of thermal rating
                 Transformer utilisation            % of nameplate MVA
                 Voltage margin                     % deviation from nominal
────────────────────────────────────────────────────────────────────────────

Enter fullscreen mode Exit fullscreen mode


SLIs and SLOs for Grid Reliability

The power sector already has its own reliability metrics. SAIDI, SAIFI, and CAIDI have been used by utilities for decades. But these are lagging, aggregated metrics — they measure what already happened, averaged across a customer base, reported quarterly. They are the equivalent of measuring software reliability by counting support tickets filed last quarter.

An SLO framework applied to grid operations would define SLIs at the control system and communication layer — not just at the customer impact layer — with rolling windows short enough to drive operational decisions in real time.

# Grid Observability SLI/SLO Definitions
# Prometheus recording rules for a modernised grid monitoring stack

groups:
  - name: grid.slo.definitions
    interval: 30s
    rules:

      # SLI 1: State Estimation Freshness
      # Fraction of 5-minute intervals where state estimation converged
      # to a stable solution within 60 seconds of topology change
      # SLO Target: 99.5% of intervals over rolling 7-day window
      - record: sli:state_estimation_freshness:ratio_rate5m
        expr: |
          sum(rate(ems_state_estimation_convergence_success_total[5m]))
          /
          sum(rate(ems_state_estimation_runs_total[5m]))

      # SLI 2: SCADA Command Execution Success
      # Fraction of SCADA commands confirmed executed within 10s
      # SLO Target: 99.9% of commands over rolling 24-hour window
      - record: sli:scada_command_success:ratio_rate5m
        expr: |
          sum(rate(scada_commands_confirmed_total[5m]))
          /
          sum(rate(scada_commands_issued_total[5m]))

      # SLI 3: Substation Communication Availability
      # Fraction of monitored substations with active comms link
      # SLO Target: 99.8% of substations observable at all times
      - record: sli:substation_communication_availability:ratio
        expr: |
          count(scada_substation_last_update_seconds < 60)
          /
          count(scada_substation_monitored == 1)

Enter fullscreen mode Exit fullscreen mode


The OT/IT Convergence Problem as an Observability Architecture Challenge

The energy sector's most distinctive observability challenge is the boundary between Operational Technology (OT) and Information Technology (IT). OT systems — SCADA, protection relays, intelligent electronic devices (IEDs), phasor measurement units (PMUs) — were designed in an era when network isolation was the primary security model. They run proprietary protocols (DNP3, Modbus, IEC 61850) on dedicated networks with multi-decade operational lifetimes.

The consequence is an observability architecture with a structural gap at the OT/IT boundary: rich physical telemetry on one side, modern observability infrastructure on the other, and a brittle, manually maintained integration layer connecting them.

The SRE approach is to treat the OT/IT integration layer as a service with its own SLIs, SLOs, and error budgets. The data pipeline carrying PMU measurements from substations to the EMS is not a background infrastructure concern; it is a first-class service whose reliability directly determines the quality of state estimation output.

# OT/IT Integration Pipeline — SLO and Automated Recovery
# Architecture:
#   IED/RTU (substation) → DNP3/IEC 61850 → Protocol Gateway
#   → MQTT/gRPC → Kafka → Prometheus Exporter → Metrics Platform

groups:
  - name: grid.pipeline.slo
    rules:

      # Pipeline throughput: fraction of expected telemetry points received
      - record: sli:telemetry_pipeline_completeness:ratio_rate5m
        expr: |
          sum(rate(telemetry_points_received_total[5m]))
          /
          sum(rate(telemetry_points_expected_total[5m]))

      # Staleness alert: substation with no update in 120 seconds
      - alert: TelemetryPipelineStale
        expr: |
          (time() - telemetry_substation_last_received_timestamp) > 120
        for: 2m
        labels:
          severity: page
          domain: grid_observability
        annotations:
          summary: >
            Substation {{ $labels.substation_id }} telemetry stale for
            {{ $value | humanizeDuration }} — state estimation input degraded
          runbook: "https://wiki.internal/sre/runbooks/telemetry-pipeline-stale"
          automation: "https://wiki.internal/sre/automation/pipeline-recovery"

Enter fullscreen mode Exit fullscreen mode

Automation-first recovery: A stale substation telemetry link whose recovery procedure is "operator identifies failure → calls substation technician → technician resets gateway → operator confirms recovery" is a toil pattern. The same procedure, triggered automatically by the staleness alert and confirmed by automated verification of resumed telemetry flow, eliminates human latency from the MTTR calculation — and eliminates the risk that the alert is missed during high-tempo operations.

# Automated Telemetry Recovery — Kubernetes Job triggered by AlertManager webhook
apiVersion: batch/v1
kind: Job
metadata:
  name: telemetry-recovery-{{ substation_id }}
  namespace: grid-ops
  labels:
    trigger: alert-automation
    domain: ot-it-pipeline
spec:
  backoffLimit: 2
  template:
    spec:
      restartPolicy: OnFailure
      serviceAccountName: grid-automation-sa
      containers:
        - name: recovery-controller
          image: grid-ops/pipeline-recovery:v2.1.0
          env:
            - name: SUBSTATION_ID
              value: "{{ substation_id }}"
            - name: RECOVERY_MODE
              value: "gateway-restart"
            - name: VERIFY_TIMEOUT_SECONDS
              value: "90"
            - name: ESCALATE_ON_FAILURE
              value: "true"    # Page on-call if automated recovery fails
            - name: SPLUNK_HEC_URL
              valueFrom:
                secretKeyRef:
                  name: splunk-hec-creds
                  key: url

Enter fullscreen mode Exit fullscreen mode


NERC CIP Compliance as an SLO Problem

NERC CIP standards define mandatory reliability and security requirements for bulk power system operators. The dominant industry approach is documentation-first: maintain records sufficient to demonstrate compliance during audits. This is a lagging, manual process that is expensive to maintain and provides limited operational value between audit cycles.

The SRE reframing is to treat compliance requirements as SLOs with continuous automated verification rather than periodic manual attestation. CIP-010 requires detection of unauthorised configuration changes — this is a drift detection requirement that GitOps tooling implements as a built-in operational posture, not a compliance add-on.

# Argo CD Application — Grid Monitoring Stack
# GitOps enforces CIP-010 configuration change management automatically:
# every configuration change is a git commit, every drift is detected,
# and the remediation path (sync) is the compliance record.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: grid-observability-stack
  namespace: argocd
  annotations:
    # CIP-010 audit trail: all sync events logged to Splunk via webhook
    notifications.argoproj.io/subscribe.on-sync-succeeded.splunk: "grid-cip-compliance"
    notifications.argoproj.io/subscribe.on-sync-failed.splunk: "grid-cip-compliance"
    notifications.argoproj.io/subscribe.on-health-degraded.splunk: "grid-cip-compliance"
spec:
  project: grid-operations
  source:
    repoURL: https://git.internal/grid-ops/observability-config
    targetRevision: main
    path: clusters/grid-control/monitoring
  destination:
    server: https://tkg-grid-control.internal:6443
    namespace: grid-monitoring
  syncPolicy:
    automated:
      prune: true
      selfHeal: true    # Drift auto-remediated: CIP-010 compliance continuous

Enter fullscreen mode Exit fullscreen mode

The self-healing sync policy is not just an operational convenience — it is a continuous compliance assertion. The git commit history, Argo CD sync log, and Splunk audit trail together constitute a CIP-010 compliance record that is richer and less labour-intensive to maintain than the documentation-first approach most utilities currently employ.


Applying Multi-Window Burn Rate Alerting to Grid Frequency Events

Grid frequency management operates on timescales that map precisely to the multi-window burn rate alerting model. Primary frequency response operates in the 0–30 second window. Secondary response (AGC) operates in the 30-second to 10-minute window. Tertiary response operates in the 10-minute to 60-minute window.

This layered response hierarchy is structurally identical to the 14×/6×/3×/1× burn rate model: different urgency thresholds triggering different response actors with different response times, calibrated to the rate at which the budget is being consumed.

# Grid Frequency — Burn Rate Equivalent Alerting
# NERC BAL-003 requires 100% of primary reserve deployment
# within 30 seconds of a frequency deviation event

groups:
  - name: grid.frequency.alerts
    rules:

      # CRITICAL: Under-Frequency Load Shedding imminent
      # Frequency < 59.3 Hz AND declining
      - alert: GridFrequency_Critical_UFLS
        expr: |
          grid_frequency_hz < 59.3
          AND
          deriv(grid_frequency_hz[60s]) < -0.1
        for: 0s    # No 'for' — immediate; no false positive tolerance
        labels:
          severity: critical
          response_tier: primary
        annotations:
          summary: >
            Grid frequency {{ $value }} Hz and declining — UFLS arming imminent

      # PAGE: Secondary response required
      # Frequency 59.3–59.7 Hz: primary response engaged, AGC correction needed
      - alert: GridFrequency_Page_SecondaryResponse
        expr: |
          grid_frequency_hz < 59.7
          AND
          grid_frequency_hz >= 59.3
        for: 30s
        labels:
          severity: page
          response_tier: secondary

      # TICKET: Sustained deviation requiring operator review
      - alert: GridFrequency_Ticket_TertiaryReview
        expr: |
          abs(grid_frequency_hz - 60.0) > 0.1
        for: 5m
        labels:
          severity: ticket
          response_tier: tertiary

Enter fullscreen mode Exit fullscreen mode


Target-State Observability Architecture

────────────────────────────────────────────────────────────────────────────
LAYER              GRID EQUIVALENT            SRE EQUIVALENT
────────────────────────────────────────────────────────────────────────────
Physical           IEDs, PMUs, RTUs,          Application instrumentation
Instrumentation    smart meters               (OTel SDK, Prometheus client)

Protocol           DNP3/IEC61850 →            OpenTelemetry Collector
Translation        MQTT/gRPC gateway          protocol normalisation

Streaming          Kafka / event broker       OTLP metrics/trace pipeline
Transport

Time-Series        Historian (OSIsoft PI,     Prometheus / Thanos
Storage            Emerson Ovation)

Log Aggregation    Splunk Enterprise          Splunk Enterprise
                   (SCADA events, relay       (application + audit logs)
                   records, CIP trails)

Analysis           EMS / DMS analytics        Grafana / Splunk dashboards
Platform                                      SLO burn rate views

Alerting           Upgraded alarm mgmt        Prometheus Alertmanager
                   (SLO-aware)                with burn rate rules

Automation         SCADA automated            Kubernetes controllers,
Response           switching sequences        event-driven remediations
────────────────────────────────────────────────────────────────────────────

Enter fullscreen mode Exit fullscreen mode

A unified Splunk deployment that ingests SCADA event streams, protection relay operation records, CIP audit logs, and control system application logs creates the cross-domain correlation capability that is the difference between detecting individual anomalies and understanding cascading failure chains before they propagate.


Common Antipatterns

  • The Alarm Flood antipattern → Grid control centres routinely operate with hundreds of active alarms in normal conditions. Operators learn to filter by experience rather than by signal quality. Every alarm must trace to one of the Four Golden Signal categories and must have a defined response action. Alarms without response actions are not alarms; they are noise.

  • The SCADA-as-Source-of-Truth antipattern → Treating the SCADA display as ground truth rather than a model that must be continuously validated. A SCADA system that has lost communication with a substation will often display the last known state rather than an explicit unknown indicator — creating exactly the situational awareness gap that preceded the 2003 blackout.

  • The Compliance-as-Observability antipattern → Instrumenting grid systems to satisfy CIP audit requirements rather than to maximise operational situational awareness. These goals overlap but are not identical. CIP drives documentation of security events; operational observability requires telemetry completeness, latency minimisation, and cross-domain correlation that compliance frameworks do not mandate.

  • The OT/IT Separation antipattern → Maintaining strict organisational separation between OT operations and IT/SRE teams, preventing the application of modern observability practices to grid control systems. The security rationale for network segmentation is valid; the operational rationale for organisational siloing is not.

  • The Event-Driven-Only Observability antipattern → Relying solely on discrete event logs without continuous time-series telemetry at the control system layer. Event logs capture what happened; time-series telemetry captures the leading indicators of what is about to happen.


Maturity Progression

────────────────────────────────────────────────────────────────────────────
STAGE        GRID OBSERVABILITY STATE            NORTH STAR SIGNAL
────────────────────────────────────────────────────────────────────────────
Reactive     SCADA alarms threshold-based.       Operators filter noise
             Alarm flooding common.              by experience, not design.
             OT/IT data in silos.

Defined      Four Golden Signals instrumented    SLIs defined for state
             at control system layer.            estimation, SCADA
             OT/IT pipeline has SLIs.            commands, comms.

Measured     SLOs established with error         Burn rate alerts replace
             budgets. DORA metrics applied       threshold alerts. CIP
             to control system changes.          compliance via GitOps.

Optimised    Automated pipeline recovery.        Cross-domain Splunk
             Model-driven switching orders.      correlation detects
             AGC/EMS performance SLO-gated.      cascade precursors.
                                                 MTTR < 15 minutes.

Generative   Grid observability platform         Development teams for
             shared across OT and IT.            EMS/SCADA own their SLOs.
             PMU-based wide-area monitoring      N-1 contingency analysis
             SLO-anchored.                       automated.
────────────────────────────────────────────────────────────────────────────

Enter fullscreen mode Exit fullscreen mode


Five Action Items for This Week

  1. Map your grid control systems to the Four Golden Signals framework. For each critical system (EMS, DMS, SCADA, outage management), identify which metrics correspond to Latency, Traffic, Errors, and Saturation. The mapping exercise itself surfaces gaps in current instrumentation.

  2. Instrument your OT/IT data pipeline as a first-class service. Define an SLI for telemetry completeness and pipeline latency. The pipeline carrying substation data to your EMS is more reliability-critical than most services your organisation has SLOs for — and it is almost certainly running without them.

  3. Audit your alarm rationalisation state against the Four Golden Signals. Count how many active alarms in your control centre do not trace to a specific Golden Signal category. Any alarm without a defined response action is a candidate for suppression. Alarm count reduction is an operational safety improvement.

  4. Reframe one CIP compliance requirement as a continuously verified SLO. Pick CIP-010 (configuration change management) or CIP-007 (security event logging) and identify the SLI that would express that requirement as a continuously monitored objective rather than a periodic audit artefact.

  5. Identify the top three manual toil categories in your control centre operations. Switching order preparation, shift handover documentation, and reliability metric reporting are the most common high-toil categories. Quantifying them in operator-hours per month creates the business case for automation investment that operations leadership can act on.


"The 2003 Northeast blackout did not fail for lack of sensors. It failed for lack of observability — the ability to ask questions the designers had not anticipated, about a failure mode they had not modelled, in time to intervene. The power sector has spent two decades strengthening its physical infrastructure since that day. The software layer that mediates between the physical grid and the humans who operate it deserves the same rigour. Google SRE built that rigour for the internet. The grid needs it now."


What Comes Next

The energy grid is the most visible critical infrastructure use case for SRE observability principles, but it is not the only one. Financial services present a different set of constraints — sub-millisecond latency requirements, regulatory reporting obligations, and systemic risk considerations that raise the stakes of error budget decisions beyond any single institution's boundaries. The next post examines how SRE error budgets quantify the hidden economic cost of downtime and why managing that cost is a matter of national economic infrastructure, not just engineering performance.