This commit is contained in:
zhuyongxin
2026-04-30 11:19:46 +08:00
parent 0671ad8bab
commit 80eada415d
42 changed files with 9135 additions and 0 deletions
+289
View File
@@ -0,0 +1,289 @@
# 服务不可用告警处理方案
## 告警名称
- **告警名**: `ServiceUnavailable`
- **告警级别**: 紧急
- **触发条件**: 服务健康检查失败或错误率超过50%
## 问题描述
服务不可用是最严重的故障,会导致:
- 用户无法访问服务
- 业务完全中断
- 可能造成经济损失
- 影响公司声誉
## 排查步骤
### 步骤1: 获取当前时间
**工具**: `get_current_time`
**目的**: 记录故障发生时间,用于后续分析
### 步骤2: 查询服务状态日志
**工具**: `query_logs`
**参数要求**:
- **地域**: `ap-guangzhou`
- **日志主题**: `application-logs`
- **时间范围**: 最近15分钟
- **查询条件**: `level:ERROR OR level:FATAL OR status:500`
**查询示例**:
```
地域: ap-guangzhou
日志主题: application-logs
时间范围: [当前时间-15分钟] 到 [当前时间]
查询语句: (level:ERROR OR level:FATAL) AND service_name:*
```
### 步骤3: 查询系统事件日志
**工具**: `query_logs`
**参数要求**:
- **地域**: `ap-guangzhou`
- **日志主题**: `system-events`
- **查询条件**: `event:restart OR event:crash OR event:oom_kill`
### 步骤4: 检查依赖服务状态
**工具**: `query_logs`
**参数要求**:
- **地域**: `ap-guangzhou`
- **日志主题**: `application-logs`
- **查询条件**: `downstream_service OR database OR redis OR mq`
## 常见原因分析
### 原因1: 应用崩溃或无法启动
**特征**:
- 所有实例都无法响应
- 日志中有启动失败记录
- 可能有OOM或其他致命错误
- 健康检查全部失败
**处理方案**:
1. **立即回滚**:
- 如果是新版本发布后出现,立即回滚到上一个稳定版本
- 使用蓝绿部署或金丝雀发布策略
2. **紧急修复**:
- 查看启动日志定位问题
- 检查配置文件是否正确
- 验证依赖服务是否可用
- 修复后重新部署
3. **临时方案**:
- 启用备用服务
- 显示维护页面
- 通知用户服务异常
### 原因2: 数据库连接失败
**特征**:
- 日志中有数据库连接错误
- "Connection refused" 或 "Too many connections"
- 数据库服务异常
- 连接池耗尽
**处理方案**:
1. **检查数据库状态**:
- 确认数据库服务是否运行
- 检查数据库连接数
- 查看数据库错误日志
2. **恢复数据库连接**:
- 重启数据库(如果必要)
- 增加最大连接数
- 释放僵死连接
- 检查网络连通性
3. **应用层处理**:
- 重启应用重建连接池
- 调整连接池配置
- 实现连接重试机制
### 原因3: 依赖服务故障
**特征**:
- 日志中有调用第三方服务失败
- Redis、MQ等中间件不可用
- 网络连接超时
- 级联故障
**处理方案**:
1. **快速降级**:
- 启用熔断机制
- 跳过非关键依赖
- 使用缓存数据
- 返回降级响应
2. **恢复依赖服务**:
- 检查Redis、MQ等服务状态
- 重启故障的依赖服务
- 修复网络连接问题
3. **隔离故障**:
- 防止故障扩散
- 限制重试次数
- 实现超时控制
### 原因4: 配置错误
**特征**:
- 最近有配置变更
- 日志中有配置加载错误
- 特定环境变量缺失
- 启动参数错误
**处理方案**:
1. **回滚配置**:
- 恢复到上一个正确的配置
- 检查配置文件语法
- 验证环境变量
2. **修复配置**:
- 对比正确的配置文件
- 修正错误的配置项
- 重新加载配置
3. **配置管理**:
- 使用配置中心统一管理
- 配置变更需要审批
- 保留配置历史版本
### 原因5: 资源耗尽
**特征**:
- 磁盘空间满
- 文件描述符耗尽
- 端口被占用
- 内存不足导致OOM
**处理方案**:
1. **清理资源**:
- 清理磁盘空间(日志、临时文件)
- 释放文件描述符
- 杀死占用端口的进程
2. **扩容资源**:
- 增加磁盘空间
- 调整系统限制(ulimit)
- 增加内存配置
3. **优化使用**:
- 实现日志轮转
- 及时关闭文件句柄
- 优化内存使用
### 原因6: 网络故障
**特征**:
- 无法访问服务
- 网络连接超时
- 负载均衡器异常
- DNS解析失败
**处理方案**:
1. **检查网络**:
- 测试网络连通性(ping, telnet)
- 检查防火墙规则
- 验证安全组配置
- 检查DNS解析
2. **修复网络**:
- 重启网络服务
- 修正路由配置
- 更新负载均衡器配置
- 切换到备用网络
3. **流量切换**:
- 切换到备用地域
- 使用备用域名
- 启用CDN
## 紧急处理流程
### 第一时间(1分钟内)
1. **确认故障**: 通过监控和日志确认服务确实不可用
2. **启动应急**: 通知相关人员,启动应急响应流程
3. **止损措施**:
- 如果是部分实例故障,摘除故障实例
- 如果是全部故障,启用备用服务或维护页面
### 5分钟内
1. **快速定位**: 查看日志和监控,快速定位问题原因
2. **决策处理**:
- 如果能快速修复,立即修复
- 如果无法快速修复,执行回滚
- 如果是依赖故障,启用降级
### 15分钟内
1. **恢复服务**: 通过回滚、修复或降级恢复服务
2. **验证功能**: 确认核心功能可用
3. **监控观察**: 持续监控服务状态
### 30分钟内
1. **全面验证**: 验证所有功能正常
2. **通知用户**: 如果影响用户,发布公告
3. **初步总结**: 记录故障原因和处理过程
## 验证步骤
1. **健康检查**: 确认所有实例健康检查通过
2. **功能测试**: 测试核心业务功能
3. **性能验证**: 确认响应时间和吞吐量正常
4. **错误率**: 确认错误率降到正常水平(<1%)
5. **持续监控**: 观察30分钟确保稳定
## 预防措施
1. **高可用架构**:
- 多实例部署
- 多地域容灾
- 数据库主从复制
- 关键服务冗余
2. **监控告警**:
- 完善的健康检查
- 实时监控告警
- 自动故障转移
- 异常自动恢复
3. **发布策略**:
- 灰度发布
- 蓝绿部署
- 金丝雀发布
- 快速回滚机制
4. **容错设计**:
- 熔断降级
- 限流保护
- 超时控制
- 重试机制
5. **演练测试**:
- 定期故障演练
- 压力测试
- 混沌工程
- 应急预案演练
## 故障复盘
故障恢复后,必须进行复盘:
1. **故障时间线**: 记录故障发生、发现、处理、恢复的完整时间线
2. **根因分析**: 深入分析故障根本原因
3. **影响评估**: 评估故障影响范围和损失
4. **改进措施**: 制定防止类似故障的改进措施
5. **文档更新**: 更新运维文档和应急预案
## 相关告警
- `HighErrorRate`: 错误率过高
- `HealthCheckFailed`: 健康检查失败
- `AllInstancesDown`: 所有实例下线
- `DatabaseConnectionFailed`: 数据库连接失败
## 紧急联系方式
- **运维值班**: 400-xxx-1111(24小时)
- **开发值班**: 400-xxx-2222(24小时)
- **DBA值班**: 400-xxx-3333(24小时)
- **网络团队**: 400-xxx-4444
- **安全团队**: 400-xxx-5555
## 升级机制
- **15分钟未恢复**: 升级到技术总监
- **30分钟未恢复**: 升级到CTO
- **1小时未恢复**: 启动最高级别应急响应
## 参考文档
- [应急响应流程](internal-docs/emergency-response.md)
- [故障处理手册](internal-docs/incident-handbook.md)
- [高可用架构设计](internal-docs/ha-architecture.md)