fischerX/infra/monitoring/README.md

178 lines
4.4 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.

# FischerX 监控告警系统
完整的可观测性解决方案,包括指标监控、日志聚合和链路追踪。
## 架构概览
- **Prometheus**: 时序数据库和指标采集
- **Grafana**: 可视化仪表板
- **AlertManager**: 告警管理和通知
- **Loki**: 日志聚合
- **Promtail**: 日志采集
- **Jaeger**: 链路追踪
- **Node Exporter**: 系统指标采集
## 快速开始
### 启动监控栈
```bash
cd infra/monitoring
docker-compose up -d
```
### 访问服务
- **Grafana**: http://localhost:3001
- 默认账号: admin
- 默认密码: fischerx123
- **Prometheus**: http://localhost:9090
- **AlertManager**: http://localhost:9093
- **Jaeger**: http://localhost:16686
- **Node Exporter**: http://localhost:9100/metrics
## 配置说明
### Prometheus
Prometheus配置文件位于 `prometheus/prometheus.yml`,包括:
- 采集目标配置
- 告警规则加载
- 外部标签配置
告警规则位于 `prometheus/rules/` 目录:
- `system-alerts.yml`: 系统级告警CPU、内存、磁盘等
- `application-alerts.yml`: 应用级告警(错误率、延迟等)
### Grafana
- 数据源配置位于 `grafana/provisioning/datasources/`
- 仪表板配置位于 `grafana/provisioning/dashboards/`
- 预配置的仪表板位于 `grafana/dashboards/`
### AlertManager
配置文件位于 `alertmanager/alertmanager.yml`,包括:
- 告警路由配置
- 接收者配置邮件、webhook
- 抑制规则配置
### Loki & Promtail
- Loki配置位于 `loki/loki-config.yml`
- Promtail配置位于 `promtail/promtail-config.yml`
## 应用集成
### 后端 (NestJS)
后端已集成:
- Prometheus指标采集
- HTTP请求监控延迟、错误率、QPS
- OpenTelemetry链路追踪
相关文件:
- `services/api/src/modules/monitoring/`
- `services/api/src/tracing.ts`
环境变量:
```bash
# 链路追踪端点
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
# 启用/禁用tracing
OTEL_ENABLED=true
```
### 前端 (Next.js)
前端已集成:
- Web Vitals性能指标
- 错误边界和全局错误捕获
- OpenTelemetry浏览器追踪
相关文件:
- `apps/web/src/lib/telemetry.ts`
- `apps/web/src/lib/web-vitals.ts`
- `apps/web/src/components/error-boundary.tsx`
- `apps/web/src/providers/monitoring-provider.tsx`
环境变量:
```bash
# 链路追踪端点
NEXT_PUBLIC_OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
```
## 告警规则
### 系统告警
| 告警名称 | 触发条件 | 严重程度 |
|---------|---------|---------|
| HighCPUUsage | CPU使用>80%持续5分钟 | warning |
| HighMemoryUsage | 内存使用>85%持续5分钟 | warning |
| HighDiskUsage | 磁盘使用>90%持续5分钟 | critical |
| HostUnreachable | 主机不可达>1分钟 | critical |
### 应用告警
| 告警名称 | 触发条件 | 严重程度 |
|---------|---------|---------|
| HighErrorRate | 错误率>5%持续2分钟 | warning |
| HighLatency | P95延迟>1秒持续3分钟 | warning |
| ApiHealthCheckFailed | API健康检查失败>1分钟 | critical |
| HighRequestRate | QPS>1000持续5分钟 | info |
## 仪表盘
### 系统概览
- CPU、内存、磁盘使用率
- 网络流量
- 系统负载
### 应用监控
- 请求速率 (QPS)
- 错误率
- P50/P95/P99延迟分布
- HTTP状态码分布
## 常见问题
### Prometheus目标状态为Down
1. 检查目标服务是否正常运行
2. 检查网络连接Docker网络配置
3. 查看Prometheus日志`docker logs fischerx-prometheus`
### Grafana无法连接数据源
1. 确认Prometheus/Loki/Jaeger容器正在运行
2. 检查数据源配置中的URL是否正确
3. 查看Grafana日志`docker logs fischerx-grafana`
### 没有收到告警
1. 检查AlertManager配置
2. 验证告警规则是否被Prometheus加载
3. 检查抑制规则是否阻止了告警
4. 查看AlertManager日志`docker logs fischerx-alertmanager`
## 生产环境建议
1. **数据持久化**: 配置外部卷挂载,防止数据丢失
2. **高可用**: 配置Prometheus联邦和AlertManager集群
3. **告警路由**: 根据严重程度路由到不同团队
4. **安全**: 配置认证和HTTPS
5. **备份**: 定期备份Grafana仪表板和Prometheus数据
6. **监控监控系统**: 配置监控基础设施自身的监控
## 扩展资源
- [Prometheus文档](https://prometheus.io/docs/)
- [Grafana文档](https://grafana.com/docs/)
- [Loki文档](https://grafana.com/docs/loki/)
- [Jaeger文档](https://www.jaegertracing.io/docs/)
- [OpenTelemetry文档](https://opentelemetry.io/docs/)