统一观测丨使用 Prometheus 监控 SNMP,我们该关注哪些指标?
作者:智真
简单网络管理协议 SNMP(Simple Network Management Protocol)用于网络设备的管理。网络设备种类多种多样、不同厂商提供的管理接口(如命令行接口)又不相同,这使得网络管理变得愈发复杂。为解决这一问题,SNMP 应运而生。SNMP 作为广泛应用于 TCP/IP 网络的标准网络管理协议,提供了统一的接口,从而实现了不同种类和厂商的网络设备之间的统一管理。通过 SNMP 数据的监测数据,用户可以及时关注到网络设备的状态和异常变化。
SNMP 简介
随着网络技术飞速发展,网络设备数量成几何级数增加,使得网络管理员对设备的管理变得越来越困难;同时,网络作为复杂的分布式系统,其覆盖地域不断扩大,也使得对这些设备进行实时监控和故障排查变得极为困难。网络设备种类多种多样,不同设备厂商提供的管理接口(如命令行接口)各不相同,这使得网络管理变得愈发复杂。
为了应对这一场景,SNMP 应用而生。作为广泛应用于 TCP/IP 网络的网络管理标准协议,SNMP 支持网络管理系统,以监测连接到网络上的设备是否有需要运维关注的情况。同时,SNMP 采用轮询机制,提供最基本的功能集,适合小型、快速、低价格的环境使用,而且 SNMP 以用户数据报协议(UDP)报文为承载,因而受到绝大多数设备的支持,同时保证管理信息在任意两点传送,便于管理员在网络上的任何节点检索信息,进行故障排查。
随着技术演进,SNMP 协议相继衍生出三个版本:SNMPv1、SNMPv2c 和 SNMPv3。
SNMPv1
作为 SNMP 协议的最初版本,提供最小限度的网络管理功能。SNMPv1 基于团体名认证,安全性较差,且返回报文的错误码也较少。
SNMPv2c
采用团体名(community)认证,在 SNMPv1 版本的基础上引入了 GetBulk 和 Inform 操作,支持更多的标准错误码信息,支持更多的数据类型(Counter64、Counter32)。
SNMPv3
在安全性方面进行增强,提供了基于 USM(User Security Module)的认证加密和基于 VACM(View-based Access Control Model)的访问控制。SNMPv3 版本支持的操作和 SNMPv2c 版本支持的操作一样。
目前,v1 版本使用较少,一般使用 v2c 版本,如果对安全认证有需求,可以使用 v3 版本。
SNMP 系统组成
SNMP 基本组件包括网络管理系统 NMS(Network Management System)、代理进程(Agent)、被管对象(Managed Object)和管理信息库 MIB(Management Information Base)。如图所示他们共同构成 SNMP 的管理模型,在 SNMP 的体系结构中都起着至关重要的作用。
NMS
Network Management System,网络管理系统,一般是各种网管软件,可以向 agent 查询/修改各种信息,也可以接受 agent 的主动推送,在我们的场景中,就是 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 树差别很大。OID 树结构参见下图。
MODULE
因为 SNMP 可以监控的设备和厂商多种多样,所以 SNMP exporter 中划分了很多 module,比如网络设备的 if_mib,软路由的 ddwrt,paloalto_fw 防火墙等等,一共有十几种,最常用的就是 if_mib。
SNMP Exporter
SNMP 协议中用不同的 OID 区分不同的状态数据,所以 OID 非常类似于 Prometheus 中的指标的概念,SNMP Exporter 通过从 Agent 查询指定的 OID 数据,同时将数据映射到可读的指标上,实现 SNMP 数据到 Prometheus 指标的转换。SNMP Exporter 就默认提供了非常丰富的转换配置,大部分场景下用户无需额外配置即可将 OID 转换为可读的指标数据。
SNMP Metric 监控参考模型
SNMP Metrics 采集
SNMP 可以帮助运维人员以极为简单而有效的方式管理网络。首先,SNMP 帮助运维人员收集网络上不同设备带宽使用量的信息。在进行故障排除的同时,更加快速找出网络性能趋势或问题。SNMP 采集到的数据都是来自设备提供,不同厂商的设备可以提供的数据不尽一致,SNMP Exporter 尽可能多的提供兼容,默认配置中已经包含了常见的各个厂商的 OID 映射,涵盖了市面上主要的厂家及其网络产品,能够满足绝大多数场景需求,详见 Prometheus 开源社区的相关文档。在当前版本中,我们支持 if_mibmodule 的指标数据采集,更多 module 支持将根据需求情况陆续开放。
文档链接:
https://github.com/prometheus/snmp_exporter/blob/main/snmp.ym
这里我们常见的以思科 16 口交换机为例,主要指标包括:
SNMP 监控大盘
我们默认提供了 SNMP Status 和 SNMP Interface Detail 两个大盘,主要针对 if_mib 场景,监控网络流量等信息。
SNMP Status
主要展示设备的总体状态,包括设备运行时长,当前的流入/流出流量、出入流量总计、各个端口的的实时流量信息、流量变化趋势等。
SNMP Interface Detail
展示各个端口工作详情。包括端口状态、端口是否连接、端口速率、MTU 配置等,以及各种流量(单播/组播/多播等)的速率/包数量变化情况。
需要注意的是,SNMP Interface Detail 大盘使用前,需要在 Variable 中配置需要查看的 DataSource。
SNMP 告警规则
参考前面对各项主要指标的介绍,针对 SNMP 可以配置一下告警项:
Interface Throughput 达到 speed 的 80%
出/入方向的丢包/Error 数大于阈值
出方向的 Queue 长度大于阈值
interface 数量变化
使用阿里云 Prometheus 监控 SNMP
安装 SNMP 监控在 Prometheus for 容器服务实例中,SNMP 已经默认在集成中心中展示,用户可以在 arms 控制台 -- 实例详情页 -- 集成中心中找到入口。
点击 SNMP 图标,可以看到常见的指标列表和大盘缩略图,需要说明的是,由于 OID/MIB 的复杂性,列出的只是一部分常见的指标信息。
点击+安装可以接入 SNMP 监控,您只需要填写 exporter 名称和设备 IP 地址,即可快速拉起一个 SNMP exporter。其中的采集路径和采集间隔,一般无需修改,保持默认值即可。配置如下图:
点击确定后,会在您的 ack 集群中,arms-prom namespace 下,新增一个名为 snmp-exporter-snmp-test-1 的 deployment,并自动完成采集 job 的配置。此时您可以在 arms 控制台 -- 实例详情页 -- 服务发现 -- Target 中看到新配置的采集 job。同时也可以点击集成中心 -- SNMP 图标 快速浏览相关的 Target/指标/大盘/告警/服务发现/Exporter 等信息。
查看大盘
如果您需要查看 SNMP 相关大盘,可以从 arms 控制台 -- 实例详情页 -- 大盘列表中点选 snmp_exporter 快速列出相关大盘,或者从集成中心中,点击 SNMP 图标,点击大盘标签页,也可以找到对应的 dashboard。
配置告警
当您在集成中心安装 SNMP 监控时,已经默认增加了 snmp_exporter 告警分组的相关规则,但未启用,您只需要简单修改参数并确认启用即可。
可以从 arms 控制台 -- 实例详情页 -- 告警规则 -- 创建告警规则中进入规则新增页面,在其中告警分组选择 snmp_exporter 告警值班并选择您需要启用的告警规则,确认参数阈值并保存,即可完成告警规则的创建。
SNMP 指标未采集的排查方法
SNMP Exporter 本身的主要工作是指标映射,一般都能稳定运行,但 SNMP 指标一般都会涉及到网络设备,出现网络问题的概率较高。如果出现指标采集不到的问题,可以参考如下的排查思路。
检查 Prometheus Target 状态,如果 Target 显示为 Unhealthy 状态,请排查 snmp-exporterpod 运行状态;如果 Target 状态正常,继续下一步。
查看 snmp-exporterPOD 日志,确认日志中是否有报错信息,如果是网络问题都会在日志中有明确体现,可以根据报错指导排查。
如果日志中没有异常,同时只是某个 SNMP 指标缺失,其他 SNMP 指标能正常收集到,较大概率是因为设备确实没有这个指标,我们可以使用 snmpwalk 工具协助排查确认。
SNMP Exporter 能采集到的数据,都可以通过 snmpwalk 获取到,很多 Linux 发行版默认不包含 snmpwalk,需要先安装 net-snmp-utils 这个包。
在能连接到 SNMP 设备的机器上,使用 snmpwalk 获取设备原始数据。
如果 snmpwalk 依然未能获取到数据,需要向设备厂商确认是否提供此数据。
自建 Prometheus 与阿里云 Prometheus 监控的优劣对比
Prometheus 作为目前最主流的可观测开源项目之一,已经被众多企业所广泛应用。但在实际生产过程中,还是遇到各种各样问题,其中包括:
由于安全、组织管理等因素,用户业务通常部署在多个相互隔离的 VPC,需要在多个 VPC 内都重复、独立部署 Prometheus,导致部署和运维成本高。
每套完整的自建观测系统都需要安装并配置 Prometheus、Grafana、AlertManager 等组件,部署过程复杂、实施周期长,并且每次升级都需要对每个组件进行维护。
随着监控规模不断扩大,资源消耗呈非线性快速增加,系统可用性无法得到保障。
对于相关组件,自建 Prometheus 无法实现一站式、全局视角的监控建设。
开源分享的相关大盘不够专业,却少开箱即用的丰富指标,不能帮助用户更迅速的的了解网关的整体运行状况。
针对以上问题,阿里云 Proemtheus 监控进行了以下几个方面的优化:
一、性能强化 &降低资源消耗,压降 IT 运维成本
为了进一步进行性能优化,阿里云 Prometheus 监控将 Agent 部署在用户侧,保留原生采集能力同时, 尽量使用最少资源;通过采集存储分离架构,提高整体性能;采集组件优化,提升单副本采集能力,降低资源消耗;通过多副本横向扩展均衡分解采集任务,实现动态扩缩,解决开源水平扩展问题。采集/数据处理/存储组件支持多副版本,保证核心数据链路高可用;基于集群规模可直接进行弹性扩容;支持数据重传,彻底解决丢弃逻辑弊病,确保数据完整性与准确性。
同时,为了应对大规模数据、长时间区间的查询场景,通过 DAG 执行优化、算子下推,提升大规模数据查询性能并支持长时间区间秒级查询;通过 Global DataSource 和 Global View 实现对多集群统一监控与跨集群聚合查询。在提供企业级能力强化同时,全方位降低企业使用 Prometheus 的 IT 运维成本。通过包年包月、按量付费等多种计费方式让费用支出与规划更加清晰与灵活,相较于开源版本节省 37%以上。
二、与阿里云主流云服务深度集成
云产品在各自控制台都提供自身产品的可观测性,但这些云产品的指标及看板散落在各控制台,且无法进行精细化的指标数据应用。Prometheus 服务提供云产品监控功能,将这些数据进行统一展现、查询、告警,为运维团队提供更加便捷的日常运维监控界面。
三、Grafana 看板增强,让云服务监控更简单
想要更好、更快速的呈现相关指标图表,阿里云 Prometheus 监控预置 Grafana 组件,预置常见云服务、应用等看板模板,如应用实时监控服务 ARMS、云监控 CMS、日志服务 SLS、阿里云 Elasticsearch 等云服务,提供各种云服务的数据源配置及预置大盘,实现各种可观测数据的统一展示。如容器、消息队列 Kafka 等,进一步提供 GrafanaPro 大盘,帮助运维进行更加精细化的指标观测。在预置看板之外,可以通过 Grafana 官方自由增加新插件,添加新的可视化模板以及数据源,进一步满足个性化运维监控需求。
结语
阿里云 Prometheus 与阿里云容器服务无缝集成,提供了 SNMP 设备的指标采集、用户大盘、告警规则等项目的一键集成,用户免运维,开箱即用,目前 SNMP 指标采集功能仍在不断演进中,欢迎大家试用和提出改进意见。
版权声明: 本文为 InfoQ 作者【阿里巴巴云原生】的原创文章。
原文链接:【http://xie.infoq.cn/article/04af27669c508cf6509f7ac12】。文章转载请联系作者。
评论