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

2023-12-19

编者荐语:

真正搞监控的人肯定知道 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

# H3C AC信息采集
[[instances]]
agents = [
    "udp://192.168.100.100",
]

interval_times = 3
labels = { region = "beijing", role = "ac" }

# 每个请求的超时时间
timeout = "5s"
# SNMP Agent的版本
version = 2
# SNMP团体名
community = "XXXX"
# 自定义 mib 文件路径
# path = ["/usr/share/snmp/mibs"]
# 代理主机标签
agent_host_tag = "ident"
# 尝试的重试次数
retries = 3
# GETBULK 每次获取的最大对象数 如果指标越多 建议数值越大 可加速采集时间
max_repetitions = 50

# 系统启动时间
[[instances.field]]
oid = "1.3.6.1.2.1.1.3.0"
name = "uptime"

# 系统名称
[[instances.field]]
oid = "1.3.6.1.2.1.1.5.0"
name = "deviceName"
is_tag = true

# 接口表信息
[[instances.table]]
oid = "IF-MIB::ifTable"
name = "interface"
inherit_tags = ["deviceName"]

# 接口表信息中的某个字段
[[instances.table.field]]
oid = "IF-MIB::ifDescr"
name = "ifDescr"
is_tag = true

[[instances.table.field]]
oid = "IF-MIB::ifSpeed"
name = "ifSpeed"
is_tag = true

[[instances.table.field]]
oid = "IF-MIB::ifType"
name = "ifType"
is_tag = true

[[instances.table.field]]
oid = "IF-MIB::ifMtu"
name = "ifMtu" 
is_tag = true

[[instances.table.field]]
oid = "IF-MIB::ifAlias"
name = "ifAlias" 
is_tag = true

# 入方向报文统计(64位) ifHCInOctets
[[instances.table.field]]
oid = "1.3.6.1.2.1.31.1.1.1.6"
name = "ifHCInOctets"

# 入方向单播报文统计(64位) ifHCInUcastPkts
[[instances.table.field]]
oid = "1.3.6.1.2.1.31.1.1.1.7"
name = "ifHCInUcastPkts"

# 入方向多播报文统计(64位) ifHCInMulticastPkts
[[instances.table.field]]
oid = "1.3.6.1.2.1.31.1.1.1.8"
name = "ifHCInMulticastPkts"

# 入方向广播报文统计(64位) ifHCInBroadcastPkts
[[instances.table.field]]
oid = "1.3.6.1.2.1.31.1.1.1.9"
name = "ifHCInBroadcastPkts"

# 出方向报文统计(64位) ifHCOutOctets
[[instances.table.field]]
oid = "1.3.6.1.2.1.31.1.1.1.10"
name = "ifHCOutOctets"

# 出方向单播报文统计(64位) ifHCOutUcastPkts
[[instances.table.field]]
oid = "1.3.6.1.2.1.31.1.1.1.11"
name = "ifHCOutUcastPkts"

# 出方向多播报文统计(64位) ifHCOutMulticastPkts
[[instances.table.field]]
oid = "1.3.6.1.2.1.31.1.1.1.12"
name = "ifHCOutMulticastPkts"

# 出方向广播报文统计(64位) ifHCOutBroadcastPkts
[[instances.table.field]]
oid = "1.3.6.1.2.1.31.1.1.1.13"
name = "ifHCOutBroadcastPkts"

# 新建空table h3c_system 索引 entPhysicalIndex 获取实体CPU和内存信息
[[instances.table]]
name = "h3c_system"
index_as_tag = true
filters = ["exprA:ent_descr:^(MODULE|Module) (LEVEL|level)1 (SLOT|slot)1$", "exprB:ent_name:.*", "exprC:cpu_usage:.*"]
filters_expression = "exprA && exprB && exprC"

# 实体描述信息 entPhysicalDescr
[[instances.table.field]]
oid = "1.3.6.1.2.1.47.1.1.1.1.2"
name = "ent_descr"
is_tag = true

# 实体名称 entPhysicalName
[[instances.table.field]]
oid = "1.3.6.1.2.1.47.1.1.1.1.7"
name = "ent_name"
is_tag = true

# 实体CPU实时利用率统计周期为5秒钟
[[instances.table.field]]
oid = "1.3.6.1.4.1.25506.2.6.1.1.1.1.6"
name = "cpu_usage"

# 实体内存实时利用率百分比
[[instances.table.field]]
oid = "1.3.6.1.4.1.25506.2.6.1.1.1.1.8"
name = "mem_usage"

# 新建空table h3c_system 索引 entPhysicalIndex 获取实体风扇状态信息
[[instances.table]]
name = "h3c_system"
index_as_tag = true
filters = ["exprA:ent_class:7", "exprB:ent_name:.*", "exprC:fan:.*"]
filters_expression = "exprA && exprB && exprC"

# 实体类型 entPhysicalClass
[[instances.table.field]]
oid = "1.3.6.1.2.1.47.1.1.1.1.5"
name = "ent_class"
is_tag = true

# 实体名称 entPhysicalName
[[instances.table.field]]
oid = "1.3.6.1.2.1.47.1.1.1.1.7"
name = "ent_name"
is_tag = true

# 实体错误状态 Normal(2)表示正常
[[instances.table.field]]
oid = "1.3.6.1.4.1.25506.2.6.1.1.1.1.19"
name = "fan"

# 新建空table h3c_system 索引 entPhysicalIndex 获取实体电源状态信息
[[instances.table]]
name = "h3c_system"
index_as_tag = true
filters = ["exprA:ent_class:6", "exprB:ent_name:.*", "exprC:psu:.*"]
filters_expression = "exprA && exprB && exprC"

# 实体类型 entPhysicalClass
[[instances.table.field]]
oid = "1.3.6.1.2.1.47.1.1.1.1.5"
name = "ent_class"
is_tag = true

# 实体名称 entPhysicalName
[[instances.table.field]]
oid = "1.3.6.1.2.1.47.1.1.1.1.7"
name = "ent_name"
is_tag = true

# 实体错误状态 Normal(2)表示正常
[[instances.table.field]]
oid = "1.3.6.1.4.1.25506.2.6.1.1.1.1.19"
name = "psu"

# 新建空table h3c_system 索引 entPhysicalIndex 获取实体传感器温度信息
[[instances.table]]
name = "h3c_system"
index_as_tag = true
filters = ["exprA:ent_descr:^(Sensor|SENSOR) (SLOT|slot)1#.*", "exprB:ent_name:.*", "exprC:temperature_value:.*"]
filters_expression = "exprA && exprB && exprC"

# 实体描述信息 entPhysicalDescr
[[instances.table.field]]
oid = "1.3.6.1.2.1.47.1.1.1.1.2"
name = "ent_descr"
is_tag = true

# 实体名称 entPhysicalName
[[instances.table.field]]
oid = "1.3.6.1.2.1.47.1.1.1.1.7"
name = "ent_name"
is_tag = true

# 实体温度 hh3cEntityExtTemperature
[[instances.table.field]]
oid = "1.3.6.1.4.1.25506.2.6.1.1.1.1.12"
name = "temperature_value"


# 新建空table H3C AP H3C的mib库文件:HH3C-DOT11-APMT-MIB
[[instances.table]]
#oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APObjectTable"
name = "h3c_ap"
index_as_tag = false

# AP别名 hh3cDot11CurrAPName
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11CurrAPName"
name = "apname"
is_tag = true

# AP的IP地址 hh3cDot11APIPAddress
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APIPAddress"
name = "apip"
is_tag = true

# AP的Mac地址 hh3cDot11APMacAddress2
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APMacAddress2"
name = "apmac"
is_tag = true

# AP状态 hh3cDot11APOperationStatus join(1)AP正在加入AC;joinConfirm(2)AC确认是否允许AP加入;
# download(3)AP正在从AC下载软件版本;config(4)下发配置;run(5)上线
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APOperationStatus"
name = "status"

# AP在线总数 hh3cDot11APConnectCount
[[instances.table.field]]
oid = "HH3C-DOT11-ACMT-MIB::hh3cDot11APConnectCount"
name = "sumnum"

# AP在线用户数 hh3cDot11CurrAPStationAssocCount
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11CurrAPStationAssocCount"
name = "user_num"

# AP实时CPU利用率(周期1分钟) hh3cDot11APCPURTUsage2
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APCPURTUsage2"
name = "cpu_usage"

# AP实时内存利用率(周期1分钟) hh3cDot11APMemRTUsage2
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APMemRTUsage2"
name = "mem_usage"

# 新建AP射频信息表
[[instances.table]]
#oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APRadioTable"
name = "h3c_ap_radio"
index_as_tag = false

# AP当前ID hh3cDot11CurAPID
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11CurAPID"
name = "cur_apid"
# secondary_index_table = true
is_tag = true

# AP别名 hh3cDot11CurrAPName
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11CurrAPName"
name = "apname"
# secondary_index_use = true
# secondary_outer_join = true
is_tag = true

# 当前AP射频的ID hh3cDot11RadioID
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11RadioID"
name = "radio_id"
is_tag = true

# 当前AP射频的工作状态 hh3cDot11OperStatus
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11OperStatus"
name = "status"

# 当前AP射频的信道分配 hh3cDot11Channel
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11Channel"
name = "channel"

# 当前AP射频的发射功率电平 hh3cDot11TxPowerLevel
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11TxPowerLevel"
name = "powerlevel"

# 当前AP射频接收到的平均信号强度 hh3cDot11AvgRxSignalStrength
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11AvgRxSignalStrength"
name = "avg_rx_ss"

# 当前AP射频天线的增益 hh3cDot11AntennaGain
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11AntennaGain"
name = "gain"

# 当前AP射频资源的使用率 hh3cDot11ResourceUseRatio
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11ResourceUseRatio"
name = "resource"

# 当前AP射频口在主信道的空口利用率 hh3cDot11AirPrimChnlBusy
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11AirPrimChnlBusy"
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 的,比如:

# AP射频信息表
[[instances.table]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APRadioTable"
name = "h3c_ap_radio"
index_as_tag = false

而是新建一个空表,插入我们具体关注的指标即可,一些无用垃圾指标,不要获取。

# 新建AP射频信息空表
[[instances.table]]
name = "h3c_ap_radio"
index_as_tag = false

# 当前AP射频的工作状态 hh3cDot11OperStatus
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11OperStatus"
name = "status"

# 当前AP射频的信道分配 hh3cDot11Channel
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11Channel"
name = "channel"

高级功能

值筛选: 通过标签和值设置简单的正则表达式,过滤我们不需要的数据,得到想要的数据。

表连接 如果获取的数据是在不同的索引表,而我们展示数据或者做监控报警,需要用到这些不同索引表中的数据,而单独索引表的指标有没有我们想要的数据,这个时候我们就需要使用表连接,对两个表量进行合并查询。

高级功能后续单独开篇讲讲。

最终效果

又或者这样

更多指标静待各位道友自行设置了。

最后

如果觉得这篇内容比你的咖啡还提神,就动动手指点个赞吧!如果觉得这里有趣,记得关注,不然下次可能会错过哦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用夜莺开源版对H3C无线设备监控 的相关文章

  • C/C++编程中的算法实现技巧与案例分析

    C C 编程语言因其高效 灵活和底层的特性 被广大开发者用于实现各种复杂算法 本文将通过10个具体的算法案例 详细探讨C C 在算法实现中的技巧和应用 一 冒泡排序 Bubble Sort 冒泡排序 Bubble Sort 是一种简单的排序

随机推荐

  • Vue学习之watch侦听器:案例实现翻译功能

    watch侦听器 作用 监视数据的变化 当数据发生变化时 执行一些业务逻辑或者是异步操作 执行的场景例如在线翻译 当文本区域的内容发生变化时 会发生翻译内容的同时更新 语法 简单的写法 简单数据类型 可以直接的进行监听 完整的写法 添加额外
  • 基于动态代理实现接口耗时计算

    对于动态代理模式 Java的反射机制提供了支持 耗时计算写在主逻辑代码存在很强的耦合性 这里提供了一种解耦合的方式去实现 在Spring框架aop也用了这一技术 登录接口 public class UserServiceImpl imple
  • 为什么程序员不拿自己写的程序去卖,而要在公司领死工资呢?

    大多数程序员连和产品经理battle都battle不清楚 更别说是自己做程序 卖程序 赚大钱了 写程序不难 但要摆脱领死工资 通过卖程序实现最基础的养活自己 你起码得有 想出一个还不错的产品 至少要满足 原创非抄袭 有一定的市场且该市场还没
  • scrapy_redis实战去哪儿旅游信息爬虫(分布式爬虫实例)

    前言 在这个信息爆炸的时代 网络上充斥着大量的旅游信息 而其中关于景区的介绍和评论更是琳琅满目 然而 对于想要获取特定景区信息并了解其真实评价的人来说 筛选和获取准确 有用的数据可能是一项极具挑战性的任务 为了解决这一难题 利用网络爬虫技术
  • git 的碎步浪荡,添加仓库子项目,迁移仓库

    1 git仓库迁移 将他人的代码仓库 xxxx 移为自己的 yyyy 仓库 先创建自己的yyyy空仓库 假设url为 yyyy git 将 xxxx 的全部数据 包括分支和 tag 都 download 到本地 git clone recu
  • 【科技前沿】数字孪生技术改革智慧供热,换热站3D可视化引领未来

    换热站作为供热系统不可或缺的一部分 其能源消耗对城市环保至关重要 在双碳目标下 供热企业可通过搭建智慧供热系统 实现供热方式的低碳 高效 智能化 从而减少碳排放和能源浪费 通过应用物联网 大数据等高新技术 对热源 管网等供热系统进行智慧化改
  • 探究微处理器开发中的汇编语言的优势与挑战

    在计算机编程中 汇编语言是一种低级语言 它可以直接控制计算机的硬件资源 与高级语言相比 汇编语言具有更高的运行效率和更好的控制能力 但同时也更加复杂和难以理解和维护 在微处理器开发中 汇编语言通常是首选的语言之一 这是因为微处理器的自然语言
  • 干货丨渗透测试常用方法总结,大神之笔!

    一 渗透流程 信息收集 漏洞验证 漏洞攻击 提权 权限维持 日志清理 信息收集 一般先运行端口扫描和漏洞扫描获取可以利用的漏洞 多利用搜索引擎 端口扫描 有授权的情况下直接使用 nmap masscan 自己写py脚本等端口扫描工具直接获取
  • netty源码:(24)EventExecutorChooserFactory类

    该类定义了一个内部接口EventExecutorChooser 该接口有一个方法 next EventExecutorChooserFactory类有个默认实现类 DefaultEventExecutorChooserFactory 该类有
  • WebRTC编译记录

    文章目录 1 尝试1 重新安装libtool 尝试2 解除brew的libtool 切换到xcode自带的 成功 这里记录一次iOS编译问题 在之前编译WebRTC都是没有问题 今天编译突然报错如下 FAILED obj media lib
  • 【Ubuntu系统常用命令以及英文缩写】

    Ubuntu系统常用命令以及英文缩写 Ubuntu common commands Listing all Ubuntu commands and their explanations would be quite extensive as
  • Java浅拷贝、深拷贝

    浅拷贝 新对象和原对象的成员变量一致 引用变量也指向同一个对象 其中一个对象改变引用变量指向的对象内容 另一个对象中同样的变量也会跟着改变 即对于引用变量 浅拷贝复制的是其地址 并非对象本身 如下 Data public class Use
  • 谈谈Spring中循环依赖问题与解决方案

    目录 循环依赖问题 解决方案讨论 field属性的循环依赖解决方案 构造器的循环依赖解决方案 循环依赖问题 循环依赖就是两个或则两个以上的bean互相持有对方 最终形成闭环 比如A依赖于B B依赖于C C又依赖于A 在创建A对象的同时需要使
  • 【flink番外篇】4、flink的sink(内置、mysql、kafka、redis、clickhouse、分布式缓存、广播变量)介绍及示例(8) - 完整版

    Flink 系列文章 一 Flink 专栏 Flink 专栏 系统介绍某一知识点 并辅以具体的示例进行说明 1 Flink 部署系列 本部分介绍Flink的部署 配置相关基础内容 2 Flink基础系列 本部分介绍Flink 的基础部分 比
  • 全国30米分辨率土地利用遥感监测空间分布数据(1985-2022逐年)

    全国30米分辨率土地利用遥感监测空间分布数据 1985 2022逐年 全国30米土地利用类型遥感监测空间分布数据 是基于美国陆地卫星Landsat 系列 MSS TM 7 8 9 影像数据 通过人机交互解译生成 根据LUCC分类体系将土地利
  • 20231219_100657 java io 字符缓冲输入流 BufferedReader

    读取文件所有内容 使用字节数组 获得缓冲字符输入流对象 FileReader fileReader new FileReader b txt BufferedReader bufferedReader new BufferedReader
  • DC电源模块的安装和使用步骤是什么?

    BOSHIDA DC电源模块的安装和使用步骤是什么 安装和使用DC电源模块的步骤如下 1 确定模块的电源需求 查阅模块的规格和说明书 确定所需的输入电压范围和输出电流能力 2 配置电源线 根据电源模块的输入要求 选择合适的电源线 确保电源线
  • HONEYWELL 05701-A-0351 数字量扩展模块

    HONEYWELL 05701 A 0351 数字量扩展模块 HONEYWELL 05701 A 0351 数字量扩展模块产品详情 HONEYWELL 05701 A 0351 数字量扩展模块一般用于工业自动化系统中 主要用于扩展数字输入和
  • 基于SpringBoot+Vue的老年一站式服务平台演示设计实现(源码+lw+部署文档+讲解等)

    文章目录 前言 详细视频演示 具体实现截图 技术栈 后端框架SpringBoot 前端框架Vue 持久层框架MyBaitsPlus 系统测试 系统测试目的
  • 利用夜莺开源版对H3C无线设备监控

    编者荐语 真正搞监控的人肯定知道 SNMP 水有多深 有时我甚至腹黑猜测 这些厂商是故意的吧 指标不标准 格式各异 只能靠一款灵活的采集器了 本文是夜莺社区用户写的文章 转给大家参考 author 网络小斐 关于夜莺SNMP插件 前文说明了