Files
2026-04-30 11:19:46 +08:00

290 lines
7.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 服务不可用告警处理方案
## 告警名称
- **告警名**: `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)