Skip to content

节点监控

本文介绍如何监控边缘节点的运行状态和性能指标。

监控指标

节点状态指标

指标说明正常范围
在线状态节点是否在线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

# 运行
htop

iotop - 磁盘 I/O 监控:

bash
# 安装
sudo apt install iotop

# 运行
sudo iotop -o

iftop - 网络流量监控:

bash
# 安装
sudo apt install iftop

# 运行
sudo iftop -i eth0

sysstat - 系统性能统计:

bash
# 安装
sudo apt install sysstat

# CPU 使用率
mpstat 1

# 磁盘 I/O
iostat -x 1

# 网络流量
sar -n DEV 1

Prometheus + 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"

日志分析

使用 awkgrep 分析日志:

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 仪表板:

  1. 登录 Grafana
  2. 点击 "+" → "Import"
  3. 输入仪表板 ID:1860(Node Exporter Full)
  4. 选择 Prometheus 数据源
  5. 点击 "Import"

自定义仪表板

创建自定义仪表板展示关键指标:

节点概览面板

  • 在线节点数
  • 总带宽
  • 95峰值带宽
  • 总流量

性能指标面板

  • CPU 使用率
  • 内存使用率
  • 磁盘 I/O
  • 网络流量

服务质量面板

  • 成功率
  • 响应时间
  • 错误率
  • 缓存命中率

故障诊断

当监控发现异常时,参考故障排查文档进行诊断和处理。

下一步

边缘云分发 | 让内容触达更便捷