Skip to content

Latest commit

 

History

History
192 lines (148 loc) · 4.96 KB

File metadata and controls

192 lines (148 loc) · 4.96 KB

CodeMockLab 监控部署指南

概述

集成 Grafana + Prometheus 监控方案,实现平台运行状态和业务指标的可视化监控。

快速开始

1. 安装依赖

npm install

2. 启动监控服务

npm run monitor:start

3. 访问监控面板

监控架构

┌─────────────┐     ┌──────────────┐     ┌─────────────┐
│  Next.js    │────▶│  Prometheus  │────▶│  Grafana    │
│  App        │     │  (Metrics)   │     │  (Visuals)  │
└─────────────┘     └──────────────┘     └─────────────┘
       │                    │
       │                    │
       ▼                    ▼
┌─────────────┐     ┌──────────────┐
│ PostgreSQL  │────▶│  Exporters   │
└─────────────┘     └──────────────┘

核心指标

系统指标

  • API 请求速率: 各端点的请求频率
  • 响应时间: P50、P95、P99 延迟
  • 错误率: 4xx、5xx 错误统计
  • 系统资源: CPU、内存、磁盘使用率

业务指标

  • 用户活跃度: 活跃用户数、新增用户
  • 简历分析: 上传量、解析成功率、AI分析耗时
  • 面试流程:
    • 面试创建数
    • 完成率
    • 平均时长
    • 题目难度分布
  • 答案质量: 评分分布、各类别表现

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');

仪表板说明

1. 业务指标仪表板

位置: Dashboards > CodeMockLab > 业务指标

包含:

  • API 请求监控
  • 用户活跃度
  • 简历处理统计
  • 面试完成情况
  • AI 服务性能

2. 系统监控仪表板

位置: Dashboards > CodeMockLab > 系统监控

包含:

  • 服务器资源使用
  • 数据库性能
  • 容器状态
  • 网络流量

告警配置

可以在 Grafana 中配置告警规则:

  1. 进入仪表板
  2. 选择需要告警的面板
  3. 点击 "Alert" 选项卡
  4. 配置告警条件和通知渠道

建议的告警规则:

  • API 错误率 > 5%
  • AI 响应时间 > 10秒
  • 数据库连接池使用率 > 80%
  • 面试完成率 < 60%

维护操作

停止监控服务

npm run monitor:stop

查看监控日志

docker-compose -f docker-compose.monitoring.yml logs -f

备份 Grafana 配置

docker cp codemocklab-grafana:/var/lib/grafana ./grafana-backup

清理监控数据

docker volume rm codemocklab_prometheus-data
docker volume rm codemocklab_grafana-storage

性能影响

监控系统的资源占用:

  • Grafana: ~100MB 内存
  • Prometheus: ~200MB 内存 + 存储空间
  • Exporters: ~50MB 内存(总计)

对主应用的影响:

  • 指标收集增加 <1% CPU 开销
  • 每个请求增加 ~0.1ms 延迟

故障排查

Grafana 无法连接 Prometheus

  1. 检查 Prometheus 是否运行: curl http://localhost:9090
  2. 验证网络连接: docker network inspect codemocklab_default
  3. 查看 Grafana 日志: docker logs codemocklab-grafana

指标不更新

  1. 检查应用是否正确暴露 /api/metrics
  2. 验证 Prometheus 抓取配置
  3. 查看 Prometheus targets: http://localhost:9090/targets

数据库指标缺失

  1. 确认 postgres-exporter 运行中
  2. 检查数据库连接字符串
  3. 验证权限配置

扩展建议

  1. 添加日志聚合: 集成 Loki 收集应用日志
  2. 分布式追踪: 使用 Jaeger 追踪请求链路
  3. 自定义仪表板: 根据业务需求创建专门的监控面板
  4. 外部通知: 配置 Slack/邮件告警通知
  5. 长期存储: 配置 Prometheus 远程存储

相关文件

  • /docker-compose.monitoring.yml - Docker 编排配置
  • /monitoring/prometheus/ - Prometheus 配置
  • /monitoring/grafana/ - Grafana 配置和仪表板
  • /src/lib/metrics.ts - 指标收集库
  • /src/app/api/metrics/route.ts - 指标暴露端点

支持

如遇到问题,请查看:

  1. Docker 日志
  2. Grafana UI 中的错误提示
  3. Prometheus 的 targets 页面状态