DCSM Exporter 用户手册
DCSM Exporter 是基于 DCSM 构建的指标采集工具,用于在单机或集群环境中实时监控墨芯计算卡的负载与健康状态。DCSM Exporter 支持导出墨芯计算卡的运行数据,兼容 Prometheus 格式。
须知
DCSM Exporter 在 Kubernetes 集群中可单独部署或通过 SPU Operator 统一部署,任选一种方式以避免冲突。通过 SPU Operator 部署的详细操作,请参见 MOFFETT SPU Operator 用户手册。
部署 DCSM Exporter
DCSM Exporter 可部署在单机容器中运行,也可在 Kubernetes 集群中的墨芯设备节点上以 DaemonSet 方式部署。
前提条件
- 安装 SOLA Toolkit,具体请参见 SOLA Toolkit 安装指南。 
- 使用单机容器方式部署时,需安装 MOFFETT Container Toolkit,具体请参见 MOFFETT Container Toolkit 用户手册。 
- 使用 Kubernetes 集群方式部署时,需安装 Kubernetes 集群,具体请参见 Kubernetes 文档。 
操作步骤
获取 DCSM Exporter 容器镜像
docker pull moffett/dcsm-exporter:1.2.0-1.0.0
wget https://moffett-oss-bucket.tos-cn-shanghai.volces.com/images/Ubuntu/business/dcsm/dcsm-exporter_1.2.0-1.0.0.tar
docker load -i dcsm-exporter_1.2.0-1.0.0.tar
单机容器环境部署 DCSM Exporter
- 生成 CDI 规范文件,具体请参见 MOFFETT Container Toolkit 用户手册。 - sudo moffett-ctk cdi generate --driver-root / --output=/etc/cdi/moffett.yaml 
- 启动 DCSM Exporter 容器。 - docker run -itd \ --device moffett.ai/spu=all \ --net=host \ --name=dcsm-exporter \ moffett/dcsm-exporter:1.2.0-1.0.0 \ -f /etc/dcsm-exporter/default-counters.csv \ -c 15000 -a :7788 -d all 
配置 DCSM Exporter 容器的命令行参数或环境变量如下表所示:
| 命令行参数 | 环境变量 | 说明 | 默认值 | 
|---|---|---|---|
| --f,--collectors | DCSM_EXPORTER_COLLECTORS | 指定包含要收集的 DCSM 字段的文件路径。 | /etc/dcsm-exporter/default-counters.csv | 
| -c,--collect-interval | DCSM_EXPORTER_INTERVAL | 指定收集指标的时间间隔,单位:毫秒(ms)。 | 30000 | 
| -a,--address value | DCSM_EXPORTER_LISTEN | 指定监听 HTTP 服务的地址,格式::<port>。 | :7788 | 
| -r,--remote-hostengine-info | DCSM_REMOTE_HOSTENGINE_INFO | 指定 DCSM Exporter 连接特定主机上部署的 mx-hostengine,格式:machine_ip:port。 | DCSM Exporter 容器内部署的 mx-hostengine | 
| -d,--devices | DCSM_EXPORTER_DEVICES_STR | 指定要监控的设备,支持的值:all 或指定设备的 ID,例如:all、0,1、2-4、0,2-4。 确保指定监控的设备在启动容器时挂载的设备范围内,否则会导致容器启动失败。 | all | 
| -k,--kubernetes | 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 | 
通过 --f,--collectors 参数指定的 default-counters.csv 文件默认包含以下两类字段:
- 指标:用于实时采集和反映设备的运行状态与性能数据,如下表所示: - 指标名称 - Prometheus 指标类型 - 描述 - DCSM_FI_DEV_NNCORE_CLOCK - gauge - NNCORE 的时钟频率,单位:Mhz - DCSM_FI_DEV_SPU_TEMP - gauge - SPU 温度,单位:℃ - DCSM_FI_DEV_FAN_SPEED - gauge - 风扇调速比(单位:%) - DCSM_FI_DEV_FAN_SPEED_RPM - gauge - 风扇转速(RPM) - 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 错误总数 - 关于 Prometheus 指标类型的详细信息,请参见 Understanding metric types。 
- Label:用于描述指标来源设备的静态特征。这些字段不会作为指标上报,而是作为 Prometheus 指标的标签附加在每条指标数据上,如下表所示: - label 名称 - 描述 - DCSM_FI_DEV_SERIAL - 设备序列号(Serial Number,SN) - DCSM_FI_DRIVER_VERSION - 驱动版本 - DCSM_FI_MXML_VERSION - MXML 版本 
Kubernetes 集群环境部署 DCSM Exporter
在 Kubernetes 集群中,创建 DCSM Exporter 的 DaemonSet 和 Service,步骤如下:
- 创建名为 - moffett-monitoring的 namespace。- kubectl create ns moffett-monitoring 
- 创建 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.2.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 
- 部署 DCSM Exporter。 - kubectl create -f dcsm-exporter.yaml 
部署后验证
curl http://<host_ip>:<port>/metrics # 终端中验证
http://<host_ip>:<port>/metrics # 浏览器中验证
kubectl get pod -n moffett-monitoring -o wide # 查看 NAMESPACE 为 moffett-monitoring 的所有 Pod 的详细信息
kubectl get svc -n moffett-monitoring # 查询 NAME 为 moffett-dcsm-exporter 的 CLUSTER-IP 和 PORT
curl http://<CLUSTER-IP>:<PORT>/metrics # 查询 DCSM Exporter 输出的指标数据
配置 Prometheus
DCSM Exporter 支持接入 Prometheus,根据部署 DCSM Exporter 的方式选择以下一种配置方式:
- 单机容器环境,主机上安装 Prometheus 并直接修改配置文件。 
- Kubernetes 集群环境,在 Kubernetes 集群中部署 Prometheus 并配置 Service Monitor。 
关于如何使用 Prometheus 的详细信息,请参见 Prometheus Docs。
单机容器环境
安装 Prometheus,并修改其配置文件,步骤如下:
- 获取 Prometheus 安装包,并解压缩。 - tar xvfz prometheus-<release>.tar.gz cd prometheus-<release> 
- 修改 Prometheus 配置文件,添加监控目标。 - 在 - prometheus.yml文件的- scrape_configs字段,添加监控目标(- targets),示例如下:- scrape_configs: - job_name: "spu-metrics" static_configs: - targets: ["<host_ip>:7788"] # 添加监控目标主机的 IP 地址及端口号,DCSM Exporter 默认监听端口为 7788;可添加多个目标 
- 重启 Prometheus 服务,使配置生效。Prometheus 默认监听端口为 9090。 - ./prometheus --config.file=prometheus.yml & 
- 主机上通过浏览器访问 - http://<host_ip>:9090,检索指标数据。
Kubernetes 集群环境
在 Kubernetes 集群环境中,使用 Prometheus Operator 和 Service Monitor 自动发现和监控 DCSM Exporter。Service Monitor 配置会通过 Operator 自动同步到 Prometheus 中。
- 部署 - kube-prometheus-stack。- # 添加 Helm 仓库(只需执行一次) helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update # 安装 kube-prometheus-stack helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \ --create-namespace --namespace prometheus \ --set prometheus.service.type=NodePort \ # 将 ClusterIP 修改为 NodePort(默认端口号为 30090) --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false # 指定 Prometheus 能够监控集群中所有命名空间的 ServiceMonitor - 更多关于安装 - kube-prometheus-stack的详细信息,请参见 kube-prometheus-stack。
- 验证已部署的 Prometheus 服务及端口信息。 - kubectl get svc -A | grep prometheus 
- 部署 Service Monitor。 - 须知 - 如果通过 SPU Operator 部署 DCSM Exporter,无需该步骤,可通过 SPU Operator 启用 Service Monitor 服务,具体请参见 MOFFETT SPU Operator 用户手册。 - a. 创建配置文件。 - # 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" - b. 应用配置。 - kubectl apply -f service-monitor.yaml 
- 通过浏览器访问 - http://<node_ip>:30090,检索指标数据。
使用 Grafana
Grafana 是一款开源的可视化与分析工具,可通过仪表盘(Dashboard)帮助收集、关联并可视化数据。在 Kubernetes 集群中部署的 kube-prometheus-stack 集成了 Grafana Dashboard。
单机容器环境
- 根据 Download Grafana 页面指示,选择对应平台的安装包部署 Grafana,完成后 Grafana 默认监听端口为 3000。 
- 通过浏览器访问 - http://<host_ip>:3000,进入 Grafana 登录页面。使用用户名- admin和密码- admin登录 Grafana 主界面。
- 将 Grafana 的数据源设置为 Prometheus,具体操作请参见 Configure the Prometheus data source。 
Kubernetes 集群环境
默认情况下,Grafana 服务通过 ClusterIP 类型监听端口,仅限集群内部访问。为便于通过浏览器访问,可将其修改为 NodePort 类型,方式类似于 Prometheus Dashboard 的访问方式。步骤如下:
- 创建 - grafana-patch.yaml补丁文件,修改 Grafana 服务的对外端口为- NodePort并指定端口号。NodePort 端口号取值在 30000~32767 闭区间范围内,这里以 32300 为例。- vim grafana-patch.yaml- spec: type: NodePort # 服务监听方式 ports: - port: 80 # 集群内访问端口号 targetPort: 3000 # Pod 内部端口号 nodePort: 32300 # 节点主机上暴露的端口号 
- 修改服务监听使用指定的 - NodePort。- kubectl patch svc <grafana-svc-name> -n prometheus --patch "$(cat grafana-patch.yaml)" # 通过 kubectl get svc -A | grep grafana 命令查询 <grafana-svc-name> 
- 验证已修改的 Grafana 监听端口信息。 - kubectl get svc -A | grep grafana 
- 通过浏览器访问 - http://<node_ip>:32300Grafana 主页面,登录用户名:- admin;密码:- prom-operator。- 须知 - 登录 Grafana 的密码可通过 - kubectl --namespace prometheus get secrets <grafana-svc-name> -o jsonpath="{.data.admin-password}" | base64 -d ; echo命令查询获取。
应用 DCSM Dashboard
参见 Import dashboards 导入墨芯提供的 Dashboard 模板(.json 文件),创建 MOFFETT DCSM Exporter Dashboard。可根据实际需求自定义 Dashboard 内容。
停用 DCSM Exporter
当更新 SOLA Toolkit 时,DCSM Exporter 组件会影响 SOLA Toolkit 卸载,执行以下步骤在指定节点停用 DCSM Exporter。
单机容器环境
- 检查容器环境的 DCSM Exporter。 - docker ps | grep dcsm-exporter 
- 停止 DCSM exporter 容器。 - docker stop <container-name> # 或使用 container ID 
Kubernetes 集群环境
利用节点 Taint 防止 DCSM Exporter 组件的 Pod 在指定节点上被调度
- 查询集群中部署的 DCSM Exporter 所有 Pod 的详细信息。 - kubectl get pod -l app.kubernetes.io/name=dcsm-exporter -n moffett-monitoring -o wide 
- 为集群的指定节点添加污点(Taint)并删除该节点上 DCSM Exporter 相关 Pod。 - kubectl get nodes # 查询集群的所有节点 kubectl taint nodes <node_name> NeedFix=true:NoSchedule # 为指定节点添加 Taint,标记为不可调度 kubectl describe node <node_name> | grep Taints # 验证节点 Taint 是否生效 kubectl delete pod -l app.kubernetes.io/name=dcsm-exporter -n moffett-monitoring --field-selector spec.nodeName=<node_name> # 删除指定节点上 DCSM Exporter 的 Pod kubectl get pod -n moffett-monitoring -o wide # 验证 Pod 状态 - 如需恢复指定节点上的 DCSM Exporter 相关 Pod,移除该节点上的 Taint。 - kubectl taint nodes <node_name> NeedFix=true:NoSchedule- 
利用节点亲和性防止 DCSM Exporter 组件的 Pod 在指定节点上被调度
- 给需要停用 DCSM Exporter 组件的节点添加 - dcsm-exporter-disabled=true标签。- kubectl label node <node_name> dcsm-exporter-disabled=true # 添加标签 kubectl get nodes --show-labels | grep <node_name> # 验证标签 
- 添加亲和性配置。 - 在 - dcsm-exporter.yaml文件的- spec字段添加- requiredDuringSchedulingIgnoredDuringExecution配置,指定有- dcsm-exporter-disabled=true标签的节点不运行 DCSM Exporter 组件的 Pod。- affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: dcsm-exporter-disabled operator: NotIn values: - "true" 
- 应用更新的 DCSM Exporter 的 DaemonSet 配置。 - kubectl apply -f dcsm-exporter.yaml 
- 验证 DCSM Exporter 组件的 Pod 在指定节点上停用。 - kubectl get pod -o wide -n moffett-monitoring - 如需在指定节点上恢复 DCSM Exporter 组件,删除标签。 - kubectl label node <node_name> dcsm-exporter-disabled- 
卸载 DCSM Exporter
单机容器环境
- 停用并删除容器。 - docker stop dcsm-exporter && docker rm dcsm-exporter 
- 删除镜像。 - docker rmi moffett/dcsm-exporter:1.2.0-1.0.0 
- 验证卸载是否完成。 - docker ps | grep dcsm-exporter docker images | grep dcsm-exporter 
Kubernetes 集群环境
- 删除 DCSM Exporter 对应 namespace 下特定资源类型的所有资源,包括 Pod、Deployment、Service、ReplicaSet 等。 - kubectl delete all --all -n moffett-monitoring 
- 删除 DCSM Exporter 的 namespace。 - kubectl delete ns moffett-monitoring 
- 验证卸载是否完成。 - kubectl get all -A | grep dcsm-exporter kubectl get ns | grep moffett-monitoring