docs: add observability plan

This commit is contained in:
shenlan 2025-08-21 19:31:09 +08:00
parent cdd6dd88dd
commit ee1561ba93

View File

@ -0,0 +1,37 @@
# 项目监控与可观测性方案
本文档梳理了为 XControl 项目添加监控、日志与追踪能力的计划,涵盖 Prometheus 指标、Loki 日志以及 OpenTelemetry 链路追踪。
## 1. 整体监控架构设计
- 监控栈Prometheus + Loki + OpenTelemetry Collector。
- 统一指标、日志、trace 的命名规范。
- 通过环境变量或配置文件控制监控开关、采样率与导出端点。
## 2. Prometheus Metrics
- **Go 服务**:使用 `prometheus/client_golang`,在 `gin` 中挂载 `/metrics`,提供请求延迟、状态码、数据库与 Redis 访问指标。
- **Node/Next.js 前端**:使用 `prom-client`,暴露基础 HTTP 指标及自定义业务计数。
- **其他语言组件**:根据语言选择对应 SDK 并添加核心指标。
- 提供 docker-compose/Helm 配置,让 Prometheus 抓取各服务的 `/metrics`
## 3. Loki LogQL 日志
- **Go 端**:采用 `slog``logrus` + Loki hook输出 JSON 结构化日志并包含 `{job, service, trace_id}` 等标签。
- **Node 端**:使用 `pino``winston`,输出 JSON 日志,通过 Loki transport 或 `promtail` 收集。
- 在所有日志中注入 `trace_id`、`span_id`,便于与 tracing 关联。
- 更新部署脚本以配置 Loki 接收端或 promtail。
## 4. OpenTelemetry Tracing
- **Go 服务**:集成 `go.opentelemetry.io/otel`,启用 gin/pgx/redis 自动 instrumentation使用 OTLP exporter。
- **Node/Next.js**:引入 `@opentelemetry/api``@opentelemetry/sdk-node`,启用 HTTP/Fetch 等自动 instrumentation发送 trace 到 OTel Collector。
- 其他语言组件按需选择对应 OTel SDK实现上下文传递。
- 将 `trace_id`、`span_id` 加入日志,指标中添加 exemplar/label 实现跨链接。
## 5. 部署与配置管理
- 提供示例配置或环境变量(`PROMETHEUS_ENDPOINT`, `LOKI_URL`, `OTEL_EXPORTER_OTLP_ENDPOINT`)。
- 编写 docker-compose 或 Kubernetes manifests将 Prometheus、Loki 与 OTel Collector 纳入基础设施。
- 更新文档说明如何在本地与生产环境启用监控以及常用查询示例。
## 6. 验证与测试
- 为关键监控点编写单元或集成测试,保证指标、日志格式正确。
- 在 CI/CD 流程中增加 lint/test 防止监控代码被破坏。
- 本地启动后通过 `curl /metrics`、Loki 查询以及 Jaeger/Tempo UI 验证输出。