Infiniband Exporter

针对 Infiniband 网络 treydock 开发了一个 Infiniband Exporter 来采集 Infiniband 的监控指标,官方仓库是 https://github.com/treydock/infiniband_exporter ,最新版本是 v0.2.0 ,发布于 2021 年7 月 3 日,这是一个新的 Exporter,之前监控 HPC 集群的时候,就差 Infiniband 的监控了。

InfiniBand Exporter 从 InfiniBand 交换机和 HCA 收集指标,好的指标从 /metrics 暴露,包含 InfiniBand Exporter 自身的指标和InfiniBand 的指标。

InfiniBand Exporter 必须在一个主机上运行,该主机在要监控的InfiniBand fabric 上具有活动接口。默认情况下,Exporter 将从连接到运行的主机的 fabric 的所有交换机端口收集监控数据。

IB 诊断工具 ibnetdiscover 和 perfquery 也必须在运行在这个部署 InfiniBand Exporter 的主机上,这些工具可以通过 infiniband-diags 包安装。

安装运行

InfiniBand Exporter 可以用二进制运行,也可以使用容器来运行。

使用二进制运行需要先下载最新的 InfiniBand Exporter ,然后开始第一步,创建运行的账号,可以使用如下命令。

groupadd -r infiniband_exporter
useradd -r -d /var/lib/infiniband_exporter -s /sbin/nologin -M -g infiniband_exporter -M infiniband_exporter

第二步就是解压下载好的 压缩包,将解压出来的 infiniBand_exporter 文件放到 /usr/local/bin/infiniband_exporter

第三步,下载官方提供的 infiniband_exporter.service 文件,并且放到指定的位置,可以就可以使用 SystemD 来启停并且守护进程了。

cp systemd/infiniband_exporter.service /etc/systemd/system/infiniband_exporter.service
systemctl daemon-reload
systemctl start infiniband_exporter

启动好的 InfiniBand Exporter 会在 9315 端口暴露监控数据。

InfiniBand Exporter 也可以使用容器运行,启动方式可以参考如下:

docker run -d -p 9315:9315 \
--name infiniband_exporter \
--cap-add=IPC_LOCK \
--device=/dev/infiniband/umad0 \
treydock/infiniband_exporter

使用

InfiniBand Exporter 可以使用 --collector.<name>--no-collector.<name> 两个参数来打开和关闭相应的采集项。

Name Description Default
switch Collect switch port counters Enabled
hca Collect HCA port counters Disabled

如果你有一个和子网管理器一起使用的节点名字的映射列表文件,可以使用 --ibnetdiscover.node-name-map 参数来使用,这样从交换机的得到的名称会是一个友好的名字,也就是你自己定义的。

如果您有一个通常与子网管理器一起使用的节点名称映射文件,您可以将该文件提供给——ibnetdiscover。node-name-map国旗。这将为交换机使用友好的名称。

如果你希望以非 root 用户的身份运行 Exporter,并且不想使用sudo,你必须让 UMAD 设备对所有用户进行读写操作,如下所示:

$ cat /etc/udev/rules.d/99-ib.rules 
KERNEL=="umad*", NAME="infiniband/%k" MODE="0666"

如果你想使用 sudo 那么使用 --sudo 这个命令行参数就可以。

如果使用 Exporter Rule 作为infiniband_exporter 用户规则,这是是一个 sudo rule 的例子 ,可以根据需要调整 perfquery 和 ibnetdiscover 的路径 。

Defaults:infiniband_exporter !syslog
Defaults:infiniband_exporter !requiretty
infiniband_exporter ALL=(ALL) NOPASSWD: /usr/sbin/ibnetdiscover
infiniband_exporter ALL=(ALL) NOPASSWD: /usr/sbin/perfquery

如果 perfquery 和 ibnetdiscover 的路径不在变量里,那么可以使用 --ibnetdiscover.path--perfquery.path 参数进行指定。

大型结构注意事项

如果您有一个大型 fabric,其中收集时间对 Prometheus 来说太长了,那么 Infiniband Exporter 可以将指标写入一个可以由 Node Exporter 自定义文本文件收集的文件中。

Infiniband Exporter 已经在 109个 交换机上进行了测试,每个交换机大约有36个端口,收集交换机指标需要大约10秒。

Node Exporter 可以使用 --collector.textfile.directory 参数从一个文本文件中收集指标,参数使用方法是 --collector.textfile.directory=/var/lib/node_exporter/textfile_collector.prom 。Infiniband Exporter 可以通过 cron 定时任务和参数将指标输出到文件里,比如:

  • --exporter.runonce
  • --exporter.output=/var/lib/node_exporter/textfile_collector/infiniband_exporter.prom

使用 --collector.switch.rcv-err-details 收集 perfquery 指标相较于采集基础指标会花费很多采集时间,因为需要对每个端口执行一次 perfquery ,收集这些指标的一种方法是 使用 Prometheus 收集 --collector.switch.rcv-err-details 基础指标,并使用如下命令行进行收集。如果机器是 8 核的,那么可以通过 --perfquery.max-concurrent=8 来进行 采集。

  • --exporter.runonce
  • --exporter.output=/var/lib/node_exporter/textfile_collector/infiniband_exporter.prom
  • --no-collector.switch.base-metrics
  • --collector.switch.rcv-err-details
  • --perfquery.max-concurrent=8

小结

Infiniband Exporter 是采集 Infiniband 交换机和网络管理器的监控指标的, Infiniband 网卡的监控指标使用 Node Exporter 打开 Infiniband 指标采集项就可以收集,这样就完成了 Infiniband 监控采集的闭环。

results matching ""

    No results matching ""