背景
遥想当年对于监控系统,我也是zabbix的忠实用户,偶然的一天接触Prometheus后,研究一番发现其中的魅力所在。由于云原生的兴起,Prometheus也是水涨船高;但是经常听到这个言论,Prometheus比较适合k8s、中间件、服务器等监控,对网络监控中设备监控就不太适合,其实我心里是比较抵触这句话的,工具是好的,就看会不会用,这不关于Prometheus监控网络设备的分享就好了。
Prometheus支持各类对象的监控,如:网络性能监控,网络协议监控,服务器监控,中间件,APM,以及k8s等,它在监控领域已是事实的标准。
这里主要分享下基于Prometheus + Grafana + SNMP Exporter + Alertmanager对网络设备(无线、交换机、负载均衡等硬件设备)的监控告警。
SNMP Exporter
关于Prometheus + Grafana + Alertmanager的搭建在本篇就不阐述,可到之前的文章中查看具体教程,本篇主要说明下SNMP Exporter的在网络设备中监控的作用和相关配置部署。
由于当前的网络设备基本上都支持SNMP协议,现在最新的一些网络设备还支持 「Telemetry」 ,不过支持该协议的监控系统都是各自厂商的内部非开源系统,都需要花费比较大的费用,比如华为系列:iMaster NCE-FabricInsight,iMaster NCE-Fabric等,而改协议就比较适合在大型数据网络或数据中心网络中比较适用。而SNMP协议监控在目前情况下看,还是适合很多网络环境中的,针对无线网络场景,园区网络场景以及一些中小型网络环境中比较适合。
而针对SNMP,Prometheus官方适配了一套SNMP Exporter采集器,可以针对SNMP协议得到的数据做出一些数据格式转换,最终适配Prometheus关于时序数据的要求。
SNMP采用OID树结构,由MIB描述。SNMP Exporter读取snmp.yml配置文件,配置文件是通过SNMP Exporter配置生成器自动生成的,而如果要得到相关网络设备的监控指标,就需要编辑配置生成器配置文件,配置生成器配置文件是通过遍历对应OID实现对指标数据的采集。
配置生成
建议snmp_exporter服务单独使用台服务器搭建
依赖包安装:
Ubuntu*载下**依赖包:
sudo apt-get install unzip build-essential libsnmp-dev
CentOS*载下**依赖包:
sudo yum install gcc gcc-g++ make net-snmp net-snmp-utils net-snmp-libs net-snmp-devel
*载下**Git,拉取源码到服务器本地:CentOS7.9演示
# root用户下,*载下**git
yum install -y git curl wget
# curl 更新
yum -y install epel-release
wget http://mirror.city-fan.org/ftp/contrib/yum-repo/rhel7/x86_64/city-fan.org-release-3-9.rhel7.noarch.rpm
rpm -ivh city-fan.org-release-3-9.rhel7.noarch.rpm
vim /etc/yum.repos.d/city-fan.org.repo
# 把enabled=0修改为enabled=1
[city-fan.org]
name=city-fan.org repository for Red Hat Enterprise Linux (and clones) $releasever ($basearch)
#baseurl=http://mirror.city-fan.org/ftp/contrib/yum-repo/rhel$releasever/$basearch
mirrorlist=http://mirror.city-fan.org/ftp/contrib/yum-repo/mirrorlist-rhel$releasever
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-city-fan.org file:///etc/pki/rpm-gpg/RPM-GPG-KEY-city-fan.org-rhel-7
# 更新curl
yum update curl --enablerepo=city-fan.org -y
# 查看版本是否升级到8.x
curl --version
# 安装golang 1.20.x https://golang.google.cn/dl/
wget https://golang.google.cn/dl/go1.20.8.linux-amd64.tar.gz
# 解压安装
tar -zxvf go1.20.8.linux-amd64.tar.gz -C /usr/local
# 将go添加到环境变量
vim /etc/profile
########################################################
if [ -n "${BASH_VERSION-}" ] ; then
if [ -f /etc/bashrc ] ; then
# Bash login shells run only /etc/profile
# Bash non-login shells run only /etc/bashrc
# Check for double sourcing is done in /etc/bashrc.
. /etc/bashrc
fi
fi
#go环境变量
export GO111MODULE=on
export GOPROXY=https://goproxy.cn,direct
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
########################################################
# 应用环境变量
source /etc/profile
# 拉取snmp_exporter
git clone https://github.com/prometheus/snmp_exporter.git
# 进入目录snmp_exporter
cd snmp_exporter/
# 构建snmp_exporter二进制可执行文件
go build
# 查看生成的二进制可执行文件
ls -lsh snmp_exporter
# 进入生成器目录构建生成器二进制可执行文件
cd snmp_exporter/generator/
# 国内网络*载下**mib公共库报错 忽略即可 make: *** [mibs/apc-powernet-mib] 错误 22
make generator mibs
# mibs文件夹中放入对应品牌的无线设备mib库文件即可
# 把对应的generator.yml文件放入 ../snmp_exporter/generator/ 目录下
# 设置mibs目录临时变量
export MIBDIRS=/root/snmp_exporter/generator/mibs
# 通过generator.yml生成snmp.yml配置文件
./generator --fail-on-parse-errors generate
# 把snmp.yml配置文件移动到../snmp_exporter/目录下
mv snmp.yml ../
# 重启snmp_exporter
systemctl restart snmp_exporter
到此就完成了对应网络设备的指标配置,打开snmp_exporter的web页面,填写对应的网络设备管理IP和认证模块名称即可得到对应网络设备的指标,如下所示:http://IP:9116

提交后,只要得到指定AC的指标数据,即完成设备的指标配置,接下来直接配置prometheus.yml即可。在这里我开源了一套关于huawei、h3c、深信服等品牌的无线网络指标采集配置文件、grafana模版、告警规则等信息,欢迎有资源的一起共创并添加更多品牌配置。
https://github.com/robotneo/wireless-monitor
具体相关配置信息如下:

部分监控展示



更多监控数据采集模版、grafana模版、告警规则模版到Github自行获取。