目录
一、环境准备
1.1 验证IB网卡工具
首先确认节点已安装Mellanox InfiniBand网卡驱动及管理工具,执行以下命令验证硬件计数器功能:
# 查看mlx5_0端口的硬件计数器
show_counters mlx5_0
# 预期输出示例(关键指标说明):
Port 1 hw counters:
out_of_sequence: 129759255 # 序列号异常包计数
packet_seq_err: 131851200 # 数据包序列错误
roce_adp_retrans: 3397922 # ROCE协议自适应重传次数
rx_read_requests: 306715884 # 接收的Read请求数
rx_write_requests: 1192749531 # 接收的Write请求数
二、指标采集实现
2.1 指标暴露脚本
创建Python采集服务(建议保存为ib_metrics_exporter.py
):
import time
from prometheus_client import Gauge, start_http_server
import subprocess
class IBMetricsCollector:
def __init__(self, port=8006):
self.metric = Gauge('ib_hw_counters',
'InfiniBand Hardware Counters',
['ib_device', 'counter_name'])
start_http_server(port)
def collect_metrics(self, devices):
"""采集指定IB设备的指标"""
while True:
self.metric.clear()
for dev in devices:
self._get_single_device_metrics(dev)
time.sleep(15)
def _get_single_device_metrics(self, device):
try:
output = subprocess.check_output(
['show_counters', device],
stderr=subprocess.STDOUT,
universal_newlines=True
)
for line in output.strip().split('\n'):
if ':' in line:
name, value = line.split(':', 1)
if value.strip().isdigit():
self.metric.labels(
ib_device=device,
counter_name=name.strip()
).set(int(value.strip()))
except Exception as e:
print(f"Error collecting {device}: {str(e)}")
if __name__ == '__main__':
# 监控4个IB设备(根据实际设备数量调整)
collector = IBMetricsCollector(port=8006)
collector.collect_metrics([f"mlx5_{i}" for i in range(4)])
2.2 服务部署
# 安装依赖
pip install prometheus-client
# 后台运行服务(建议使用systemd托管)
nohup python ib_metrics_exporter.py > exporter.log 2>&1 &
三、监控系统配置
3.1 Prometheus配置
修改prometheus.yml
添加抓取任务:
scrape_configs:
- job_name: 'ib_metrics'
scrape_interval: 15s
static_configs:
- targets:
- 192.168.1.5:8006 # 节点1
- 192.168.1.6:8006 # 节点2
labels:
cluster: HPC_Cluster # 自定义集群标识
3.2 配置验证
# 重启Prometheus服务
systemctl restart prometheus
# 检查Target状态(应显示UP状态)
http://localhost:9090/targets
四、数据可视化
4.1 Grafana配置
添加Prometheus数据源
- URL:
http://prometheus-server:9090
- Auth: 根据实际情况配置
- URL:
创建监控看板
# 重传率计算 rate(ib_hw_counters{counter_name="roce_adp_retrans"}[5m]) / rate(ib_hw_counters{counter_name="rx_write_requests"}[5m])
推荐可视化组件:
- Time series: 时序趋势分析
- Stat:关键指标实时值
- Heatmap:错误分布分析
五、应用场景
本方案可有效监控:
- 网络重传率异常
- 数据包序列错误
- 远程直接内存访问(RDMA)性能
- 网络拥塞检测
- 硬件级故障预警
最佳实践建议:
- 设置关键指标的阈值告警(如重传率>0.1%)
- 定期归档历史数据用于性能分析
- 结合节点级指标(CPU/内存)进行关联分析
- 对不同IB端口进行对比监控
通过本方案,运维团队可以实现:
- 实时掌握IB网络健康状态
- 快速定位硬件层问题
- 历史性能趋势分析
- 容量规划数据支持