系统监控
系统监控模块提供 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% |
| 上游查询 | 转发到上游 DNS | 20% |
查询类型分布
显示各类 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请求参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| metric | string | 指标名称:qps、cpu、memory、cache_hit 等 |
| start | string | 开始时间 |
| end | string | 结束时间 |
| interval | string | 数据间隔: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:调用自定义接口
- 企业微信/钉钉:通过机器人推送
配置告警
- 进入「系统管理」→「监控告警」
- 点击「新增告警规则」
- 配置规则参数:
yaml
规则名称: CPU 使用率告警
指标: CPU
条件: > 80%
持续时间: 5 分钟
级别: 警告
通知方式: 邮件 + Webhook最佳实践
监控阈值设置
根据实际环境设置合理的监控阈值:
| 指标 | 警告阈值 | 严重阈值 | 说明 |
|---|---|---|---|
| CPU | 70% | 90% | 留有余量应对突发流量 |
| 内存 | 80% | 95% | 考虑系统和其他服务占用 |
| 磁盘 | 80% | 90% | 预留空间应对日志增长 |
| QPS | 150% | 200% | 基于历史平均值的倍数 |
| 响应时间 | 50ms | 100ms | 根据用户体验要求 |
性能基线
建立系统正常运行时的性能基线:
- 正常运行期:记录 7 天的平均指标
- 高峰期:记录业务高峰期的峰值指标
- 低谷期:记录低谷期的最低指标
基于基线设置合理的告警阈值。
容量规划
根据监控数据进行容量规划:
- QPS 增长趋势:预测何时需要扩容
- 存储增长:规划磁盘扩容时间
- 内存使用:评估是否需要增加内存
故障排查
监控数据异常
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| CPU 持续高 | 查询量突增或程序异常 | 检查 QPS 趋势,分析慢查询 |
| 内存持续增长 | 内存泄漏或缓存过大 | 重启服务,调整缓存配置 |
| 磁盘快速满 | 日志未清理或查询量激增 | 清理日志,检查查询日志 |
| QPS 突降 | 服务异常或网络问题 | 检查服务状态和网络连通性 |
监控不更新
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 数据不刷新 | SSE 连接断开 | 刷新页面重新连接 |
| 历史数据缺失 | 数据保留策略或存储故障 | 检查数据库状态和配置 |
| 指标为 0 | 监控功能未启用 | 在系统设置中启用监控 |