大家好,我是小斐呀。
前面分享了很多使用 Categraf 下原生 SNMP 插件采集网络设备的指标的最佳实践,相信加入星球的道友们已经体验并用在生产实践中。
由于原生 SNMP 插件采集配置都需要自行编写,由于从零开始写有点复杂,当然大家别怕大部分的品牌的配置我已经适配好,模版都放在星球网盘之中,也算是直接提供开箱即用的配置和可视化模版,减轻各位道友工作量了。
最近夜莺开源社区在 Categraf 项目下新增了 SNMP_Zabbix 插件,顾名思义这个插件就是兼容 Zabbix 采集模板的 SNMP 数据采集插件,其最大特色是能够直接使用 Zabbix 的 YAML 格式模板文件。这意味着您可以利用 Zabbix 丰富的模板生态系统,无需重新编写监控配置(如果需要用的好,还是需要稍微做一些调整工作)。
接下来,我将用几个篇幅和最佳实践来展开聊聊这个插件的细节,同时我也会继续慢慢提供写好的全套模版,实现开箱即用和可视化模版的套用。
插件对比
Categraf 下原生 SNMP 插件和最新的 SNMP_Zabbix 插件有一些特性上的区别:
SNMP_Zabbix 插件主要有如下功能:
完整的 SNMP协议支持:支持SNMPv1、SNMPv2c、SNMPv3所有版本Zabbix模板兼容:直接使用Zabbix 6.0+的YAML格式模板自动发现机制:自动发现网络接口、文件系统等资源并动态创建监控项 强大的预处理:支持正则表达式、 JavaScript、数值计算等多种数据预处理方式精细化的调度:支持 item粒度调度采集任务健康检查与自动恢复:自动检测连接状态并重连
上面介绍那么多,在实际场景中什么情况下需要用到这个插件呢,我们又如何可以更好的用这个插件呢,有如下情况的可以使用?
之前使用 Zabbix监控网络设备,希望迁移到夜莺生态或者Prometheus生态之中走可观测性指标模式希望复用 Zabbix社区生态丰富的模版资源,并且需要监控大量网络设备(交换机、路由器、防火墙、无线等)需要动态发现和监控变化的资源(如网络接口) 需要对采集数据进行复杂预处理 Zabbix生态割裂现在更多的用在网络设备服务器等硬件监控上,希望采集指标从底层(硬件)到上层(应用)形式都统一
Zabbix 模版通常有三种格式文件 YAML 格式、 XML 格式、 JSON 格式,这些格式都是 Zabbix 版本不断在发展后慢慢根据实际需求支持的:
| XML | Zabbix 1.x | |
| YAML | Zabbix 5.2 起 | |
| JSON | Zabbix 6.0 起 |
目前 SNMP_Zabbix 插件只支持 YAML 格式模板,如果你的模版文件是 XML 格式的话,可以通过 Zabbix 进行导入和导出生成转换为 YAML 格式,如下所示:
模板文件格式转换(XML to YAML)
把 XML模板导入Zabbix重新导出为 YAML格式的模板
更加详细模版导入导出步骤可查看:
除此之外这个插件在使用还有一些限制和依赖:
Categraf版本:开源版 >=v0.4.24企业版 >=v0.4.40网络要求:能够访问目标 SNMP设备的UDP(默认161) 端口目标设备:启用 SNMP服务的网络设备或服务器或打印机等等模板要求: Zabbix 6.0+及以上的YAML格式模板(不支持旧版XML格式)
模版获取
既然这个 SNMP_Zabbix 插件就是读取 YAML 模版文件,那么首先需要在 Zabbix 社区中找到符合我们需求的 YAML 模版才行,这里我们展开列举如何获取模版的途径:
如果已经有安装 Zabbix 系统,可以通过导入和导出的方式拿到模版文件:
从安装好的 Zabbix中导出需要的内置模版使用官方或社区提供的模板
模版文件导出有多种方式,可以登录 Zabbix Web 界面选择对应的模版导出,可以通过 Zabbix API 导出,还可以去 Zabbix Git 仓库中寻找。
通过这些 YAML 模版可以知道模版中的一些基础信息,而我们知道一个 Zabbix 模版中有很多对象,而 SNMP_Zabbix 插件并不是支持 Zabbix 模版中所有对象,主要支持 Zabbix 的模版中这几个对象:
监控项( Items)触发器( Triggers)发现规则( Discovery rules)值映射( Value mapping)图形( Graphs)仪表盘( Dashboards)宏变量( macros)
主要就是如下内容,其他都是一些附加内容,什么模版组、标签、主机群组、Web监控等等。
而在 SNMP_Zabbix 插件中主要读取和处理的对象如下三项:
监控项( Items)发现规则( Discovery rules)宏变量( macros)
不管模版中有什么其他的对象,在使用 SNMP_Zabbix 插件时只处理上面的三个对象。
监控架构
既然是使用 Categraf 采集器,那么使用 SNMP_Zabbix 插件也还是围绕夜莺生态来做,看下使用这个插件的单体架构:
最主要的就是模版文件,但也不是所有的模版文件都是可以全面套用的,有时候为了规范需要修改 YAML 模版文件,下面我们来看看华为交换机的 YAML 模版文件是如何利用 SNMP_Zabbix 插件加载采集指标的。
安装部署好 Categraf 开源版,版本必须 >= v0.4.24 同时模版并不需要 mib 文件依赖,都是直接读取数值型 OID 得到对应指标值。
下面使用华为的 Zabbix 的 YAML 模版做一下测试。
首先我们需要下载模版文件,这里以下载 6.0 版本 YAML 模版,放在文件如下文件路径中:
# 模版文件路径/opt/categraf/templates/huawei/template_net_huawei_snmp.yaml配置 Categraf 下的 conf/input.snmp_zabbix 中的 zabbix.toml 配置文件,配置文件如下所示:
[[instances]]agents=["udp://172.16.10.1","udp://172.16.10.2"]community="public"version=2timeout="5s"retries=3unconnected_udp_socket=truetemplate_files=["/opt/categraf/templates/huawei/template_net_huawei_snmp.yaml"]配置文件完整信息:
[[instances]]# 基础标签labels={region="beijing",env="production"}# SNMP 连接配置agents=["192.168.1.0/24",# 扫描整个网段"core-switch.example.com"# 域名]version=2community="public"port=161timeout="5s"retries=3max_repetitions=25# 加载多个模板(会自动合并)template_files=["/etc/categraf/templates/cisco_catalyst.yaml","/etc/categraf/templates/custom_oids.yaml"]# 设备映射标签[instances.mappings]"192.168.1.1"={device_name="core-sw-01",location="DC1"}"192.168.1.2"={device_name="core-sw-02",location="DC2"}如果开启 SNMP v3 认证:
[[instances]]# 基础标签labels={region="beijing",env="production"}# SNMP 连接配置agents=["192.168.1.0/24",# 扫描整个网段"core-switch.example.com"# 域名]version=3username="snmpv3user"security_level="authPriv"auth_protocol="SHA"auth_password="authpass123"priv_protocol="AES"priv_password="privpass456"port=161timeout="5s"retries=3max_repetitions=25# 加载多个模板(会自动合并)template_files=["/etc/categraf/templates/cisco_catalyst.yaml","/etc/categraf/templates/custom_oids.yaml"]# 设备映射标签[instances.mappings]"192.168.1.1"={device_name="core-sw-01",location="DC1"}"192.168.1.2"={device_name="core-sw-02",location="DC2"}测试启动:
# 测试输出指标/opt/categraf/categraf --test --debug --inputs snmp_zabbix测试下来发现指标很少,这是由于插件支持的功能和模版并不能完全保持一致,如果需要得到想要的,我们还需要对模版下功夫,调整模版然后采集。
最终在夜莺中得到的指标如下:
snmp_system_cpu_util{component="cpu", ident="alert", index="hwEntityCpuUsage.67108873", item="MPU Board 0: CPU utilization", item_key="system.cpu.util[hwEntityCpuUsage.67108873]", oid="1.3.6.1.4.1.2011.5.25.31.1.1.1.1.5.67108873", plugin="snmp_zabbix", snmp_agent="udp://172.17.14.12:161", snmp_host="172.17.14.12", system_hw_serialnumber="2198010XXXXXX4602201", system_hw_version="VER.B", system_sw_os="Version 5.170 V200R022C00SPC500"} 10发现得到的指标标签很乱,我们需要对标签做裁剪,同时直接利用模版采集的指标也不全:
综合上面的结果可以看到目前插件还不是很好用,有以下缺陷:
目前版本只支持 Zabbix 6.0+模版,对Zabbix 7.0+模版兼容性还有点问题,还需要进一步修复模版并不能开箱即用,有时候为了达到我们想要的指标和标签效果需要对 YAML进行修改并不是完全支持 Zabbix 的所有功能,目前支持的功能如下
这个比原生的 SNMP 插件好用的一点是支持 LLD 而且对应 OID 的采集周期可以单独定义,但是建议如果是指标类还是建议在 60s 内,这样在做 Time Series 的时候不至于出现间隔太久,步长太长,而出现数据断点的现象出现。
注意:
Zabbix 6.0+ 模版下的 item 下的 snmp_oid 是直接写裸 oid 数值,而对 Zabbix 7.0+ 模版 item 下的 snmp_oid 不在是纯粹的裸 oid 而是变成如下模式:
# zabbix 6.0+snmp_oid:1.3.6.1.2.1.25.1.1.0# 原始 itemsnmp_oid:'1.3.6.1.4.1.2011.5.25.31.1.1.10.1.7.{}'# 基于自动发现创建的 item# zabbix 7.0+snmp_oid:'get[1.3.6.1.2.1.25.1.1.0]'# 原始 itemsnmp_oid:'get[1.3.6.1.4.1.2011.5.25.31.1.1.10.1.7.{}]'# 基于自动发现创建的 item可以看到写 snmp_oid 语法格式有所变化了,故 SNMP_Zabbix 插件对新版本的采集兼容还需要修复,从 纯 OID 变成了 函数式 OID 。
get[]walk[]discover[]
这是 Zabbix 7.x 开始 SNMP 模板采用标准化的 函数式 OID 写法。
后续展望
目前来看改插件用在生产上还有待加强和修复,并且还不能完全做到开箱即用的地步,如果需要做到符合自定义采集的数据,对模版还需要修修改改,等于是 SNMP_Zabbix 插件功能上需要加强,在没有加强的情况下那就需要修改模版以适配 SNMP_Zabbix 插件支持的一些采集格式即可。
新版本的 snmp_oid语法已经提交,这个问题应该后续会修复针对 Item和Discovery更多的语法支持可以深入
等后续插件基本满足开箱即用的地步后,我们只需要调整需要哪些指标和指标中需要哪些标签插入进去的节奏,就基本上符合需求,敬请期待,我也将以几个篇幅介绍如何深入使用,模版和功能之间的调整和细微支持差别。
end
针对这块的有需求或者想沟通交流,可以加入之前建立的群,到群里咨询或交流即可,加群可公众号后台私信加我,我拉你进群。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……




还没有评论,来说两句吧...