为什么需要实时流量监控
公司官网突然打不开,客服电话被打爆,一查才发现服务器带宽跑满了。这种事我上周刚遇到,根本原因就是没做好流量监控。等出问题再查,黄花菜都凉了。现在我每天打开仪表盘,一眼就能看到各台服务器的流量走势,哪个接口被刷得厉害也清清楚楚。
选型:用什么工具
市面上方案不少,但真正稳定又省心的不多。我试过Zabbix、PRTG,最后选定Prometheus + Grafana组合。开源免费,社区活跃,资料多,关键是能自定义告警规则。比如流量超过80%就发邮件,超过90%直接短信通知,避免半夜被叫起来救火。
部署步骤
先在服务器上安装Node Exporter采集基础数据。下载解压后后台运行就行:
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
[ -f node_exporter-1.6.1.linux-amd64.tar.gz ] || tar -xzf node_exporter-1.6.1.linux-amd64.tar.gz
nohup ./node_exporter-1.6.1.linux-amd64/node_exporter > /var/log/node_exporter.log 2&&1 &Prometheus主服务装在另一台机器上,配置文件里加上目标服务器地址:
scrape_configs:
- job_name: 'server_traffic'
static_configs:
- targets: ['192.168.1.10:9100', '192.168.1.11:9100']
labels:
group: 'web-servers'可视化展示
Grafana接上Prometheus当数据源,导入现成的流量看板模板ID18574。刷新一下,各服务器的实时流入流出曲线就出来了。我们还在大屏电视上挂着,运维组人人都能看到全局状态。
设置告警规则
光看图不够,得让系统主动提醒。在Prometheus里加一条rule:
groups:
- name: network_alert
rules:
- alert: HighNetworkTraffic
expr: rate(node_network_receive_bytes_total{device="eth0"}[5m]) > 104857600
for: 2m
labels:
severity: warning
annotations:
summary: "High traffic on {{ $labels.instance }}"
description: "Network receive rate is above 100MB/s for more than 2 minutes."配合Alertmanager发通知,微信、钉钉都能接。上次CDN节点异常,流量猛增,还没收到用户反馈,告警就已经到账了。
日常维护要点
每周抽十分钟检查下Exporter进程有没有挂,磁盘空间够不够存指标数据。日志发现有个别服务器时间不同步会导致数据断点,后来统一上了NTP校时。小问题及时处理,比出事后再排查强得多。