网络监控:无线监控这个面板好养眼

网络小斐 2024年4月19日

编者荐语: 本文是社区用户写的文章,通过 Categraf 的 SNMP 插件给网络监控提供了一个新的选择,转给大家参考。

大家好,我是小斐呀。

上一篇介绍了关于网络监控领域更换新架构,把之前 SNMP Exporter + Prometheus + Grafana 替换为 Categraf + VictoriaMetrics + Grafana 的架构,展开了对华三交换机的监控和和仪表板说明,接下来我将以华三无线设备的监控为案例,针对新架构做一个微调。

20240419161643

等于 vmagent 提供了 remote write 协议,同时有可以主动抓取数据,兼容各种其他数据协议 push/pull 协议,如下图架构所示:

20240419162724

综上所述,可以发现 vmagent 可以主动去客户端采集器中拉数据,也可以接受客户端主动推数据到 vmagent ,支持对 Prometheus 配置的读取(只支持 global 和 scrape_configs ),并支持标签重置和添加全局标签,并且在把数据写入 VictoriaMetrics 时候,如果 vmagent 和 VictoriaMetrics 断联可临时缓冲并把数据持久化到本地。

安装部署

在此还是以二进制单实例本地化部署为案例,忽略 docker 和 k8S ,后续在星球中提供以集群版方式在 k8S 中部署,如果觉得本地化部署麻烦,可以通过 docker compose 部署,二进制部署资源对象如下所示:

对象 IP 规格
vmagent和VictoriaMetrics 172.17.40.139 4C 8G
Categraf 172.17.40.142 4C 8G
Grafana 172.17.40.5 4C 8G

部署顺序如下:Categraf -> VictoriaMetrics -> vmagent -> Grafana ,实际生产环境中建议 Categraf 单独使用一台机器部署,主要作为数据采集客户端,其他组件都可根据实际情况做部署架构的调整,关于磁盘规格,可通过官方提供的计算公式算出需要多大的磁盘,一般情况下都是预估并动态扩容磁盘。

Categraf 环境部署

sudo mkdir -pv /opt/categraf
# 下载
sudo curl -L -o categraf-v0.3.58-linux-amd64.tar.gz https://github.com/flashcatcloud/categraf/releases/download/v0.3.58/categraf-v0.3.58-linux-amd64.tar.gz
sudo tar -xzvf categraf-v0.3.58-linux-amd64.tar.gz -C /opt/categraf --strip-components=1

# 新建mibs目录和对应目录品牌 更多其他品牌mib目录自行根据需要新建
sudo mkdir -pv /opt/categraf/mibs
sudo mkdir -pv /opt/categraf/mibs/huawei
sudo mkdir -pv /opt/categraf/mibs/h3c
sudo mkdir -pv /opt/categraf/mibs/sangfor

# 上传对应品牌的mib文件到对应品牌目录 这里选择使用rz命令上传zip压缩包
sudo apt-get install unzip
sudo rz

# 二进制部署配置categraf.service
sudo mv /opt/categraf/conf/categraf.service /etc/systemd/system/

[Unit]
Description="Categraf"
After=network.target

[Service]
Type=simple
ExecStart=/opt/categraf/categraf
WorkingDirectory=/opt/categraf
Restart=on-failure
SuccessExitStatus=0
LimitNOFILE=65536
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=categraf

[Install]
WantedBy=multi-user.target

# 配置生效
sudo systemctl daemon-reload
sudo systemctl enable categraf.service
sudo systemctl start categraf.service
sudo systemctl status categraf.service
sudo systemctl stop categraf.service
sudo systemctl restart categraf.service

# 配置全局 config.toml 把Categraf采集的数据推到vmagent中
[[writers]]
url = "http://172.17.40.139:8429/api/v1/write"

# 心跳上报给n9e
[heartbeat]
enable = false

# 配置 /opt/categraf/conf/input.snmp 目录中的SNMP设备采集配置文件
# 完整采集配置文件星球提供

# netsnmp永久环境变量
sudo vim /etc/systemd/system/categraf.service
# 在Service下添加Environment
[Service]
Environment="MIBDIRS=/opt/categraf/mibs/h3c/public:/opt/categraf/mibs/h3c/private"
# systemd配置生效
sudo systemctl daemon-reload

# 系统安装netsnmp依赖和工具
sudo apt-get install snmp libsnmp-dev
# 切换到root下操作测试
# netsnmp临时环境变量
export MIBDIRS="/opt/categraf/mibs/h3c/public:/opt/categraf/mibs/h3c/private"
# 执行categraf命令测试采集snmp
/opt/categraf/categraf --test --inputs snmp

VictoriaMetrics 和 vmagent 环境部署

VictoriaMetrics 和 vmagent 都写好了脚本,直接通过脚本部署即可,部署完成可直接通过 systemd 服务查看相关服务进程状态信息:

# 部署VictoriaMetrics
wget https://raw.githubusercontent.com/robotneo/networkdevice-monitor/main/victoriametrics/victoriametrics/install-vmsingle.sh && chmod +x install-vmsingle.sh && bash install-vmsingle.sh

# 部署vmagent
wget https://raw.githubusercontent.com/robotneo/networkdevice-monitor/main/victoriametrics/vmagent/install-vmagent.sh && chmod +x install-vmagent.sh && bash install-vmagent.sh

上面脚本部署 VictoriaMetrics 和 vmagent 启动参数配置文件目录固定在 /etc/victoriametrics 目录下,数据存储目录在:/var/lib 目录下建立了对应的目录。 启动完成后,可以在浏览器中打开对应的服务,VictoriaMetrics 服务的端口为 8428 , vmagent 服务的端口为 8429 ,服务中分别都提供了一些有用的端点,比如 VictoriaMetrics 中的 vmui 以及两者都提供的 targets ,其中编辑 vmagent 的抓取配置文件,即可实现在 targets 中查看抓取的目标状态情况,打开 /etc/victoriametrics/vmagent/scrape.yml 文件,添加两个抓取任务,分别是 vmagent 和 VictoriaMetrics 指标数据,如下所示:

global:
  scrape_interval: 10s
  scrape_timeout: 30s

scrape_configs:
  - job_name: 'vmagent'
    static_configs:
      - targets: ['172.17.40.139:8429']
  - job_name: victoriametrics
    static_configs:
      - targets:
        - http://172.17.40.139:8428/metrics

浏览器中打开 vmagent 服务:http://172.17.40.139:8429/ ,可以看到如下所示: 20240419163812 点击 targets 可以看到抓取到的任务目标是 up 的状态,如下所示: 20240419163844 接下来我们到 VictoriaMetrics 的 vmui 中查看抓取到的任务目标的数据是否有相关指标,如果有指标说明整个链路已跑通,打开 http://172.17.40.139:8428/vmui 查看指标数据: 20240419164034 从上图查询来看 VictoriaMetrics 和 vmui 的指标都可以查询到,故整个链路和采集任务都是正常的状态。 Grafana 部署请看前面一篇文章案例,根据该文章说明部署即可。 可以去开源项目中使用 docker compose 快速部署 vmagent + VictoriaMetrics + Grafana 环境。

配置采集

回归正题,上面的采集更多的是 pull 方式,使用 vmagent 去对接各种 exporter 采集器就可以替换 Prometheus ,但现在的 Categraf 采集网络设备指标,而 Categraf 对接 vmagent 不支持 pull 方式,只能采用 push 方式,而接下来就需要针对华三无线设备的指标做配置采集,Categraf 支持 remote write 协议,而我们可以使用 remote write 协议把采集的指标数据 push 到 vmagent 中,请看下面的配置:

# 修改Categraf全局配置文件 config.toml url参数修改为8429端口服务 也就是vmagent服务
[[writers]]
url = "http://172.17.40.139:8429/api/v1/write"
...

# vmagent参数配置 /etc/victoriametrics/vmagent/vmagent.conf
# 监听地址和端
-httpListenAddr=:8429
# 抓取任务配置文件
-promscrape.config=/etc/victoriametrics/vmagent/scrape.yml
# 远程写入时序数据库API地址
-remoteWrite.url=http://172.17.40.139:8428/api/v1/write
# vmagent临时缓冲数据保存路径 如果发现远程时序数据库不可用 可把数据持久化保存到该目录
-remoteWrite.tmpDataPath=/var/lib/vmagent-remotewrite-data
# 抑制抓取错误日志淹没其他日志信息
-promscrape.suppressScrapeErrors

# VictoriaMetrics参数配置
# 数据保存路径
-storageDataPath=/var/lib/victoria-metrics-data
# 数据保留周期
-retentionPeriod=90d
# 监听地址和端口
-httpListenAddr=:8428

当上面配置完成后就可以开始编写 Categraf 中 SNMP 插件配置文件,这里以华三无线设备为案例编写采集配置文件:snmp_h3c_wireless.toml ,在编写之前希望你能看下上篇文章中关于 gosmi 和 netsnmp 这两个转换处理 mib 文件的工具如何使用,可参考前篇 —— 网络监控:交换机监控新姿势 简单展示下关于 snmp_h3c_wireless.toml 配置文件信息,具体采集配置如下所示,列出部分配置信息,简单配置如下:

interval = 10

# H3C AC信息采集
[[instances]]
agents = [
    "udp://192.168.100.100",
]

# metrics_name_prefix = "h3c_"

interval_times = 3
labels = { region = "beijing", role = "wireless", brand = "h3c" }

# 每个请求的超时时间
timeout = "5s"
# SNMP Agent的版本
version = 2
# SNMP团体名
community = "dfkj_123"
# mib库文件路径 要在使用 netsnmp 进行转换时添加路径,请使用 MIBDIRS 环境变量
path = ["/opt/categraf/mibs"]
translator = "gosmi"
# 代理主机标签
agent_host_tag = "device_ip"
# 尝试的重试次数
retries = 3
# GETBULK 每次获取的最大对象数 如果指标越多 建议数值越大 可加速采集时间
max_repetitions = 50

# 系统启动时间
[[instances.field]]
oid = "1.3.6.1.2.1.1.3.0"
name = "uptime"
...
[[instances.table.field]]
oid = "IF-MIB::ifSpeed"
name = "ifSpeed"
is_tag = true
...
[[instances.table]]
name = "system"
index_as_tag = true
filters = ["exprA:ent_descr:^(MODULE|Module) (LEVEL|level)1 (SLOT|slot)1$", "exprB:ent_name:.*", "exprC:cpu_usage:.*"]
filters_expression = "exprA && exprB && exprC"
...
[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APACAssociateStatus2"
name = "associate_status"

[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11APMemRTUsage2"
name = "mem_usage"

[[instances.table.field]]
oid = "HH3C-DOT11-APMT-MIB::hh3cDot11Channel"
name = "channel"
...

当完成华三无线设备采集配置文件后,把该 snmp_h3c_wireless.toml 采集配置文件放入 Categraf 的 SNMP 插件目录 input.snmp 中即可。 到 VMUI 界面中验证华三无线设备的指标数据,查看相关指标数据是否都写入到 VictoriaMetrics 时序数据库中,如下所示: 20240419164439 上图所示,已完成指标采集,数据验证就自行查看各指标是否符合需求和画图。

数据可视化

当把采集配置已完成编写后,接下来到 Grafana 中配置数据源和编写仪表板。如下所示,添加 Prometheus 数据源,填写 VictoriaMetrics 地址,如下所示基于 单节点 VictoriaMetrics 的 Prometheus server URL 的地址。 20240419164549 数据源完成后就是编写仪表板,对监控数据做可视化,在网络领域网上分享的仪表板感觉让甲方非常不满意,不能亮瞎甲方的钛合金狗眼,故我这边提供了关于华三的交换机和无线设备的仪表板,如下所示: 20240419164642 20240419164710 20240419164738 20240419164806 如果你的AP有1000个,在 Grafana 中为了更好的性能和数据渲染,建议对表格数据做分页查询,以提高 Grafana 中大型表格数据加载速度。

开源版
Flashcat
Flashduty