SRE 实战手册 - 2026年2月5日
今日实战重点:故障排除与系统优化
实时监控与告警响应
当前系统状态检查
# 检查核心服务状态
systemctl status nginx
systemctl status postgresql
systemctl status redis
# 检查磁盘空间
df -h
# 警告:/var/log 分区使用率已达85%
# 检查内存使用情况
free -m
top -b -n 1 | head -20
告警处理流程
- P1级别告警:立即响应,5分钟内确认
- P2级别告警:15分钟内响应
- P3级别告警:1小时内响应
今日告警处理:
数据库连接数过高告警 (P2)
- 已执行:
show processlist;检查慢查询 - 已执行:
kill掉长时间运行的非关键查询 - 已执行:临时增加连接池大小
- 已执行:
API响应时间超过阈值 (P1)
- 已执行:检查应用日志
/var/log/app/error.log - 已执行:重启过载的服务实例
- 已执行:启用限流措施
- 已执行:检查应用日志
系统优化操作
性能调优命令
# 检查系统瓶颈
iostat -x 1 5
vmstat 1 5
netstat -i
# 清理系统缓存
sync && echo 3 > /proc/sys/vm/drop_caches
# 优化TCP参数
echo 'net.core.somaxconn = 65535' >> /etc/sysctl.conf
sysctl -p
数据库优化
-- 检查慢查询
SHOW PROCESSLIST;
-- 查看索引使用情况
EXPLAIN SELECT * FROM users WHERE email='user@example.com';
-- 重建碎片化表
OPTIMIZE TABLE sessions;
故障排除步骤
服务不可用排查
网络连通性检查
ping target-service.internal telnet target-service.internal 8080 nslookup target-service.internal进程状态检查
ps aux | grep service-name lsof -i :8080日志文件分析
tail -f /var/log/application.log grep -i error /var/log/application.log journalctl -u service-name -f
性能问题诊断
CPU使用率过高
# 找出CPU占用最高的进程 ps aux --sort=-%cpu | head -10 # 分析进程的系统调用 strace -p PID内存泄漏检测
# 监控内存使用趋势 watch -n 1 'ps aux --sort=-%mem | head -10' # 检查内存映射 cat /proc/PID/maps
应急预案
服务降级方案
关闭非核心功能
# 通过配置中心临时禁用功能 curl -X POST http://config-center/api/config \ -H "Content-Type: application/json" \ -d '{"feature_flags": {"recommendations": false}}'数据库读写分离
# 切换到只读模式 mysql -e "SET GLOBAL read_only = ON;" # 将流量导向只读副本
灾难恢复步骤
从备份恢复数据
# 恢复最新数据库备份 gunzip < latest_backup.sql.gz | mysql -u root -p production_db # 验证数据完整性 mysqlcheck -c production_db服务快速重启
# 平滑重启服务 systemctl reload nginx # 强制重启有问题的服务 systemctl restart problematic-service # 验证服务状态 systemctl status problematic-service
代码部署操作
蓝绿部署脚本
#!/bin/bash
# 蓝绿部署脚本示例
BLUE_VERSION="v1.2.3"
GREEN_VERSION="v1.4.0"
# 检查目标版本是否已部署
if docker ps | grep -q $GREEN_VERSION; then
echo "Green version already running"
# 切换流量到绿色环境
./switch_traffic.sh green
else
# 部署绿色版本
docker-compose -f docker-compose.green.yml up -d
# 运行健康检查
sleep 30
if curl -f http://localhost:8081/health; then
echo "Green version healthy, switching traffic"
./switch_traffic.sh green
# 停止蓝色版本
docker-compose -f docker-compose.blue.yml down
else
echo "Green version failed health check, rolling back"
exit 1
fi
fi
回滚操作
# 快速回滚到上一个稳定版本
./rollback.sh --version v1.2.3 --service api-server
# 验证回滚后服务状态
curl -f http://localhost:8080/health
docker ps | grep api-server
监控与度量
关键指标采集
# 采集系统指标
sar -u 1 5 # CPU使用率
sar -r 1 5 # 内存使用
sar -n DEV 1 5 # 网络接口统计
# 应用程序指标
curl http://localhost:9090/metrics | grep -E "(http_requests_total|process_cpu_seconds_total|jvm_memory_used_bytes)"
告警规则设置
groups:
- name: system_alerts
rules:
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 2m
labels:
severity: warning
annotations:
summary: "High CPU usage detected"
description: "CPU usage is above 80% for more than 2 minutes on {{ $labels.instance }}"
实用工具命令
日志分析
# 实时监控错误日志
tail -f /var/log/application.log | grep --color=always ERROR
# 统计特定时间段的错误
awk '/2026-02-05 10:/ && /ERROR/' /var/log/application.log | wc -l
# 分析访问日志
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
性能测试
# 压力测试
ab -n 1000 -c 10 http://localhost:8080/api/users
# 持续监控响应时间
watch -n 1 'curl -o /dev/null -s -w "%{time_total}s\%{time_connect}s\%{time_starttransfer}s\n" http://localhost:8080/health'