昇腾社区首页
中文
注册
开发者
下载
基于NPU-Exporter的推理服务器运维监控平台参考实践

基于NPU-Exporter的推理服务器运维监控平台参考实践

运维管理

发表于 2025/12/17

非商用说明

该文档提供的内容为参考实践,仅供用户参考使用,用户可参考实践文档构建自己的软件,按需进行安全、可靠性加固,但不建议直接将相关Demo或镜像文件集成到商用产品中。

1 方案介绍

1.1 背景

昇腾NPU作为主流算力选择已被广泛应用于深度学习训练与推理场景,NPU的运行状态直接影响业务系统的稳定性和性能表现,对其核心运行指标的实时监控与管理成为运维工作的重中之重。运维系统需要及时了解NPU设备的算力利用率、温度、功耗等关键指标的动态,帮助提前预判硬件故障或性能瓶颈,降低故障定位耗时。同时,企业对监控系统的需求日益多元化,不仅需要实现数据的实时采集与存储,还要求具备灵活的告警配置和可视化展示能力。本参考实践提供一套标准化的昇腾 NPU 监控方案,保障昇腾 NPU 集群的稳定高效运行。

1.2 方案简介

本参考实践采用昇腾 NPU Exporter 组件 + 开源软件 Prometheus(数据汇总和阈值监控)、和 Grafana(可视化)的组合,构建了一套全流程、一体化的昇腾 NPU 监控体系,实现对昇腾 NPU 从指标采集、存储到可视化展示与告警管理的全生命周期监控。

  • NPU Exporter :昇腾 NPU指标采集的核心组件,能够以 Prometheus 标准化的格式采集算力利用率、温度、功耗、内存使用率等核心运行指标,并通过 HTTP 接口向外暴露指标数据;
  • Prometheus :指标存储与告警规则触发的核心角色,通过定时拉取 NPU Exporter 采集的指标数据,实现监控数据的存储与检索,同时支持自定义监控规则;
  • Grafana :可视化展示工具,基于 Prometheus 的指标数据提供图表类型和仪表盘配置能力,将 NPU 的运行指标以直观的可视化形式呈现,在专属告警面板展示集群告警详情(如告警级别、触发时间、指标阈值、恢复状态等),帮助运维人员实时掌握 NPU 的运行状态、分析性能趋势,并快速定位故障问题。

以上各组件关系图如下。

图1 监控平台各组件关系图

1.3 关键特性

  1. 标准化指标采集:NPU Exporter 遵循 Prometheus 的指标采集规范,针对昇腾 NPU 的硬件架构和运行机制进行深度适配,能够精准、全面地采集算力利用率、温度、功耗、芯片负载、内存带宽等核心运行指标,输出格式符合 Prometheus 的标准数据模型,确保与主流监控体系的兼容性,避免因数据格式不统一导致的集成难题。
  2. 告警管理:基于 Prometheus 的告警规则引擎,用户可针对昇腾 NPU 自定义告警阈值(如处理器温度持续超温、AI Core利用率持续过高),告警触发后Grafana将告警详细信息渲染到仪表盘;确保运维人员第一时间响应。
  3. 可视化:Grafana 提供丰富的可视化组件,包括折线图、柱状图、仪表盘等,可根据运维需求灵活配置 NPU 监控仪表盘,直观展示 NPU 的实时运行状态、历史性能趋势和集群整体负载情况。
  4. 支持硬件类型:本方案支持Atlas系列推理、训练产品。

1.4 应用场景

在基于昇腾 NPU 构建的 AI 训练和推理集群中,该方案可实时监控每台 NPU 设备的算力利用率、功耗、温度等指标,运维人员通过 Grafana 仪表盘掌握集群的整体负载情况,合理分配训练任务和推理请求,避免单台 NPU 过载导致的任务延迟或失败。当集群中某台 NPU 出现温度异常、硬件故障等问题时,告警系统可及时触发通知,帮助运维人员快速定位故障节点并进行替换,保障 AI 业务的连续运行。

1.5 部署方案

1.5.1 典型硬件配置

节点类型

服务器配置

数量

部署内容

NPU Exporter节点

集群管理的所有的推理服务器。

可选如下设备:
1、Atlas 800 3000推理服务器(搭载Atlas 300I Duo标卡)
2、Atlas 800 3000推理服务器(搭载Atlas 300I A2标卡)
3、Atlas 800I A2推理服务器
4、或其他满足昇腾硬件兼容性要求的整机设备(搭载昇腾的推理标卡)

≥1(以实际业务需求为准)

每台推理服务器上部署NPU Exporter。

Prometheus、Grafana节点

可虚拟化部署,推荐使用容器部署。

1、混合部署场景,选一台推理服务器做管理节点,同时部署NPU Exporter节点与Prometheus节点、Grafana节点。
2、分离部署场景,Prometheus节点和Grafana节点部署到独立的通算服务器上。
容器资源配置推荐如下:  
1、CPU:4核或以上
2、内存:8GB或以上
3、存储:以实际业务需求为准(建议预留充足的磁盘存储空间,用于存放Prometheus落盘数据文件。Prometheus数据量参考:纳管3台服务器时,1周数据量约100MB)

1

部署Prometheus以及配置告警规则;

部署Grafana,导入Demo示例界面。

1.5.2 软件版本

本参考实践使用的软件配套版本如下(实际使用版本建议不低于表1中的软件版本):

表1

软件/镜像

版本

说明

NPU Exporter

7.1.RC1

指标采集的核心组件

prom/prometheus

3.7.3

指标存储、告警管理

grafana/grafana

12.3.0

可视化展示工具

CANN

8.2.RC2、8.3.RC1

昇腾异构计算架构

Ascend HDK

25.0.RC1.1

NPU驱动固件,要求能配套CANN版本使用,物理机上安装

Docker

18.09.0

物理机上安装

OS

openEuler release 22.03 (LTS-SP4)

物理机OS

1.5.3 混合部署

当管理小于8台推理服务器时,推荐使用混合部署,即Prometheus和Grafana部署在推理服务器上,如下图所示。

图1 混合部署方案图

1.5.4 分离部署

当管理8~16台推理服务器时,建议使用分离部署,即使用单独的管理服务器来部署Prometheus和Grafana,如下图所示。

图1 分离部署方案图

2 部署指导

2.1 前置条件

  1. 已完成OS和Docker安装;
  2. 参考对应昇腾版本和设备的《昇腾软件安装指南》,推理服务器完成昇腾驱动和固件安装,参考 链接
  3. 已获取本参考实践的附件

2.2 安装部署

用户可从以下两种部署方式中选择一种进行安装部署。

2.2.1(可选)手动部署

2.2.1.1 NPU Exporter安装

注意:NPU Exporter需要安装到每台推理服务器上。

1. 下载地址:链接,选择对应版本的软件包下载并上传至服务器:

2. 当前目录下进行解压:

unzip Ascend-mindxdl-npu-exporter_7.1.RC1_linux-aarch64.zip

3. 执行以下命令,创建npu-exporter.service文件:

cat > /etc/systemd/system/npu-exporter.service << EOF
[Unit]
Description=Ascend npu exporter
Documentation=hiascend.com

[Service]
ExecStart=/bin/bash -c "/usr/local/bin/npu-exporter -ip=$IP -port=8082 -logFile=/var/log/mindx-dl/npu-exporter/npu-exporter.log>/dev/null  2>&1 &"
Restart=always
RestartSec=2
KillMode=process
Environment="GOGC=50"
Environment="GOMAXPROCS=2"
Environment="GODEBUG=madvdontneed=1"
Type=forking
User=hwMindX
Group=hwMindX

[Install]
WantedBy=multi-user.target
EOF

说明:

$IP以当前服务器IP为准

4. 事先准备

a) 执行以下命令,创建用户

useradd -d /home/hwMindX -u 9000 -m -s /sbin/nologin hwMindX
usermod -a -G HwHiAiUser hwMindX

b) 创建组件日志父节点

mkdir -m 755 /var/log/mindx-dl
chown root:root /var/log/mindx-dl

若目录已经存在,请确认该目录权限是否正确。

c) 执行以下命令,创建 npu-exporter 日志目录

mkdir -m 755 /var/log/mindx-dl/npu-exporter
chown hwMindX:hwMindX /var/log/mindx-dl/npu-exporter

若已经存在该目录,执行以下命令,确保文件夹权限正确

chmod -R 755 /var/log/mindx-dl/npu-exporter
chown -R hwMindX:hwMindX /var/log/mindx-dl/npu-exporter

5. 创建npu-exporter.timer文件。通过配置timer延时启动,可保证NPU Exporter启动时NPU卡已就位。

vim /etc/systemd/system/npu-exporter.timer

内容参考如下:

[Unit]
Description=Timer for NPU Exporter Service

[Timer]
OnBootSec=60s                    
Unit=npu-exporter.service

[Install]
WantedBy=timers.target

6. 将解压后的二进制包复制到下/usr/local/bin目录下,并修改权限:

cp npu-exporter /usr/local/bin
chmod 500 /usr/local/bin/npu-exporter
chown hwMindX:hwMindX /usr/local/bin/npu-exporter

7. 启动NPU Exporter服务

systemctl enable npu-exporter.timer 
systemctl start npu-exporter
systemctl start npu-exporter.timer

8. (可选)裸机上通过命令行启动NPU Exporter服务:

npu-exporter -ip $ip -port $port -containerd /var/run/docker/containerd/containerd.sock -endpoint /var/run/docker.sock

9. 服务启动后,确保可访问网址 http://$ip:$port/metrics (注意关闭防火墙)获取NPU Exporter的输出信息。

2.2.1.2 Prometheus、Grafana安装

1. 从docker拉取Prometheus、Grafana镜像

docker pull prom/prometheus:v3.7.3
docker pull grafana/grafana:12.3.0

2. 在当前目录下创建prometheus、grafana文件夹和各自的存储文件夹/data

cd /home
mkdir -p grafana/{dashboards,data,provisioning/{dashboards,datasources}} prometheus/data

3. 本参考实践提供配置文件和 Demo界面代码以供用户参考。可见附件中的【配置文件】和【Demo界面】,配置文件清单见下表。

表1 配置文件清单

文件名称

文件作用

npu_exporter.yml

Prometheus 的主配置文件,定义采集指标方式;关联告警规则文件

rules.yml

定义 Prometheus 告警规则(触发条件、级别、描述)

dashboard.yml

仪表盘加载规则

datasource.yml

数据源配置

docker-compose.yml

编排 Prometheus、Grafana 服务;管理容器端口、目录挂载、网络、权限; 定义服务依赖和启动规则

replace_datasouce_uid.sh

替换全部json代码中数据源UID的脚本

参考下方文件结构图,将各配置文件和json文件传入对应的文件夹中。

文件结构如下:

home
├── docker-compose.yml
├── replace_datasouce_uid.sh
├── grafana
│   ├── dashboards
│   │      ├── Alarm-Details.json
│   │      ├── NPU-Card-Details.json
│   │      ├── NPU-Card-List.json
│   │      ├── Overview-Page.json
│   │      └── Server-List.json
│   │
│   ├── data
│   └── provisioning
│       ├── dashboards
│       │        └── dashboard.yml
│       └── datasources
│                └── datasource.yml
└── prometheus
    ├── data
    ├── npu_exporter.yml
    └── rules.yml

各文件功能说明如下:

  • npu_exporter.yml:Prometheus主要配置文件
global:
  scrape_interval: 15s       # 指标采集间隔(每15s拉取一次NPU Exporter)
  evaluation_interval: 15s   # 告警规则评估间隔(每15s检查一次)

# 采集目标:NPU Exporter
scrape_configs:
  - job_name: 'host23-800IA2'
    static_configs:
      - targets: ['xxx.xxx.xxx.23:8082']
  - job_name: 'host25-300IDuo'
    static_configs:
      - targets: ['xxx.xxx.xxx.25:8082']
  - job_name: 'host26-300IA2'
    static_configs:
      - targets: ['xxx.xxx.xxx.26:8082']

# 告警规则文件(加载自定义告警规则)
rule_files:
  - 'rules.yml'

说明:

根据实际管理机器数量来配置job_name。

job_name:对应NPU Exporter节点的机型,用来区分不同的机器型号。建议命名规则:机器的IP关键字 + 机器类型(例如host23-800IA2)

  • dashboard.yml:仪表盘加载规则文件
apiVersion: 1

providers:
  - name: 'default'          # 提供者名称(自定义)
    orgId: 1                 # 组织ID(默认1)
    folder: ''               # 仪表盘默认存放的文件夹(空为根目录)
    type: file               # 加载方式(文件)
    disableDeletion: false   # 允许删除仪表盘
    updateIntervalSeconds: 10  # 每10秒检查文件变化,自动更新
    allowUiUpdates: true     # 允许UI手动更新仪表盘
    options:
      path: /var/lib/grafana/dashboards  # 容器内JSON文件目录(需和挂载路径一致)
      foldersFromFilesStructure: true    # 自动识别子目录为仪表盘文件夹
  • datasource.yml:Prometheus数据源配置文件
apiVersion: 1

datasources:
  - name: prometheus-data  # 数据源名称(仪表盘会引用此名称)
    type: prometheus  # 数据源类型
    url: http://xxx.xxx.xxx.xxx:9090  # 数据源地址
    access: proxy
    isDefault: true    # 设置为默认数据源
    editable: true     # 允许手动编辑

说明:

注意配置数据源名称为prometheus-data(不建议修改,后续的仪表盘会引用此名称)和Prometheus数据源地址

  • rules.yml:Prometheus告警规则配置文件,以下告警规则对应附录-监控指标清单中所有出现的推荐告警阈值
groups:
  - name: NPU状态监控
    rules:
      - alert: 昇腾AI处理器网口Link状态变为DOWN
        expr: npu_chip_info_link_status == 0
        for: 10s
        labels:
          severity: warning
        annotations:
          summary: "昇腾AI处理器网口Link状态变为DOWN。( 告警NPU: {{ $labels.instance }} - NPU {{ $labels.id }} )"
          description: "Link状态从 1(UP)变为 0(DOWN),当前状态:{{ $value }}"
      - alert: 昇腾AI处理器网络健康状态变为不健康
        expr: npu_chip_info_network_status == 0
        for: 10s
        labels:
          severity: warning
        annotations:
          summary: "昇腾AI处理器网络健康状态变为不健康。( 告警NPU: {{ $labels.instance }} - NPU {{ $labels.id }} )"
          description: "网络健康状态从 1(健康)变为 0(不健康),当前状态:{{ $value }}"
      - alert: 昇腾AI处理器出现错误码
        expr: |
          npu_chip_info_error_code != 0
          OR npu_chip_info_error_code_1 != 0
          OR npu_chip_info_error_code_2 != 0
          OR npu_chip_info_error_code_3 != 0
          OR npu_chip_info_error_code_4 != 0
          OR npu_chip_info_error_code_5 != 0
          OR npu_chip_info_error_code_6 != 0
          OR npu_chip_info_error_code_7 != 0
          OR npu_chip_info_error_code_8 != 0
          OR npu_chip_info_error_code_9 != 0
        for: 10s
        labels:
          severity: critical
        annotations:
          summary: "昇腾AI处理器出现错误码。( 告警NPU: {{ $labels.instance }} - NPU {{ $labels.id }} )"
          description: "检测到一个或多个错误码,当前错误码:{{ $value }},请查看 npu_chip_info_error_code* 详情。"
      - alert: 昇腾AI处理器健康状态变为不健康
        expr: npu_chip_info_health_status == 0
        for: 10s
        labels:
          severity: warning
        annotations:
          summary: "昇腾AI处理器健康状态变为不健康。( 告警NPU: {{ $labels.instance }} - NPU {{ $labels.id }} )"
          description: "健康状态从 1(健康)变为 0(不健康),当前状态:{{ $value }}"
      - alert: 光模块在位状态变为不在位
        expr: npu_chip_optical_state == 0
        for: 10s
        labels:
          severity: warning
        annotations:
          summary: "光模块在位状态变为不在位。( 告警NPU: {{ $labels.instance }} - NPU {{ $labels.id }} )"
          description: "光模块状态从 1(在位)变为 0(不在位),当前状态:{{ $value }}"
  - name: NPU温度监控
    rules:
      - alert: 昇腾AI处理器温度过高
        expr: |
          (
            npu_chip_info_temperature >= 105
            OR (
              npu_chip_info_temperature >= 103
              AND ALERTS{alertname="昇腾AI处理器温度过高"} == 1
            )
          )
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: "NPU 温度过高 ( {{ $labels.instance }} - NPU {{ $labels.id }} )"
          description: "温度 = {{ $value }}°C,超过 105°C 或仍处于滞回区(103~105)。"
      - alert: 光模块温度过高
        expr: |
          (
            npu_chip_optical_temp >= 75
            OR (
              npu_chip_optical_temp >= 73
              AND ALERTS{alertname="光模块温度过高"} == 1
            )
          )
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: "光模块温度过高 ( {{ $labels.instance }} - NPU {{ $labels.id }} )"
          description: "温度 = {{ $value }}°C,超过 75°C 或仍在滞回区(73~75)。"
      - alert: 昇腾AI处理器片上内存温度过高
        expr: |
          (
            npu_chip_info_hbm_temperature >= 95
            OR (
              npu_chip_info_hbm_temperature >= 93
              AND ALERTS{alertname="昇腾AI处理器片上内存温度过高"} == 1
            )
          )
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: "处理器片上内存温度过高 ( {{ $labels.instance }} - NPU {{ $labels.id }} )"
          description: "HBM 温度 = {{ $value }}°C,超过 95°C 或仍在滞回区(93~95)。"
  • docker-compose.yml:Docker核心管理文件
services:
  # 1. Prometheus 服务(指标存储+告警规则)
  prometheus:
    image: prom/prometheus:v3.7.3
    container_name: prometheus-resource-monitor
    restart: always  # 容器异常自动重启
    ports:
      - "9090:9090"  # 对外暴露端口(主机端口:容器端口)
    volumes:
      - ./prometheus/npu_exporter.yml:/etc/prometheus/npu_exporter.yml  # 主配置文件
      - ./prometheus/rules.yml:/etc/prometheus/rules.yml  # 告警规则文件
      - ./prometheus/data:/prometheus-data  # 数据持久化卷(时序数据存储)
    command:
      - '--config.file=/etc/prometheus/npu_exporter.yml'
      - '--storage.tsdb.path=/prometheus-data'  # 数据落盘位置(容器内)
      - '--storage.tsdb.retention.time=30d'  # 数据保留30天
    networks:
      - monitor-network  # 自定义网络,组件间通信
  # 2. Grafana 服务(可视化展示)
  grafana:
    image: grafana/grafana:12.3.0  # 稳定版,兼容Prometheus
    container_name: grafana-resource-monitor
    restart: always
    ports:
      - "3000:3000"  # 对外暴露端口(默认登录端口)
    volumes:
      - ./grafana/data:/var/lib/grafana  # 数据持久化卷(面板/用户配置)
      - ./grafana/dashboards:/var/lib/grafana/dashboards
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_USER=admin  # 初始管理员账号
      - GF_SECURITY_ADMIN_PASSWORD=111222  # 初始密码(建议修改)
      - GF_USERS_ALLOW_SIGN_UP=false  # 禁用注册功能(安全)
    depends_on:
      - prometheus  # 依赖Prometheus,启动顺序后置
    networks:
      - monitor-network
# 自定义网络(隔离其他容器,提升安全性)
networks:
  monitor-network:
    driver: bridge

说明:

容器内端口配置不要修改,Prometheus默认监听9090端口,Grafana默认监听3000端口号。

对外暴露端口可以修改。

  • replace_datasouce_uid.sh:用于快速替换各json界面中的UID为当前数据源UID。注意在脚本首处配置grafana的IP、PORT。
#!/bin/bash
# ===================== 步骤1:手动设置 Grafana IP 和 PORT =====================
echo "===================== 输入 Grafana 配置信息 ====================="
Grafana_IP=
Grafana_PORT=3000
# 校验IP格式(简单校验,避免空输入/非法格式)
if ! [[ $Grafana_IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
    echo "错误:IP格式非法!请输入如 192.168.1.100 的合法IP"
    exit 1
fi
if ! [[ $Grafana_PORT =~ ^[0-9]{1,5}$ ]] || [ $Grafana_PORT -gt 65535 ]; then
    echo "错误:端口格式非法!请输入 1-65535 之间的数字"
    exit 1
fi
# ===================== 步骤2:从 docker-compose.yml 提取 Grafana 账号密码 =====================
echo -e "\n===================== 从 docker-compose.yml 提取账号密码 ====================="
# 检查 docker-compose.yml 是否存在
if [ ! -f "./docker-compose.yml" ]; then
    echo "错误:当前目录未找到 docker-compose.yml 文件!"
    exit 1
fi
# 提取 GF_SECURITY_ADMIN_USER(兼容带注释/不带注释的行)
GRAFANA_USER=$(grep -E '^\s*- GF_SECURITY_ADMIN_USER=' ./docker-compose.yml \
    | sed -E 's/^\s*- GF_SECURITY_ADMIN_USER=(.*)\s*#.*$/\1/;s/^\s*- GF_SECURITY_ADMIN_USER=(.*)$/\1/' \
    | head -1)
GRAFANA_USER=$(echo "$GRAFANA_USER" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
# 提取 GF_SECURITY_ADMIN_PASSWORD(兼容带注释/不带注释的行)
GRAFANA_PWD=$(grep -E '^\s*- GF_SECURITY_ADMIN_PASSWORD=' ./docker-compose.yml \
    | sed -E 's/^\s*- GF_SECURITY_ADMIN_PASSWORD=(.*)\s*#.*$/\1/;s/^\s*- GF_SECURITY_ADMIN_PASSWORD=(.*)$/\1/' \
    | head -1)
GRAFANA_PWD=$(echo "$GRAFANA_PWD" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
# 校验账号密码是否提取成功
if [ -z "$GRAFANA_USER" ] || [ -z "$GRAFANA_PWD" ]; then
    echo "错误:从 docker-compose.yml 提取账号/密码失败!请检查文件中是否有 GF_SECURITY_ADMIN_USER/GF_SECURITY_ADMIN_PASSWORD 配置"
    exit 1
fi
echo "成功提取 Grafana 账号:$GRAFANA_USER"
echo "成功提取 Grafana 密码:$GRAFANA_PWD"
# ===================== 步骤3:调用 Grafana API 获取新 UID(NEW_UID) =====================
echo -e "\n===================== 调用 Grafana API 获取数据源 UID ====================="
# 执行 curl 获取 prometheus-data 数据源的 UID
NEW_UID=$(curl -u "${GRAFANA_USER}:${GRAFANA_PWD}" -s "http://${Grafana_IP}:${Grafana_PORT}/api/datasources" \
    | grep -o '{[^}]*prometheus-data[^}]*}' \
    | grep -o '"uid":"[^"]*"' \
    | cut -d'"' -f4)
# 校验 NEW_UID 是否提取成功
if [ -z "$NEW_UID" ]; then
    echo "错误:未获取到 prometheus-data 数据源的 UID!请检查:"
    echo "  1. Grafana IP/端口是否正确(${Grafana_IP}:${Grafana_PORT})"
    echo "  2. Grafana 账号密码是否正确(${GRAFANA_USER}:${GRAFANA_PWD})"
    echo "  3. Grafana 中是否存在 prometheus-data 数据源"
    exit 1
fi
echo "成功获取新 UID(NEW_UID):$NEW_UID"
# ===================== 步骤4:从JSON 文件提取旧 UID =====================
echo -e "\n===================== 从JSON 文件提取旧 UID ====================="
CHOSEN_JSON_FILE="./grafana/dashboards/Overview-Page.json"
# 检查 dashboards 目录是否存在
if [ ! -d "./grafana/dashboards" ]; then
    echo "错误:未找到 ./grafana/dashboards 目录!"
    exit 1
fi
# 校验是否有 JSON 文件
if [ -z "$CHOSEN_JSON_FILE" ]; then
    echo "错误:./grafana/dashboards 目录下无 JSON 文件!"
    exit 1
fi
echo "找到 JSON 文件:$CHOSEN_JSON_FILE"
# 从选中的JSON 文件提取旧 UID(匹配 "datasource" 下的 "uid" 字段)
OLD_UID=$(sed -n '/"type": "prometheus"/ { n; /"uid": "[^"]*"/!b; /"uid": "-- Grafana --"/b; s/.*"uid": "\([^"]*\)".*/\1/; p; q; }' "$CHOSEN_JSON_FILE")
# 校验 OLD_UID 是否提取成功
if [ -z "$OLD_UID" ]; then
    echo "错误:从 $LAST_JSON_FILE 中未提取到旧 UID!请检查文件中是否有 \"datasource\": {\"type\":\"prometheus\",\"uid\":\"xxx\"} 格式的内容"
    exit 1
fi
echo "成功提取旧 UID(OLD_UID):$OLD_UID"
# ===================== 步骤5:批量替换所有 JSON 文件中的 UID =====================
echo -e "\n===================== 批量替换 JSON 文件中的 UID ====================="
# 执行替换(先备份原文件,替换完成后提示)
echo "开始替换:将所有 JSON 文件中的 $OLD_UID 替换为 $NEW_UID"
SED_OPT="-i"
if [[ $(uname) == "Darwin" ]]; then
    SED_OPT="-i ''"
fi
eval "sed $SED_OPT 's/${OLD_UID}/${NEW_UID}/g' ./grafana/dashboards/*.json"
echo "提示:Grafana 会在 10 秒内自动加载新配置,无需重启容器"

4. 修改prometheus和grafana相应文件夹权限,获取正确的读写权限

sudo chown -R 65534:65534 ./prometheus/
sudo chown -R 472:472 ./grafana/

5. 启动所有容器

docker-compose up -d

执行替换脚本replace_datasouce_uid.sh确认脚本回显替换完毕

bash replace_datasouce_uid.sh

(可选)查看所有容器情况

docker-compose ps

(可选)停止所有容器

docker-compose down

5. 通过以下地址访问:

  • Prometheus:http://xxx.xxx.xxx.xxx:9090
  • Grafana:http://xxx.xxx.xxx.xxx:3000

2.2.2(可选)自动化部署工具

  1. 参考《 基于Ascend Deployer工具实现第三方软件自动化部署的参考实践 》中 2.1节【获取Ascend Deployer工具】获取自动化部署工具。
  2. 参考《 基于Ascend Deployer工具实现第三方软件自动化部署的参考实践 》中 2.4.3.4 节【资源监控平台】,使用自动化部署工具完成本监控平台所需软件安装部署。

3 平台使用指导与示例

3.1 功能介绍

3.1.1 概览

该界面主要用于集中展示昇腾服务器集群的整体运行状态与核心资源健康概况,为运维人员提供一站式的集群状态总览入口。具体包括:

  1. 告警总数:展示当前集群出现的告警总数,运维人员可及时感知到并点击跳转到告警详情页查看;
  2. 资源总量统计:推理服务器总数、NPU 卡总数、健康卡数、已使用卡数,直观呈现集群的资源规模;
  3. 硬件健康状态:根据处理器运行状态、网络连通性、处理器核心温度等指标,分别统计各类状态的 NPU 卡数量;
  4. 算力负载统计:从算力与显存两大核心维度,统计不同负载区间的 NPU 卡数量,为集群资源调度与任务负载均衡提供数据支撑。

通过上述多维度指标的整合展示,运维人员可快速掌握集群的告警情况,整体健康水平、资源使用分布及特殊机型的运行状态,为故障预警、资源优化和运维决策提供全面的数据依据。

图1 概览页示意图

3.1.2 服务器列表

该界面主要用于集中展示昇腾 NPU 服务器集群的节点级精细化信息,为运维人员提供每台服务器的全方位运行详情与资源占用明细,便于快速定位单节点的异常状态与资源瓶颈。界面涵盖的核心信息如下:

  1. 服务器基础标识信息:清晰列出每台服务器的名称(可在Prometheus配置文件里修改)与服务器地址,作为节点唯一识别依据,方便快速关联物理设备;
  2. 服务器运行状态监测:明确标注服务器在线状态,通过 “在线 / 离线” 等状态分类,直观呈现节点的运行状态;
  3. NPU 卡资源维度统计:分别统计每台服务器上 NPU 卡总数、已使用卡数、未使用卡数,清晰反映单节点的算力资源占用比例与闲置情况,为任务调度与资源扩容提供数据支撑;
  4. 硬件健康状态细分指标:精准统计处理器不健康卡数,定位单服务器内存在处理器故障或性能异常的 NPU 卡,辅助运维人员快速开展故障排查工作。

通过该界面的节点级信息整合,运维人员可实现从集群总览到单节点详情的快速下探,掌握整体资源分布,大幅提升 NPU 集群的运维管理效率。

图1 服务器列表页示意图

3.1.3 NPU卡列表

该界面主要用于展示昇腾 NPU 集群的单卡级监控,展示每张 NPU 卡的硬件信息、运行状态与性能负载详情,为运维人员提供全维度数据支撑,便于精准定位单卡故障、优化算力资源分配。界面核心信息如下:

  1. 基础身份标识信息:清晰标注每张 NPU 卡的卡号与所属服务器名称,建立 “服务器 - 单卡” 的层级关联关系,方便运维人员快速定位物理设备位置;
  2. 硬件健康核心状态:实时监测处理器健康状态;同步采集处理器温度、显存温度,预防因过温导致硬件出现降频或损坏;
  3. 算力与显存性能负载:统计单卡当前运行进程数,反映业务承载情况;实时展示NPU利用率与显存利用率两大核心性能指标,为任务调度与负载均衡提供决策依据。

通过该界面,运维人员可实现从集群总览到单卡详情的精准下探,全面掌握每张 NPU 卡的运行状态,快速识别异常卡的故障类型,提升昇腾 NPU 集群运维管理效率。

图1 NPU卡列表页示意图

3.1.4 NPU详情

该界面主要用于展示单张 NPU 卡的全维度监控,清晰呈现卡级硬件状态,为运维人员定位单卡故障、分析性能瓶颈提供数据支撑,具体内容如下:

  1. NPU 卡状态信息区:全面展示当前选中 NPU 卡的核心硬件运行状态与性能负载趋势。
  2. NPU 卡网口状态信息区(800I A2 机型支持):针对 800I A2 机型的网络硬件特性,定制化展示网口与光模块状态数据。

图1 NPU详情页-1

图2 NPU详情页-2

3.1.5 告警详情

该界面主要用于展示集群的所有告警内容,具体内容如下:

3.2 添加指标

参考附录-监控指标清单,用户可以按需添加指标。

例如:在概览页中添加一个“npu_chip_info_overall_utilization”昇腾AI处理器整体利用率的指标监控

1、点击右上角“Edit”

2、点击“Add” -> “Visualization”

3、编辑页面,具体指标名称从附录-监控指标清单查阅获取。

填入指标备注:NPU-{{id}}处理器整体利用率

4、保存退出,完成监控界面添加

5、用户可参考示例用法来完成更多告警界面自定义开发

3.3 配置告警

通过修改在 2.2.2.2 节【Prometheus、Grafana安装】中的 rules.yml 告警规则配置文件,可以完成新指标告警监控。

例如:需要添加两个告警规则:(1)当NPU利用率持续10分钟超过80%时,发出告警信息;(2)显存利用率持续10分钟超过95%时,发出告警信息。并提示发送告警的NPU详细信息(NPU所属服务器IP,NPU卡序号)。

1、修改rules.yml文件,在末尾添加下面的加粗部分代码

   - name: NPU利用率监控
    rules:
      - alert: NPU利用率过高
        expr: npu_chip_info_utilization > 0.8
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "NPU 利用率过高( 实例 {{ $labels.instance }} - NPU {{ $labels.id }} )"
          description: "利用率 = {{ $value }} ( > 0.8),超过 10 分钟。"
      - alert: 显存利用率过高
        expr: (npu_chip_info_used_memory / npu_chip_info_total_memory * 100) > 80
              OR (npu_chip_info_hbm_used_memory / npu_chip_info_hbm_total_memory * 100) > 80
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "显存利用率过高( 实例 {{ $labels.instance }} - NPU {{ $labels.id }} )"
          description: "显存利用率 = {{ $value }} (>95%),超过 10 分钟。"

2、修改完成后,保存配置文件,重启Prometheus容器使新规则配置生效。

3、用户可参考示例写法来完成更多告警规则自定义开发。

附录-监控指标清单

(这里展示本参考实践推荐指标,全部指标文件见附件【清单】

用户在监控系统部署、指标配置、告警规则编写的过程中,可按需查阅清单中的指标项,快速完成 Prometheus 采集规则、Grafana 面板可视化的配置工作。清单内容如下图所示:

类别

数据信息名称

数据信息说明

单位

支持的产品形态

优先级

是否告警

告警阈值

备注


Network

npu_chip_link_speed

网口默认速率

单位:MB/s

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



800I A2支持


Network

npu_chip_info_bandwidth_rx

昇腾AI处理器网口实时接收速率

单位:MB/s

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



800I A2支持


Network

npu_chip_info_bandwidth_tx

昇腾AI处理器网口实时发送速率

单位:MB/s

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



800I A2支持


Network

npu_chip_info_link_status

昇腾AI处理器网口Link状态

取值为0或1

1:UP

0:DOWN

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件

由1变0时:告警

由0变1时:取消告警

800I A2支持


NPU

machine_npu_nums

昇腾AI处理器数目

单位:个

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

推理服务器(插Atlas 300I 推理卡)

Atlas 推理系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



均支持


NPU

npu_chip_info_network_status

昇腾AI处理器网络健康状态

取值为0或1

1:健康,可以连通

0:不健康,无法连通

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件

0:告警

1:取消告警

800I A2支持


NPU

第一个错误码为:npu_chip_info_error_code

其他错误码:npu_chip_info_error_code_X


昇腾AI处理器错误码,X表示错误码的索引。

当昇腾AI处理器上没有错误码时,不会上报该字段。

说明:

Prometheus场景:若该昇腾AI处理器上同时存在多个错误码,由于Prometheus格式限制,当前只支持上报前十个出现的错误码。X范围:1~9      Telegraf场景:最多支持上报128个错误码。      错误码的详细说明可以通过芯片故障码参考文档获取。

-

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

推理服务器(插Atlas 300I 推理卡)

Atlas 推理系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件

错误码数量为非0时:告警

错误码数量为0时:取消告警

均支持

模拟构造个示例出来

NPU

npu_chip_info_health_status

昇腾AI处理器健康状态

取值为0或1

1:健康

0:不健康

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

推理服务器(插Atlas 300I 推理卡)

Atlas 推理系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件

0:告警

1:取消告警

均支持


NPU

npu_chip_info_power

昇腾AI处理器功耗

单位:瓦特(W)

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

推理服务器(插Atlas 300I 推理卡)

Atlas 推理系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件

说明:

只有Atlas 推理系列产品为板卡功耗,其余产品为昇腾AI处理器功耗。



均支持


NPU

npu_chip_info_temperature

昇腾AI处理器温度

单位:摄氏度(℃)

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

推理服务器(插Atlas 300I 推理卡)

Atlas 推理系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件

≥105℃:告警

<103℃:取消告警

均支持


NPU

npu_chip_info_process_info

占用昇腾AI处理器的进程的信息。

Prometheus场景:取值为进程使用的内存。

Telegraf场景:仅当没有进程占用昇腾AI处理器时上报,值为0。

单位:MB

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

推理服务器(插Atlas 300I 推理卡)

Atlas 推理系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



均支持


NPU

npu_chip_info_process_info_num

占用昇腾AI处理器的进程数量。

单位:MB

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

推理服务器(插Atlas 300I 推理卡)

Atlas 推理系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



均支持


NPU

npu_chip_info_utilization

昇腾AI处理器AI Core利用率

单位:%

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

推理服务器(插Atlas 300I 推理卡)

Atlas 推理系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



均支持


DDR

npu_chip_info_used_memory

昇腾AI处理器DDR内存已使用量

单位:MB

Atlas 训练系列产品

推理服务器(插Atlas 300I 推理卡)

Atlas 推理系列产品



300I Duo支持


DDR

npu_chip_info_total_memory

昇腾AI处理器DDR内存总量

单位:MB

Atlas 训练系列产品

推理服务器(插Atlas 300I 推理卡)

Atlas 推理系列产品



300I Duo支持


片上内存

npu_chip_info_hbm_used_memory

昇腾AI处理器片上内存已使用量

单位:MB

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

A200I A2 Box 异构组件

Atlas 800I A2 推理服务器



A2 机型支持


片上内存

npu_chip_info_hbm_total_memory

昇腾AI处理器片上总内存

单位:MB

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

A200I A2 Box 异构组件

Atlas 800I A2 推理服务器



A2 机型支持


片上内存

npu_chip_info_hbm_ecc_single_bit_error_cnt

昇腾AI处理器片上内存单比特当前错误计数

-

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

A200I A2 Box 异构组件

Atlas 800I A2 推理服务器



A2 机型支持


片上内存

npu_chip_info_hbm_ecc_double_bit_error_cnt

昇腾AI处理器片上内存多比特当前错误计数

-

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

A200I A2 Box 异构组件

Atlas 800I A2 推理服务器



A2 机型支持


片上内存

npu_chip_info_hbm_ecc_single_bit_isolated_pages_cnt

昇腾AI处理器片上内存单比特错误隔离内存页数量

-

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

A200I A2 Box 异构组件

Atlas 800I A2 推理服务器



A2 机型支持


片上内存

npu_chip_info_hbm_ecc_double_bit_isolated_pages_cnt

昇腾AI处理器片上内存多比特错误隔离内存页数量

-

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

A200I A2 Box 异构组件

Atlas 800I A2 推理服务器



A2 机型支持


RoCE

npu_chip_mac_rx_bad_pkt_num

MAC接收的坏包总报文数

-

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



800I A2支持


RoCE

npu_chip_mac_tx_bad_pkt_num

MAC发送的坏包总报文数

-

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



800I A2支持


RoCE

npu_chip_mac_tx_bad_oct_num

MAC发送的坏包总报文字节数

-

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



800I A2支持


RoCE

npu_chip_mac_rx_bad_oct_num

MAC接收的坏包总报文字节数

-

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



800I A2支持


RoCE

npu_chip_roce_rx_all_pkt_num

RoCE接收的总报文数

-

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



800I A2支持


RoCE

npu_chip_roce_tx_all_pkt_num

RoCE发送的总报文数

-

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



800I A2支持


RoCE

npu_chip_roce_rx_err_pkt_num

RoCE接收的坏包总报文数

-

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



800I A2支持


RoCE

npu_chip_roce_tx_err_pkt_num

RoCE发送的坏包总报文数

-

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



800I A2支持


光模块

npu_chip_optical_state

光模块在位状态

取值为0或1

0:不在位

1:在位

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas 900 A3 SuperPoD 超节点

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件


由1变0时:告警

由0变1时:取消告警

800I A2支持


光模块

npu_chip_optical_tx_power_X (X范围为0~3)

光模块发送功率

单位:mW

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas 900 A3 SuperPoD 超节点

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



800I A2支持


光模块

npu_chip_optical_rx_power_X (X范围为0~3)

光模块接收功率

单位:mW

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas 900 A3 SuperPoD 超节点

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件



800I A2支持


光模块

npu_chip_optical_temp

光模块温度

单位:℃

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas 900 A3 SuperPoD 超节点

Atlas 800I A2 推理服务器

A200I A2 Box 异构组件

≥75℃:告警

<73℃:取消告警

800I A2支持


片上内存

npu_chip_info_hbm_utilization

昇腾AI处理器的片上内存利用率。

单位:%

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

A200I A2 Box 异构组件

Atlas 800I A2 推理服务器



A2 机型支持


片上内存

npu_chip_info_hbm_temperature

昇腾AI处理器片上内存的温度。

单位:°C

Atlas 训练系列产品

Atlas A2 训练系列产品

Atlas A3 训练系列产品

A200I A2 Box 异构组件

Atlas 800I A2 推理服务器

≥95℃:告警

<93℃:取消告警

A2 机型支持



附件

下载地址:ascend_deployer - gitcode 仓库下的monitor_plat_config文件夹

  • configuration:配置文件
  • dashboard:面板json文件
  • metrics_list:全部指标清单、推荐指标清单

本页内容