前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >夜莺随笔:监控网络设备(二)

夜莺随笔:监控网络设备(二)

作者头像
IT小白Kasar
发布2022-02-16 18:51:36
4K4
发布2022-02-16 18:51:36
举报
文章被收录于专栏:个人技术随笔个人技术随笔

上篇文章已经初步讲解了 telegraf 通过 snmp plugins 监控网络设备,那么在实际监控工作中,网络设备监控起来相对比较复杂,特别是大型的框式设备,动辄上千条监控项,如果通过一条条写,肯定是不太切合实际的,所以本文将提供自动发现的方式自动创建对应的监控项。

正文

本文环境

  • 夜莺 v5.3
  • telegraf 1.21.3
  • CE6800(华为)

OID 相关信息

本文将对交换机端口的入方向流量&出方向流量进行演示。下表即是个人认为常用的几个监控项,如果有偏差请自行调整。

名称

OID

数据类型

备注

ifName

.1.3.6.1.2.1.31.1.1.1.1

OCTET STRING{(0,255)}

端口名称

ifAlias

.1.3.6.1.2.1.31.1.1.1.18

OCTET STRING{(0,242)}

端口别名

ifOperStatus

.1.3.6.1.2.1.2.2.1.8

INTEGER

端口状态:up(1),down(2)

ifHighSpeed

.1.3.6.1.2.1.31.1.1.1.15

Gauge32

端口当前速率

ifHCInOctets

.1.3.6.1.2.1.31.1.1.1.6

Counter64

入方向流量

ifHCOutOctets

.1.3.6.1.2.1.31.1.1.1.10

Counter64

出方向流量

ifInErrors

.1.3.6.1.2.1.2.2.1.14

Counter32

入方向错包

ifOutErrors

.1.3.6.1.2.1.2.2.1.20

Counter32

出方向错包

ifType

.1.3.6.1.2.1.2.2.1.3

INTEGER

端口类型

ifOutDiscards

.1.3.6.1.2.1.2.2.1.19

Counter32

出口丢包

ifInDiscards

.1.3.6.1.2.1.2.2.1.13

Counter32

入口丢包

监控项制作思路

在做监控项的时候需要两个点,第一个如果来写监控项更清晰,另外一个是方便后面做过滤(过滤会放在下一篇)。什么意思呢? 通过上面的表格得知入方向流量的 OID(ifHCInOctets)为 1.3.6.1.2.1.31.1.1.1.6,通过 snmpwalk 发现有很多监控项。

那么怎么知道哪个是哪个呢?此时还需要查询其他监控项得知,这个 OID 就是端口名称,OID 为 1.3.6.1.2.1.31.1.1.1.1,通过该 OID 查询的结果可以看出端口的名称。

那么这两个得出的结果如何对应呢?细心的朋友可以发现,这两个 OID 对应的结果的最后一位是相同的。例如我们已经知道了 10GE1/0/1 的 OID 是 IF-MIB::ifName.5(1.3.6.1.2.1.31.1.1.1.1.5),接下来将入方向流量的 OID 加上.5 来测试,即可得到如下结果。

到了这里基本就可以确定整个逻辑了,通过上述表格对比,可以发现前缀 1.3.6.1.2.1.2.2(ifTable)和 1.3.6.1.2.1.31.1.1(ifXTable)是相同的,而这些 OID 都是出自于这两个 table 里。那么在写配置的时候该如何选择呢?先用 ifxTable 看看。

telegraf 配置

代码语言:javascript
复制
[global_tags]
[agent]
  interval = "30s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "30s"
  flush_jitter = "0s"
  precision = ""
  hostname = "test"
  omit_hostname = false


[[outputs.opentsdb]]
  host = "http://10.0.0.13"
  port = 19000
  http_batch_size = 50
  http_path = "/opentsdb/put"
  debug = false
  separator = "_"

[[inputs.snmp]]
agents = ["10.240.3.241"]
timeout = "5s"
version = 2 
community = "huawei@123"
agent_host_tag = "ident"
retries = 1

[[inputs.snmp.table]]
oid = "1.3.6.1.2.1.31.1.1"
name = "interface"
inherit_tags = ["source"]
 [[inputs.snmp.table.field]]
 oid = "1.3.6.1.2.1.2.2.1.2"
 name = "port_name"
 is_tag = true
 [[inputs.snmp.table.field]]
 oid = "1.3.6.1.2.1.31.1.1.1.18"
 name = "port_alias"
 is_tag = true
 [[inputs.snmp.table.field]]
 oid = "1.3.6.1.2.1.2.2.1.8"
 name = "port_status"
 is_tag = true
 [[inputs.snmp.table.field]]
 oid = "1.3.6.1.2.1.2.2.1.3"
 name = "port_type"
 is_tag = true

配置测试

代码语言:javascript
复制
telegraf --config /etc/telegraf/telegraf.conf --input-filter snmp --test
test结果正常,配置正确
test结果正常,配置正确

通过上图可以看到有很多无用的监控项,以 Vlanif34 监控项为例。通过下面两图对比可以得出最终获得的监控项是自定义 + ifxTable 里所有的取值。

test 结果截取
test 结果截取
来自华为官网
来自华为官网

重启 telegraf 查看前端效果

这一步仅做演示,实际可以不需要,避免多余的监控项产生

前端的效果就看的比较清楚了,多余的监控项就比较清晰了,那么如何过滤掉多余的监控项呢?

对象视角可以看到的metric
对象视角可以看到的metric
在即时查询里可以输入inter可以进行模糊搜索
在即时查询里可以输入inter可以进行模糊搜索
metic值和标签是正常的
metic值和标签是正常的

可以在 inputs.snmp 里加入 fieldpass 来实现过滤。针对监控项可以加的过滤参数如下:

fieldpass 可以理为匹配该名称监控项才可采集

fielddrop 匹配该名称的监控项不进行采集

添加过滤条件
添加过滤条件
测试效果
测试效果
代码语言:javascript
复制
[global_tags]
[agent]
  interval = "30s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "30s"
  flush_jitter = "0s"
  precision = ""
  hostname = "test"
  omit_hostname = false


[[outputs.opentsdb]]
  host = "http://10.0.0.13"
  port = 19000
  http_batch_size = 50
  http_path = "/opentsdb/put"
  debug = false
  separator = "_"

[[inputs.snmp]]
agents = ["10.240.3.241"]
timeout = "5s"
version = 2 
community = "huawei@123"
agent_host_tag = "ident"
retries = 1
fieldpass = ["ifHCInOctets","ifHCOutOctets"]

[[inputs.snmp.table]]
oid = "1.3.6.1.2.1.31.1.1"
name = "interface"
inherit_tags = ["source"]
 [[inputs.snmp.table.field]]
 oid = "1.3.6.1.2.1.2.2.1.2"
 name = "port_name"
 is_tag = true
 [[inputs.snmp.table.field]]
 oid = "1.3.6.1.2.1.31.1.1.1.18"
 name = "port_alias"
 is_tag = true
 [[inputs.snmp.table.field]]
 oid = "1.3.6.1.2.1.2.2.1.8"
 name = "port_status"
 is_tag = true
 [[inputs.snmp.table.field]]
 oid = "1.3.6.1.2.1.2.2.1.3"
 name = "port_type"
 is_tag = true

最终效果

写在最后

一系列操作下来其实会遇到很多问题,大家在实际操作中就知道了,由于夜莺部分完成监控后,自身出图功能相对较弱,需要借助 grafana 出图,所以还需要考虑变量的设定,这无疑会增加对 label 和 metric 定义的难度,在下一期会出终结篇,会详细讲解

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正文
    • 本文环境
      • OID 相关信息
        • 监控项制作思路
          • telegraf 配置
            • 配置测试
              • 重启 telegraf 查看前端效果
                • 最终效果
                • 写在最后
                相关产品与服务
                Grafana 服务
                Grafana 服务(TencentCloud Managed Service for Grafana,TCMG)是腾讯云基于社区广受欢迎的开源可视化项目 Grafana ,并与 Grafana Lab 合作开发的托管服务。TCMG 为您提供安全、免运维 Grafana 的能力,内建腾讯云多种数据源插件,如 Prometheus 监控服务、容器服务、日志服务 、Graphite 和 InfluxDB 等,最终实现数据的统一可视化。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档