夜莺单机版部署
就使用官方推荐的二进制部署:最推荐的方式,稳,升级也方便,使用系统为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,理论上可以看到下面的页面:
配置打通
打开夜莺的 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 的数据源,比如我的配置:
特别注意: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