利用夜莺开源版对H3C无线设备监控

[复制链接]
发表于 2024-2-26 19:51:17 | 显示全部楼层 |阅读模式
编者荐语:
真正搞监控监控的人肯定知道 SNMP 水有多深,有时我甚至腹黑猜测,这些厂商是故意的吧,,,指标不标准,格式各异,只能靠一款灵活的采集器了,本文是夜莺社区用户写的文章,转给大家参考。
author:网络小斐
关于夜莺SNMP插件

前文说明了利用夜莺开源版如何监控H3C交换机的,算是抛砖引玉;秉持着授人与鱼不如授人与渔,今天我们就来具体谈谈夜莺SNMP插件的使用,能自己自定义自身需求的监控监控指标才是真正学会如何利用夜莺去监控监控SNMP协议设备,今天将以H3C无线作为案例,具体讲解下SNMP插件配置
场景介绍

企业华三无线AP和AC的设备信息监控,需要通过SNMP协议拿到指标数据,并把数据插入到VictoriaMetrics时序数据库中,通过夜莺对数据的即时查询和提取可以构建需要的监控面板,实现基础的数据指标监控提取。
华三无线指标

由于snmp.toml配置文件(路径:categraf/conf/input.snmp/)中已经存在华三交换机的指标配置文件,为了区分多类型设备采集模板,这里将把交换机采集配置模板文件和无线设备采集配置模板文件进行分开,分别取名:snmp_h3c_sw.toml和snmp_h3c_wireless.toml,配置会同步读取,具体配置如下:interval = 10
  1. # H3C AC信息采集
  2. [[instances]]
  3. agents = [
  4.     "udp://192.168.100.100",
  5. ]
  6. interval_times = 3
  7. labels = { region = "beijing", role = "ac" }
  8. # 每个请求的超时时间
  9. timeout = "5s"
  10. # SNMP Agent的版本
  11. version = 2
  12. # SNMP团体名
  13. community = "XXXX"
  14. # 自定义 mib 文件路径
  15. # path = ["/usr/share/snmp/mibs"]
  16. # 代理主机标签
  17. agent_host_tag = "ident"
  18. # 尝试的重试次数
  19. retries = 3
  20. # GETBULK 每次获取的最大对象数 如果指标越多 建议数值越大 可加速采集时间
  21. max_repetitions = 50
  22. # 系统启动时间
  23. [[instances.field]]
  24. oid = "1.3.6.1.2.1.1.3.0"
  25. name = "uptime"
  26. # 系统名称
  27. [[instances.field]]
  28. oid = "1.3.6.1.2.1.1.5.0"
  29. name = "deviceName"
  30. is_tag = true
  31. # 接口表信息
  32. [[instances.table]]
  33. oid = "IF-MIB::ifTable"
  34. name = "interface"
  35. inherit_tags = ["deviceName"]
  36. # 接口表信息中的某个字段
  37. [[instances.table.field]]
  38. oid = "IF-MIB::ifDescr"
  39. name = "ifDescr"
  40. is_tag = true
  41. [[instances.table.field]]
  42. oid = "IF-MIB::ifSpeed"
  43. name = "ifSpeed"
  44. is_tag = true
  45. [[instances.table.field]]
  46. oid = "IF-MIB::ifType"
  47. name = "ifType"
  48. is_tag = true
  49. [[instances.table.field]]
  50. oid = "IF-MIB::ifMtu"
  51. name = "ifMtu" 
  52. is_tag = true
  53. [[instances.table.field]]
  54. oid = "IF-MIB::ifAlias"
  55. name = "ifAlias" 
  56. is_tag = true
  57. # 入方向报文统计(64位) ifHCInOctets
  58. [[instances.table.field]]
  59. oid = "1.3.6.1.2.1.31.1.1.1.6"
  60. name = "ifHCInOctets"
  61. # 入方向单播报文统计(64位) ifHCInUcastPkts
  62. [[instances.table.field]]
  63. oid = "1.3.6.1.2.1.31.1.1.1.7"
  64. name = "ifHCInUcastPkts"
  65. # 入方向多播报文统计(64位) ifHCInMulticastPkts
  66. [[instances.table.field]]
  67. oid = "1.3.6.1.2.1.31.1.1.1.8"
  68. name = "ifHCInMulticastPkts"
  69. # 入方向广播报文统计(64位) ifHCInBroadcastPkts
  70. [[instances.table.field]]
  71. oid = "1.3.6.1.2.1.31.1.1.1.9"
  72. name = "ifHCInBroadcastPkts"
  73. # 出方向报文统计(64位) ifHCOutOctets
  74. [[instances.table.field]]
  75. oid = "1.3.6.1.2.1.31.1.1.1.10"
  76. name = "ifHCOutOctets"
  77. # 出方向单播报文统计(64位) ifHCOutUcastPkts
  78. [[instances.table.field]]
  79. oid = "1.3.6.1.2.1.31.1.1.1.11"
  80. name = "ifHCOutUcastPkts"
  81. # 出方向多播报文统计(64位) ifHCOutMulticastPkts
  82. [[instances.table.field]]
  83. oid = "1.3.6.1.2.1.31.1.1.1.12"
  84. name = "ifHCOutMulticastPkts"
  85. # 出方向广播报文统计(64位) ifHCOutBroadcastPkts
  86. [[instances.table.field]]
  87. oid = "1.3.6.1.2.1.31.1.1.1.13"
  88. name = "ifHCOutBroadcastPkts"
  89. # 新建空table h3c_system 索引 entPhysicalIndex 获取实体CPU和内存信息
  90. [[instances.table]]
  91. name = "h3c_system"
  92. index_as_tag = true
  93. filters = ["exprA:ent_descr:^(MODULE|Module) (LEVEL|level)1 (SLOT|slot)1$", "exprB:ent_name:.*", "exprC:cpu_usage:.*"]
  94. filters_expression = "exprA && exprB && exprC"
  95. # 实体描述信息 entPhysicalDescr
  96. [[instances.table.field]]
  97. oid = "1.3.6.1.2.1.47.1.1.1.1.2"
  98. name = "ent_descr"
  99. is_tag = true
  100. # 实体名称 entPhysicalName
  101. [[instances.table.field]]
  102. oid = "1.3.6.1.2.1.47.1.1.1.1.7"
  103. name = "ent_name"
  104. is_tag = true
  105. # 实体CPU实时利用率统计周期为5秒钟
  106. [[instances.table.field]]
  107. oid = "1.3.6.1.4.1.25506.2.6.1.1.1.1.6"
  108. name = "cpu_usage"
  109. # 实体内存实时利用率百分比
  110. [[instances.table.field]]
  111. oid = "1.3.6.1.4.1.25506.2.6.1.1.1.1.8"
  112. name = "mem_usage"
  113. # 新建空table h3c_system 索引 entPhysicalIndex 获取实体风扇状态信息
  114. [[instances.table]]
  115. name = "h3c_system"
  116. index_as_tag = true
  117. filters = ["exprA:ent_class:7", "exprB:ent_name:.*", "exprC:fan:.*"]
  118. filters_expression = "exprA && exprB && exprC"
  119. # 实体类型 entPhysicalClass
  120. [[instances.table.field]]
  121. oid = "1.3.6.1.2.1.47.1.1.1.1.5"
  122. name = "ent_class"
  123. is_tag = true
  124. # 实体名称 entPhysicalName
  125. [[instances.table.field]]
  126. oid = "1.3.6.1.2.1.47.1.1.1.1.7"
  127. name = "ent_name"
  128. is_tag = true
  129. # 实体错误状态 Normal(2)表示正常
  130. [[instances.table.field]]
  131. oid = "1.3.6.1.4.1.25506.2.6.1.1.1.1.19"
  132. name = "fan"
  133. # 新建空table h3c_system 索引 entPhysicalIndex 获取实体电源状态信息
  134. [[instances.table]]
  135. name = "h3c_system"
  136. index_as_tag = true
  137. filters = ["exprA:ent_class:6", "exprB:ent_name:.*", "exprC:psu:.*"]
  138. filters_expression = "exprA && exprB && exprC"
  139. # 实体类型 entPhysicalClass
  140. [[instances.table.field]]
  141. oid = "1.3.6.1.2.1.47.1.1.1.1.5"
  142. name = "ent_class"
  143. is_tag = true
  144. # 实体名称 entPhysicalName
  145. [[instances.table.field]]
  146. oid = "1.3.6.1.2.1.47.1.1.1.1.7"
  147. name = "ent_name"
  148. is_tag = true
  149. # 实体错误状态 Normal(2)表示正常
  150. [[instances.table.field]]
  151. oid = "1.3.6.1.4.1.25506.2.6.1.1.1.1.19"
  152. name = "psu"
  153. # 新建空table h3c_system 索引 entPhysicalIndex 获取实体传感器温度信息
  154. [[instances.table]]
  155. name = "h3c_system"
  156. index_as_tag = true
  157. filters = ["exprA:ent_descr:^(Sensor|SENSOR) (SLOT|slot)1#.*", "exprB:ent_name:.*", "exprC:temperature_value:.*"]
  158. filters_expression = "exprA && exprB && exprC"
  159. # 实体描述信息 entPhysicalDescr
  160. [[instances.table.field]]
  161. oid = "1.3.6.1.2.1.47.1.1.1.1.2"
  162. name = "ent_descr"
  163. is_tag = true
  164. # 实体名称 entPhysicalName
  165. [[instances.table.field]]
  166. oid = "1.3.6.1.2.1.47.1.1.1.1.7"
  167. name = "ent_name"
  168. is_tag = true
  169. # 实体温度 hh3cEntityExtTemperature
  170. [[instances.table.field]]
  171. oid = "1.3.6.1.4.1.25506.2.6.1.1.1.1.12"
  172. name = "temperature_value"
  173. # 新建空table H3C AP H3C的mib库文件:HH3C-DOT11-APMT-MIB
  174. [[instances.table]]
  175. #oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APObjectTable"
  176. name = "h3c_ap"
  177. index_as_tag = false
  178. # AP别名 hh3cDot11CurrAPName
  179. [[instances.table.field]]
  180. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11CurrAPName"
  181. name = "apname"
  182. is_tag = true
  183. # AP的IP地址 hh3cDot11APIPAddress
  184. [[instances.table.field]]
  185. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APIPAddress"
  186. name = "apip"
  187. is_tag = true
  188. # AP的Mac地址 hh3cDot11APMacAddress2
  189. [[instances.table.field]]
  190. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APMacAddress2"
  191. name = "apmac"
  192. is_tag = true
  193. # AP状态 hh3cDot11APOperationStatus join(1)AP正在加入AC;joinConfirm(2)AC确认是否允许AP加入;
  194. # download(3)AP正在从AC下载软件版本;config(4)下发配置;run(5)上线
  195. [[instances.table.field]]
  196. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APOperationStatus"
  197. name = "status"
  198. # AP在线总数 hh3cDot11APConnectCount
  199. [[instances.table.field]]
  200. oid = "HH3C-DOT11-ACMT-MIB::hh3cDot11APConnectCount"
  201. name = "sumnum"
  202. # AP在线用户数 hh3cDot11CurrAPStationAssocCount
  203. [[instances.table.field]]
  204. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11CurrAPStationAssocCount"
  205. name = "user_num"
  206. # AP实时CPU利用率(周期1分钟) hh3cDot11APCPURTUsage2
  207. [[instances.table.field]]
  208. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APCPURTUsage2"
  209. name = "cpu_usage"
  210. # AP实时内存利用率(周期1分钟) hh3cDot11APMemRTUsage2
  211. [[instances.table.field]]
  212. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APMemRTUsage2"
  213. name = "mem_usage"
  214. # 新建AP射频信息表
  215. [[instances.table]]
  216. #oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APRadioTable"
  217. name = "h3c_ap_radio"
  218. index_as_tag = false
  219. # AP当前ID hh3cDot11CurAPID
  220. [[instances.table.field]]
  221. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11CurAPID"
  222. name = "cur_apid"
  223. # secondary_index_table = true
  224. is_tag = true
  225. # AP别名 hh3cDot11CurrAPName
  226. [[instances.table.field]]
  227. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11CurrAPName"
  228. name = "apname"
  229. # secondary_index_use = true
  230. # secondary_outer_join = true
  231. is_tag = true
  232. # 当前AP射频的ID hh3cDot11RadioID
  233. [[instances.table.field]]
  234. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11RadioID"
  235. name = "radio_id"
  236. is_tag = true
  237. # 当前AP射频的工作状态 hh3cDot11OperStatus
  238. [[instances.table.field]]
  239. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11OperStatus"
  240. name = "status"
  241. # 当前AP射频的信道分配 hh3cDot11Channel
  242. [[instances.table.field]]
  243. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11Channel"
  244. name = "channel"
  245. # 当前AP射频的发射功率电平 hh3cDot11TxPowerLevel
  246. [[instances.table.field]]
  247. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11TxPowerLevel"
  248. name = "powerlevel"
  249. # 当前AP射频接收到的平均信号强度 hh3cDot11AvgRxSignalStrength
  250. [[instances.table.field]]
  251. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11AvgRxSignalStrength"
  252. name = "avg_rx_ss"
  253. # 当前AP射频天线的增益 hh3cDot11AntennaGain
  254. [[instances.table.field]]
  255. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11AntennaGain"
  256. name = "gain"
  257. # 当前AP射频资源的使用率 hh3cDot11ResourceUseRatio
  258. [[instances.table.field]]
  259. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11ResourceUseRatio"
  260. name = "resource"
  261. # 当前AP射频口在主信道的空口利用率 hh3cDot11AirPrimChnlBusy
  262. [[instances.table.field]]
  263. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11AirPrimChnlBusy"
  264. name = "air_chnl_busy"
复制代码
需要看懂上面的配置需要了解一下知识点。
具体详解

MIB对象类型:
标量和表量,标量单一指标,表量多指标,并且这些指标都是有该表的唯一索引(索引可能由1个甚至多个oid单一指标组成)。具体查看MIB描述信息,如下所示:
标量如下所示,一般都会说全局节点,没有唯一索引,或者理解为索引就是0,只有一个oid指标对象:

 
表量如下所示,一般都会说明表节点,oid对象往往都是以Table结尾,里面有以该表的唯一索引的一批具体oid指标对象:

配置文件说明:

  • [[instances]]下面的配置看官方文档
  • [[instances.field]]对应标量,如果是采集标量直接使用。
  • [[instances.table.field]]对应表量,如果采集有唯一索引的oid指标,直接使用。
  • name和oid就是定义采集的oid对象和插入oid指标的名称,注意名称是会做拼接,注意格式。
  • is_tag合理使用该参数,比如你不需要这个oid以指标的方式呈现,而是以有同一个唯一索引的指标标签的方式呈现。
  • index_as_tag合理使用该参数,主要是索引是为作为标签插入,在有两个oid对象组合成的作为唯一索引情况下,很有用,具体根据实际数据说话。
空表是只新建单独的空白,插入某些需要的指标,而不是采集该唯一索引下所有的指标,一般不建议直接读取***Table的,比如:
  1. # AP射频信息表
  2. [[instances.table]]
  3. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APRadioTable"
  4. name = "h3c_ap_radio"
  5. index_as_tag = false
复制代码
而是新建一个空表,插入我们具体关注的指标即可,一些无用垃圾指标,不要获取。
  1. # 新建AP射频信息空表
  2. [[instances.table]]
  3. name = "h3c_ap_radio"
  4. index_as_tag = false
  5. # 当前AP射频的工作状态 hh3cDot11OperStatus
  6. [[instances.table.field]]
  7. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11OperStatus"
  8. name = "status"
  9. # 当前AP射频的信道分配 hh3cDot11Channel
  10. [[instances.table.field]]
  11. oid = "HH3C-DOT11-APMT-MIB::hh3cDot11Channel"
  12. name = "channel"
复制代码
高级功能

值筛选:通过标签和值设置简单的正则表达式,过滤我们不需要的数据,得到想要的数据。
表连接如果获取的数据是在不同的索引表,而我们展示数据或者做监控报警,需要用到这些不同索引表中的数据,而单独索引表的指标有没有我们想要的数据,这个时候我们就需要使用表连接,对两个表量进行合并查询。
高级功能后续单独开篇讲讲。
最终效果


 

 

 

又或者这样

 

 
更多指标静待各位道友自行设置了。
最后
如果觉得这篇内容比你的咖啡还提神,就动动手指点个赞吧!如果觉得这里有趣,记得关注,不然下次可能会错过哦!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表