以下是一个服务器故障实例的完整分析及解决方案模板,适用于典型问题排查和修复:
# 1. 立即切换备用节点
ansible-playbook activate_backend.yml --tags=emergency
# 2. 隔离故障节点(防止影响集群)
iptables -A INPUT -p tcp --dport 8080 -j DROP
# 3. 临时扩容容器实例
kubectl scale deployment webapp --replicas=5
步骤一:资源检查
# CPU分析
top -H -p $(pgrep -d, java)
vmstat 1 10
# 磁盘检查
iostat -x 1
df -hT | grep -v overlay
# 发现:/var/log目录占用率100%(MySQL慢查询日志暴增)
步骤二:服务状态验证
# 检查Tomcat连接池
curl -s http://localhost:8080/status | grep jdbc
# 结果:
# Active Connections: 200/200 (配置错误:原应为50/200)
步骤三:日志分析
# 关键错误日志:
grep -A 10 "Connection timed out" /var/log/nginx/error.log
# 显示:
# upstream timed out (110: Connection timed out) while reading upstream
短期修复:
-- 紧急终止慢查询
KILL QUERY 18432;
-- 临时优化参数
SET GLOBAL max_connections=500;
SET GLOBAL wait_timeout=30;
长期改进:
1. 配置优化:
xml
<!-- Tomcat连接池配置 -->
<Resource
maxTotal="100"
maxWaitMillis="5000"
removeAbandonedTimeout="60"
/>
监控增强:
# Prometheus告警规则
- alert: HighDBQueryTime
expr: mysql_global_status_slow_queries > 5
for: 5m
自动化处理:
# 自动日志清理脚本
if disk_usage > 90%:
execute(logrotate -f /etc/logrotate.d/mysql)
alert("Emergency log cleanup triggered")
bash
ab -n 5000 -c 100 http://testenv/api/search
指标项 | 故障前 | 故障时 | 修复后 |
---|---|---|---|
请求成功率 | 99.98% | 62.3% | 99.99% |
平均响应时间 | 120ms | 4500ms | 95ms |
DB连接等待数 | 0-2 | 148 | 0 |
statement_timeout
该模板可根据具体故障类型(网络/存储/应用层)调整分析维度,建议配合监控图表(如Grafana看板)增强可读性。对于分布式系统故障,需补充调用链分析(如Jaeger跟踪数据)。