首页 > 其他分享 >夜莺开源版对H3C交换机设备监控(一)

夜莺开源版对H3C交换机设备监控(一)

时间:2023-12-13 10:32:28浏览次数:30  
标签:H3C name field oid 夜莺 instances 开源 6.1 table


夜莺单机版部署

就使用官方推荐的二进制部署:最推荐的方式,稳,升级也方便,使用系统为CentOS7.9。

安装前置依赖
# 夜莺架构依赖MySQL
yum -y install mariadb*
systemctl enable mariadb
systemctl restart mariadb
mysql -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('1234');"

# 夜莺架构依赖redis
yum install -y redis
systemctl enable redis
systemctl restart redis

更多安装部署信息细节,查看官方文档。

安装夜莺

可以去

https://flashcat.cloud/download/nightingale/

找最新版本的包,文档里的包地址可能已经不是最新的了

# 创建个 n9e 的目录,后面把 n9e 相关的文件解压到这里
mkdir -p /opt/n9e && cd /opt/n9e

# 下载 n9e 发布包,amd64 是 x84 的包,下载站点也提供 arm64 的包,如果需要其他平台的包则要自行编译了
tarball=n9e-v6.0.1-linux-amd64.tar.gz
urlpath=https://download.flashcat.cloud/${tarball}
wget -q $urlpath || exit 1

# 解压缩发布包
tar zxvf ${tarball}

# 解压缩之后,可以看到 n9e.sql 是建表语句,导入数据库
mysql -uroot -p12344321 < n9e.sql

# 启动 n9e,先使用 nohup 简单测试
nohup ./n9e &> n9e.log &

# 检查 n9e.log 是否有异常日志,检查端口是否在监听,正常应该监听在 17000
ss -tlnp|grep 17000

systemd管理服务

# systemd管理
vim /usr/lib/systemd/system/n9e.service

[Unit]
Descriptinotallow=n9e
After=network.target
[Service]
Type=simple
User=root
ExecStart=/opt/n9e/n9e
WorkingDirectory=/opt/n9e/
Restart=on-failure
[Install]
WantedBy=multi-user.target


#启动、停止n9e服务
systemctl daemon-reload
systemctl start n9e.service
systemctl status n9e.service
systemctl stop n9e.service
#配置开机启动
systemctl enable n9e.service

VictoriaMetrics安装

单机版本部署,集群版本参考官方文档。

# 二进制部署
mkdir /opt/vm && cd /opt/vm
mkdir /opt/vm/victoria

wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.95.1/victoria-metrics-linux-amd64-v1.95.1.tar.gz

tar -zxvf victoria-metrics-linux-amd64-v1.95.1.tar.gz

systemd管理服务

vim /usr/lib/systemd/system/victoria-metrics-prod.service

[Unit]
Descriptinotallow=For Victoria-metrics-prod Service
After=network.target

[Service]
ExecStart=/opt/vm/victoria-metrics-prod -httpListenAddr=0.0.0.0:8428 -storageDataPath=/opt/vm/victoria -retentinotallow=3

[Install]
WantedBy=multi-user.target


systemctl daemon-reload
systemctl enable victoria-metrics-prod.service
systemctl restart victoria-metrics-prod.service
systemctl status victoria-metrics-prod.service

单机版本的 VictoriaMetrics 监听在 8428 端口。通过浏览器访问 VictoriaMetrics 的 8428,理论上可以看到下面的页面:

夜莺开源版对H3C交换机设备监控(一)_数据

配置打通

打开夜莺的 etc/config.toml 配置,找到 HTTP.APIForAgent 部分,默认配置如下:

[HTTP.APIForAgent]
Enable = true

这个表示:开启夜莺的监控数据接收类的 API,默认就是开启的,所以,默认配置就够了,不用动。

[Pushgw]
LabelRewrite = true

[[Pushgw.Writers]]
Url = "http://127.0.0.1:8428/api/v1/write"

另一个要修改的配置是 Pushgw.Writers 部分,把 VictoriaMetrics 的 remote write 地址配置上,由于我把VictoriaMetrics时序库部署在本机,如果你是单独部署,需要修改对应的IP地址和端口。

如果MySQL和redis也是单独部署的,还需要修改下[Redis][DB]

打通夜莺和 VictoriaMetrics

打开Web管理页面,http://IP:17000,这里我的地址为:http://172.17.40.16:17000

配置 Prometheus 数据源,在夜莺里配置一个 VictoriaMetrics 的数据源,比如我的配置:

夜莺开源版对H3C交换机设备监控(一)_3c_02

夜莺开源版对H3C交换机设备监控(一)_3c_03

特别注意:Remote Write URL和Remote Read URL的API接口地址改为自己的IP地址和端口

http://127.0.0.1:8428/api/v1/write
http://127.0.0.1:8428/api/v1/read

部署 categraf 上报监控数据

直接下载安装包,二进制安装部署。

# 下载二进制安装包
wget https://download.flashcat.cloud/categraf-v0.3.39-linux-amd64.tar.gz

# 修改目录名称
mv categraf-v0.3.38-linux-amd64 categraf

# 以service方式安装, 相当于添加service文件+systemctl daemon-reload
sudo ./categraf  --install

# 以service方式卸载, 相当于systemctl stop categraf + 删除service文件
sudo ./categraf  --remove

# 以service方式停止categraf,相当于systemctl stop categraf
sudo ./categraf  --stop

# 以service方式查看categraf,相当于systemctl status categraf
sudo ./categraf  --status
categraf全局配置

配置夜莺心跳,全局配置文件 categraf/conf/config.toml

[heartbeat]
enable = true
url = "http://172.17.40.16:17000/v1/n9e/heartbeat"

配置夜莺的 remote write 协议的数据接收地址

[[writers]]
url = "http://172.17.40.16:17000/prometheus/v1/write"

snmp插件配置

上面都是针对夜莺和categraf的安装部署以及联动配置,还未涉及到针对网络设备的采集和数据上报,现在我们通过categraf中集成的插件snmp,通过配置对snmp的配置采集网络设备(交换机)的数据。

进入配置文件路径:categraf/conf/input.snmp/

编辑 snmp.toml 配置文件,针对华三交换机的配置信息如何,适配华三Comware V5和V7,V9暂未测试,原则上默认适配。

interval = 10

[[instances]]
agents = [
    "udp://192.168.1.1",
    "udp://192.168.1.2",
    "udp://192.168.1.3",
    "udp://192.168.1.4",
    "udp://192.168.1.5",
]

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

# 每个请求的超时时间
timeout = "5s"
# SNMP Agent的版本
version = 2
# SNMP团体名
community = "dfkj_123"
# mib库文件路径 要在使用 netsnmp 进行转换时添加路径,请使用 MIBDIRS 环境变量
# 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$", "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:(T|t)emperature.*(sensor|SENSOR)|(Fabric|FABRIC) (.+) (Module|MODULE)|^(MODULE|Module) (LEVEL|level)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"

# 设备堆叠数量 hh3cStackMemberNum
[[instances.field]]
oid = "1.3.6.1.4.1.25506.2.91.1.2.0"
name = "h3c_stack_membernum"

# 设备堆叠拓扑 hh3cStackTopology ring 2 chain 1
[[instances.field]]
oid = "1.3.6.1.4.1.25506.2.91.1.7.0"
name = "h3c_stack_topology"

把 snmp.toml 放入 categraf/conf/input.snmp/ 目录中。

重启categraf:systemctl restart categraf.service

关于mib库文件,由于默认读取的mib库文件在 /usr/share/snmp/mibs中,如果有某些自定义的oid无法采集或者报错,确定下oid是否是私有mib,如果是的话,建议把mib文件导入到 /usr/share/snmp/mibs 目录中。

夜莺仪表盘

针对华三交换机的监控,数据已经完成采集上报,并且单独做了个仪表盘。

后面分享下夜莺的告警规则和告警媒介配置,同时分享下华三无线网络的监控。

标签:H3C,name,field,oid,夜莺,instances,开源,6.1,table
From: https://blog.51cto.com/u_64214/8798769

相关文章

  • 开源机器学习版本的Github:Hugging Face
    参考:https://baijiahao.baidu.com/s?id=1776478347325976510https://zhuanlan.zhihu.com/p/535100411 ===============================   ......
  • 42K+ star!开源Notion 平替笔记推荐
    IT咖啡馆,探索无限可能!恭喜你发现了这个宝藏,这里你会发现优质的开源项目、IT知识和有趣的内容。今天我们来推荐一款在GitHub超过43KStar的开源项目:AppFlowy。提到笔记和知识管理,很多人都会想到大名鼎鼎的Notion,无论是项目管理、笔记整理,还是团队合作,Notion都以直观、灵活的界面满......
  • 开源的linux可视化管理项目-1panel面板
    推荐一款开源的linux可视化管理项目,运维效率翻倍原创 小羊架构 小羊架构 2023-12-0316:19 发表于广东收录于合集#linux3个#开源5个#编程9个#IT16个#互联网17个  你好呀,我是小羊。linux是个非常好的开源操作系统,功能强大,使用也非常广泛,唯一的缺点就是上手有点难......
  • 【开源项目推荐】-支持GPT的智能数据库客户端与报表工具——Chat2DB
    2023年是人工智能爆火的一年,ChatGPT为首的一系列的大模型的出现,让生成式人工智能彻底火了一把。但有人会说,GPT对于我们数据开发来说并没有什么作用啊?今天为大家推荐的开源项目,就是GPT在数据领域的一个优秀实践项目。让我们一起来看看吧~Chat2DB是一个集成了ChatGPT功能的数据库S......
  • Databend 开源周报第 123 期
    Databend是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn。What'sOnInDatabend探索Databend本周新进展,遇到更贴近你心意的Databend。支持统计和显示合并状态Databend现在支持统计和显示ME......
  • C#开源克隆类库DeepCloner的功能、优点与妙用
    在开发过程中有时候我们需要对现有对象进行克隆,我们可以使用DeepCloner类库来完成这个需求功能。DeepCloner类库功能:深度克隆: DeepCloner提供深度克隆对象的能力,递归地克隆对象图中的所有引用类型属性。循环引用处理: 能够处理对象图中的循环引用,防止无限递归。自定义克......
  • 一个适用于搭建企业内部培训平台的开源系统
    大家好,我是Java陈序员。问君能有几多愁,唯有开源项目解千愁!最近领导给了个任务,搭建一个企业内部培训平台!好不容易刚完成上个任务,又来一个活,这不又得加班了!还好,之前逛GitHub的时候,发现了一个项目,完美适用!马上就部署给领导看,领导直夸这效率杠杠的!今天顺便把这个开源项目介绍给......
  • 关于开源项目QGIS源码的分析
    QGIS地址:https://github.com/qgis/QGIS#1-flexible-and-powerful-spatial-data-managementQGIS是一个开源的地理信息系统(GIS)软件项目。采用的技术栈QGIS的主要技术栈涵盖了多个领域,包括图形用户界面,地理信息数据处理、数据库集成以及插件开发QT:QGIS的图形用户界面采用Q......
  • 关于 Mumble开源语音聊天软件项目的的分析
    开源地址https://github.com/mumble-voip/mumbleMumbleMumble:语音通信软件低延迟、高质量低延迟通信C/S(Client/Server)跨平台(跨风俗来运行)Opus音频编码器SSL/TLS加密源码整体结构分析mumble/src/client.ts用于本地化(翻译)的内容由外部服务处理......
  • 国际水稻所为你提供了一套免费开源的表型育种数据分析流程
    背景每年国际水稻所(IRRI)的雨养稻育种(RainfedRiceBreeding,RRB;所谓雨养就是无人工灌溉,仅靠自然降水作为水分来源)计划都会与区域合作伙伴共享耐旱、耐盐、耐热和耐淹的育种种质进行表型评估,从不同地点的几项试验中获得原始表型数据。例如,RRB在2019年从NARES合作伙伴那里收到了大......