大家好,我是小斐呀。
之前写过一篇关于 Categraf 下 SNMP 插件的采集最佳实践,介绍了如下内容:
mib解析引擎选择:netsnmp和gosmimib文件如何结合解析引擎实现文本型oid采集同配置文件多实例如何采集以及模块化采集配置 SNMP v2c和SNMP V3版本配置常见采集错误解决方案
算是比较全面系统的介绍关于 Categraf 下 SNMP 插件的一些常见错误,如要详细了解可查看:
但是一直有个困扰存在很久问题,就是国内很多厂商的mib 文件定义的不够规范化,很多厂商为了图方便,把很多 oid 的数据类型都定义为 String 了,但实际上我们需要采集的数据最终都是数值型。
类型转换
在日常使用 Categraf 的 SNMP 插件时候,经常会遇到 oid 得到的数据是数值型字符串类型,但是在采集的过程中由于 Prometheus 数据格式的限制,我们最终需要指标的样本必须是浮点数才可以正常插入到时序库中,如下所示:
百分号字符串 "36%"、"36 %"带单位字符串 "-45dBm"、"300Byte"、MHz不规则字符串 "300 "、"1.26"
等等这类数值型字符串,我们需要里面的数值,并且转换为浮点数或原始的数值,之前提交了个单独的关于百分号字符串的转换,我们可以如下写:
# 比如这个 OID 返回的是内存利用率 但是数据类型是 String 类型 实际需要得到是指标浮点数[[instances.field]]oid = "SANGFOR-GENERAL-MIB::sfSysMemCost.0"name = "system_mem_usage"conversion = "percent"但是这个转换还是限制很大,只能针对百分号单位的数值型字符串进行类型转换,并实现指标的采集,不够通用,现在从 v0.4.23 版本开始,就可以通过一种通用的转换方式智能的在字符串中提取浮点数值:
# 带百分号单位数值型字符串 "36%"[[instances.field]]oid = "SANGFOR-GENERAL-MIB::sfSysMemCost.0"name = "system_mem_usage"conversion = "float"# 带流量单位数值型字符串 "30000Byte"[[instances.table.field]]oid = "SANGFOR-GENERAL-MIB::sfDiskAvail"name = "disk_avail"conversion = "float"# "5800MHz"[[instances.table.field]]oid = "SANGFOR-GENERAL-MIB::sfRadioFrequency"name = "frequency"conversion = "float"# "-20dBm"[[instances.table.field]]oid = "SANGFOR-GENERAL-MIB::sfRadiotxPower"name = "tx_power"conversion = "float"以上种种类型的数值型字符串都可以很轻松的通过 conversion = "float" 转换为指标浮点数。
现在有了这个智能扫描数值型字符串类型的 oid 就可以很方便的提取这类 oid 的数值输出为指标存储到时序库中。
在之前 SNMP Exporter 都是通过 overrides 写正则去提取数值转换实现的,而现在 Categraf 可以更加方便的实现这类数据的提取转换了。
snmp_zabbix 插件
很多小伙伴们估计在用 zabbix 的比较多,但是现在 Categraf 也新增了 snmp_zabbix 插件了,使用 zabbix 用户如果感兴趣可以试试这个插件,后续我也将对这个插件做一些研究,应该是可以拉取适配很多 zabbix 的采集模版了,尽情期待后续文章。
end
基于 Categraf 最佳实践具体内容,后续都将娓娓道来。
如果你对 IT 基础设施监控这块的有需求或者想沟通交流,可以加入之前建立的群,到群里咨询或交流即可,加群可公众号后台私信加我,我拉你进群。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……




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