构建基于 DCGM-Exporter, Node exporter,PROMETHEUS 和 GRAFANA 构建算力监控系统

目录

  • 引言
  • 工具作用
    • 概述
    • DCGM-Exporter
    • Node exporter
    • PROMETHEUS
    • GRAFANA
    • 小结
  • 部署
    • 单容器
      • DCGM-Exporter
      • Node exporter
      • PROMETHEUS
      • GRAFANA
        • Node exporter
        • DCGM-Exporter
    • 多容器
      • Node exporter
      • DCGM-Exporter
      • Docker Compose
  • 参考

引言

本文的是适用对象,是希望通过完全基于Docker ,实现对于一个较小的算力群,比如大学课题组的多台服务器,实现CPU和GPU的资源使用监控。

工具作用

概述

目前的大多数教程都倾向于详细讲解DCGM,Node exporter,PROMETHEUS 和 GRAFANA 的概念,设计和作用,使得这一系统的部署问题变得非常复杂。本文倾向于直接部署直接应用,所以不死磕原理,而直接概述其作用,能够基本认识到它们的作用,然后实现部署。

DCGM-Exporter

  • GitHub: https://github.com/NVIDIA/dcgm-exporter
  • 作用:DCGM-Exporter 主要用于收集主机或者节点上的GPU的数据,并且通过端口暴露数据。

Node exporter

  • GitHub: https://github.com/prometheus/node_exporter
  • 作用:Node exporter 主要用于收集主机或者节点上的CPU,内存,磁盘等硬件信息,并且通过端口暴露数据。

PROMETHEUS

  • GitHub: https://github.com/prometheus/prometheus
  • 作用:Prometheus 主要是作为数据库存储各个主机和节点所暴露出的数据。

GRAFANA

-GitHub: https://github.com/grafana/grafana

  • 作用:grafana 则是通过面板将监控数据进行可视化或者其他操作。

小结

Node exporter 和 DCGM-Exporter 分别用于收集主机或者节点上的数据;而 PROMETHEUS 则负责存储这些数据;GRAFANA 最后将这些监控数据可视化呈现。

部署

单容器

我们可以通过docker命令在主机或者节点上部署容器实现对应的服务

DCGM-Exporter

对于DCGM-Exporter,参考 https://github.com/NVIDIA/dcgm-exporter,我们可以参考它的官方文档的命令予以部署

docker run -d --gpus all --rm -p 9400:9400 nvcr.io/nvidia/k8s/dcgm-exporter:3.3.8-3.6.0-ubuntu22.04

但是其实这个命令可以优化一下,加入自动重启的参数,因为对应的机器偶尔难免需要重启,每次人为的重启容器非常麻烦。同时也需要对应的配置Docker 重启,改进后的命令如下:

docker run -d --restart=always --gpus all -p 9400:9400 nvcr.io/nvidia/k8s/dcgm-exporter:3.3.6-3.4.2-ubuntu22.04

这样一来,DCGM-Exporter 的数据将通过主机的 9400端口暴露。

Node exporter

对于Node exporter,参考https://github.com/prometheus/node_exporter,文档所推荐的命令为

docker run -d \
  --net="host" \
  --pid="host" \
  -v "/:/host:ro,rslave" \
  quay.io/prometheus/node-exporter:latest \
  --path.rootfs=/host

同样可以加入自动重启的参数,改进后的命令为

docker run -d --restart=always\
--net="host" \
--pid="host" \
-v "/:/host:ro,rslave" \
quay.io/prometheus/node-exporter:latest \
--path.rootfs=/host

这样一来,Node exporter 的数据将通过主机的 9100端口暴露。

PROMETHEUS

前面已经提到,DCGM-Exporter 和 Node exporter 暴露数据以后,我们需要 PROMETHEUS 将数据保存起来,所以我们需要通过配置文件告诉 PROMETHEUS 暴露数据的exporter 在哪里,
所以我们需要编写配置文件,以Node exporter 为例,我们可以编写 ·prometheus_cpu.yml· 的配置文件:

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "NAME YOU LIKE"
    static_configs:
      - targets: ['1.1.1.1:9100']
        labels:
            instance: 'name1'
      - targets: ['2.2.2.2:9100']
        labels:
            instance: 'name2'
      - targets: ['3.3.3.3:9100']
        labels:
            instance: 'name3'
      - targets: ['4.4.4.4:9100']
        labels:
            instance: 'name4'

因为 prometheus 是一个数据库容器,所以我们需要对它做数据持久化,把它的数据挂载在本地,所以我们可以运行如下命令进行部署

sudo docker run -d \
--restart=always \
--net="host" \
--pid="host" \
-v "/home/xxx/node_export_data:/host:ro,rslave" \
-v "./prometheus_cpu.yml:/etc/prometheus/prometheus.yml" \
-p 9090:9090
quay.io/prometheus/node-exporter:latest \
--path.rootfs=/host

对于 DCGM-Exporter 所对应的GPU的数据同理操作即可。
于是我们可以通过我们所配置的9090端口访问prometheus。

GRAFANA

在数据成功由 prometheus 保存以后,接下来我们需要使用面板将其可视化
此时可以部署GRAFANA 实现,按照官方文档的描述,可以通过运行

docker run -d -p 3000:3000 --name=grafana grafana/grafana-enterprise

来运行 GRAFANA ,然后访问对应的3000即可。
需要注意的是,对于不同的node exporter 需要使用不同的dashboard

  • Node exporter:Node Exporter Full
  • DCGM-Exporter: NVIDIA DCGM Exporter Dashboard
Node exporter

在这里插入图片描述
图源:https://grafana.com/api/dashboards/1860/images/7994/image

DCGM-Exporter

在这里插入图片描述
图源:https://grafana.com/api/dashboards/12239/images/8088/image

然后我们通过登录 GRAFANA ,配置prometheus数据源,选择不同的dashboard,即可实现监控数据的可视化;

多容器

事实上,当我们面对一个计算机集群部署时候,我们不太可能逐容器部署,我们往往会在需要监控的机器上部署DCGM-Exporter和Node exporter,而选择一台机器作为Server,来同时承担 PROMETHEUS 和 GRAFANA 的角色,并且这台机器本身可能也要部署 DCGM-Exporter和Node exporter,于是,我们需要使用Docker compose 实现多容器同时部署;

Node exporter

对于本机的 Node exporter,我们依然是单独部署,然后在配置prometheus时,使用主机IP地址

      - targets: ['1.2.3.6:9100']
        labels:
            instance: 'localhost'

DCGM-Exporter

对于本机的DCGM-Exporter,则可以通过Docker compose 一次性部署;
假如我们在docker compose 里为 DCGM-Exporter 取的名字是gpu_exporter
则在编写prometheus_gpu.yml时,我们可以直接配置

      - targets: ['gpu_exporter:9400']
        labels:
          instance: 'localhost'

Docker Compose

加入我们已经提前写好了 prometheus_cpu.ymlprometheus_gpu.yml
那么我们可以同时在一台机器上部署 DCGM-Exporter, PROMETHEUS 和 GRAFANA,docker-compose.yml的内容如下:

version: '3.8'

services:
  prometheus_cpu:
    image: prom/prometheus:latest
    container_name: prometheus_cpu
    user: root
    volumes:
      - /path/prometheus_cpu.yml:/etc/prometheus/prometheus.yml
      - /path/prometheus_cpu_data:/prometheus 
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus/'
      - '--storage.tsdb.retention.time=45d'
    ports:
      - "9200:9090"
    networks:
      - monitoring

  prometheus_gpu:
    image: prom/prometheus:latest
    container_name: prometheus_gpu
    user: root
    volumes:
      - /path/prometheus_gpu.yml:/etc/prometheus/prometheus.yml
      - /path/prometheus_gpu_data:/prometheus 
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus/'
      - '--storage.tsdb.retention.time=45d'
    ports:
      - "9800:9090"
    networks:
      - monitoring
    depends_on:
      - gpu_exporter

  gpu_exporter:
    image: nvidia/dcgm-exporter:3.3.6-3.4.2-ubuntu22.04
    container_name: gpu_exporter
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
    ports:
      - "9400:9400"
    networks:
      - monitoring
    deploy:
      resources:
        reservations:
          devices:
            - capabilities: [gpu]

networks:
  monitoring:
    driver: bridge

理论上来说,可以同时部署上 GRAFANA,但是因为我们在部署的时候并没有成功,后面把 GRAFANA 部署到另外一台机器上得以实现;
但是此处想重点表达的是 prometheus_cpu 和 prometheus_gpu 和 gpu_exporter 是可以实现一次性部署的。
此处可以给出一个由GitHub Copilot 协助完成的完整的docker-compose.yml 以供参考

version: '3.8'

services:
  prometheus_cpu:
    image: prom/prometheus:latest
    container_name: prometheus_cpu
    user: root
    volumes:
      - /path/prometheus_cpu.yml:/etc/prometheus/prometheus.yml
      - /path/prometheus_cpu_data:/prometheus 
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus/'
      - '--storage.tsdb.retention.time=45d'
    ports:
      - "9200:9090"
    networks:
      - monitoring

  prometheus_gpu:
    image: prom/prometheus:latest
    container_name: prometheus_gpu
    user: root
    volumes:
      - /path/prometheus_gpu.yml:/etc/prometheus/prometheus.yml
      - /path/prometheus_gpu_data:/prometheus 
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus/'
      - '--storage.tsdb.retention.time=45d'
    ports:
      - "9800:9090"
    networks:
      - monitoring
    depends_on:
      - gpu_exporter

  gpu_exporter:
    image: nvidia/dcgm-exporter:3.3.6-3.4.2-ubuntu22.04
    container_name: gpu_exporter
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
    ports:
      - "9400:9400"
    networks:
      - monitoring
    deploy:
      resources:
        reservations:
          devices:
            - capabilities: [gpu]

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
    volumes:
      - grafana_data:/var/lib/grafana
    networks:
      - monitoring
    depends_on:
      - prometheus_cpu
      - prometheus_gpu

networks:
  monitoring:
    driver: bridge

volumes:
  grafana_data:

在编写完 docker-compose.yml 文件以后,在对应的文件下,执行命令:

docker-compose up

即可运行服务,至此,可完成对一个小的计算机群的算力资源的监控。

参考

  • HOW TO MONITOR NVIDIA GPUs USING DCGM, PROMETHEUS AND GRAFANA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/910226.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基因组学与个性化健康:精准医疗的未来方向

基因组学&#xff08;Genomics&#xff09;是指对基因组&#xff0c;即一个生物体的全部基因和遗传信息进行分析和研究的科学&#xff0c;旨在探索基因在生物体中的功能、相互作用及其对健康和疾病的影响。个性化健康&#xff08;Personalized Health&#xff09;则是基于个体的…

阅读个位数?1分钟学会用AI做爆款,轻松涨粉不是梦

从去年开始&#xff0c;AI造就的视觉艺术就在各个平台上疯狂蔓延&#xff0c;人类用AI一年生成的内容&#xff0c;比过往几千年加起来都多。 网络上铺天盖地都是搞AI&#xff0c;但大部分人真的是在搞AI吗&#xff1f;并不尽然&#xff0c;大部分人只是想用AI搞钱。 更多实操…

发现 API 的 5 种方法

在处理目标时&#xff0c;最值得测试的部分是其 API。API 是动态的&#xff0c;它们比应用程序的其他部分更新得更频繁&#xff0c;并且负责许多后端繁重的工作。在现代应用程序中&#xff0c;我们通常会看到 REST API&#xff0c;但也会看到其他形式&#xff0c;例如 GraphQL …

Netty 如何自动探测内存泄露的发生

本文基于 Netty 4.1.112.Final 版本进行讨论 本文是 Netty 内存管理系列的最后一篇文章&#xff0c;在第一篇文章 《聊一聊 Netty 数据搬运工 ByteBuf 体系的设计与实现》 中&#xff0c;笔者以 UnpooledByteBuf 为例&#xff0c;从整个内存管理的外围对 ByteBuf 的整个设计体系…

51单片机教程(六)- LED流水灯

1 项目分析 基于点亮LED灯、LED灯闪烁&#xff0c;扩展到构成最简单、花样流水灯。 2 技术准备 1 流水灯硬件及原理图 流水灯是由多个LED灯组成的 2 C语言知识点 数组 数组声明&#xff1a;长度不可变 数据类型 数组名称[长度n] // 整数型默认为0&#xff0c;小数型默认…

基础算法——排序算法(冒泡排序,选择排序,堆排序,插入排序,希尔排序,归并排序,快速排序,计数排序,桶排序,基数排序,Java排序)

1.概述 比较排序算法 算法最好最坏平均空间稳定思想注意事项冒泡O(n)O( n 2 n^2 n2)O( n 2 n^2 n2)O(1)Y比较最好情况需要额外判断选择O( n 2 n^2 n2)O( n 2 n^2 n2)O( n 2 n^2 n2)O(1)N比较交换次数一般少于冒泡堆O( n l o g n nlogn nlogn)O( n l o g n nlogn nlogn)O( n l…

SpringBoot基础系列学习(四):Thymeleaf模板

文章目录 一丶什么是模板引擎二丶Thymeleaf 介绍三丶使用引入依赖代码html页面响应 一丶什么是模板引擎 模板引擎是一种将数据和模板结合起来生成最终结果的工具&#xff0c;它将一个模板和一个数据对象作为输入&#xff0c;通过模板解析和渲染生成最终的结果。通俗地说&#…

模块化开发 webpack

模块化开发 & webpack 1、模块化开发 & webpack1.1 webpack 执行过程1.1.1 初始化1.1.2 编译1.1.3 输出 2.1 webpack 基础配置2.1.1 Entry2.1.1.1 context2.1.1.2 Entry类型 2.1.2 output2.1.2.1 filename2.1.2.2 publicPath2.1.2.3 path2.1.2.4 libraryTarget 和 libr…

Spring WebFlux 核心原理(2-3)

1、Project Reactor 高级 1.1、响应式流的生命周期 要理解多线程的工作原理以及 Reactor 中实现的各种内部优化&#xff0c;首先必须了解 Reactor 中响应式类型的生命周期。 1.1.1、组装时 流生命周期的第一部分是组装时&#xff08;assembly-time&#xff09;。 Reactor 提供…

LabVIEW编程过程中为什么会出现bug?

在LabVIEW编程过程中&#xff0c;Bug的产生往往源自多方面原因。以下从具体的案例角度分析一些常见的Bug成因和调试方法&#xff0c;以便更好地理解和预防这些问题。 ​ 1. 数据流错误 案例&#xff1a;在一个LabVIEW程序中&#xff0c;多个计算节点依赖相同的输入数据&#…

AI大模型如何重塑软件开发:从传统流程到未来趋势?

人工智能技术的快速发展&#xff0c;尤其是AI大模型的兴起&#xff0c;正在深刻地改变着软件开发的各个环节。从代码自动生成到智能测试&#xff0c;再到项目管理和安全防护&#xff0c;AI大模型的应用正在提高开发效率、优化产品质量&#xff0c;并带来新的挑战。本报告将探讨…

Spring挖掘:(AOP篇)

学习AOP时,我们首先来了解一下何为AOP 一. 概念 AOP&#xff08;面向切面编程&#xff0c;Aspect Oriented Programming&#xff09;是一种编程技术&#xff0c;旨在通过预编译方式或运行期动态代理实现程序功能的统一管理和增强。AOP的主要目标是在不改变原有业务逻辑代码的…

Rust-宏编程

巴山楚水凄凉地&#xff0c;二十三年弃置身。 怀旧空吟闻笛赋&#xff0c;到乡翻似烂柯人。 沉舟侧畔千帆过&#xff0c;病树前头万木春。 今日听君歌一曲&#xff0c;暂凭杯酒长精神。 ——《酬乐天扬州初逢席上见赠》唐刘禹锡 【哲理】翻覆的船只旁仍有千千万万的帆船经过&a…

计算机网络——网络层导论

转发是局部功能——数据平面 路由是全局的功能——控制平面 网卡 网卡&#xff0c;也称为网络适配器&#xff0c;是计算机硬件中的一种设备&#xff0c;主要负责在计算机和网络之间进行数据传输。 一、主要功能 1、数据传输&#xff1a; 发送数据时&#xff0c;网卡将计算机…

推荐一款非常好用的视频编辑软件:Movavi Video Editor Plus

MovaviVideoEditorPlus(视频编辑软件)可以制作令人惊叹的视频&#xff0c;即使您没有任何视频编辑方面的经验! 该款视频编辑程序没有复杂的设置&#xff0c;只需进行直观的拖放控制。在您的电脑上免费使用MovaviVideoEditor亲身体验它的简单易用性与强大功能! 基本简介 您是否…

基于MPPT最大功率跟踪的光伏发电蓄电池控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于MPPT最大功率跟踪的光伏发电蓄电池控制系统simulink建模与仿真。本系统包括PV模块&#xff0c;电池模块&#xff0c;电池控制器模块&#xff0c;MPPT模块&#xff0c;PWM模…

势不可挡 创新引领 | 生信科技SOLIDWORKS 2025新品发布会·苏州站精彩回顾

2024年11月01日&#xff0c;由生信科技举办的SOLIDWORKS 2025新产品发布会在江苏苏州圆满落幕。现场邀请到制造业的专家学者们一同感受SOLIDWORKS 2025最新功能&#xff0c;探索制造业数字化转型之路。 在苏州站活动开场&#xff0c;达索系统专业客户事业部华东区渠道经理马腾飞…

[Element] el-table修改滚动条上部分的背景色

[Element] el-table修改滚动条上部分的背景色 ::v-deep .el-table__cell .gutter {background: red;}

esp32cam+Arduino IDE在编译时提示找不到 esp_camera.h 的解决办法

多半是因为你的ESP32库升级了&#xff0c;不再是 1.02版本&#xff0c;或者根本就没有 ESp32 库。如果被升级了&#xff0c;还原为1.02版本就可以了。如果没有&#xff0c;按照下述方法添加&#xff1a; 首先&#xff0c;在"文件"->"首选项"->"…

基于SpringBoot的“会员制医疗预约服务管理信息系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“会员制医疗预约服务管理信息系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 医院信息界面图…