集成 Grafana + Prometheus 监控方案,实现平台运行状态和业务指标的可视化监控。
npm installnpm run monitor:start- Grafana: http://localhost:3001
- 用户名:
admin - 密码:
codemocklab123
- 用户名:
- Prometheus: http://localhost:9090
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Next.js │────▶│ Prometheus │────▶│ Grafana │
│ App │ │ (Metrics) │ │ (Visuals) │
└─────────────┘ └──────────────┘ └─────────────┘
│ │
│ │
▼ ▼
┌─────────────┐ ┌──────────────┐
│ PostgreSQL │────▶│ Exporters │
└─────────────┘ └──────────────┘
- API 请求速率: 各端点的请求频率
- 响应时间: P50、P95、P99 延迟
- 错误率: 4xx、5xx 错误统计
- 系统资源: CPU、内存、磁盘使用率
- 用户活跃度: 活跃用户数、新增用户
- 简历分析: 上传量、解析成功率、AI分析耗时
- 面试流程:
- 面试创建数
- 完成率
- 平均时长
- 题目难度分布
- 答案质量: 评分分布、各类别表现
- API 调用量: 分类型统计
- 响应时间: DeepSeek API 延迟
- 成功率: API 调用成功/失败比例
- Token 消耗: 估算使用量
import { recordHttpRequest, recordAiAnalysis, recordInterviewSession } from '@/lib/metrics';
// 记录 HTTP 请求
const startTime = Date.now();
// ... 处理请求
recordHttpRequest('POST', '/api/resume/upload', 200, (Date.now() - startTime) / 1000);
// 记录 AI 分析
const aiStart = Date.now();
const result = await aiService.analyze(data);
recordAiAnalysis('resume', 'success', (Date.now() - aiStart) / 1000);
// 记录面试会话
recordInterviewSession('technical', 'completed');位置: Dashboards > CodeMockLab > 业务指标
包含:
- API 请求监控
- 用户活跃度
- 简历处理统计
- 面试完成情况
- AI 服务性能
位置: Dashboards > CodeMockLab > 系统监控
包含:
- 服务器资源使用
- 数据库性能
- 容器状态
- 网络流量
可以在 Grafana 中配置告警规则:
- 进入仪表板
- 选择需要告警的面板
- 点击 "Alert" 选项卡
- 配置告警条件和通知渠道
建议的告警规则:
- API 错误率 > 5%
- AI 响应时间 > 10秒
- 数据库连接池使用率 > 80%
- 面试完成率 < 60%
npm run monitor:stopdocker-compose -f docker-compose.monitoring.yml logs -fdocker cp codemocklab-grafana:/var/lib/grafana ./grafana-backupdocker volume rm codemocklab_prometheus-data
docker volume rm codemocklab_grafana-storage监控系统的资源占用:
- Grafana: ~100MB 内存
- Prometheus: ~200MB 内存 + 存储空间
- Exporters: ~50MB 内存(总计)
对主应用的影响:
- 指标收集增加 <1% CPU 开销
- 每个请求增加 ~0.1ms 延迟
- 检查 Prometheus 是否运行:
curl http://localhost:9090 - 验证网络连接:
docker network inspect codemocklab_default - 查看 Grafana 日志:
docker logs codemocklab-grafana
- 检查应用是否正确暴露 /api/metrics
- 验证 Prometheus 抓取配置
- 查看 Prometheus targets: http://localhost:9090/targets
- 确认 postgres-exporter 运行中
- 检查数据库连接字符串
- 验证权限配置
- 添加日志聚合: 集成 Loki 收集应用日志
- 分布式追踪: 使用 Jaeger 追踪请求链路
- 自定义仪表板: 根据业务需求创建专门的监控面板
- 外部通知: 配置 Slack/邮件告警通知
- 长期存储: 配置 Prometheus 远程存储
/docker-compose.monitoring.yml- Docker 编排配置/monitoring/prometheus/- Prometheus 配置/monitoring/grafana/- Grafana 配置和仪表板/src/lib/metrics.ts- 指标收集库/src/app/api/metrics/route.ts- 指标暴露端点
如遇到问题,请查看:
- Docker 日志
- Grafana UI 中的错误提示
- Prometheus 的 targets 页面状态