DCSM Exporter 用户手册

概述

DCSM Exporter 是基于 DCSM (MOFFETT Data Center SPU Manager) 实现的工具,允许用户以 Prometheus 支持的指标格式采集并导出墨芯 AI 计算卡 SPU 的指标数据,在单机或集群中实时监控墨芯 AI 计算卡的工作负载和健康状态,提升系统的可观测性。

前提条件

在使用 DCSM Exporter 前,需满足以下前提条件:

  • 服务器已安装墨芯 AI 计算卡(例如 S30), 能被系统正确识别。

  • 服务器已安装 SOLA ToolKit,且安装的 SOLA ToolKit 的版本>= 3.5.0。

  • 产测环境已部署 Prometheus 和 Grafana。

  • 服务器已部署 Kubernetes 集群, Prometheus/Grafana 接入集群。

部署 DCSM Exporter

您可以将 DCSM Exporter 作为独立容器运行,也可通过 Daemonset 部署在 Kubernetes 集群中的墨芯设备节点。

获取 DCSM Exporter 镜像

我们提供了 DCSM Exporter 在线镜像和离线镜像,您可以按需取用。

  • 在线版镜像

    $ docker pull moffett/dcsm-exporter:1.0.0-1.0.0
    $ docker images | grep dcsm-exporter
    
  • 离线版镜像

    $ wget https://moffett-oss-bucket.tos-cn-shanghai.volces.com/images/Ubuntu/business/dcsm/dcsm-exporter_1.0.0-1.0.0.tar
    $ docker load -i dcsm-exporter_1.0.0-1.0.0.tar
    $ docker images | grep dcsm-exporter
    

部署 DCSM Exporter

单机容器化部署

执行以下命令,创建容器,完成镜像单机容器化部署。

#sample:默认参数容器示例
$ docker run -d \
       --privileged \
       --net=host \
       --name=dcsm-exporter \
       moffett/dcsm-exporter:1.0.0-1.0.0 

#sample:自定义参数容器示例。
# -f 参数指定默认配置文件 /etc/dcsm-exporter/default-counters.csv
$ docker run -d \
       --privileged \
       --net=host \
       --name=dcsm-exporter \
       moffett/dcsm-exporter:1.0.0-1.0.0 \
       -f /etc/dcsm-exporter/default-counters.csv \
       -c 15000 -a :7788 -d all
  • 命令行参数解析: 在容器创建并启动时,既可按默认值来设定参数项;也可通过传入命令行参数或环境变量来自定义所需的功能 项。您可以根据实际需要自定义指定参数项或环境变量。命令行参数和环境变量说明详见下表:

命令行参数 环境变量 说明 默认值
--collectors -f DCSM_EXPORTER_COLLECTORS 包含要收集的 DCSM 字段的文件的路径 /etc/dcsm-exporter/default-counters.csv
--collect-interval -c DCSM_EXPORTER_INTERVAL 收集指标的时间间隔,单位:毫秒(ms) 30000
--address value -a DCSM_EXPORTER_LISTEN http 服务的监听地址 7788
--remote-hostengine-info -r DCSM_REMOTE_HOSTENGINE_INFO 以 Host:Port 的格式指定要连接的 mx-hostengine 使用此参数,
dcsm-exporter 将通过指定的 mx-hostengine 进行指标收集
无,需显式指定,未指定则 dcsm-exporter 自行收集指标
--devices -d DCSM_EXPORTER_DEVICES_STR 指定要监控的 device,支持语法示例如下:
all
0,1
2-4
0,2-4
all
--kubernetes -k DCSM_EXPORTER_KUBERNETES 将设备对应的 kubernetes pod 信息加入指标标签 FALSE
--pod-resources-kubelet-socket DCSM_POD_RESOURCES_KUBELET_SOCKET kubelet pod-resources 套接字文件的路径 /var/lib/kubelet/pod-resources/kubelet.sock
  • 采集指标数据解析: DCSM Exporter 采集配置文件 default-counter.csv 中定义的指标数据。 配置文件 default-counter.csv 下载链接:https://moffett-oss-bucket.tos-cn-shanghai.volces.com/dcsm/default-counters.csv。 default-counters.csv 文件内容如下所示:

# Format
# If line starts with a '#' it is considered a comment
# DCSM FIELD, Prometheus metric type, help message

# Clocks
DCSM_FI_DEV_NNCORE_CLOCK, gauge, NNCORE clock frequency (in MHz).

# Temperature
DCSM_FI_DEV_SPU_TEMP, gauge, SPU temperature (in C).

# Power
DCSM_FI_DEV_POWER_USAGE, gauge, Power draw (in W).

# PCIE
DCSM_FI_DEV_PCIE_TX_THROUGHPUT, counter, Total number of bytes transmitted through PCIe TX (in KB) via MXML.
DCSM_FI_DEV_PCIE_RX_THROUGHPUT, counter, Total number of bytes received through PCIe RX (in KB) via MXML.

# Utilization
DCSM_FI_DEV_SPU_UTIL,      gauge, SPU utilization (in %).
DCSM_FI_DEV_MEM_COPY_UTIL, gauge, Memory utilization (in %).

# Errors and violations
DCSM_FI_DEV_XID_ERRORS, gauge, Value of the last XID error encountered.

# Memory usage
DCSM_FI_DEV_DDR_FREE, gauge, DDR memory free (in MB).
DCSM_FI_DEV_DDR_USED, gauge, DDR memory used (in MB).

# ECC
# DCSM_FI_DEV_ECC_SBE_VOL_TOTAL, counter, Total number of single-bit volatile ECC errors.
# DCSM_FI_DEV_ECC_DBE_VOL_TOTAL, counter, Total number of double-bit volatile ECC errors.
# DCSM_FI_DEV_ECC_SBE_AGG_TOTAL, counter, Total number of single-bit persistent ECC errors.
# DCSM_FI_DEV_ECC_DBE_AGG_TOTAL, counter, Total number of double-bit persistent ECC errors.

# Static configuration information. These appear as labels on the other metrics
DCSM_FI_DEV_SERIAL,     label, Device Serial Number
DCSM_FI_DRIVER_VERSION, label, Driver Version
# DCSM_FI_MXML_VERSION, label, MXML Version
# DCSM_FI_SOLA_VERSION, label, SOLA Verison

DCSM Exporter 支持的 metrics 指标数据如下表所示, 您可按需灵活调整 :

支持的 DCSM 字段 Prometheus 指标类型 描述
DCSM_FI_DEV_NNCORE_CLOCK gauge NNCORE 的时钟频率,单位:Mhz
DCSM_FI_DEV_SPU_TEMP gauge SPU (sprase processing unit,稀疏处理单元)温度,单位:℃
DCSM_FI_DEV_POWER_USAGE gauge 功耗,单位: W
DCSM_FI_DEV_PCIE_TX_THROUGHPUT counter 通过 MXML 传输的 PCIe TX 总字节数 ,单位: KB
DCSM_FI_DEV_PCIE_RX_THROUGHPUT counter 通过 MXML 接收的 PCIe RX 总字节数 ,单位 :KB
DCSM_FI_DEV_SPU_UTIL gauge SPU 利用率,以百分比表示
DCSM_FI_DEV_MEM_COPY_UTIL gauge 内存利用率 ,以百分比表示
DCSM_FI_DEV_XID_ERRORS gauge 最后出现的 XID 错误码
DCSM_FI_DEV_DDR_FREE gauge DDR 空闲内存,单位: MB
DCSM_FI_DEV_DDR_USED gauge DDR 已用内存,单位: MB
DCSM_FI_DEV_ECC_SBE_VOL_TOTAL counter 单比特瞬态 ECC 错误总数
DCSM_FI_DEV_ECC_DBE_VOL_TOTAL counter 双比特瞬态 ECC 错误总数
DCSM_FI_DEV_ECC_SBE_AGG_TOTAL counter 单比特持久 ECC 错误总数
DCSM_FI_DEV_ECC_DBE_AGG_TOTAL counter 双比特持久 ECC 错误总数
DCSM_FI_DEV_ECC_SBE_VOL_L1 counter L1 缓存单比特瞬态 ECC 错误数
DCSM_FI_DEV_ECC_SBE_VOL_L2 counter L2 缓存单比特瞬态 ECC 错误数
DCSM_FI_DEV_ECC_SBE_VOL_DEV counter 设备内存单比特瞬态 ECC 错误数
DCSM_FI_DEV_ECC_SBE_VOL_REG counter 寄存器文件单比特瞬态 ECC 错误数
DCSM_FI_DEV_ECC_DBE_VOL_L1 counter L1 缓存双比特瞬态 ECC 错误数
DCSM_FI_DEV_ECC_DBE_VOL_L2 counter L2 缓存双比特瞬态 ECC 错误数
DCSM_FI_DEV_ECC_DBE_VOL_DEV counter 设备内存双比特瞬态 ECC 错误数
DCSM_FI_DEV_ECC_DBE_VOL_REG counter 寄存器文件双比特瞬态 ECC 错误数
DCSM_FI_DEV_ECC_SBE_AGG_L1 counter L1 缓存单比特持久 ECC 错误数
DCSM_FI_DEV_ECC_SBE_AGG_L2 counter L2 缓存单比特持久 ECC 错误数
DCSM_FI_DEV_ECC_SBE_AGG_DEV counter 设备内存单比特持久 ECC 错误数
DCSM_FI_DEV_ECC_SBE_AGG_REG counter 寄存器文件单比特持久 ECC 错误数
DCSM_FI_DEV_ECC_DBE_AGG_L1 counter L1 缓存双比特持久 ECC 错误数
DCSM_FI_DEV_ECC_DBE_AGG_L2 counter L2 缓存双比特持久 ECC 错误数
DCSM_FI_DEV_ECC_DBE_AGG_DEV counter 设备内存双比特持久 ECC 错误数
DCSM_FI_DEV_ECC_DBE_AGG_REG counter 寄存器文件双比特持久 ECC 错误数
DCSM_FI_DEV_SERIAL label(静态指标,作为标签添加到其他指标) 设备序列号(Serial Number, SN)
DCSM_FI_DRIVER_VERSION label(静态指标,作为标签添加到其他指标) 驱动版本
DCSM_FI_MXML_VERSION label(静态指标,作为标签添加到其他指标) MXML 版本
DCSM_FI_SOLA_VERSION label(静态指标,作为标签添加到其他指标) SOLA 版本

Kubenetes 集群中部署

DCSM Exporter 通过 YAML 配置文件创建 DaemonSet 和 Service 将其部署到 Kubernetes 集群中。

  1. 创建 namespace。

    $ kubectl create ns moffett-monitoring
    
  2. 创建 dcsm-exporter.yaml 部署文件。

    # dcsm-exporter.yaml
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: "dcsm-exporter"
      namespace: "moffett-monitoring"
      labels:
        app.kubernetes.io/name: "dcsm-exporter"
        app.kubernetes.io/version: "1.0.0"
    spec:
      updateStrategy:
        type: RollingUpdate
      selector:
        matchLabels:
          app.kubernetes.io/name: "dcsm-exporter"
          app.kubernetes.io/version: "1.0.0"
      template:
        metadata:
          labels:
            app.kubernetes.io/name: "dcsm-exporter"
            app.kubernetes.io/version: "1.0.0"
          name: "dcsm-exporter"
        spec:
          containers:
          - name: "dcsm-exporter"
            image: "moffett/dcsm-exporter:1.0.0-1.0.0"
            env:
            - name: "DCSM_EXPORTER_LISTEN"
              value: ":7788"
            - name: "DCSM_EXPORTER_KUBERNETES"
              value: "true"
            - name: "DCSM_EXPORTER_INTERVAL"
              value: "1000"
            ports:
            - name: "metrics"
              containerPort: 7788
            securityContext:
              privileged: true
            volumeMounts:
            - name: "pod-spu-resources"
              readOnly: true
              mountPath: "/var/lib/kubelet/pod-resources"
            resources:
              requests:
                cpu: "100m"
                memory: "128Mi"
              limits:
                cpu: "500m"
                memory: "256Mi"
          volumes:
          - name: "pod-spu-resources"
            hostPath:
              path: "/var/lib/kubelet/pod-resources"
    
    ---
    
    kind: Service
    apiVersion: v1
    metadata:
      name: "dcsm-exporter"
      namespace: "moffett-monitoring"
      labels:
        app.kubernetes.io/name: "dcsm-exporter"
        app.kubernetes.io/version: "1.0.0"
    spec:
      selector:
        app.kubernetes.io/name: "dcsm-exporter"
        app.kubernetes.io/version: "1.0.0"
      ports:
      - name: "metrics"
        port: 7788
        targetPort: 7788
    
  3. 部署 DCSM Exporter。

    $ kubectl create -f dcsm-exporter.yaml
    

验证部署是否成功

  • 如果您是单机容器化部署,可执行以下命令验证是否部署成功:

    • 在终端中验证指标获取情况,请执行以下命令:

        $ curl http://${your-ip}:7788/metrics
      
    • 在浏览器中验证 dcsm-exporter 指标获取情况,打开浏览器在地址栏输入:

      http://${your-ip}:7788/metrics
      
  • 如果您是通过集群部署,可在集群节点执行以下命令验证是否部署成功:

    $ kubectl get pod -n moffett-monitoring -o wide 
    # 查询服务集群IP
    $ kubectl get svc -n moffett-monitoring
    # 查询exporter输出指标数据
    $ curl http://{Cluster-IP}:7788/metrics
    # sample 
    $ curl http://10.233.61.94:7788/metrics
    

接入 Prometheus 配置

DCSM Exporter 接入 Prometheus, 请根据实际环境选择合适的配置方式。

  • 静态配置:配置 Prometheus.yaml 文件, 适用于独立服务或固定部署的实例数量较少的环境,如单机容器化部署。

  • 动态服务发现配置:配置 ServiceMonitor ,在 Kubernetes 集群中,适用于通过 Operator 部署 Prometheus 的场景。

静态配置

添加监控目标

为了让 Prometheus 能够获取到 DCSM Exporter 采集的指标数据(metrics),需要调整 Prometheus 配置文件,在其中添加监控目标。

我们可以利用 Prometheus 的 static_configs 来拉取 DCSM Exporter 的数据。

打开 prometheus.yml 文件,在 scrape_configs 中添加如下配置:

scrape_configs:
  - job_name: "spu-metrics"
# DCSM Exporter默认HTTP监听端口是7788
    static_configs:
      - targets: ["0.0.0.0:7788"]

重启监控服务

修改 prometheus.yml 完成后,请重启 prometheus 服务以使配置生效。

动态服务发现配置

对于 Kubernetes 环境,建议使用 Prometheus Operator 和 ServiceMonitor,可以动态管理监控目标,减少手动维护的成本,来使 Prometheus 自动发现和监控 DCSM Exporter 。ServiceMonitor 配置会通过 Operator 自动同步到 Prometheus 中,无需手动调整 prometheus.yml 文件。

ServiceMonitor 建议配置如下:

# service-monitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: "dcsm-exporter"
  namespace: "moffett-monitoring"
  labels:
    app.kubernetes.io/name: "dcsm-exporter"
    app.kubernetes.io/version: "1.0.0"
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: "dcsm-exporter"
      app.kubernetes.io/version: "1.0.0"
  namespaceSelector:
    matchNames:
      - "moffett-monitoring"
  endpoints:
  - port: "metrics"
    path: "/metrics"
    interval: "1s"

数据可视化

使用 Prometheus 自带的 Web console 以及 Grafana 来查询和展现数据。

Web console

Prometheus 自带了 Web console, 安装成功后可以访问 http://${your-IP}}:9090 页面,用它可以进行任何 PromQL 查询和调试工作。

  • 检查 Prometheus Web 界面的 Targets 页签,确认目标是否正确地出现在监控列表中。

  • 查看 dcsm-exporter 的 metrics 数据是否能够被成功抓取。

  • metrics 通常以 DCSM*** 开头 。

示例:点击 quary,输入 DCSM_FI_DEV_SPU_TEMP ,选择时间,点击 Excute, 即可查询到监控节点指定时间的墨芯设备温度信息和图表。

Grafana

Grafana 是一套开源的分析监视平台,支持多种数据源,其 UI 美观且可高度定制化,这是 Prometheus web console 不具备的 。

我们定制了一个 Dashboard UI 模板范例,您可通过如下步骤使用:

  1. 进入 Grafana web 页面(如 http://${your-ip}:3000/dashboards), 上传我们预定义的 json 模板文件。 json 文件下载地址:https://moffett-oss-bucket.tos-cn-shanghai.volces.com/dcsm/dcsm-exporter-dashboard.json。

  2. 数据源选择 Prometheus

  3. 进入 Dashboard 查看。

卸载 DCSM Exporter

单机版卸载

  1. 停止并删除容器。

    $ docker stop dcsm-exporter && docker rm dcsm-exporter 
    
  2. 删除镜像。

    $ docker rmi moffett/dcsm-exporter:1.0.0-1.0.0
    
  3. 确认是否卸载完成。

    $ docker ps |grep dcsm-exporter 
    $ docker image |grep dcsm-exporter 
    

集群版卸载

  1. 删除名字空间下的所有资源,如 DaemonSet、Service 等。

    $ kubectl delete all --all namespace=moffett-monitoring
    
  2. 删除名字空间。

    $ kubectl delete ns moffett-monitoring
    
  3. 确认是否卸载完成。

    $ kubectl get all -A | grep dcsm-exporter
    $ kubectl get ns | grep moffett-monitoring