SNMP

On this page

监控网络设备,主要是通过 SNMP 协议,Categraf、Telegraf、Datadog-Agent、snmp_exporter 都提供了这个能力。

Categraf

Categraf 提供了一个网络设备的采集插件:switch_legacy,在 conf/input.switch_legacy 下可以看到配置文件,最核心就是配置交换机的 IP 以及认证信息,switch_legacy 当前只支持 v2 协议,所以认证信息就是 community 字段。其他配置都一目了然,这里就不赘述了。

这个插件是把之前 Open-Falcon 社区的 swcollector 直接拿过来了,感谢 冯骐 大佬持续在维护这个开源项目。

Telegraf

Telegraf 内置支持 SNMP 的采集,本节给一个入门例子,让大家快速上手,更多具体知识可以参考这里。在 telegraf.conf 中搜索 inputs.snmp,即可找到对应的配置,例子如下:

  1. [[inputs.snmp]]
  2. agents = ["udp://172.25.79.194:161"]
  3. timeout = "5s"
  4. version = 3
  5. agent_host_tag = "ident"
  6. retries = 1
  7. sec_name = "managev3user"
  8. auth_protocol = "SHA"
  9. auth_password = "example.Demo.c0m"
  10. [[inputs.snmp.field]]
  11. oid = "RFC1213-MIB::sysUpTime.0"
  12. name = "uptime"
  13. [[inputs.snmp.field]]
  14. oid = "RFC1213-MIB::sysName.0"
  15. name = "source"
  16. is_tag = true
  17. [[inputs.snmp.table]]
  18. oid = "IF-MIB::ifTable"
  19. name = "interface"
  20. inherit_tags = ["source"]
  21. [[inputs.snmp.table.field]]
  22. oid = "IF-MIB::ifDescr"
  23. name = "ifDescr"
  24. is_tag = true

上面非常关键的部分是:agent_host_tag = "ident",因为夜莺对 ident 这个标签会特殊对待处理,把携有这个标签的数据当做隶属某个监控对象的数据,机器和网络设备都是典型的期望作为监控对象来管理的,所以 SNMP 的采集中,我们把网络设备的 IP 放到 ident 这个标签里带上去。

另外这个采集规则是 v3 的校验方法,不同的公司可能配置的校验方式不同,请各位参照 telegraf.conf 中那些 SNMP 相关的注释仔细核对,如果是 v2 会简单很多,把上例中的如下部分:

  1. version = 3
  2. sec_name = "managev3user"
  3. auth_protocol = "SHA"
  4. auth_password = "example.Demo.c0m"

换成:

  1. version = 2
  2. community = "public"

即可,当然了,community 要改成你们自己的,这里写的 “public” 只是举个例子。

inputs.snmp.field 相关的那些配置,可以采集到各个网口的监控指标,更多的使用方式请参考官网

另外,snmp的采集,建议大家部署单独的 Telegraf 来做,因为和机器、中间件等的采集频率可能不同,比如边缘交换机,我们 5min 采集一次就够了,如果按照默认的配置可是 10s 采集一次,实在是太频繁了,可能会给一些老式交换机造成比较大的压力,采集频率在 telegraf.conf 的最上面 [agent] 部分,边缘交换机建议配置为:

  1. [agent]
  2. interval = "300s"
  3. flush_interval = "300s"

核心交换机可以配置的频繁一些,比如 60s 或者 120s,请各位网络工程师朋友自行斟酌。