The current guide has no section titled “incident management”. The topic is spread across 3.3 (mitigating incident impact on users) and 4.4 (troubleshooting infrastructure, CI/CD, application, observability and performance issues), and the catalog domain gathers them with the SRE incident-response practice that those sections assume (roles, communication, postmortems). Expect scenarios that start with an alert or a customer complaint and ask for the first action, the next diagnostic step, or the process that should have existed. The ordering principle: mitigate first, diagnose second, fix root cause later.
Incident response process
An incident is any event that threatens an SLO enough that a coordinated response is needed. Declare early; an incident that turns out small costs little, one declared late costs a lot. Define severity levels in advance (for example SEV1 a full outage or data loss, SEV2 a major feature down or error budget burning fast, SEV3 a minor degradation) because severity decides who is paged and how often you update.
Lifecycle
- Detect: an alert (SLO burn, uptime check, log-based alert), a customer report, or an engineer notices. Good detection is symptom-based.
- Triage: acknowledge the page, assess impact (who, how many, how bad) and assign a severity.
- Declare and assemble the response; open the incident channel or video bridge and a live incident document.
- Mitigate to stop user impact (roll back, drain, add capacity, disable a feature). Don’t wait for the cause.
- Resolve: confirm the SLI has recovered and holds, close the incident.
- Learn: blameless postmortem, action items tracked to completion.
Roles (Google’s incident command model)
| Role | Responsibility |
|---|---|
| Incident commander (IC) | Owns the response, holds the high-level state, delegates everything else, decides priorities. Doesn’t debug. Can hand the role over explicitly (“you are now IC”) |
| Operations lead (ops) | The only group that changes the system; works the technical mitigation with their team, reports to the IC |
| Communications lead | Keeps stakeholders, support and customers updated (status page, regular updates), and keeps the incident document current; shields responders from interruptions |
| Planning lead | Tracks longer-term items, bugs to file, handoffs, supplies for a long incident |
| Scribe / subject experts | Records the timeline; specialists join as asked |
Principles: clear command (everyone knows who is in charge), one operations lead (no two people changing production at once), separate roles in a small team if possible but never skip the IC, and explicit handoffs for long incidents (a tired IC at hour eight is a risk). The IC role summary is “coordinate, communicate, control”.
Communication
- A single channel (chat room or bridge) and a living document with timeline, current hypotheses, actions and owners.
- Regular updates at an agreed cadence (every 30 minutes for a SEV1) even if the news is “no change”. Say what is known, impact, what’s being done and when the next update is.
- Use internal and external wording; customers get plain impact statements and a status page entry, not speculation.
- Google Cloud customers use Personalized Service Health (events affecting their projects, with alerts, export to Cloud Logging, and notification channels) and the public status dashboard to tell whether the problem is theirs or Google’s, then open a Cloud Customer Care case with the right priority (P1 critical down to P4) and attach evidence.
- Cloud Monitoring incidents show the alert, its documentation, links to logs and charts; acknowledge them so teammates don’t duplicate effort.
Postmortems
A blameless postmortem is a written record of an incident that focuses on systems and processes, not people. The aim is learning. Blame makes people hide information.
Typical contents: summary, impact (duration, users, SLO and error budget consumed), timeline with detection and mitigation times, root cause and contributing factors (ask “why” repeatedly), what went well and badly, where luck helped, and action items with an owner, priority and due date (prevent, detect, mitigate faster). Review it in a meeting and share it widely. Write one for any user-visible outage above a severity threshold, any data loss, and any incident where an on-call intervention was needed or the process failed.
Also: error budget accounting (the incident consumed X% of budget, which feeds the budget policy), trends across postmortems, game days / Wheel of Misfortune exercises to practise, and disaster recovery tests. Track time to detect, time to mitigate and time to resolve to measure and improve response.
Mitigating incident impact on users (guide 3.3)
Mitigation reduces or stops the impact without necessarily understanding the cause. The options in rough order of speed and safety:
| Tactic | When | How on Google Cloud |
|---|---|---|
| Roll back | A recent deploy or config change correlates with the start | Cloud Run: send traffic back to the previous revision (instant). Cloud Deploy: roll back the target to the previous release. GKE: kubectl rollout undo. MIG: apply the previous instance template. Feature flag: switch the flag off. Terraform/config: revert the commit and apply. Roll back is usually the fastest and safest first move after a change |
| Drain traffic from the failing part | One zone, region, backend or version is bad | Global external Application Load Balancer: set a backend’s capacity scaler to 0, remove the instance group or NEG from the backend service, or fail a health check; Cloud Run traffic split to 0 on the bad revision; GKE cordon and drain a node; take a bad canary out |
| Redirect traffic | A region or provider is down | Multi-region global load balancer reroutes by health automatically; Cloud DNS routing policies (failover, geolocation, weighted); fail over to a standby region; point at a static “degraded” page via a backend bucket |
| Add capacity | Saturation: CPU, queues, connections | Raise max replicas or min instances (Cloud Run), scale the MIG or node pool manually (autoscaling may be too slow or blocked), request or free quota, use a reservation, scale a database tier or add read replicas |
| Shed load / degrade gracefully | Capacity can’t catch up | Rate limiting with Cloud Armor (throttle, ban), load shedding low-priority requests, disable expensive features, serve cached content (Cloud CDN), queue work through Pub/Sub, turn on a read-only mode |
| Isolate a noisy cause | One tenant, client or job overwhelms | Cloud Armor rule or IAP block for the source, pause the batch job, disable the abusive API key |
| Restart / replace | A leak or stuck process | Last resort; hides the cause, so record evidence (logs, heap) first |
Guidance:
- Mitigate before you diagnose. A rollback that works tells you where the cause is.
- Prefer reversible, low-risk actions; avoid new code changes (a forward fix) under pressure unless rollback is impossible, for example when a data migration already ran.
- Check what changed: deployments, config and flag changes, scaling events, traffic pattern, dependency incidents, certificate or quota expiry. Cloud Audit Logs and the Cloud Deploy history list recent changes.
- Capacity addition has traps: autoscaling limited by quota or max instances, cold start time, a downstream (database, API) that gets crushed by the extra load, health checks marking healthy new instances unhealthy under load.
- Prove recovery by watching the SLI, not the absence of alerts.
- Prepare ahead: health checks and autohealing, multi-zone and multi-region layout, tested rollback procedure, runbooks, circuit breakers and retries with exponential backoff and jitter (to avoid retry storms), and graceful degradation.
Troubleshooting (guide 4.4)
Approach: restate the symptom, check what changed, check the golden signals (latency, traffic, errors, saturation), use logs, metrics and traces to narrow down by component, form a hypothesis, test it, mitigate. Use Gemini Cloud Assist investigations for a fast first pass over logs, metrics and recent changes, then confirm.
Infrastructure
| Symptom | Where to look and typical causes |
|---|---|
| VM won’t boot or is unreachable | Serial console output (enable interactive serial console or read the log), boot disk full or corrupt, startup script failure, firewall or OS login, Cloud Logging, Connectivity Tests (a config-based reachability analysis through firewall, route, NAT) |
| Network drops or timeouts | VPC Flow Logs, Firewall Rules Logging, Network Intelligence Center (Connectivity Tests, Performance Dashboard, Network Topology, Firewall Insights), routes and peering, Cloud NAT port exhaustion (OUT_OF_RESOURCES drops), MTU, load balancer health-check firewall rules (allow Google’s health check ranges) |
| Resource creation fails | Quota exceeded (QUOTA_EXCEEDED), organization policy violation, IAM (PERMISSION_DENIED, use Policy Troubleshooter), resource not available in zone (ZONE_RESOURCE_POOL_EXHAUSTED; try another zone or a reservation) |
| MIG not scaling or healing | Health check failing, startup slower than the initialization period, quota, template invalid; check the MIG errors tab |
GKE Pod Pending |
Insufficient resources (requests too high), no node matches selector or taints, quota or IP exhaustion, cluster autoscaler can’t scale (max nodes, quota) |
GKE CrashLoopBackOff |
App crashing: read kubectl logs --previous, bad config or secret, failing probe |
GKE OOMKilled |
Memory limit too low or leak; raise limits or fix; check kubectl describe pod and memory metrics |
GKE ImagePullBackOff |
Wrong image, no access (node service account needs Artifact Registry reader), private registry network path, blocked by Binary Authorization |
GKE node NotReady |
Node resource pressure, kubelet issue, upgrade in progress; kubectl describe node, node logs |
Cloud Run 503 or slow |
Container not listening on $PORT, crash at startup, max instances or concurrency reached (429), cold starts, slow dependency, request timeout; read Cloud Run request logs and revision details |
| Database slow | Query Insights (Cloud SQL), lock contention, connection limits (use connection pooling), CPU or IOPS limits, missing index, failover |
CI/CD pipeline
Cloud Build: read the build log (Cloud Logging, step-by-step), check the failing step’s exit code, the service account permissions, timeout, substitutions, private network reachability, quota on concurrent builds or machine types, secret access. Cloud Deploy: the rollout and job run logs; render errors (Skaffold), execution service account permissions, target connectivity, verification failures, approvals waiting, automations suspended; pipeline stuck because a previous rollout is still pending. Trigger not firing: filters and regex, repository connection. Supply chain: image denied by Binary Authorization (check the audit log for the reason: missing attestation, wrong digest vs tag, new image not signed) or vulnerability policy.
Application
- Error Reporting groups exceptions, shows first and last seen, and notifies on new errors. It makes a regression after a release obvious (a new error group).
- Logs Explorer filtered by trace, severity and revision; compare before and after a release.
- Metrics: error ratio by version or revision, latency percentile, saturation (CPU, memory, threads, connection pool), queue depth.
- Traces: find the slow or failing span across services (see the monitoring notes). Profiler finds hot code. Cloud Debugger and Snapshot Debugger were shut down, so rely on structured logs, traces and profiles, and reproduce in a lower environment.
- Common causes: bad release (roll back), config or flag, dependency failure or timeout (retry storm), resource leak, thundering herd after a restart, expired certificate or credential, quota (API rate limit).
Observability issues (the monitoring system itself)
| Symptom | Causes |
|---|---|
| Logs missing | Ops Agent not installed or failing; service account lacks logging.logWriter; an exclusion filter drops them; sink or bucket in the wrong project; log level too high; the app writes to a file, not stdout; log entry too large or rate limit; retention expired |
| Metrics missing | No Ops Agent (memory, disk), no monitoring.metricWriter, wrong metrics scope (project not added), Prometheus scraping misconfigured (PodMonitoring selector or port), metric label cardinality limits, unit or aligner mistakes |
| Alert didn’t fire | Condition filter/resource mismatch, duration too long, wrong aggregation, data gaps (use absence conditions), policy disabled, snoozed, notification channel unverified, permissions on the Pub/Sub or webhook, alert policy in the wrong scoping project |
| Alert noisy | Threshold on a cause, duration too short, per-instance conditions, no ratio; move to SLO burn rate |
| Export to BigQuery or Storage fails | Sink writer identity lacks role, dataset in another region or policy, filter typo |
| Costs spike | Debug logging, new high-cardinality label, VPC Flow Logs at 100% sampling, Data Access logs enabled; check the Logs Volume view and metrics ingestion charts |
| Traces incomplete | Context propagation broken, sampling too low, service not instrumented, load balancer or proxy strips headers |
Performance and latency
- Where is the latency: client, network, load balancer, service, dependency, database? The load balancer logs and metrics (
backend_latencies,total_latencies) separate edge from backend time. - Trace waterfall to find the slow span; Profiler for CPU and memory hot spots; Query Insights for slow SQL.
- Check saturation: CPU throttling (Pod limits), memory pressure and garbage collection, thread or connection pool exhaustion, disk IOPS, network egress limits, Cloud NAT port exhaustion.
- Check cold starts (Cloud Run min instances, startup CPU boost, smaller images), autoscaler lag (cool-down, target too high), cross-region calls, and missing caching or CDN.
- Fixes: scale or right-size, cache (Memorystore, Cloud CDN), batch or parallelise calls, add indexes, connection pooling, move the dependency closer, and use timeouts, retries with backoff and circuit breakers so one slow dependency doesn’t cascade.
Exam checklist
- Mitigate first (rollback, drain, redirect, add capacity), root cause later. Rollback is the default first move after a recent change.
- Incident commander coordinates and delegates, one operations lead changes the system, the communications lead updates stakeholders and the document; hand over explicitly; declare early.
- Postmortems are blameless with owned, dated action items; they record impact and error budget consumed.
- Drain with a capacity scaler of 0 or removing the backend; redirect with global load balancing or DNS failover; shed load with Cloud Armor, caching and degrading features.
- Autoscaling can be blocked by quota, max instances and slow startup; a downstream can collapse under added capacity.
- Pending Pods: requests, taints, quota, autoscaler limits. OOMKilled: memory limit. ImagePullBackOff: image name or Artifact Registry reader. CrashLoopBackOff: previous logs.
- Cloud Run failures:
$PORT, startup time, max instances, request timeout. - Cloud Build failures are mostly service account permissions, private networks and timeouts; Cloud Deploy failures are render, execution service account and verification.
- Missing logs or metrics: Ops Agent, writer roles, exclusion filters, metrics scope, sink writer identity.
- Use Connectivity Tests, Flow Logs and firewall logs for network issues; Trace, Profiler and Query Insights for latency.
- Personalized Service Health tells you if Google is the cause.