一.背景与需求
最近收到机房账单多出了将近70M下行带宽,多交了8K多的费用,很是蛋疼。IDC机房使用每月保底带宽模式, 例如保底100M带宽/月,如果利用955计费方式,没超出100M则只收机柜和保底带宽的费用,如果超出1M则按照额外进行收费。 这里比较蛋疼的是,上行和下行带宽默认不做限制,最高可以跑到1G。。。,之前没做好交换机流量监控,导致没能及时发现问题。Zabbix可以根据交换机开启的snmp服务,采集到交换机各个口的流量指标,但是由于现在已经全面转向Prometheus体系,所以只能通过一些方法将这个监控接入Prometheus。
简单网络管理协议(Simple Network Management Protocol, SNMP)原名叫做简单网关监控协议(Simple Gateway Monitoring Protocol, SGMP)。最早是IETF的研究小组提出来的,在SGMP协议的基础之上,加上新的管理信息结构和管理信息库,让SGMP更加全面。简单性和扩展性是SNMP所体现出来的,其中包含数据库类型(Database Schema),一个应用层协议(Application Layer Protocol)和一些资料文件。SNMP管理协议不光能够加强网络管理系统的效能,而且还可以用来对网络中的资源进行管理和实时监控。
snmp_exporter
正好官方prometheus项目就提供了这个关于snmp的exporter,按照对接方式将snmp指标采集即可。
运行命令测试snmp是否正常(默认community是public, 但是如果改过了记得改,要不然测试不通):
1 | snmpwalk -v2c -c my_community 10.23.0.253 1.3.6.1.2.1.31.1.1 |
返回获取到交换机端口列表则表示正常。
snmp_exporter独立运行,并且要加载一个snmp.yml配置文件。 snmp.yml配置文件内容就是包含如下(默认指标):
1 | # WARNING: This file was auto-generated using snmp_exporter generator, manual changes will be lost. |
我使用的是docker-compose的方式运行snmp_exporter, docker-compose.yml如下:
1 | version: "3" |
prometheus.yml配置文件如下:
我采用文件发现的形式,将配置写在switch.json中, 这样以后修改关于交换机的信息,更改后直接热加载,如果直接写死在promeths.yml每次都要重启prometheus.
1 | - job_name: 'snmp' #交换机SNMP监控 |
switch.json内容如下: 默认填入交换机的IP地址
1 | [ |
Grafana面板ID: 11169
官方Grafana Dashbord面板: https://grafana.com/grafana/dashboards/11169-snmp-stats/
接入面板就可以看到交换机各个口的流量(上行/下行)都可以一览无余了,哈哈哈。再配置告警即可。
面板可以再自定义做一个监控连接防火墙/公网流量的出口即可监控整个机房的公网流量(上行和下行)。