276 lines
15 KiB
Markdown
276 lines
15 KiB
Markdown
# 监控与日志管理
|
||
|
||
<cite>
|
||
**本文引用的文件**
|
||
- [backend/app/main.py](file://backend/app/main.py)
|
||
- [backend/docker-compose.yml](file://backend/docker-compose.yml)
|
||
- [backend/app/config.py](file://backend/app/config.py)
|
||
- [backend/app/database.py](file://backend/app/database.py)
|
||
- [backend/app/workers/scheduler.py](file://backend/app/workers/scheduler.py)
|
||
- [backend/app/workers/citation_engine.py](file://backend/app/workers/citation_engine.py)
|
||
- [backend/app/workers/platforms/base.py](file://backend/app/workers/platforms/base.py)
|
||
- [backend/app/workers/platforms/kimi.py](file://backend/app/workers/platforms/kimi.py)
|
||
- [backend/app/workers/platforms/wenxin.py](file://backend/app/workers/platforms/wenxin.py)
|
||
- [backend/requirements.txt](file://backend/requirements.txt)
|
||
- [backend/Dockerfile](file://backend/Dockerfile)
|
||
- [backend/app/api/deps.py](file://backend/app/api/deps.py)
|
||
</cite>
|
||
|
||
## 目录
|
||
1. [简介](#简介)
|
||
2. [项目结构](#项目结构)
|
||
3. [核心组件](#核心组件)
|
||
4. [架构总览](#架构总览)
|
||
5. [详细组件分析](#详细组件分析)
|
||
6. [依赖分析](#依赖分析)
|
||
7. [性能考虑](#性能考虑)
|
||
8. [故障排查指南](#故障排查指南)
|
||
9. [结论](#结论)
|
||
10. [附录](#附录)
|
||
|
||
## 简介
|
||
本方案围绕GEO项目的监控与日志管理,系统性地梳理应用健康检查、服务可用性监控、响应时间监控、错误率统计、日志收集与管理、错误追踪与告警通知、性能指标采集与可视化,以及日志分析与故障诊断的最佳实践。当前仓库中已具备基础的健康检查端点、容器编排与健康检查、日志记录与重试机制,但尚未集成统一的监控与告警体系(如Prometheus/Grafana)。本文在现有能力基础上,提出可落地的扩展建议与实施路径。
|
||
|
||
## 项目结构
|
||
后端采用FastAPI框架,通过APScheduler进行定时任务调度,使用Playwright驱动浏览器访问外部AI平台,结合PostgreSQL与Redis作为数据与缓存存储。Docker Compose负责多服务编排与健康检查。
|
||
|
||
```mermaid
|
||
graph TB
|
||
subgraph "后端服务"
|
||
API["FastAPI 应用<br/>/health 健康检查"]
|
||
SCH["APScheduler 调度器"]
|
||
CE["引用检测引擎"]
|
||
DB["PostgreSQL 引擎/会话"]
|
||
REDIS["Redis 连接"]
|
||
end
|
||
subgraph "外部平台"
|
||
KIMI["Kimi 适配器"]
|
||
WENXIN["文心一言适配器"]
|
||
end
|
||
API --> SCH
|
||
SCH --> CE
|
||
CE --> KIMI
|
||
CE --> WENXIN
|
||
CE --> DB
|
||
CE --> REDIS
|
||
```
|
||
|
||
图表来源
|
||
- [backend/app/main.py:45-47](file://backend/app/main.py#L45-L47)
|
||
- [backend/app/workers/scheduler.py:30-40](file://backend/app/workers/scheduler.py#L30-L40)
|
||
- [backend/app/workers/citation_engine.py:148-170](file://backend/app/workers/citation_engine.py#L148-L170)
|
||
- [backend/app/database.py:6-18](file://backend/app/database.py#L6-L18)
|
||
- [backend/app/config.py:7-8](file://backend/app/config.py#L7-L8)
|
||
|
||
章节来源
|
||
- [backend/app/main.py:1-48](file://backend/app/main.py#L1-L48)
|
||
- [backend/docker-compose.yml:1-71](file://backend/docker-compose.yml#L1-L71)
|
||
- [backend/app/config.py:1-17](file://backend/app/config.py#L1-L17)
|
||
- [backend/app/database.py:1-29](file://backend/app/database.py#L1-L29)
|
||
|
||
## 核心组件
|
||
- 健康检查端点:提供基础可用性探测,便于反向代理与编排系统判断服务状态。
|
||
- 定时任务调度器:基于APScheduler的异步调度器,周期性扫描并执行到期查询任务。
|
||
- 引用检测引擎:封装品牌匹配、竞争品牌检测、平台适配器调用与结果持久化。
|
||
- 平台适配器:Kimi与文心一言的Playwright驱动实现,包含重试与稳定性处理。
|
||
- 数据库与配置:异步SQLAlchemy引擎与环境变量配置,支撑任务状态与结果存储。
|
||
- 容器编排与健康检查:Compose对数据库与Redis进行健康检查,后端服务依赖健康状态启动。
|
||
|
||
章节来源
|
||
- [backend/app/main.py:45-47](file://backend/app/main.py#L45-L47)
|
||
- [backend/app/workers/scheduler.py:25-95](file://backend/app/workers/scheduler.py#L25-L95)
|
||
- [backend/app/workers/citation_engine.py:148-309](file://backend/app/workers/citation_engine.py#L148-L309)
|
||
- [backend/app/workers/platforms/kimi.py:11-206](file://backend/app/workers/platforms/kimi.py#L11-L206)
|
||
- [backend/app/workers/platforms/wenxin.py:11-205](file://backend/app/workers/platforms/wenxin.py#L11-L205)
|
||
- [backend/app/config.py:1-17](file://backend/app/config.py#L1-L17)
|
||
- [backend/app/database.py:1-29](file://backend/app/database.py#L1-L29)
|
||
- [backend/docker-compose.yml:16-34](file://backend/docker-compose.yml#L16-L34)
|
||
|
||
## 架构总览
|
||
下图展示从API到调度器、引擎、平台适配器与数据库的整体交互流程,并标注健康检查与容器编排的关键节点。
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant Client as "客户端"
|
||
participant API as "FastAPI 应用"
|
||
participant SCH as "调度器"
|
||
participant CE as "引用检测引擎"
|
||
participant KIMI as "Kimi 适配器"
|
||
participant WENXIN as "文心一言适配器"
|
||
participant DB as "数据库"
|
||
Client->>API : GET /health
|
||
API-->>Client : {"status" : "ok"}
|
||
SCH->>CE : 触发检查并执行查询
|
||
CE->>KIMI : query(keyword)
|
||
CE->>WENXIN : query(keyword)
|
||
CE->>DB : 写入CitationRecord/更新QueryTask
|
||
CE-->>SCH : 返回执行结果
|
||
```
|
||
|
||
图表来源
|
||
- [backend/app/main.py:45-47](file://backend/app/main.py#L45-L47)
|
||
- [backend/app/workers/scheduler.py:51-84](file://backend/app/workers/scheduler.py#L51-L84)
|
||
- [backend/app/workers/citation_engine.py:159-234](file://backend/app/workers/citation_engine.py#L159-L234)
|
||
- [backend/app/workers/platforms/kimi.py:33-48](file://backend/app/workers/platforms/kimi.py#L33-L48)
|
||
- [backend/app/workers/platforms/wenxin.py:33-48](file://backend/app/workers/platforms/wenxin.py#L33-L48)
|
||
|
||
## 详细组件分析
|
||
|
||
### 健康检查与服务可用性监控
|
||
- 基础健康检查端点:提供轻量级可用性探测,适合反向代理与编排系统快速判断服务状态。
|
||
- 容器健康检查:Compose对PostgreSQL与Redis进行健康检查,后端服务依赖这些服务健康后再启动,提升整体可用性保障。
|
||
- 建议扩展:
|
||
- 在应用内增加更细粒度的依赖检查(数据库连接池、Redis连接、外部平台可用性)。
|
||
- 将健康检查结果暴露为指标,接入Prometheus/Grafana进行可视化与告警。
|
||
|
||
章节来源
|
||
- [backend/app/main.py:45-47](file://backend/app/main.py#L45-L47)
|
||
- [backend/docker-compose.yml:16-34](file://backend/docker-compose.yml#L16-L34)
|
||
|
||
### 日志收集与管理策略
|
||
- 日志记录范围:调度器、引擎、平台适配器均使用标准日志模块记录信息与错误,覆盖任务执行、平台查询、异常处理等关键环节。
|
||
- 日志级别建议:
|
||
- INFO:任务开始/结束、平台查询成功、结果写入。
|
||
- WARNING:重试警告、超时警告。
|
||
- ERROR:平台查询失败、数据库写入失败、异常抛出。
|
||
- 结构化日志格式建议:
|
||
- 统一字段:timestamp、level、service、module、function、message、trace_id(可选)、span_id(可选)、extra(JSON)。
|
||
- 示例字段:service=backend、module=scheduler/engine/platform、function=check_and_execute_queries/execute_query/query。
|
||
- 日志轮转与存储:
|
||
- 使用logrotate或容器日志驱动自带轮转;生产环境建议将日志输出到stdout/stderr,由容器编排系统集中收集(如Fluent Bit/Fluentd)。
|
||
- 存储策略:短期本地、长期归档至对象存储或集中日志平台(如ELK/Graylog/Loki)。
|
||
|
||
章节来源
|
||
- [backend/app/workers/scheduler.py:40-90](file://backend/app/workers/scheduler.py#L40-L90)
|
||
- [backend/app/workers/citation_engine.py:211-227](file://backend/app/workers/citation_engine.py#L211-L227)
|
||
- [backend/app/workers/platforms/kimi.py:28-48](file://backend/app/workers/platforms/kimi.py#L28-L48)
|
||
- [backend/app/workers/platforms/wenxin.py:28-48](file://backend/app/workers/platforms/wenxin.py#L28-L48)
|
||
|
||
### 错误追踪机制
|
||
- 异常捕获与堆栈跟踪:
|
||
- 调度器与引擎在关键路径捕获异常并记录详细错误信息,便于定位问题。
|
||
- 平台适配器对Playwright操作进行超时与异常处理,并在多次重试后记录最终失败原因。
|
||
- 告警通知:
|
||
- 建议在应用层或网关层集成告警通道(如邮件、Webhook、IM机器人),当ERROR/WARNING级别日志达到阈值时触发。
|
||
- 可结合日志平台的规则引擎或Prometheus Alertmanager实现自动告警。
|
||
- 诊断要点:
|
||
- 关注平台查询超时、浏览器启动失败、数据库事务提交失败等高频错误。
|
||
- 为每次查询生成唯一trace_id,贯穿日志链路,便于跨服务串联分析。
|
||
|
||
章节来源
|
||
- [backend/app/workers/scheduler.py:73-74](file://backend/app/workers/scheduler.py#L73-L74)
|
||
- [backend/app/workers/citation_engine.py:211-227](file://backend/app/workers/citation_engine.py#L211-L227)
|
||
- [backend/app/workers/platforms/kimi.py:116-119](file://backend/app/workers/platforms/kimi.py#L116-L119)
|
||
- [backend/app/workers/platforms/wenxin.py:114-117](file://backend/app/workers/platforms/wenxin.py#L114-L117)
|
||
|
||
### 性能监控指标
|
||
- CPU与内存:通过容器监控(如cAdvisor/Prometheus Node Exporter)采集后端容器的CPU/内存使用率。
|
||
- 数据库连接数:从数据库侧查看连接数与慢查询,或通过中间件埋点导出指标。
|
||
- API响应时间:在FastAPI中间件中统计请求耗时,按路由分组导出直方图与摘要指标。
|
||
- 业务指标:
|
||
- 查询任务执行成功率、失败率、平均耗时。
|
||
- 平台查询成功率、平均响应时间、重试次数。
|
||
- CitationRecord写入速率、QueryTask状态转换时延。
|
||
|
||
章节来源
|
||
- [backend/app/main.py:24-28](file://backend/app/main.py#L24-L28)
|
||
- [backend/app/workers/scheduler.py:51-84](file://backend/app/workers/scheduler.py#L51-L84)
|
||
- [backend/app/workers/citation_engine.py:159-234](file://backend/app/workers/citation_engine.py#L159-L234)
|
||
|
||
### 监控工具选择与配置
|
||
- Prometheus:抓取后端应用指标(自定义指标+Node Exporter),用于构建仪表盘与告警。
|
||
- Grafana:可视化Prometheus数据,创建面板展示健康状态、性能趋势与告警历史。
|
||
- 日志平台(可选):Loki配合Promtail收集日志,Grafana中实现日志与指标联动。
|
||
- 告警:Alertmanager基于规则触发,结合企业微信/钉钉/Slack等通道推送。
|
||
|
||
章节来源
|
||
- [backend/requirements.txt:20-22](file://backend/requirements.txt#L20-L22)
|
||
- [backend/Dockerfile:35-40](file://backend/Dockerfile#L35-L40)
|
||
|
||
### 日志分析与故障诊断最佳实践
|
||
- 统一日志格式与标签:为每条日志添加服务名、模块、函数、trace_id等标签,便于聚合与检索。
|
||
- 分层告警:针对不同级别与模块设置阈值与静默窗口,避免噪声干扰。
|
||
- 快速定位:优先查看ERROR/WARNING级别日志,结合trace_id串联相关模块日志。
|
||
- 回放与回归:对关键业务路径(如平台查询、数据库写入)建立回放机制,复现问题并验证修复。
|
||
|
||
## 依赖分析
|
||
- 组件耦合:
|
||
- 调度器与引擎松耦合,通过接口与数据库交互;平台适配器遵循统一抽象,便于扩展新平台。
|
||
- 数据库连接通过依赖注入提供,降低全局状态耦合。
|
||
- 外部依赖:
|
||
- PostgreSQL/Redis:通过环境变量配置,容器编排保证依赖服务健康。
|
||
- Playwright:浏览器自动化依赖系统库,Dockerfile中已安装必要依赖与浏览器。
|
||
- 潜在风险:
|
||
- 平台查询超时与不稳定:已有重试与超时处理,建议进一步引入熔断与降级策略。
|
||
- 日志分散:建议集中化收集与结构化输出,避免grep式排查。
|
||
|
||
```mermaid
|
||
graph LR
|
||
REQ["requirements.txt"] --> FASTAPI["FastAPI"]
|
||
REQ --> APS["APScheduler"]
|
||
REQ --> SQLA["SQLAlchemy"]
|
||
REQ --> REDIS["Redis"]
|
||
REQ --> PW["Playwright"]
|
||
DF["Dockerfile"] --> SYSDEPS["系统依赖安装"]
|
||
DF --> PLY["Playwright 安装"]
|
||
DF --> CMD["Uvicorn 启动"]
|
||
DC["docker-compose.yml"] --> DBH["PostgreSQL 健康检查"]
|
||
DC --> RDH["Redis 健康检查"]
|
||
DC --> DEP["后端依赖健康启动"]
|
||
```
|
||
|
||
图表来源
|
||
- [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35)
|
||
- [backend/Dockerfile:6-33](file://backend/Dockerfile#L6-L33)
|
||
- [backend/docker-compose.yml:16-34](file://backend/docker-compose.yml#L16-L34)
|
||
|
||
章节来源
|
||
- [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35)
|
||
- [backend/Dockerfile:1-41](file://backend/Dockerfile#L1-L41)
|
||
- [backend/docker-compose.yml:1-71](file://backend/docker-compose.yml#L1-L71)
|
||
|
||
## 性能考虑
|
||
- I/O密集型优化:平台查询与数据库写入均为I/O密集,建议:
|
||
- 使用连接池与批量写入减少开销。
|
||
- 对平台查询结果进行缓存(短期有效),降低重复请求。
|
||
- 超时与重试:平台适配器已内置指数退避重试,建议:
|
||
- 设置最大重试次数与超时上限,防止雪崩。
|
||
- 引入熔断器,当错误率超过阈值时短时间拒绝请求。
|
||
- 资源限制:在容器编排中设置CPU/内存限制与重启策略,避免单点故障影响整体。
|
||
|
||
## 故障排查指南
|
||
- 健康检查失败:
|
||
- 检查后端/数据库/Redis健康检查配置与日志。
|
||
- 确认依赖服务已就绪再启动后端。
|
||
- 平台查询失败:
|
||
- 查看平台适配器日志,确认浏览器启动与页面交互是否正常。
|
||
- 检查网络连通性与平台可用性。
|
||
- 数据库写入失败:
|
||
- 检查数据库连接字符串与权限。
|
||
- 关注事务提交与异常回滚日志。
|
||
- 日志分析:
|
||
- 使用统一字段检索trace_id,串联各模块日志。
|
||
- 结合Grafana面板观察指标趋势,定位异常时段。
|
||
|
||
章节来源
|
||
- [backend/docker-compose.yml:46-50](file://backend/docker-compose.yml#L46-L50)
|
||
- [backend/app/workers/platforms/kimi.py:28-48](file://backend/app/workers/platforms/kimi.py#L28-L48)
|
||
- [backend/app/workers/platforms/wenxin.py:28-48](file://backend/app/workers/platforms/wenxin.py#L28-L48)
|
||
- [backend/app/workers/citation_engine.py:211-227](file://backend/app/workers/citation_engine.py#L211-L227)
|
||
|
||
## 结论
|
||
GEO项目已具备基础的健康检查、容器健康检查与完善的日志记录能力。建议在此基础上引入统一的监控与告警体系(Prometheus/Grafana),完善结构化日志与指标导出,增强平台查询的稳定性与可观测性,以支撑生产环境的持续运维与快速故障定位。
|
||
|
||
## 附录
|
||
- 快速对照表
|
||
- 健康检查端点:GET /health
|
||
- 数据库连接:DATABASE_URL
|
||
- Redis连接:REDIS_URL
|
||
- 定时任务:每小时执行一次
|
||
- 平台适配器:Kimi、文心一言
|
||
|
||
章节来源
|
||
- [backend/app/main.py:45-47](file://backend/app/main.py#L45-L47)
|
||
- [backend/app/config.py:7-8](file://backend/app/config.py#L7-L8)
|
||
- [backend/app/workers/scheduler.py:32-38](file://backend/app/workers/scheduler.py#L32-L38)
|
||
- [backend/app/workers/platforms/base.py:4-17](file://backend/app/workers/platforms/base.py#L4-L17) |