Prometheus exporter for snmp server metrics.

源码原理解析

1、解析配置文件到结构体

type Config map[string]*Module

2、metrics中可以指定snmp对应的版本

3、支持配置重载

4、重置url:snmp的处理函数handler

5、获取两个必要调用参数:target和module(默认是if_mib)

6、生成结构体collector重写describe和collect

7、colletcd中调用github.com/soniah/gosnmp这个snmp clinet lib来获取数据

8、解析数据放入到对应配置文件中的指标进行赋值输出

9、这边就是直接使用了snmp协议,所以还是要了解mib对应的东西,包括格式与语法

下面就是看我们默认的if_mib采集是哪些数据,是否符合要求,是否要换去其他模版

針對普通網絡設備的端口,MIB的相關定義是Interface組,主要管理如下信息:

ifIndex 端口索引號
ifDescr 端口描述
ifType 端口類型
ifMtu 最大傳輸包字節數
ifSpeed 端口速度
ifPhysAddress 物理地址
ifOperStatus 操作狀態
ifLastChange 上次狀態更新時間
ifInOctets 輸入字節數
*ifInUcastPkts 輸入非廣播包數
*ifInNUcastPkts 輸入廣播包數
*ifInDiscards 輸入包丟棄數
*ifInErrors 輸入包錯誤數
*ifInUnknownProtos 輸入未知協議包數
*ifOutOctets 輸出字節數
*ifOutUcastPkts 輸出非廣播包數
*ifOutNUcastPkts 輸出廣播包數
*ifOutDiscards 輸出包丟棄數
*ifOutErrors 輸出包錯誤數
ifOutQLen 輸出隊長 其中, 號標識的是與網絡流量有關的信息。
  • 獲取CISCO2900端口1的上行總流量 snmpwalk -v 1 -c public 192.168.1.254 IF-MIB::ifInOctets.1 返回結果 IF-MIB::ifInOctets.1 = Counter32: 4861881
  • 五秒後再獲取一次 snmpwalk -v 1 -c public 192.168.1.254 IF-MIB::ifInOctets.1 返回結果 IF-MIB::ifInOctets.1 = Counter32: 4870486 3、計算結果 (後值48704863-前值4861881)/ 5=1721b/s (應該是BYTE)

generator原理

将generator.yml转化为snmp.yml文件,通过解析generator.yml中配置的mib module也就是walk中的数组,在mibs中都有现成的指标定义,然后听过netsnmp解析成我们需要的snmp.yml文件进行采集