runbooks-troubleshooting-guides
Use when creating troubleshooting guides and diagnostic procedures for operational issues. Covers problem diagnosis, root cause analysis, and systematic debugging.
What this skill does
# Runbooks - Troubleshooting Guides
Creating effective troubleshooting guides for diagnosing and resolving operational issues.
## Troubleshooting Framework
### The 5-Step Method
1. **Observe** - Gather symptoms and data
2. **Hypothesize** - Form theories about root cause
3. **Test** - Validate hypotheses with experiments
4. **Fix** - Apply solution
5. **Verify** - Confirm resolution
## Basic Troubleshooting Guide
```markdown
# Troubleshooting: [Problem Statement]
## Symptoms
What the user/system is experiencing:
- API returning 503 errors
- Response time > 10 seconds
- High CPU usage alerts
## Quick Checks (< 2 minutes)
### 1. Is the service running?
```bash
kubectl get pods -n production | grep api-server
```
**Expected:** STATUS = Running
### 2. Are recent deploys the cause?
```bash
kubectl rollout history deployment/api-server
```
**Check:** Did we deploy in the last 30 minutes?
### 3. Is this affecting all users?
Check error rate in Datadog:
- If < 5%: Isolated issue, may be client-specific
- If > 50%: Widespread issue, likely infrastructure
## Common Causes
| Symptom | Likely Cause | Quick Fix |
|---------|-------------|-----------|
| 503 errors | Pod crashlooping | Restart deployment |
| Slow responses | Database connection pool | Increase pool size |
| High memory | Memory leak | Restart pods |
## Detailed Diagnosis
### Hypothesis 1: Database Connection Issues
**Test:**
```bash
# Check database connections
kubectl exec -it api-server-abc -- psql -h $DB_HOST -c "SELECT count(*) FROM pg_stat_activity"
```
**If connections > 90:** Pool is saturated.
**Next step:** Increase pool size or investigate slow queries.
### Hypothesis 2: High Traffic Spike
**Test:**
```bash
# Check request rate
curl -H "Authorization: Bearer $DD_API_KEY" \
"https://api.datadoghq.com/api/v1/query?query=sum:nginx.requests{*}"
```
**If requests 3x normal:** Traffic spike.
**Next step:** Scale up pods or enable rate limiting.
### Hypothesis 3: External Service Degradation
**Test:**
```bash
# Check third-party API
curl -w "@curl-format.txt" https://api.stripe.com/v1/charges
```
**If response time > 2s:** External service slow.
**Next step:** Implement circuit breaker or increase timeouts.
## Resolution Steps
### Solution A: Immediate (< 5 minutes)
Restart affected pods:
```bash
kubectl rollout restart deployment/api-server -n production
```
**When to use:** Quick mitigation while investigating root cause.
### Solution B: Short-term (< 30 minutes)
Scale up resources:
```bash
kubectl scale deployment/api-server --replicas=10 -n production
```
**When to use:** Traffic spike or resource exhaustion.
### Solution C: Long-term (< 2 hours)
Fix root cause:
1. Identify slow database query
2. Add database index
3. Deploy code optimization
**When to use:** After immediate pressure is relieved.
## Validation
- [ ] Error rate < 1%
- [ ] Response time p95 < 200ms
- [ ] CPU usage < 70%
- [ ] No active alerts
## Prevention
How to prevent this issue in the future:
- Add monitoring alert for connection pool saturation
- Implement auto-scaling based on request rate
- Set up load testing to find capacity limits
```
## Decision Tree Format
```markdown
# Troubleshooting: Slow API Responses
## Start Here
```
Check response time
|
┌──────────────┴──────────────┐
│ │
< 500ms > 500ms
│ │
NOT THIS RUNBOOK Continue below
```
## Step 1: Locate the Slowness
```bash
# Check which service is slow
curl -w "@timing.txt" https://api.example.com/users
```
**Decision:**
- Time to first byte > 2s → Database slow (go to Step 2)
- Time to first byte < 100ms → Network slow (go to Step 3)
- Timeout → Service down (go to Step 4)
## Step 2: Database Diagnosis
```bash
# Check active queries
psql -c "SELECT query, state, query_start FROM pg_stat_activity WHERE state != 'idle'"
```
**Decision:**
- Query running > 5s → Slow query (Solution A)
- Many idle in transaction → Connection leak (Solution B)
- High connection count → Pool exhausted (Solution C)
### Solution A: Optimize Slow Query
1. Identify slow query from above
2. Run EXPLAIN ANALYZE
3. Add missing index or optimize query
### Solution B: Fix Connection Leak
1. Restart application pods
2. Review code for unclosed connections
3. Add connection timeout
### Solution C: Increase Connection Pool
1. Edit database config
2. Increase max_connections
3. Update application pool size
## Step 3: Network Diagnosis
... (continue with network troubleshooting)
```
## Layered Troubleshooting
### Layer 1: Application
```markdown
## Application Layer Issues
### Check Application Health
1. **Health endpoint:**
```bash
curl https://api.example.com/health
```
1. **Application logs:**
```bash
kubectl logs deployment/api-server --tail=100 | grep ERROR
```
2. **Application metrics:**
- Request rate
- Error rate
- Response time percentiles
### Common Application Issues
**Memory Leak**
- **Symptom:** Memory usage climbing over time
- **Test:** Check memory metrics in Datadog
- **Fix:** Restart pods, investigate with heap dump
**Thread Starvation**
- **Symptom:** Slow responses, high CPU
- **Test:** Thread dump analysis
- **Fix:** Increase thread pool size
**Code Bug**
- **Symptom:** Specific endpoints fail
- **Test:** Review recent deploys
- **Fix:** Rollback or hotfix
```
### Layer 2: Infrastructure
```markdown
## Infrastructure Layer Issues
### Check Infrastructure Health
1. **Node resources:**
```bash
kubectl top nodes
```
1. **Pod resources:**
```bash
kubectl top pods -n production
```
2. **Network connectivity:**
```bash
kubectl run -it --rm debug --image=nicolaka/netshoot --restart=Never -- ping database.internal
```
### Common Infrastructure Issues
**Node Under Pressure**
- **Symptom:** Pods evicted, slow scheduling
- **Test:** `kubectl describe node` for pressure conditions
- **Fix:** Scale node pool or add nodes
**Network Partition**
- **Symptom:** Intermittent timeouts
- **Test:** MTR between pods and destination
- **Fix:** Check security groups, routing tables
**Disk I/O Saturation**
- **Symptom:** Slow database, high latency
- **Test:** Check IOPS metrics in CloudWatch
- **Fix:** Increase provisioned IOPS
```
### Layer 3: External Dependencies
```markdown
## External Dependencies Issues
### Check External Services
1. **Third-party APIs:**
```bash
curl -w "@timing.txt" https://api.stripe.com/health
```
1. **Status pages:**
- Check status.stripe.com
- Check status.aws.amazon.com
2. **DNS resolution:**
```bash
nslookup api.stripe.com
dig api.stripe.com
```
### Common External Issues
**API Rate Limiting**
- **Symptom:** 429 responses from external service
- **Test:** Check rate limit headers
- **Fix:** Implement backoff, cache responses
**Service Degradation**
- **Symptom:** Slow external API responses
- **Test:** Check their status page
- **Fix:** Implement circuit breaker, use fallback
**DNS Failure**
- **Symptom:** Cannot resolve hostname
- **Test:** DNS queries
- **Fix:** Check DNS config, try alternative resolver
```
## Systematic Debugging
### Use the Scientific Method
```markdown
# Debugging: Database Connection Failures
## 1. Observation
**What we know:**
- Error: "connection refused" in logs
- Started: 2025-01-15 14:30 UTC
- Frequency: Every database query fails
- Scope: All pods affected
## 2. Hypothesis
**Possible causes:**
1. Database instance is down
2. Security group blocking traffic
3. Network partition
4. Wrong credentials
## 3. Test Each Hypothesis
### Test 1: Database instance status
```bash
aws rds describe-db-instances --db-instance-identifier prod-db | jq '.DBInstances[0].DBInstanceStatus'
```
**Result:** "available"
**Conclusion:** Database is running ✗ Hypothesis 1Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.