178 lines
4.4 KiB
Markdown
178 lines
4.4 KiB
Markdown
# 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/)
|