1.
概述与前提
- 本文以在菲律宾机房(裸机或云主机)对服务器网口带宽实时监测并配置告警为目标,推荐 Prometheus + node_exporter + Grafana + Alertmanager 或 Zabbix 两条常用路线。
- 前提:能在服务器上安装软件、有 sudo 权限、网络允许 Prometheus/监控端口互通(默认 node_exporter 9100)。
2.
选择监控方案:Prometheus 路线简介
- 优点:开源、高并发、支持丰富的告警与可视化,适合多机房。
- 组件:node_exporter(采集主机指标)、Prometheus(抓取与存储)、Grafana(展示)、Alertmanager(告警投递)。
3.
在菲律宾服务器上安装 node_exporter(逐步)
- 1) 下载:ssh 登录服务器,执行 wget https://github.com/prometheus/node_exporter/releases/download/v*/node_exporter-*.linux-amd64.tar.gz(替换版本号)。
- 2) 解压并安装:tar xzf ... && sudo mv node_exporter-*/node_exporter /usr/local/bin/ && sudo useradd -r -s /sbin/nologin nodeusr。
- 3) systemd 服务:创建 /etc/systemd/system/node_exporter.service,内容:ExecStart=/usr/local/bin/node_exporter --collector.netdev.legacy=false,Type=simple,User=nodeusr。然后 sudo systemctl daemon-reload && sudo systemctl enable --now node_exporter。
- 4) 防火墙:允许 9100 端口(例如 ufw allow 9100/tcp 或 iptables 放行来自 Prometheus 的 IP)。
4.
Prometheus 配置抓取 node_exporter
- 1) 在 Prometheus 的 prometheus.yml 中加入 scrape_configs:
- job_name: 'ph-servers'
static_configs: [{targets: ['ph-server-ip:9100','another-ip:9100']}]
- 2) 启动/重载 Prometheus。确认在 Prometheus 的 Targets 页面能看到抓取状态为 UP。
5.
带宽指标与 PromQL(实时监测的关键)
- node_exporter 提供 node_network_receive_bytes_total 与 node_network_transmit_bytes_total,单位字节总量。
- 实时带宽(bps)示例表达式:
receive_bps = rate(node_network_receive_bytes_total{device="eth0"}[1m]) * 8
transmit_bps = rate(node_network_transmit_bytes_total{device="eth0"}[1m]) * 8
- 可按 5m 平滑:rate(...[5m]),并根据接口名称 device 调整 eth0 或 ens3 等。
6.
在 Grafana 中创建带宽面板
- 1) 新建 Dashboard -> Add Panel,数据源选 Prometheus。
- 2) Query 填上上面 PromQL:例如 rate(node_network_transmit_bytes_total{device="eth0"}[1m])*8。单位选择 bps 或自动格式化为 Mbps(/1024/1024)。
- 3) 添加阈值色彩:例如 > 80% 峰值为红色,>50% 黄色。保存并设置 Dashboard 权限。
7.
配置 Prometheus Alerting 规则与 Alertmanager
- 1) 在 rules 文件(如 alert_rules.yml)新增告警规则示例:
- alert: High_Interface_Utilization
expr: (rate(node_network_transmit_bytes_total{device="eth0"}[5m]) * 8) / (1000*1000) > 50
for: 3m
labels: {severity: "critical"}
annotations: {summary: "eth0 带宽利用率超过 50Mbps", description: "实例 {{ $labels.instance }} 接口 eth0 持续高带宽"}
- 2) Prometheus 配置中引入该 rules 文件并重载。
- 3) Alertmanager 配置 receivers(email、Slack、Webhook、钉钉/SMS)并在 routes 中按 severity 分发。示例:smtp_configs 或 slack_configs。
- 4) 测试:使用 iperf3 从其它节点对
菲律宾服务器发起流量,观察告警触发并接收通知。
8.
替代方案:使用 SNMP 或 Zabbix(对网络设备或偏企业场景)
- SNMP:若要监控机房交换机/路由器接口带宽,启用设备 SNMP,使用 snmp_exporter 或直接 Prometheus SNMP exporter,抓取 ifHCInOctets/ifHCOutOctets OID,计算速率与告警。
- Zabbix:在服务器安装 Zabbix agent,创建 item 类型 net.if.in[eth0] / net.if.out[eth0],触发器示例:last(/host/net.if.out[eth0],5m)>50000000(字节阈值)。Zabbix 内置告警与周期性脚本支持短信/API 通知。
9.
测试、验证与常见问题排查
- 1) 测试带宽:使用 iperf3 或 tcpreplay 生成稳定流量,观察 Prometheus Graph/Grafana 面板。
- 2) 常见问题:指标为 0 或抓不到,检查 node_exporter 是否在监听、防火墙、Prometheus target 是否 UP;若 interface 名称错配,使用 /metrics 页面确认 device 名称。
- 3) 告警误报:调整 for 时长(如 for:3m),并使用 rate 窗口平滑短暂突发。
10.
问:如何快速定位菲律宾服务器哪个进程占用带宽?
答:可在服务器端使用工具如 iftop、nethogs、ss 或 ss -tunp + lsof 来定位,具体步骤:sudo apt install nethogs iftop;运行 sudo nethogs eth0 或 sudo iftop -i eth0 查看实时进程/连接流量;结合 Grafana 的端口流量面板,交叉确认时间点。若需长期统计,可部署 Netflow/sFlow 采集。
11.
问:Prometheus 抓不到 node_exporter,常见网络和权限检查有哪些?
答:检查 1) node_exporter 是否运行(systemctl status);2) 服务器防火墙(ufw/iptables)是否允许 Prometheus 的 IP 访问 9100;3) SELinux 是否阻止(setenforce 0 临时测试);4) Prometheus prometheus.yml 中 targets IP 是否正确且端口无误;5) 在 Prometheus 主机使用 curl http://ph-server-ip:9100/metrics 看是否能返回指标。
12.
问:带宽告警阈值怎么确定比较合理?
答:按实际链路带宽与峰值流量来定:1) 统计历史流量 7×24hrs 高峰百分位(比如 95th)作为基线;2) 阈值可设为链路物理带宽的 70%-85%(重要服务可更低),或设成绝对值(如 50Mbps);3) 结合 for 持续时间避免短暂抖动导致告警;4) 定期复盘调整阈值。
来源:监控指南菲律宾服务器带宽大小如何实时监测与告警配置