Incident Runbooks
Incident Runbooks
Section titled “Incident Runbooks”Last Updated: 2026-01-07
Overview
Section titled “Overview”Quick reference guides for responding to common alerts and incidents in the PLGT Observability Stack.
Runbook Index
Section titled “Runbook Index”| Category | Alert | Severity |
|---|---|---|
| Website Down | SiteDown, UmdoniSiteDown | Critical |
| SSL Certificate Expiring | SSLCertExpiring* | Warning/Critical |
| High Response Time | HighResponseTime | Warning |
| Failed Login Spike | UmdoniFailedLoginSpike | Warning |
| Brute Force Detected | UmdoniBruteForceDetected | Critical |
| PLGT Stack Issues | *Down | Critical |
| Database Issues | Connection failures | Critical |
| Disk Space Critical | *DiskCritical | Critical |
Website Down
Section titled “Website Down”Alerts: SiteDown, UmdoniSiteDown
Severity: Critical
Impact: Users cannot access the website
Immediate Actions
Section titled “Immediate Actions”# Test site accessibilitycurl -sI https://umdoni.gov.za --max-time 10
# Check from external service# https://downforeveryoneorjustme.com/umdoni.gov.za# DNS checkdig umdoni.gov.za
# SSL checkecho | openssl s_client -connect umdoni.gov.za:443 2>/dev/null | head -5# On hosting serversystemctl status apache2tail -100 /var/log/apache2/error.logdf -hTroubleshooting Decision Tree
Section titled “Troubleshooting Decision Tree”graph TD A[Site Down Alert] --> B{DNS Resolving?} B -->|No| C[Check DNS Provider] B -->|Yes| D{Server Responding?} D -->|No| E[Check Hosting Provider] D -->|Yes| F{Application Error?} F -->|Yes| G[Check Error Logs] F -->|No| H[Network/Firewall Issue]Escalation Timeline
Section titled “Escalation Timeline”| Time | Action |
|---|---|
| 0-5 min | Verify and diagnose |
| 5-15 min | Attempt restart/fix |
| 15+ min | Contact hosting support |
| 30+ min | Escalate to senior team |
SSL Certificate Expiring
Section titled “SSL Certificate Expiring”Alerts: SSLCertExpiringSoon, SSLCertExpiryCritical
Severity: Warning (30 days), Critical (7 days)
Impact: Browser security warnings, potential site blocking
Check Current Status
Section titled “Check Current Status”# Check expiry dateecho | openssl s_client -servername umdoni.gov.za -connect umdoni.gov.za:443 2>/dev/null \ | openssl x509 -noout -dates
# Calculate days remainingecho | openssl s_client -servername umdoni.gov.za -connect umdoni.gov.za:443 2>/dev/null \ | openssl x509 -noout -enddateRenewal Process
Section titled “Renewal Process”- Login to cPanel
- Navigate to SSL/TLS Status
- Click Run AutoSSL
- Wait 5-10 minutes
- Verify renewal
- Generate CSR in cPanel
- Purchase/obtain certificate from CA
- Install via cPanel SSL Manager
- Verify installation
Verification
Section titled “Verification”curl -vI https://umdoni.gov.za 2>&1 | grep -E "expire|subject"High Response Time
Section titled “High Response Time”Alert: HighResponseTime
Severity: Warning
Impact: Poor user experience, potential timeouts
Diagnosis
Section titled “Diagnosis”# Measure response timecurl -o /dev/null -s -w "Total: %{time_total}s\nConnect: %{time_connect}s\nTTFB: %{time_starttransfer}s\n" \ https://umdoni.gov.za
# Check server load (on server)uptimetop -bn1 | head -20Common Causes & Solutions
Section titled “Common Causes & Solutions”| Cause | Diagnosis | Solution |
|---|---|---|
| High CPU | top shows >80% | Kill runaway processes |
| Slow database | Check slow query log | Optimize queries, add indexes |
| Large assets | Browser dev tools | Compress images, enable gzip |
| No caching | Check response headers | Enable browser caching |
Quick Fixes
Section titled “Quick Fixes”Enable Compression (.htaccess):
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/css application/javascript</IfModule>Enable Caching (.htaccess):
<IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpg "access plus 1 month" ExpiresByType text/css "access plus 1 week"</IfModule>Failed Login Spike
Section titled “Failed Login Spike”Alert: UmdoniFailedLoginSpike
Severity: Warning
Impact: Potential security incident, user lockouts
Investigation
Section titled “Investigation”-
Check Grafana Dashboard
- Navigate to:
monitor.isutech.co.za/d/umdoni-activity - Review “Failed Login Attempts” panel
- Navigate to:
-
Query Loki
{job="umdoni-activity"} |= "failed" |~ "login|Login" -
Identify Pattern
| Pattern | Likely Cause | Action |
|---|---|---|
| Same user, multiple attempts | Password issue | Contact user, reset password |
| Same IP, multiple users | Targeted attack | Block IP |
| Random users/IPs | Normal failures | Monitor only |
Response Actions
Section titled “Response Actions”User Password Issue:
- Contact user directly
- Reset password if needed
- Check for account lockout
Suspicious Activity:
- Block IP in firewall
- Enable CAPTCHA if available
- Continue monitoring
Brute Force Detected
Section titled “Brute Force Detected”Alert: UmdoniBruteForceDetected
Severity: Critical
Impact: Active attack, potential account compromise
Immediate Actions
Section titled “Immediate Actions”# Query Loki for attacking IP{job="umdoni-activity"} |= "failed" | json | ip != ""Via cPanel:
- Imunify360 → Block IP
Via .htaccess:
order allow,denydeny from 123.456.789.0allow from all# Check for successful logins from attacker IP{job="umdoni-activity"} |= "success" | json | ip = "ATTACKER_IP"Post-Incident Actions
Section titled “Post-Incident Actions”-
Audit Accounts
- Check for unusual activity
- Force password reset if compromise suspected
-
Security Improvements
- Enable 2FA if available
- Implement rate limiting
- Add CAPTCHA to login
-
Document Incident
- Time of attack
- Attacking IPs
- Actions taken
- Accounts affected
PLGT Stack Issues
Section titled “PLGT Stack Issues”Alerts: PrometheusDown, LokiDown, GrafanaDown, AlertmanagerDown
Severity: Critical
Impact: Monitoring capabilities degraded or unavailable
Access PLGT Server
Section titled “Access PLGT Server”ssh root@46.224.40.5cd /opt/plg-unifiedQuick Diagnostics
Section titled “Quick Diagnostics”# Check all servicesdocker compose ps
# Check specific service logsdocker compose logs <service> --tail 100
# Check resource usagedocker stats --no-streamCommon Issues
Section titled “Common Issues”docker compose restart <service>docker compose logs <service> --tail 50free -m# Increase limits in docker-compose.yml# Restart stackdocker compose down && docker compose up -ddf -h./scripts/disk-cleanup.shdocker system prune -a --volumes# Validate Prometheus configdocker compose exec prometheus promtool check config /etc/prometheus/prometheus.yml
# Validate Alertmanager configdocker compose exec alertmanager amtool check-config /etc/alertmanager/alertmanager.ymlFull Stack Restart
Section titled “Full Stack Restart”docker compose downdocker compose up -ddocker compose psDatabase Issues
Section titled “Database Issues”Alert: Database connection failures Severity: Critical Impact: Application not functioning
Quick Diagnostics
Section titled “Quick Diagnostics”# Test connectionmysql -h hostname -u user -p -e "SELECT 1"
# Check MySQL statussystemctl status mysql
# Check disk spacedf -h /var/lib/mysqlCommon Fixes
Section titled “Common Fixes”SHOW PROCESSLIST;-- Kill idle connectionsKILL <process_id>;mysqlcheck -u root -p --repair database_nameSHOW FULL PROCESSLIST;-- Identify and kill long-running queriesKILL <process_id>;Disk Space Critical
Section titled “Disk Space Critical”Alerts: HighDiskUsage, PLGTServerDiskCritical
Severity: Warning/Critical
Impact: Services may crash, data loss possible
Assessment
Section titled “Assessment”# Check usagedf -h
# Find large directoriesdu -sh /* | sort -rh | head -20
# Find large filesfind / -type f -size +100M -exec ls -lh {} \; 2>/dev/nullCleanup Actions
Section titled “Cleanup Actions”# Run cleanup script/opt/plg-unified/scripts/disk-cleanup.sh
# Clean Dockerdocker system prune -a --volumes
# Clean journal logsjournalctl --vacuum-size=500M# Clean old logsfind /var/log -name "*.gz" -mtime +30 -delete
# Clean temp filesrm -rf /tmp/*
# Clean old backupsfind /backups -mtime +30 -deleteQuick Reference
Section titled “Quick Reference”Essential Commands
Section titled “Essential Commands”# Check sitecurl -sI https://umdoni.gov.za | head -5
# Check SSLecho | openssl s_client -connect umdoni.gov.za:443 2>/dev/null \ | openssl x509 -noout -dates
# Check DNSdig +short umdoni.gov.za
# PLGT servicesssh root@46.224.40.5 "cd /opt/plg-unified && docker compose ps"Dashboard Links
Section titled “Dashboard Links”| Dashboard | URL |
|---|---|
| Main | monitor.isutech.co.za |
| Umdoni Activity | /d/umdoni-activity |
| SLA Tracking | /d/sla-tracking |
| Alertmanager | /alertmanager |
Contacts
Section titled “Contacts”| Role | Contact |
|---|---|
| Primary On-Call | Nhlanhla Mnyandu |
| nhlanhla@isutech.co.za | |
| Afrihost Support | support@afrihost.com |
Next: Client Onboarding