0
点赞
收藏
分享

微信扫一扫

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

圣杰 2023-12-13 阅读 64


夜莺单机版部署

就使用官方推荐的二进制部署:最推荐的方式,稳,升级也方便,使用系统为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交换机设备监控(一)_linux

配置打通

打开夜莺的 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交换机设备监控(一)_数据_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 目录中。

夜莺仪表盘

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

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

举报

相关推荐

0 条评论