# 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/)