应用实例
generator.yml 文件示例
H3C
这是从 H3C 的 HDM 中提取到的所有序列
modules:
h3c_mib:
walk:
- hh3cHealthInfo
- hh3cPowerInfo
- hh3cFansInfo
- hh3cMemDetailInfoTable
- hh3cTempSensorName
- hh3cTempSensorReading
- hh3cTempSensorSubStatus
version: 2
auth:
community: public
if_mib:
walk: [sysUpTime, interfaces, ifXTable]
lookups:
- source_indexes: [ifIndex]
lookup: ifAlias
- source_indexes: [ifIndex]
# Uis OID to avoid conflict with PaloAlto PAN-COMMON-MIB.
lookup: 1.3.6.1.2.1.2.2.1.2 # ifDescr
- source_indexes: [ifIndex]
# Use OID to avoid conflict with Netscaler NS-ROOT-MIB.
lookup: 1.3.6.1.2.1.31.1.1.1.1 # ifName
overrides:
ifAlias:
ignore: true # Lookup metric
ifDescr:
ignore: true # Lookup metric
ifName:
ignore: true # Lookup metric
ifType:
type: EnumAsInfo
Prometheus 监控交换机流量案例
默认已经安装 prometheus
手动验证能否获取交换机数据
用 prometheus 监控交换机流量首先需要确定安装 prometheus 的机器已经被交换机允许获取他的数据。命令如下: 以交换机版本为 v2c 为例:
# 获取交换机的接口描述信息
snmpwalk -v 2c 10.0.1.52 -c public ifDescr
其中-v 是指版本(SNMP 主要有 SNMPv1、SNMPV2c、SNMPv3 几种最常用的版本。),-c 是指密钥(Community:团体名,用于 Agent 与 NMS 之间的认证,由交换机提供)。
如果返回数据,则说明可以进行下一步通过 prometheus 获取数据了,数据如下:
生成 snmp.yml 文件
准备好如下 generator.yml 文件。
modules:
if_mib:
walk: [sysUpTime, interfaces, ifXTable]
lookups:
- source_indexes: [ifIndex]
lookup: ifAlias
- source_indexes: [ifIndex]
# Uis OID to avoid conflict with PaloAlto PAN-COMMON-MIB.
lookup: 1.3.6.1.2.1.2.2.1.2 # ifDescr
- source_indexes: [ifIndex]
# Use OID to avoid conflict with Netscaler NS-ROOT-MIB.
lookup: 1.3.6.1.2.1.31.1.1.1.1 # ifName
overrides:
ifAlias:
ignore: true # Lookup metric
ifDescr:
ignore: true # Lookup metric
ifName:
ignore: true # Lookup metric
ifType:
type: EnumAsInfo
根据 生成 snmp.yml 文件章节内容,生成 snmp.yml 文件。
安装 snmp 插件
启动 snmp_exporter
./snmp_exporter –config.file=snmp.yml
验证 snmp 监控数据
curl ‘http://安装snmp_exporter的设备的IP:9116/snmp?module=if_mib&target=要采集SNMP设备的IP’
配置 prometheus 的配置文件
添加关于 snmp 的配置,如下: 其中红线化掉的是安装 snmp_exporter 的机器的 ip,而 9116,是 snmp_exporter 的端口。如果出现多个 community 的情况(如上面所说),只需要再加一个 job 即可,如下: 到目前为止,prometheus 通过 snmp_exporter 抓取交换机流量数据已完成。
关于交换机的各项指标介绍
snmp 指标
针对普通网络设备的端口,MIB 的相关定义是 Interface 组,主要管理如下信息:
- ifIndex 端口索引号
- ifOperStatus # 端口状态
- ifDescr 端口描述
- ifType 端口类型
- ifMtu 最大传输包字节数
- ifSpeed 端口速度
- ifPhysAddress 物理地址
- ifOperStatus 操作状态
- ifLastChange 上次状态更新时间
- ifInOctets 输入字节数
- ifInUcastPkts 输入非广播包数
- ifInNUcastPkts 输入广播包数
- ifInDiscards 输入包丢弃数
- ifInErrors 输入包错误数
- ifInUnknownProtos 输入未知协议包数
- ifOutOctets 输出字节数
- ifOutUcastPkts 输出非广播包数
- ifOutNUcastPkts 输出广播包数
- ifOutDiscards 输出包丢弃数
- ifOutErrors 输出包错误数
- ifOutQLen 输出队长 其中,号标识的是与网络流量有关的信息。
根据需要查找指标
由于我们要监控交换机流量,所以对我们有用的指标主要是 ifHCOutOctets 和 ifHCInOctets,为什么是 ifHCOutOctets 而不是上面所说的 ifOutOctets,因为在流量监控中发现了一个问题:监控交换机的网络流量,经常发现少数据的情况,prometheus 绘的图断断续续的,snmp 协议返回的 ifInOctets 和 ifOutOctets 都是流量的总量,如果我们需要获取一段时间的流量,我们需要取两段时间的差值,而 ifOutOctets 对应的 counter32 的数据类型计数的最大值是 2 的 32 次方减 1,当超过 4G 的时候,计数器就会清零。当我们取数据如果正巧处于 4G 左右,当他清零重新计数,那我们获取的流量是不准确的。解决办法是:
查询数据换成 ifHCOutOctets 和 ifHCInOctets 来代替 ifOutOctets 和 ifInOctets。因为 ifHCOutOctets 对应的计数 counter64,64 位计数器足够大,可以解决这个问题。
问题实力
invalid utf-8 label
当数通设备上的接口描述字符串为中文时,若设备本身不支持中文,则通过 snmpwalk 到的指标将无法显示。此时 snmp-exporter 将会出现如下报错 相关 ISSUE:#279
反馈
此页是否对你有帮助?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.