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小时内响应

今日告警处理

  1. 数据库连接数过高告警 (P2)

    • 已执行:show processlist; 检查慢查询
    • 已执行:kill 掉长时间运行的非关键查询
    • 已执行:临时增加连接池大小
  2. 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;

故障排除步骤

服务不可用排查

  1. 网络连通性检查

    ping target-service.internal
    telnet target-service.internal 8080
    nslookup target-service.internal
    
  2. 进程状态检查

    ps aux | grep service-name
    lsof -i :8080
    
  3. 日志文件分析

    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
    

应急预案

服务降级方案

  1. 关闭非核心功能

    # 通过配置中心临时禁用功能
    curl -X POST http://config-center/api/config \
         -H "Content-Type: application/json" \
         -d '{"feature_flags": {"recommendations": false}}'
    
  2. 数据库读写分离

    # 切换到只读模式
    mysql -e "SET GLOBAL read_only = ON;"
    # 将流量导向只读副本
    

灾难恢复步骤

  1. 从备份恢复数据

    # 恢复最新数据库备份
    gunzip < latest_backup.sql.gz | mysql -u root -p production_db
    # 验证数据完整性
    mysqlcheck -c production_db
    
  2. 服务快速重启

    # 平滑重启服务
    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'

results matching ""

    No results matching ""