节点监控
本文介绍如何监控边缘节点的运行状态和性能指标。
监控指标
节点状态指标
| 指标 | 说明 | 正常范围 |
|---|---|---|
| 在线状态 | 节点是否在线 | online |
| 在线率 | 最近 30 天在线时长占比 | > 95% |
| 最后上线时间 | 节点最后一次上线的时间 | < 5 分钟前 |
带宽指标
| 指标 | 说明 | 正常范围 |
|---|---|---|
| 当前带宽 | 实时带宽使用(Mbps) | - |
| 95峰值带宽 | 95分位带宽值 | - |
| 带宽利用率 | 当前带宽 / 总带宽 | 60-90% |
| 入站流量 | 每秒入站流量 | - |
| 出站流量 | 每秒出站流量 | - |
服务质量指标
| 指标 | 说明 | 正常范围 |
|---|---|---|
| 成功率 | 请求成功率 | > 95% |
| 响应时间 | 平均响应时间(ms) | < 100ms |
| 错误率 | 请求错误率 | < 5% |
| 超时率 | 请求超时率 | < 1% |
系统资源指标
| 指标 | 说明 | 正常范围 |
|---|---|---|
| CPU 使用率 | CPU 使用百分比 | < 70% |
| 内存使用率 | 内存使用百分比 | < 80% |
| 磁盘使用率 | 磁盘使用百分比 | < 85% |
| 磁盘 I/O | 磁盘读写速率 | - |
| 网络连接数 | 当前活跃连接数 | - |
缓存指标
| 指标 | 说明 | 正常范围 |
|---|---|---|
| 缓存命中率 | 缓存命中百分比 | > 80% |
| 缓存大小 | 当前缓存占用空间 | - |
| 缓存对象数 | 缓存的对象数量 | - |
监控方式
管理后台监控
登录管理后台查看实时监控数据:
节点列表页:
- 节点在线状态
- 实时带宽使用
- 在线率统计
- 服务质量评分
节点详情页:
- 实时性能指标
- 历史趋势图表
- 告警记录
- 操作日志
API 监控
通过 API 获取监控数据:
bash
# 获取节点实时数据
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.yunwawa.cloud/api/nodes/1/realtime
# 获取节点统计数据
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.yunwawa.cloud/api/nodes/1/stats?start_date=2026-04-01&end_date=2026-04-30详细接口文档请查看 节点接口。
命令行监控
在节点服务器上使用命令行工具监控:
bash
# 查看节点状态
systemctl status yunwawa-node
# 查看实时日志
journalctl -u yunwawa-node -f
# 查看性能指标
yunwawa-node status监控工具
系统监控工具
htop - 进程监控:
bash
# 安装
sudo apt install htop
# 运行
htopiotop - 磁盘 I/O 监控:
bash
# 安装
sudo apt install iotop
# 运行
sudo iotop -oiftop - 网络流量监控:
bash
# 安装
sudo apt install iftop
# 运行
sudo iftop -i eth0sysstat - 系统性能统计:
bash
# 安装
sudo apt install sysstat
# CPU 使用率
mpstat 1
# 磁盘 I/O
iostat -x 1
# 网络流量
sar -n DEV 1Prometheus + Grafana
使用 Prometheus 和 Grafana 搭建专业监控系统。
安装 Prometheus:
bash
# 下载
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
# 解压
tar xvf prometheus-2.45.0.linux-amd64.tar.gz
cd prometheus-2.45.0.linux-amd64
# 配置
cat > prometheus.yml <<EOF
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'yunwawa-node'
static_configs:
- targets: ['localhost:9100']
EOF
# 启动
./prometheus --config.file=prometheus.yml安装 Node Exporter:
bash
# 下载
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
# 解压
tar xvf node_exporter-1.6.0.linux-amd64.tar.gz
cd node_exporter-1.6.0.linux-amd64
# 启动
./node_exporter安装 Grafana:
bash
# 添加仓库
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
# 安装
sudo apt-get update
sudo apt-get install grafana
# 启动
sudo systemctl start grafana-server
sudo systemctl enable grafana-server访问 http://localhost:3000(默认账号:admin/admin)。
告警配置
告警规则
在管理后台配置告警规则:
节点离线告警:
- 触发条件:节点离线超过 5 分钟
- 告警级别:严重
- 通知方式:短信 + 邮件
带宽异常告警:
- 触发条件:带宽利用率 < 20% 持续 1 小时
- 告警级别:警告
- 通知方式:邮件
磁盘空间告警:
- 触发条件:磁盘使用率 > 85%
- 告警级别:警告
- 通知方式:邮件
服务质量告警:
- 触发条件:成功率 < 95% 持续 10 分钟
- 告警级别:严重
- 通知方式:短信 + 邮件
Prometheus 告警规则
创建告警规则文件 alert.rules.yml:
yaml
groups:
- name: yunwawa_alerts
interval: 30s
rules:
# 节点离线告警
- alert: NodeDown
expr: up{job="yunwawa-node"} == 0
for: 5m
labels:
severity: critical
annotations:
summary: "节点 {{ $labels.instance }} 离线"
description: "节点已离线超过 5 分钟"
# CPU 使用率过高
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 10m
labels:
severity: warning
annotations:
summary: "节点 {{ $labels.instance }} CPU 使用率过高"
description: "CPU 使用率超过 80%,当前值:{{ $value }}%"
# 内存使用率过高
- alert: HighMemoryUsage
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
for: 10m
labels:
severity: warning
annotations:
summary: "节点 {{ $labels.instance }} 内存使用率过高"
description: "内存使用率超过 85%,当前值:{{ $value }}%"
# 磁盘空间不足
- alert: DiskSpaceLow
expr: (1 - (node_filesystem_avail_bytes / node_filesystem_size_bytes)) * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: "节点 {{ $labels.instance }} 磁盘空间不足"
description: "磁盘使用率超过 85%,当前值:{{ $value }}%"
# 网络流量异常
- alert: HighNetworkTraffic
expr: rate(node_network_receive_bytes_total[5m]) > 100000000
for: 10m
labels:
severity: info
annotations:
summary: "节点 {{ $labels.instance }} 网络流量异常"
description: "入站流量超过 100MB/s"在 prometheus.yml 中引用告警规则:
yaml
rule_files:
- "alert.rules.yml"
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']Alertmanager 配置
创建 alertmanager.yml:
yaml
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'instance']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'default'
receivers:
- name: 'default'
email_configs:
- to: 'admin@yunwawa.cloud'
from: 'alert@yunwawa.cloud'
smarthost: 'smtp.example.com:587'
auth_username: 'alert@yunwawa.cloud'
auth_password: 'your_password'日志管理
日志位置
节点日志存储位置:
bash
# 应用日志
/var/log/yunwawa/node.log
# 系统日志
journalctl -u yunwawa-node
# 访问日志
/var/log/yunwawa/access.log
# 错误日志
/var/log/yunwawa/error.log日志查看
bash
# 查看最新日志
tail -f /var/log/yunwawa/node.log
# 查看错误日志
grep ERROR /var/log/yunwawa/node.log
# 查看最近 100 行
tail -n 100 /var/log/yunwawa/node.log
# 按时间范围查看
journalctl -u yunwawa-node --since "2026-04-26 08:00:00" --until "2026-04-26 20:00:00"日志分析
使用 awk 和 grep 分析日志:
bash
# 统计错误数量
grep ERROR /var/log/yunwawa/node.log | wc -l
# 统计各类错误
grep ERROR /var/log/yunwawa/node.log | awk '{print $5}' | sort | uniq -c | sort -rn
# 查找特定时间段的错误
awk '/2026-04-26 08:00/,/2026-04-26 09:00/ {if (/ERROR/) print}' /var/log/yunwawa/node.log
# 统计请求响应时间
awk '{sum+=$10; count++} END {print "平均响应时间:", sum/count, "ms"}' /var/log/yunwawa/access.log日志轮转
配置日志轮转防止日志文件过大:
创建 /etc/logrotate.d/yunwawa:
/var/log/yunwawa/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0644 yunwawa yunwawa
sharedscripts
postrotate
systemctl reload yunwawa-node > /dev/null 2>&1 || true
endscript
}性能分析
带宽分析
查看带宽使用趋势:
bash
# 实时带宽监控
iftop -i eth0
# 统计每小时带宽
sar -n DEV -f /var/log/sysstat/sa26 | grep eth0
# 查看连接数
ss -s缓存分析
分析缓存性能:
bash
# 查看缓存命中率
yunwawa-node cache-stats
# 查看缓存大小
du -sh /var/cache/yunwawa
# 查看热点文件
yunwawa-node cache-top系统性能分析
使用 perf 进行性能分析:
bash
# 安装 perf
sudo apt install linux-tools-generic
# 记录性能数据
sudo perf record -a -g -p $(pgrep yunwawa-node) sleep 30
# 查看报告
sudo perf report
# 查看热点函数
sudo perf top监控最佳实践
1. 建立基线
记录正常运行时的性能指标作为基线:
- CPU 使用率:30-50%
- 内存使用率:50-70%
- 磁盘使用率:60-80%
- 带宽利用率:70-85%
- 缓存命中率:80-90%
2. 设置合理的告警阈值
根据基线设置告警阈值,避免误报:
- 告警阈值应高于正常波动范围
- 设置告警持续时间,避免瞬时波动触发
- 区分不同级别的告警(严重、警告、信息)
3. 定期检查
建立定期检查机制:
- 每日检查节点在线状态
- 每周检查性能趋势
- 每月检查收益数据
- 每季度优化配置
4. 自动化监控
使用脚本自动化监控任务:
bash
#!/bin/bash
# 节点健康检查脚本
# 检查节点状态
if ! systemctl is-active --quiet yunwawa-node; then
echo "节点服务未运行" | mail -s "告警:节点离线" admin@yunwawa.cloud
fi
# 检查磁盘空间
DISK_USAGE=$(df -h /var/cache/yunwawa | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt 85 ]; then
echo "磁盘使用率:${DISK_USAGE}%" | mail -s "告警:磁盘空间不足" admin@yunwawa.cloud
fi
# 检查内存使用
MEM_USAGE=$(free | awk 'NR==2 {printf "%.0f", $3/$2*100}')
if [ $MEM_USAGE -gt 85 ]; then
echo "内存使用率:${MEM_USAGE}%" | mail -s "告警:内存使用率过高" admin@yunwawa.cloud
fi设置定时任务:
bash
# 编辑 crontab
crontab -e
# 每 5 分钟执行一次健康检查
*/5 * * * * /opt/scripts/health-check.sh监控仪表板
Grafana 仪表板配置
导入预配置的 Grafana 仪表板:
- 登录 Grafana
- 点击 "+" → "Import"
- 输入仪表板 ID:1860(Node Exporter Full)
- 选择 Prometheus 数据源
- 点击 "Import"
自定义仪表板
创建自定义仪表板展示关键指标:
节点概览面板:
- 在线节点数
- 总带宽
- 95峰值带宽
- 总流量
性能指标面板:
- CPU 使用率
- 内存使用率
- 磁盘 I/O
- 网络流量
服务质量面板:
- 成功率
- 响应时间
- 错误率
- 缓存命中率
故障诊断
当监控发现异常时,参考故障排查文档进行诊断和处理。
