我这边的一个系统用了telegraf的snmp_trap插件来采集snmp trap告警,然后再转换为http格式吐出进入下一个环节。这个插件配置起来倒是简单,但是其中对于OID的翻译依赖于snmptranslate命令的结果,而如果让snmptranslate命令能正常翻译,又依赖于MIB库文件的正确放置和配置。最近在用这套东西来采集H3C交换机设备的告警,正好记录下在ubuntu环境下导入MIB库文件的方法。
配置前
在进行配置前,可以先尝试运行下snmptranslate命令(注意,这里的-L n参数可以忽略输出的错误信息):
1 | snmptranslate -L n .1.3.6.1.4.1.25506.2.38.1.6.3.0.1 |
这个示例中的OID来自H3C的交换机设备,如果没导入MIB库的话,结果只会是:
1 | SNMPv2-SMI::enterprises.25506.2.38.1.6.3.0.1 |
很明显,光看这个还是没法知道设备发了个啥信息过来。
导入和配置
先从H3C官方搞到MIB库文件,然后把这些mib文件解压到一个目录中。在这个示例中,我们把这些mib文件都放置到/usr/share/mibs/h3c_mibs目录下。
放好MIB库文件后,就可以开始配置snmp.conf这个配置文件了:
1 | vim /etc/snmp/snmp.conf |
(如果没有这个文件,可能需要先使用apt install snmp命令来安装下相关的组件。)
配置文件中原始的配置内容是这样的:
1 | # As the snmp packages come without MIB files due to license reasons, loading |
为了能让新加的MIB库生效,需要做下修改:
1 | # mibs : |
稍微解释下:
- 注释掉了原有的mib : 这行,让系统可以加载第三方的库;
- mibdirs参数用于指定加载的MIB库路径,如果有多个MIB库的目录,可以多次使用这个参数
- mibs +ALL参数指定了在所有的mib文件中来进行查找。
配置文件修改完成后,保存退出即可,无需重启啥服务。
测试
再次测试翻译OID,在正确放置mib文件和正确配置的情况下,是可以成功翻译出结果的:
1 | root@knktc.com:/root# snmptranslate -L n .1.3.6.1.4.1.25506.2.38.1.6.3.0.1 |
参考
- telegraf的snmp trap插件官网是:https://github.com/influxdata/telegraf/tree/master/plugins/inputs/snmp_trap
- snmp.conf配置文件的更多内容可参考man page的帮助:https://linux.die.net/man/5/snmp.conf