| name | incident-response |
| description | Structured incident response and diagnosis workflows |
| homepage | https://sre.google/sre-book/managing-incidents/ |
| metadata | {"emoji":"🚨","version":"1.0.0","author":"Gourav Shah","license":"MIT","requires":{"any_bins":["kubectl","docker","aws"]},"tags":["incidents","sre","troubleshooting","on-call"]} |
Incident Response
Structured workflow for diagnosing and resolving production incidents.
When to Use This Skill
Use this skill when:
- An alert has fired
- Users report issues
- Monitoring shows anomalies
- System behavior is unexpected
- You're the on-call responder
Incident Response Phases
Phase 1: Triage (First 5 minutes)
Goal: Assess severity and impact.
Quick Assessment Questions
- What is broken? (service, feature, infrastructure)
- Who is affected? (all users, subset, internal only)
- When did it start? (correlate with deployments/changes)
- Is it getting worse? (check error rate trend)
Severity Classification
| Severity | Impact | Response |
|---|
| SEV1 | Complete outage, all users affected | All hands, exec notification |
| SEV2 | Major feature broken, many users affected | Primary + backup on-call |
| SEV3 | Minor feature broken, some users affected | Primary on-call |
| SEV4 | No user impact, potential issue | Next business day |
Phase 2: Context Gathering (5-15 minutes)
Goal: Collect data to understand the problem.
Kubernetes Context
kubectl get nodes
kubectl get pods -A | grep -v Running | grep -v Completed
kubectl get events -A --sort-by='.lastTimestamp' | tail -30
kubectl get pods -l app=<service-name> -o wide
kubectl logs -l app=<service-name> --tail=100
Recent Changes
kubectl get deployments -A -o custom-columns=\
'NAMESPACE:.metadata.namespace,NAME:.metadata.name,UPDATED:.metadata.creationTimestamp' \
| sort -k3 -r | head -10
git log --oneline --since="2 hours ago"
Metrics Check
aws cloudwatch get-metric-statistics \
--namespace <namespace> \
--metric-name <metric> \
--start-time $(date -u -v-1H +%Y-%m-%dT%H:%M:%SZ) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
--period 60 \
--statistics Average
Phase 3: Diagnosis (15-30 minutes)
Goal: Identify root cause.
Common Root Causes
- Recent deployment - Check if timing correlates
- Resource exhaustion - CPU, memory, disk, connections
- External dependency failure - Database, API, DNS
- Configuration change - ConfigMaps, secrets, feature flags
- Traffic spike - Unexpected load
- Certificate/credential expiry - Auth failures
- Infrastructure issue - Node failure, network partition
Diagnosis Decision Tree
Is there a recent deployment?
├── Yes → Check deployment logs, consider rollback
└── No → Continue
Are pods crashing?
├── Yes → Check logs: kubectl logs <pod> --previous
└── No → Continue
Are resources exhausted?
├── Yes → Scale up or optimize
└── No → Continue
Is an external dependency failing?
├── Yes → Check dependency status, implement fallback
└── No → Continue
Is there a traffic spike?
├── Yes → Scale up, enable rate limiting
└── No → Escalate for deeper investigation
Phase 4: Mitigation (ASAP)
Goal: Restore service, even if root cause unknown.
Quick Mitigations
Rollback Deployment:
kubectl rollout undo deployment/<name> -n <namespace>
kubectl rollout status deployment/<name> -n <namespace>
Scale Up:
kubectl scale deployment/<name> --replicas=5 -n <namespace>
Restart Pods:
kubectl rollout restart deployment/<name> -n <namespace>
Toggle Feature Flag:
Redirect Traffic:
Phase 5: Communication
Goal: Keep stakeholders informed.
Status Update Template
**Incident Update - [SERVICE] - [SEV LEVEL]**
**Status:** Investigating / Identified / Mitigating / Resolved
**Impact:** [Who/what is affected]
**Start Time:** [When it started]
**Current Actions:** [What we're doing]
**Next Update:** [When to expect next update]
---
Incident Commander: [Name]
Communication Cadence
| Severity | Update Frequency |
|---|
| SEV1 | Every 15 minutes |
| SEV2 | Every 30 minutes |
| SEV3 | Every hour |
| SEV4 | End of day |
Phase 6: Resolution
Goal: Confirm service is restored.
Verification Checklist
Close Incident
**Incident Resolved - [SERVICE]**
**Duration:** [Start] to [End] ([X] minutes)
**Root Cause:** [Brief description]
**Resolution:** [What fixed it]
**Follow-ups:** [Links to action items]
Post-mortem scheduled: [Date/Time]
Post-Incident
Post-Mortem Template
# Incident Post-Mortem: [Title]
**Date:** [Date]
**Duration:** [Duration]
**Severity:** [SEV Level]
**Authors:** [Names]
## Summary
[2-3 sentence summary]
## Impact
- Users affected: [Number/percentage]
- Revenue impact: [If applicable]
- SLA impact: [If applicable]
## Timeline
- HH:MM - [Event]
- HH:MM - [Event]
- HH:MM - [Event]
## Root Cause
[Detailed explanation]
## Resolution
[How it was fixed]
## Lessons Learned
### What went well
- [Item]
### What could be improved
- [Item]
## Action Items
- [ ] [Action] - Owner: [Name] - Due: [Date]
- [ ] [Action] - Owner: [Name] - Due: [Date]
Quick Reference
Essential Commands
kubectl get nodes && kubectl get pods -A | grep -v Running
kubectl get pods,svc,endpoints -l app=<service>
kubectl get events --sort-by='.lastTimestamp' | tail -20
kubectl logs -l app=<service> --tail=50 --all-containers
Escalation Contacts
Document your escalation path:
- Primary on-call
- Secondary on-call
- Team lead
- Engineering manager
- VP Engineering (SEV1 only)
Related Skills
- k8s-debug: For Kubernetes-specific debugging
- log-analysis: For log pattern analysis
- argocd-gitops: For GitOps rollbacks