本文介绍如何使用Prometheus监控SNMP。
前提条件
已创建容器服务类型的Prometheus实例,具体操作,请参见Prometheus实例 for 容器服务。
使用限制
目前仅Prometheus实例 for 容器服务类型实例支持该组件接入。
SNMP简介
SNMP系统组成
SNMP基本组件包括网络管理系统NMS(Network Management System)、代理进程(Agent)、被管对象(Managed Object)和管理信息库MIB(Management Information Base)。它们共同构成SNMP的管理模型,在SNMP的体系结构中都起着至关重要的作用,以下为SNMP组件中的一些基本概念解释。
NMS:全称Network Management System,即网络管理系统。一般是各种网管软件,可以向Agent查询或者修改各种信息,也可以接受Agent的主动推送,在可观测监控 Prometheus 版的场景中,就是SNMP Exporter,仅对Agent做信息查询。
Agent:被管理设备上的一个代理进程,收集被管理设备的信息并汇报给NMS。
MIB:全称Management Information Base,是一个数据库。列出了被管理设备可以提供的各项数据,每项数据都对应一个唯一的OID。
Device:即设备,指实际的网络设备。包括交换机、路由器、防火墙、UPS、AP、软路由等,只要支持SNMP,都可以视为一个网络设备。
Managed Object:被管理对象,一个设备至少包含一个被管理对象,可能是设备本身,也可能是某个硬件(例如一个网口),也可能是一些参数合集。
OID:全称Object ID,即对象标识符,用于定位一个数据项。OID是一串数字,比如1.3.6.1.2.1.1表示System,数字是树形结构,左侧为根,右侧为叶,前面一截是由IANA分配的厂商标识符,后面就是各个厂商自定的,因此不同厂商设备的OID树差别很大。
MODULE:因为SNMP可以监控的设备和厂商多种多样,因此SNMP Exporter中划分了很多Module,比如网络设备的if_mib,软路由的ddwrt、paloalto_fw防火墙等,总共有十几种,其中最常用的就是if_mib。
SNMP Exporter
SNMP协议中用不同的OID区分不同的状态数据,因此SNMP中的OID与Prometheus中的指标概念极其类似。SNMP Exporter通过从Agent查询指定的OID数据,同时将数据映射到可读的指标上,实现SNMP数据到Prometheus指标的转换。同时SNMP Exporter默认提供了非常丰富的转换配置,大部分场景下您无需进行额外配置即可将OID转换为可读的指标数据。
SNMP Metric监控参考模型
SNMP Metric采集
SNMP可以帮助运维人员以极为简单而有效的方式管理网络。首先,SNMP帮助运维人员收集网络上不同设备带宽使用量的信息,在进行故障排除的同时,更加快速找出网络性能趋势或问题。SNMP采集到的数据都是来自设备提供,不同厂商的设备可以提供的数据不尽一致,SNMP Exporter尽可能多的提供兼容,默认配置中已经包含了常见的各个厂商的OID映射,涵盖了市面上主要的厂家及其网络产品,能够满足绝大多数场景需求,详情请参见Prometheus开源社区相关文档。在当前版本中,我们支持if_mib
module的指标数据采集。
这里以常见的思科16口交换机为例,列举SNMP的主要指标:
指标名称 | 指标描述 | OID |
ifAdminStatus | 接口状态 | 1.3.6.1.2.1.2.2.1.7 |
ifHCOutOctets | 接口发出的字节数总计 | 1.3.6.1.2.1.31.1.1.1.10 |
ifInBroadcastPkts | 接口收到的广播包数量统计 | 1.3.6.1.2.1.31.1.1.1.3 |
ifInErrors | 流入流量异常数统计 | 1.3.6.1.2.1.2.2.1.14 |
ifSpeed | 接口速率,单位为bits per second | 1.3.6.1.2.1.2.2.1.5 |
ifMtu | MTU配置值 | 1.3.6.1.2.1.2.2.1.4 |
ifOutDiscards | 出方向流量丢包总计 | 1.3.6.1.2.1.2.2.1.19 |
ifHCInOctets | 接口收到的字节数总计 | 1.3.6.1.2.1.31.1.1.1.6 |
ifHighSpeed | 接口背板带宽,单位为M bits per second | 1.3.6.1.2.1.31.1.1.1.15 |
ifInDiscards | 接口流入流量丢包数总计 | 1.3.6.1.2.1.2.2.1.13 |
ifInMulticastPkts | 接口收到的多播包统计 | 1.3.6.1.2.1.31.1.1.1.2 |
ifInUnknownProtos | 接口收到的未知协议包数总计 | 1.3.6.1.2.1.2.2.1.15 |
ifOutMulticastPkts | 发出多播包统计 | 1.3.6.1.2.1.31.1.1.1.4 |
sysUpTime | 系统最近一次re-initialized后的时间 | 无 |
SNMP监控大盘
可观测监控 Prometheus 版默认提供了SNMP Status和SNMP Interface Detail两个大盘,主要针对if_mib场景,监控网络流量等信息。
SNMP Status
主要展示设备的总体状态。包括设备运行时长,当前的流入/流出流量、出入流量总计、各个端口的实时流量信息、流量变化趋势等。
SNMP Interface Detail
展示各个端口工作详情。包括端口状态、端口是否连接、端口速率、MTU配置等,以及各种流量(单播、组播及多播等)的速率/包数量变化情况。
在使用SNMP Interface Detail大盘前,需要您先在Variable中配置所需查看的DataSource。
SNMP告警规则
根据上述介绍的SNMP的主要指标,您可以针对SNMP配置以下告警项:
Interface Throughput达到Speed的80%。
出方向的丢包/Error数大于阈值、入方向的丢包/Error数大于阈值。
出方向的Queue长度大于阈值。
Interface数量发生变化。
使用Prometheus监控SNMP
功能入口
功能入口一:集成中心
- 登录Prometheus控制台。
- 在左侧导航栏单击监控列表,进入可观测监控 Prometheus 版的实例列表页面。
- 单击目标Prometheus实例名称,进入集成中心页面。
功能入口二:接入中心
登录ARMS控制台。
在左侧导航栏单击接入中心,然后在组件应用区域单击SNMP卡片的添加,然后在弹出的页面根据控制台指引完成组件接入。
步骤一:接入SNMP
这里以从集成中心入口为例,介绍接入SNMP组件的操作,具体步骤如下。
接入SNMP组件。
若您初次安装SNMP类型的组件:
在集成中心页面单击未安装区域SNMP组件卡片的安装。
说明单击该卡片,在弹出的面板中您可以看到关于SNMP监控常见的指标和大盘缩略预览效果图。同时由于OID和MIB的复杂性,这里列举出的指标只是SNMP常见的一部分指标信息,待您安装SNMP成功后,您将会查看到可观测监控 Prometheus 版监控SNMP的实际指标详情。
若您已安装SNMP类型的组件,需要再次添加该组件:
在集成中心页面单击已安装区域SNMP组件卡片的添加。
在STEP2区域的配置页签配置相关参数,并单击确定,完成组件接入。
参数
说明
exporter名称
当前SNMP监控唯一命名。命名规范要求如下:
仅可包含小写字母、数字和短划线(-),且短划线不可出现在开头或结尾。
名称具有唯一性。
说明默认名称由组件类型及数字后缀组成。
SNMP设备IP地址
您需要监控的SNMP设备的IP地址。
Metrics采集路径
SNMP Metric的HTTP采集路径,默认是
/snmp
。metrics采集间隔(秒)
可观测监控 Prometheus 版采集SNMP监控数据的时间间隔,默认30秒。
说明在STEP2区域的指标页签可查看监控指标。
单击确定后,系统会在您ACK集群中的arms-prom命名空间下,新增一个名为snmp-exporter-snmp-test-1的deployment,并自动完成采集Job的配置,此时您可以在服务发现页面的Targets页签中看到新配置的采集Job。查看新配置的采集Job的具体操作如下:
- 登录Prometheus控制台。
- 在左侧导航栏单击监控列表,进入可观测监控 Prometheus 版的实例列表页面。
单击目标Prometheus实例,然后在左侧导航栏单击服务发现,即可在Targets页签中查看新配置的采集Job。
同时您也可以在集成中心页面的已安装区域,单击该组件卡片,在弹出的面板中快速查看Targets、指标、大盘、服务发现配置、Exporter等信息。集成中心的更多信息,请参见集成中心。
步骤二:查看SNMP大盘数据
可观测监控 Prometheus 版默认集成了SNMP常用Grafana大盘,您无需单独安装Grafana,即可查看SNMP的观测大盘。
在集成中心页面单击已安装区域的SNMP组件卡片,然后在弹出的对话框中单击大盘页签可以查看该组件的大盘略缩图和超链接,单击超链接进入阿里云Grafana页面,查看对应观测大盘。
步骤三:配置SNMP监控告警
在集成中心页面单击已安装区域的SNMP组件卡片,然后在弹出的面板中单击告警页签,查看SNMP的所有Prometheus告警规则。
当您在集成中心安装SNMP监控时,系统已经默认增加了snmp_exporter告警分组的相关规则,然后需要您手动修改告警规则阈值后启动即可。您还可以根据业务需求新增告警规则。创建Prometheus告警规则的具体操作,请参见Prometheus告警规则。
后续操作:未采集到SNMP指标数据的排查方法
SNMP Exporter本身的主要工作是指标映射,一般都能稳定运行,但SNMP指标一般都会涉及到网络设备,因此出现网络问题的概率较高。如果出现指标采集不到的问题,您可以参考如下的排查思路来解决。
检查Prometheus Target状态。
- 登录Prometheus控制台。
- 在左侧导航栏单击监控列表,进入可观测监控 Prometheus 版的实例列表页面。
单击目标Prometheus实例,然后在左侧导航栏单击服务发现,并单击Targets页签,单击展开目标Target,查看State列的状态。
如果该Target显示在Unhealthy页签下,此时请排查
snmp-exporter
Pod运行状态。如果该Target显示正常,则执行下一步。
查看
snmp-exporter
Pod日志,确认日志中是否有报错信息。如果是网络问题通常都会在日志中有明确体现,此时您可以根据报错指导排查。
如果日志中没有异常,同时只是某个SNMP指标缺失,而其他SNMP指标都能正常采集到,较大概率是由于设备中确实没有该指标,此时您可以使用snmpwalk工具协助排查确认。
SNMP Exporter能采集到的数据,都可以通过snmpwalk获取到,很多Linux发行版默认不包含snmpwalk,需要您先安装
net-snmp-utils
包。在能连接到SNMP设备的机器上,使用snmpwalk获取设备原始数据。
snmpwalk -v 2c -c public snmp_dev_ip OID # ip 和 OID 字段,替换为实际设备的IP,和想要确认的指标对应的OID # -v 表示snmp版本 # -c 表示community, 默认是public # 可以使用snmp_dev_ip:port 来指定非默认端口,默认端口是116
如果snmpwalk依然未能获取到数据,需要您向设备厂商确认是否提供此数据。