VWED_server/docs/alert_sync.md
2025-07-14 10:29:37 +08:00

199 lines
6.1 KiB
Markdown
Raw 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.

# 告警同步功能使用说明
## 功能概述
告警同步功能会自动将您的VWED任务微服务中产生的WARNING及以上级别的日志同步到主系统实现统一的告警管理。
## 核心特性
- **自动同步**: 无需修改现有业务代码所有WARNING及以上级别的日志会自动同步
- **异步处理**: 采用异步队列,不影响业务性能
- **智能分类**: 根据logger名称自动分类告警类型系统/机器人/任务)
- **错误重试**: 支持配置重试次数和延迟
- **灵活配置**: 支持开关控制和详细参数配置
## 告警级别映射
| Python日志级别 | 主系统告警级别 | 说明 |
|---------------|---------------|------|
| logging.WARNING | 2 (警告) | 需要关注但不影响系统运行 |
| logging.ERROR | 3 (错误) | 影响功能但系统可继续运行 |
| logging.CRITICAL | 4 (严重) | 严重错误,需要立即处理 |
| logging.INFO | - | 不同步(信息级别) |
## 告警类型自动识别
系统会根据logger名称自动识别告警类型
| Logger名称包含关键词 | 告警类型 | 主系统type值 |
|-------------------|---------|-------------|
| task, execution, scheduler, template | 任务告警 | 3 |
| robot, vehicle, amr | 机器人告警 | 2 |
| 其他 | 系统告警 | 1 |
## 配置说明
`config/settings.py`中的相关配置项:
```python
# 告警同步配置
ALERT_SYNC_ENABLED: bool = True # 是否启用告警同步
ALERT_SYNC_HOST: str = "192.168.189.97" # 主系统IP
ALERT_SYNC_PORT: int = 8080 # 主系统端口
ALERT_SYNC_API_PATH: str = "/warning" # 告警API路径
ALERT_SYNC_TIMEOUT: int = 10 # 请求超时时间(秒)
ALERT_SYNC_RETRY_COUNT: int = 3 # 重试次数
ALERT_SYNC_RETRY_DELAY: int = 1 # 重试延迟(秒)
ALERT_SYNC_BATCH_SIZE: int = 10 # 批量发送大小
ALERT_SYNC_QUEUE_SIZE: int = 1000 # 队列大小
ALERT_SYNC_MIN_LEVEL: str = "WARNING" # 最小告警级别
```
### 环境变量配置
也可以通过环境变量配置:
```bash
export ALERT_SYNC_ENABLED=true
export ALERT_SYNC_HOST=192.168.189.97
export ALERT_SYNC_PORT=8080
export ALERT_SYNC_TIMEOUT=10
```
## 使用方法
### 1. 基本使用
直接使用现有的日志记录方式,系统会自动同步:
```python
from utils.logger import get_logger
logger = get_logger("services.task_service")
# 这些日志会自动同步到主系统
logger.warning("任务执行超时")
logger.error("任务执行失败")
logger.critical("任务调度器严重错误")
# 这些日志不会同步
logger.info("任务开始执行")
logger.debug("调试信息")
```
### 2. 异常处理
使用exception方法记录异常会包含更详细的信息
```python
try:
# 业务逻辑
result = some_risky_operation()
except Exception as e:
logger.exception("操作失败") # 会自动同步并包含异常堆栈
```
### 3. 不同模块的告警
```python
# 任务相关告警
task_logger = get_logger("services.task_execution")
task_logger.error("任务执行失败") # 会被标记为任务告警(type=3)
# 机器人相关告警
robot_logger = get_logger("services.robot_scheduler")
robot_logger.warning("机器人电池电量低") # 会被标记为机器人告警(type=2)
# 系统相关告警
system_logger = get_logger("database.connection")
system_logger.error("数据库连接失败") # 会被标记为系统告警(type=1)
```
## 自动处理的场景
以下场景的错误会自动记录日志并同步:
1. **HTTP错误**: 4xx和5xx HTTP状态码
2. **参数验证错误**: FastAPI参数验证失败
3. **未捕获异常**: 全局异常处理器捕获的异常
4. **业务逻辑错误**: 您在代码中主动记录的WARNING及以上级别日志
## 同步到主系统的数据格式
发送到主系统的数据格式如下:
```json
{
"type": 3, // 告警类型: 1-系统, 2-机器人, 3-任务
"level": 2, // 告警级别: 2-警告, 3-错误, 4-严重
"code": 5678, // 4位告警码5400-9999范围自动生成
"name": "TASK_SERVICE_WARNING", // 告警名称(自动生成)
"description": "任务执行超时 [文件: task_service.py:123] [函数: execute_task()]",
"solution": "请检查相关日志文件获取详细的异常堆栈信息,并根据异常类型进行排查" // 可选
}
```
## 测试功能
运行测试脚本验证功能:
```bash
cd scripts
python test_alert_sync.py
```
测试脚本会:
- 发送不同类型和级别的告警
- 验证INFO级别不会同步
- 显示服务状态信息
## 故障排查
### 1. 检查配置
```python
from utils.alert_sync import get_alert_sync_service
service = get_alert_sync_service()
print(f"启用状态: {service.enabled}")
print(f"同步URL: {service.sync_url}")
print(f"队列大小: {service.alert_queue.qsize()}")
```
### 2. 查看日志
告警同步的错误信息会输出到控制台,查看是否有网络或配置问题。
### 3. 临时禁用
如果需要临时禁用告警同步:
```bash
export ALERT_SYNC_ENABLED=false
```
或在配置文件中设置:
```python
ALERT_SYNC_ENABLED: bool = False
```
## 性能影响
- **内存占用**: 队列最大1000个待发送告警每个告警约1KB
- **网络开销**: 异步发送,不阻塞业务逻辑
- **CPU占用**: 后台线程处理,对主业务影响极小
## 注意事项
1. **网络依赖**: 需要确保微服务能够访问主系统的告警接口
2. **队列满载**: 如果队列满载,新的告警会被丢弃
3. **重试机制**: 发送失败会自动重试,但最终失败的告警会丢失
4. **日志循环**: 告警同步本身的错误不会触发新的告警,避免无限循环
## 最佳实践
1. **合理使用日志级别**: 只有真正需要关注的问题才使用WARNING及以上级别
2. **提供有用信息**: 在日志消息中包含足够的上下文信息
3. **监控队列状态**: 定期检查队列大小,避免积压
4. **测试网络连通**: 部署前测试到主系统的网络连通性