编者荐语:
真正搞监控的人肯定知道 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"

高级功能

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

最终效果

又或者这样

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

最后

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

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

  1. FineUI(开源版)v6.0中FState服务器端验证的实现原理

    前言 1. FineUI(开源版)是完整开源,最早发起于 2008-04,下载全部源代码:http://fineui.codeplex.com/ 2. 你可以通过捐赠作者来支持FineUI(开源版)的 ...

  2. FineUI(开源版)v4.2.2发布(8年125个版本,官网示例突破300个)!

    开源版是 FineUI 的基石,从 2008 年至今已经持续发布了 120 多个版本,拥有会员 15,000 多位,捐赠会员达到 1,200 多位.   FineUI(开源版)v4.2.2 是 8 年 ...

  3. FineUI(专业版)v1.2.0 和 FineUI(开源版)v4.1.1 同时发布!

    FineUI(开源版)v4.1.1 (建议所有 v4.x 升级到此版本):http://fineui.com/demo/ +2014-08-15 v4.1.1        -修正Form中表单字段设 ...

  4. FineUI开源版之TreeGrid实现

    FineUI开源版是没有树表格的,但是又需要,怎么办呢?在博客园看到一位大大的文章 http://www.cnblogs.com/shiworkyue/p/4211002.html 然后参考,不知道为 ...

  5. 利用谷歌开源工具cAdvisor 结合influxdb存储+Grafana前端展示进行Docker容器的监控

    一.Docker 监控方式 1.利用docker 的 docker stats API 命令: docker stats [容器ID/容器名称] [root@docker ~]# docker sta ...

  6. 这个接口管理平台 eoLinker 开源版部署指南你一定不想错过

    本文主要内容是讲解如何在本地部署eoLinker开源版. 环境要求 1.PHP 5.5+ / PHP7+(推荐) 2.Mysql 5.5+ / Mariadb 5.5+ 3.Nginx(推荐) / A ...

  7. 开源免费接口管理平台eoLinker AMS开源版 V3.2.0更新,增加批量导出导入接口功能!

    eoLinker是一个免费开源的针对开发人员需求而设计的接口管理工具,通过简单的操作来帮助开发者进行接口文档管理.接口自动化测试.团队协作.数据获取.安全防御监控等功能,降低企业的接口管理成本,提高项 ...

  8. 【开源】接口管理平台eoLinker AMS 开源版3.1.5同步线上版!免费增加大量功能!

    概要:eoLinker是一个免费开源的针对开发人员需求而设计的接口管理工具,通过简单的操作来帮助开发者进行接口文档管理.接口自动化测试.团队协作.数据获取.安全防御监控等功能,降低企业的接口管理成本, ...

  9. 部署eolinker开源版接口管理

    想找一个API接口管理的软件,为了安全性和扩展性考虑,希望是开源的,而且可以在内网独立部署.网上翻找了资料,经过一份比对之后,最终采用eolinker.过去有使用过RAP,但是感觉界面实在是太丑了. ...

  10. Linux下部署开源版“禅道”项目管理系统

    1.开源版安装包下载 [root@iZbp ~]# wget http://dl.cnezsoft.com/zentao/9.0.1/ZenTaoPMS.9.0.1.zbox_64.tar.gz 2. ...

随机推荐

  1. 当Java遇上机密计算,又一段奇幻之旅开始了!

    ​简介: 汪少军:如何为Java业务提供机密计算保护? ​ 写在前面 在信息世界里,数据存在三种状态: 存储态.传输态和计算态.存储在数据库或磁盘中的数据属于存储状态,在网络中传输的数据属于传输状态, ...

  2. [PHP] Laravel 依赖注入使用不当引起的内存溢出

    业务逻辑: 正常在 controller 方法的参数中注入某个类,方法中使用这个类时发生内存超出提示. 分析: 过往显示,正常使用依赖注入是不存在问题的,那么很有可能是哪里发生了循环引用,导致一直请求 ...

  3. WPF 获取本机所有字体拿到每个字符的宽度和高度

    本文主要采用 GlyphTypeface 类尝试获取每个字符的宽度和高度的值,尽管这个方法和最终 WPF 布局使用的文本的宽度和高度是不相同的,但是依然可以作为参考 获取系统字体文件夹的文件 系统字体 ...

  4. 异常值检测算法三:3sigma模型

    离散度 标准差是反应一组数据离散程度最常用的一种量化形式,是表示精确度的重要指标.说起标准差首先得搞清楚它出现的目的.我们使用方法去检测它,但检测方法总是有误差的,所以检测值并不是其真实值.检测值与真 ...

  5. 超轻量级的c#版基于文件的日志记录工具,可定制输出格式,可指定日志文件

    这是我自己个人编写的日志记录,主要使用在只需要记录日志,偶尔到文件中查看一下日志记录的情况.我自己写的一些服务之类的是使用了这个的,代码很少,使用很简单. 第一步 搜索和安装我的Nuget包 搜索和安 ...

  6. TCP/IP协议栈及网络基础

    TCP/IP协议栈及网络基础 目录 TCP/IP协议栈及网络基础 1. TCP/IP协议栈及网络基础 1.1 OSI网络模型 1.2 TCP/IP网络模型 1.2.1 物理层 1.2.2 数据链路层 ...

  7. 详解Python 中可视化数据分析工作流程

    本文分享自华为云社区<Python 可视化数据分析从数据获取到洞见发现的全面指南>,作者:柠檬味拥抱. 在数据科学和分析的领域中,可视化是一种强大的工具,能够帮助我们理解数据.发现模式,并 ...

  8. fastposter发布1.5.0 跨语言的海报生成器

    fastposter发布1.5.0 跨语言的海报生成器 v1.5.0 增加右键复制.粘贴操作 fastposter低代码海报生成器,一分钟完成海报开发.支持Java,Python,PHP,Go,Jav ...

  9. selenium Webdriver版本和浏览器版本不匹配问题:ChromeDriver only supports Chrome version 119 Current browser version is 124.0.6367.202

    问题描述 代码如下: from selenium import webdriver from selenium.webdriver.common.by import By def test01(): ...

  10. 如何部署ASP.NET Core到Linux服务器

    如何部署ASP.NET Core 到Linux服务器 我们开发的最终目的,是将开发后的东西发布网络上,以便自己及其他人使用. 本篇博客介绍如果在 linux 上部署 ASP.NET Core应用,使用 ...