Skip to content

系统监控

系统监控模块提供 DNS-Go 运行状态的实时监控,包括系统资源使用、DNS 查询性能和缓存命中率等关键指标。

功能概述

系统监控模块提供:

  • 实时数据监控:CPU、内存、磁盘、网络使用率
  • DNS 性能指标:QPS、响应时间、查询来源分布
  • 缓存统计:缓存命中率、缓存条目数
  • 历史趋势:指标历史数据图表
  • 实时推送:通过 SSE 实时推送监控数据

监控指标

系统资源

CPU 使用率

  • 系统 CPU:整个系统的 CPU 使用率
  • 进程 CPU:DNS-Go 进程的 CPU 使用率
  • 趋势图:最近 1 小时/24 小时的 CPU 趋势

内存使用

  • 总内存:系统总内存
  • 已用内存:当前已使用的内存
  • 进程内存:DNS-Go 进程占用的内存
  • 内存使用率:百分比显示

磁盘使用

  • 总容量:磁盘总容量
  • 已用空间:已使用的磁盘空间
  • 可用空间:剩余可用空间
  • 使用率:百分比显示
  • 数据目录:DNS-Go 数据目录的占用情况

网络流量

  • 接收流量:网络接收速率(B/s、KB/s、MB/s)
  • 发送流量:网络发送速率
  • 总流量:累计流量统计
  • 连接数:当前网络连接数

DNS 性能指标

查询 QPS

  • 实时 QPS:当前每秒查询数
  • 平均 QPS:最近 1 分钟/5 分钟/15 分钟平均 QPS
  • 峰值 QPS:历史最高 QPS
  • QPS 趋势:最近 1 小时/24 小时的 QPS 趋势图

响应时间

  • 平均响应时间:所有查询的平均响应时间
  • P50/P90/P99:响应时间的百分位数
  • 响应时间分布:不同响应时间区间的查询占比

查询来源分布

来源说明占比
本地解析本地域名解析35%
缓存命中缓存中的记录45%
上游查询转发到上游 DNS20%

查询类型分布

显示各类 DNS 查询的占比:

  • A 记录查询
  • AAAA 记录查询
  • MX 记录查询
  • 其他类型查询

缓存统计

缓存命中率

  • 当前命中率:最近 1000 次查询的命中率
  • 平均命中率:历史平均命中率
  • 命中率趋势:最近 24 小时命中率变化

缓存条目

  • 当前条目数:缓存中的域名记录数
  • 缓存大小:缓存占用的内存大小
  • 命中率:缓存命中次数 / 总查询次数

监控面板

仪表盘

Web 管理界面提供可视化监控仪表盘:

┌─────────────────────────────────────────────────────────────┐
│                     DNS-Go 监控仪表盘                        │
├─────────────────────────────────────────────────────────────┤
│  CPU: 25%    内存: 45%    磁盘: 60%    网络: ↑1.2MB ↓2.5MB   │
├─────────────────────────────────────────────────────────────┤
│  实时 QPS: 1,234    平均响应: 15ms    缓存命中: 78%          │
├─────────────────────────────────────────────────────────────┤
│  [QPS 趋势图]          [响应时间分布图]                      │
├─────────────────────────────────────────────────────────────┤
│  [查询来源饼图]        [查询类型饼图]                        │
└─────────────────────────────────────────────────────────────┘

实时数据更新

监控数据通过 SSE(Server-Sent Events)实时推送到前端:

javascript
const eventSource = new EventSource('/api/monitor/stream');

eventSource.onmessage = (event) => {
  const data = JSON.parse(event.data);
  updateDashboard(data);
};

推送频率:

  • 系统资源:每 5 秒
  • DNS 指标:每秒
  • 缓存统计:每 10 秒

历史数据

数据保留

系统会自动保存历史监控数据:

粒度保留时间说明
原始数据24 小时每秒数据点
1 分钟平均7 天每分钟平均值
1 小时平均30 天每小时平均值
1 天平均90 天每天平均值

历史趋势图

查看历史性能趋势:

  • 时间范围选择:1 小时、6 小时、24 小时、7 天、30 天
  • 指标对比:同时显示多个指标
  • 缩放查看:支持图表缩放查看细节

API 接口

获取实时状态

bash
GET /api/monitor/status

响应示例:

json
{
  "code": 200,
  "data": {
    "system": {
      "cpu_percent": 25.5,
      "memory": {
        "total": 8589934592,
        "used": 3865470566,
        "percent": 45.0
      },
      "disk": {
        "total": 107374182400,
        "used": 64424509440,
        "percent": 60.0
      },
      "network": {
        "bytes_recv": 1250000,
        "bytes_sent": 2500000
      }
    },
    "dns": {
      "qps": 1234,
      "avg_response_time": 15.2,
      "query_count": 1500000,
      "cache_hit_rate": 78.5
    },
    "cache": {
      "entries": 50000,
      "size": 10485760,
      "hit_rate": 78.5
    },
    "timestamp": "2025-01-15T10:30:25Z"
  }
}

获取历史数据

bash
GET /api/monitor/history?metric=qps&start=2025-01-01&end=2025-01-15&interval=1h

请求参数:

参数类型说明
metricstring指标名称:qps、cpu、memory、cache_hit 等
startstring开始时间
endstring结束时间
intervalstring数据间隔:1m、1h、1d

响应示例:

json
{
  "code": 200,
  "data": {
    "metric": "qps",
    "interval": "1h",
    "points": [
      {"timestamp": "2025-01-15T00:00:00Z", "value": 1200},
      {"timestamp": "2025-01-15T01:00:00Z", "value": 1350},
      {"timestamp": "2025-01-15T02:00:00Z", "value": 1180}
    ]
  }
}

SSE 实时流

bash
GET /api/monitor/stream

数据流格式:

data: {"cpu":25.5,"memory":45.0,"qps":1234,"timestamp":"2025-01-15T10:30:25Z"}

data: {"cpu":26.2,"memory":45.2,"qps":1256,"timestamp":"2025-01-15T10:30:30Z"}

获取统计数据

bash
GET /api/dashboard/stats

响应示例:

json
{
  "code": 200,
  "data": {
    "domain_count": 150,
    "record_count": 2500,
    "upstream_count": 5,
    "today_queries": 125678,
    "today_cache_hits": 98456,
    "avg_response_time": 12.5
  }
}

告警配置

告警规则

可配置多种告警规则:

规则触发条件级别
CPU 过高CPU > 80% 持续 5 分钟警告
CPU 极高CPU > 95% 持续 2 分钟严重
内存过高内存 > 85% 持续 5 分钟警告
磁盘不足磁盘 > 90%严重
QPS 突增QPS > 平均值的 200%警告
响应缓慢平均响应时间 > 100ms警告
缓存命中率低命中率 < 50%提示

告警通知

支持多种告警通知方式:

  • Web 界面:管理界面显示告警提示
  • 邮件通知:发送邮件到指定地址
  • Webhook:调用自定义接口
  • 企业微信/钉钉:通过机器人推送

配置告警

  1. 进入「系统管理」→「监控告警」
  2. 点击「新增告警规则」
  3. 配置规则参数:
yaml
规则名称: CPU 使用率告警
指标: CPU
条件: > 80%
持续时间: 5 分钟
级别: 警告
通知方式: 邮件 + Webhook

最佳实践

监控阈值设置

根据实际环境设置合理的监控阈值:

指标警告阈值严重阈值说明
CPU70%90%留有余量应对突发流量
内存80%95%考虑系统和其他服务占用
磁盘80%90%预留空间应对日志增长
QPS150%200%基于历史平均值的倍数
响应时间50ms100ms根据用户体验要求

性能基线

建立系统正常运行时的性能基线:

  1. 正常运行期:记录 7 天的平均指标
  2. 高峰期:记录业务高峰期的峰值指标
  3. 低谷期:记录低谷期的最低指标

基于基线设置合理的告警阈值。

容量规划

根据监控数据进行容量规划:

  • QPS 增长趋势:预测何时需要扩容
  • 存储增长:规划磁盘扩容时间
  • 内存使用:评估是否需要增加内存

故障排查

监控数据异常

现象可能原因解决方案
CPU 持续高查询量突增或程序异常检查 QPS 趋势,分析慢查询
内存持续增长内存泄漏或缓存过大重启服务,调整缓存配置
磁盘快速满日志未清理或查询量激增清理日志,检查查询日志
QPS 突降服务异常或网络问题检查服务状态和网络连通性

监控不更新

问题原因解决方案
数据不刷新SSE 连接断开刷新页面重新连接
历史数据缺失数据保留策略或存储故障检查数据库状态和配置
指标为 0监控功能未启用在系统设置中启用监控

相关文档

基于 MIT 许可发布