AsterNOS监控方案
1 AsterNOS监控方案
1.1 方案概述
本文档将简要介绍AsterNOS监控方案及其各组件功能,并完成对Asterfusion CX-N系列超低时延云交换机的配置和数据采集。
1.2 整体逻辑方案图
1.3 各组件功能
- Alertmanager:主要用于接收Prometheus发送的告警信息,并及时地将告警信息发送到PrometheusAlert进行转发。
- PrometheusAlert:运营告警中心消息转发系统,支持主流的监控系统Prometheus以及所有支持WebHook接口的系统发出的预警信息,支持将收到的信息通过WeChat、Mail、飞书、短信等渠道推送。
- Grafana:是一个开源的监控数据分析和可视化套件,最常用于对基础设施和应用数据分析的时间序列数据进行可视化分析。
- Prometheus:Prometheus是一个开源的系统监控和报警系统,同时支持多种Exporter采集数据,Prometheus性能足够支撑上万台规模的集群。
- SNMP Exporter:通过SNMP协议中用不同的OID区分不同的状态数据,OID非常类似于Prometheus中的指标的概念,SNMP Exporter通过从Agent查询指定的OID数据,同时将数据映射到可读的指标上,实现SNMP数据到Prometheus指标的转换,大部分场景下用户无需额外配置即可将OID转换为可读的指标数据。
- Node Exporter:多用于收集内核公开的硬件或操作系统指标,监控设备的CPU、内存、磁盘、I/O等信息。
2 组网方案
2.1 软硬件信息
名称 | 版本 | 备注 |
监控节点 | CPU:48 Cores 内存:128 GB | Prometheus、Alertmanager Grafana |
服务器系统 | CentOS Linux release 7.9.2009 (Core) | |
AsterNOS | AsterNOS Version 3.1 R0402P02 | |
Prometheus | prom/prometheus:v2.37.0 | |
Alertmanager | quay.io/prometheus/alertmanager | |
Grafana | grafana/grafana-oss:9.0.6 | |
Node Exporter | Node Exporter:v0.3.0 | SONiC Node Exporter |
SNMP Exporter | SNMP Exporter:0.24.1 |
2.2 监控系统规划
主机名 | 节点IP | 节点角色 |
监控节点 | 管理口:10.240.5.223 Promehteus:9090 Alertmanager:9093 Grafana:3000 PrometheusAlert:8080 | Prometheus、Alertmanager、Grafana、PrometheusAlert |
AsterNOS | 管理口:10.230.1.10 Node Exporter:9100 SNMP Exporter:9116 | Node Exporter、SNMP Exporter |
3 监控组件部署
3.1 Node Exporter
在每台被监控交换机上部署Node Exporter,用于收集内核公开的硬件或操作系统指标,监控交换机的CPU、内存、磁盘、I/O等信息。Node Exporter监听本地9100端口。
root@sonic:~# version=$(curl -s https://api.github.com/repos/kamelnetworks/sonic_exporter/releases | jq '.[0].name' -r)
root@sonic:~# sonic-package-manager install \
--from-repository "ghcr.io/kamelnetworks/sonic_exporter:${version}" \
--enable
root@sonic:~# config feature state sonic_exporter enabled
root@sonic:~# config sonic-exporter port 9100
root@sonic:~# netstat -nlp |grep 9100
Docker方式安装:
root@sonic:~# docker run -d --net=host \
-v /run/redis/:/var/run/redis/ \
--name roce_exporter sonic_exporter:0.3.0
3.1.1 Node Exporter Metrics
浏览器访问设备的9100端口,查看采集的数据。
3.1.2 Node Exporter 自定义监控
通过Node Exporter的Textfile插件完成自定义监控,自定义脚本并把内容以Key:value的方式写入以.prom结尾的文件,定时任务执行自定义脚本,添加启动参数,Node Exporter采集数据。
root@sonic:~# ./node_exporter \
--collector.textfile.directory='/home/admin/Prometheus/’
root@sonic:~# cat /home/admin/Prometheus/asternos.prom
#HELP example_metric read from /path/example.prom
#TYPE example_metric guage
example_metric 1
3.2 SNMP Exporter数据转换
在每台被监控交换机上部署SNMP Exporter,SNMP Exporter通过Agent查询指定的OID数据,同时将数据映射到可读的指标上,实现SNMP数据到Prometheus指标的转换,完成监控私有数据开发。SNMP Exporter监听本地9116端口。SNMP Exporter文件下载地址:https://github.com/prometheus/snmp_exporter/releases/download/v0.24.1/snmp_exporter-0.24.1.freebsd-amd64.tar.gz
SNMP完整配置文件:
root@sonic:~# tar -xvf snmp_exporter-0.24.1.linux-amd64.tar.gz
root@sonic:~# cd snmp_exporter-0.24.1.linux-amd64
root@sonic:~/snmp_exporter-0.24.1.linux-amd64# cat snmp.yml
auths:
public_v2:
community: public
security_level: noAuthNoPriv
auth_protocol: MD5
priv_protocol: DES
version: 2
modules:
AsterNOS:
walk:
- 1.3.6.1.2.1.2
- 1.3.6.1.2.1.31.1.1
get:
- 1.3.6.1.2.1.1.1.0
metrics:
- name: asterSysRunTime
oid: 1.3.6.1.4.1.56928.25.1.1
type: gauge
help: AsterNOS CX-N switch Device operating time
- name: asterPortHighSpeed
oid: 1.3.6.1.2.1.31.1.1.1.15
type: gauge
help: AsterNOS CX-N Port negotiation Speed
indexes:
- labelname: asterPortIndex
type: gauge
lookups:
- labels:
- asterPortIndex
labelname: asterPortAlias
oid: 1.3.6.1.2.1.31.1.1.1.18
type: DisplayString
- labels:
- asterPortIndex
labelname: asterPortDescr
oid: 1.3.6.1.2.1.2.2.1.2
type: DisplayString
root@sonic:~/snmp_exporter-0.24.1.linux-amd64# ./snmp_exporter &
3.2.1 SNMP Exporter Metrics
浏览器访问设备的9116端口,查看采集的数据。Moudle:AsterNOS。
3.2.2 SNMP Exporter Metrics(Docker)
Docker方式安装SNMP Exporter
root@sonic:~# docker load < snmp.tar
root@sonic:~# docker run -d \
-v /home/admin/snmp.yml:/etc/snmp_exporter/snmp.yml \
--net=host --name snmp_exporter prom/snmp-exporter:v0.24.1
3.3 监控报警推送
3.3.1 Alertmanager
在监控节点部署Alertmanager,主要用于接收Prometheus发送的告警信息,并及时地将告警转发到ProtmetheusAlert。
[root@computer1 prometheus] docker run --name alertmanager \
-v ~/prometheus/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
-d -p 0.0.0.0:9093:9093 quay.io/prometheus/alertmanager
[root@computer1 prometheus] cat alertmanager.yml
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 5m
repeat_interval: 1h
receiver: 'web.hook'
receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://127.0.0.1:5001/'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
3.3.2 PrometheusAlert
在监控节点部署PrometheusAlert,主要用于接收Alertmanager转发的告警信息,并及时地通过WeChat、Email、飞书和短信等渠道发送告警通知。
[root@computer1 prometheus] docker run -d -p 8080:8080 -v \ ~/prometheus/app.conf:/app/conf/app.conf \
--name prometheusalert feiyu563/prometheus-alert:latest
[root@computer1 prometheus] cat app.conf
appname = PrometheusAlert
#登录用户名
login_user=root
#登录密码
login_password=tera123
#监听地址
httpaddr = "0.0.0.0"
#监听端口
httpport = 8080
runmode = dev
#开启JSON请求
copyrequestbody = true
#告警消息标题
title=PrometheusAlert
#日志文件路径
logpath=logs/prometheusalertcenter.log
3.3.3 对接Email报警
[root@computer1 prometheus]# cat alertmanager.yml
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 5m
repeat_interval: 1h
receiver: 'AlertManager_Email'
receivers:
- name: 'AlertManager_Email'
webhook_configs:
- url: 'http://10.240.5.223:8080/prometheusalert?type=email&tpl=prometheus-email&email='
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
[root@computer1 prometheus]# cat app.conf
#---------------------↓邮件配置-----------------------
#是否开启邮件
open-email=1
#邮件发件服务器地址
Email_host=smtp.qq.com
#邮件发件服务器端口
Email_port=465
#邮件帐号
Email_user=
#邮件密码
Email_password=
#邮件标题
Email_title=AsterNOS告警
#默认发送邮箱
Default_emails=
报警信息:
3.3.4 对接飞书报警
[root@computer1 prometheus]# cat alertmanager.yml
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 5m
repeat_interval: 1h
receiver: 'AlertManager_Feishu'
receivers:
- name: 'AlertManager_Feishu'
webhook_configs:
- url: 'http://10.240.5.223:8080/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=https://open.feishu.cn/open-apis/bot/v2/hook/41078fb9-c716-434f-9ca4-d8ba64caa7ea'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
[root@computer1 prometheus]# cat app.conf
#---------------------↓全局配置-----------------------
appname = PrometheusAlert
#登录用户名
login_user=root
#登录密码
login_password=tera123
#监听地址
httpaddr = "0.0.0.0"
#监听端口
httpport = 8080
runmode = dev
#设置代理 proxy = http://123.123.123.123:8080
proxy =
#开启JSON请求
copyrequestbody = true
#告警消息标题
title=PrometheusAlert
#日志文件路径
logpath=logs/prometheusalertcenter.log
#是否开启飞书告警通道,可同时开始多个通道0为关闭,1为开启
open-feishu=1
#默认飞书机器人地址
fsurl=https://open.feishu.cn/open-apis/bot/v2/hook/41078fb9-c716-434f-9ca4-d8ba64caa7ea
报警信息:
3.4 Prometheus
在监控节点部署Prometheus,用于存储Exporter采集的数据,同时提供数据检索和报警推送等功能。
[root@computer1 prometheus] docker run -d -p 9090:9090 -v \ ~/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
--name prometheus prom/prometheus:v2.37.0
[root@computer1 prometheus] cat prometheus.yml
scrape_configs:
- job_name: "node-exporter"
static_configs:
- targets: ["10.230.1.10:9100"]
- job_name: "snmp-exporter"
static_configs:
- targets:
- 10.230.1.10
metrics_path: /snmp
params:
auth: [public_v2]
module: [AsterNOS]
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 10.230.1.10:9116
alerting:
alertmanagers:
- static_configs:
- targets:
- 10.240.5.223:9093
rule_files:
- "AsterNOS_rules.yml"
[root@computer1 prometheus] cat AsterNOS_rules.yml
groups:
- name: "CXN_node"
rules:
- alert: "CPU高负载警告"
expr: ((1-(node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100)>90
for: 3m
labels:
severity: critical
annotations:
summary: "实例 {{ $labels.instance }} 的CPU使用率过高"
description: "此设备的CPU使用率已超过阈值,当前值: {{ $value }}%。此问题会导致系统中各个服务假死、断连,甚至是服务器宕机,请管理员务必及时处理!"
3.4.1 Prometheus Metrics Explorer
浏览器访问监控节点的9090端口,查看Prometheus采集到的数据。
3.5 Grafana
在监控节点部署Grafana,用于对基础设施和应用数据分析的时间序列数据进行可视化分析。
[root@computer1 prometheus] docker run -d -p 3000:3000 \
--name grafana grafana/grafana-oss:9.0.6
3.5.1 Grafana Login
浏览器访问监控节点的3000端口访问Grafana登录页面,默认用户名密码admin/admin。
3.5.2 配置数据源
在Grafana管理面板上添加Prometheus数据源。
3.5.3 监控大屏
在Grafana管理面板上导入AsterNOS监控配置文件。AsterNOS监控大屏文件: