dcgm+Prometheus+grafana+loki+promtail搭建显卡监控及日志管理系统

dcgm+Prometheus+grafana+loki+promtail搭建显卡监控及日志管理系统

一.组件介绍

DCGM提供了对数据中心 GPU 的管理和监控功能。负责收集 GPU 相关的性能数据和健康状态指标

Prometheus定期抓取指定的目标来收集指标数据,用来收集和存储来自 DCGM 的 GPU 指标数据

Grafana是可视化平台,用来可视化loki和Prometheus收集的数据

loki用来处理和存储日志数据

promtail收集并将日志通过http发送给loki的 Distributor 组件

二.数据流动

GPU 指标数据流:DCGM→Prometheus→Grafana

日志数据流:promtail→loki→Grafana

三.配置过程

文件树:

/home/czy/prometheus-dcgm
├─config
│      loki-config.yaml
│      promtail-config.yaml
├─loki
│      chunks
│      index
│
├─promtail
│      log
├─var
├──────log
│       └─dcgm-exporter
│
├─docker-compose.yml
│
└─prometheus.yml

docker-compose.yml

version: "3"

networks:
  monitoring:
    driver: bridge

services:
  dcgm-exporter:
    image: nvidia/dcgm-exporter
    container_name: dcgm-exporter
    runtime: nvidia
    volumes:
      - ./var/log/dcgm-exporter:/var/log/
    ports:
      - "9400:9400"
    # environment:
    #   - DCGM_LOG_LEVEL=DEBUG
    #   - DCGM_LOG=1
    #   - DCGM_LOG_DIR=./var/log/dcgm-exporter
    networks:
      - monitoring
    cap_add:
      - SYS_ADMIN
    
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    ports:
      - "9999:9090"  # Prometheus 默认端口是 9090
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    networks:
      - monitoring
  loki:
    image: grafana/loki:2.0.0
    container_name: loki
    restart: unless-stopped
    ports:
      - 3100:3100
    volumes:
      - ./config:/etc/loki/config
      - ./loki/index:/opt/loki/index
      - ./loki/chunks:/opt/loki/chunks
    user: "root"
    command: -config.file=/etc/loki/config/loki-config.yaml
    networks:
      - monitoring

  promtail:
    image: grafana/promtail:2.0.0
    container_name: promtail
    restart: unless-stopped
    volumes:
      - ./var/log/dcgm-exporter:/var/log
      - ./config:/etc/promtail/config
      - ./data/log:/logs
    user: "root"
    command: -config.file=/etc/promtail/config/promtail-config.yaml
    networks:
      - monitoring

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    networks:
      - monitoring

prometheus.yml

global:
  scrape_interval: 30s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'dcgm'
    scrape_interval: 5s
    static_configs:
      - targets: ['dcgm-exporter:9400']

loki-config.yaml

# 启用或禁用 Loki 的身份验证功能
auth_enabled: false  # 这里设置为 false,表示不启用身份验证

server:
  # Loki 监听 HTTP 请求的端口
  http_listen_port: 3100  # Loki 的接收端口,这里设置为 3100。即使 Loki 其他配置变化,这个端口不需要更改

ingester:
  lifecycler:
    address: 127.0.0.1  # Lifecycler 组件的绑定地址,通常设置为本地地址
    ring:
      kvstore:
        store: inmemory  # 使用内存存储来管理 ingester 的 ring 信息
      replication_factor: 1  # 设置副本因子为 1,表示每个日志条目只存储一个副本
    final_sleep: 0s  # 在生命周期结束前等待的时间,这里设置为 0 秒

  # 每个 chunk 的空闲时间,超过此时间未使用的 chunk 将被认为是空闲的
  chunk_idle_period: 5m  # 设置为 5 分钟

  # chunk 保留时间,指在处理完后保留 chunk 的时间
  chunk_retain_period: 30s  # 设置为 30 秒

  # 最大传输重试次数,设置为 0 表示不进行重试
  max_transfer_retries: 0  # 设置为 0 次

schema_config:
  configs:
    - from: 2021-06-04  # 从该日期开始使用此配置
      store: boltdb  # 存储类型为 BoltDB
      object_store: filesystem  # 对象存储类型为文件系统
      schema: v11  # 使用 schema 版本 v11
      index:
        prefix: index_  # 索引的前缀
        period: 168h  # 索引周期为 168 小时,即 7 天

storage_config:
  boltdb:
    directory: /tmp/loki/index  # BoltDB 存储的目录位置,用于存储索引

  filesystem:
    directory: /tmp/loki/chunks  # 文件系统存储的目录位置,用于存储 chunk 数据

limits_config:
  enforce_metric_name: false  # 是否强制执行指标名称的规范,这里设置为 false,不强制
  reject_old_samples: true  # 是否拒绝旧的样本
  reject_old_samples_max_age: 168h  # 设置拒绝样本的最大年龄为 168 小时,即 7 天
  ingestion_rate_mb: 15  # 每秒允许的最大 ingestion 速率为 15 MB

chunk_store_config:
  # 最大回溯周期,指在查询中允许回溯的最大时间
  max_look_back_period: 0s

table_manager:
  # 启用或禁用日志数据的保留删除功能
  retention_deletes_enabled: false  # 这里设置为 false,表示不启用保留删除
  # 数据保留时间
  retention_period: 0s  # 设置为 0 秒,表示不进行保留


promtail-config.yaml

server:
  log_level: info
  http_listen_port: 9081

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki:3100/loki/api/v1/push

scrape_configs:
  - job_name: system
    static_configs:
      - targets:
          - localhost
        labels:
          job: varlogs
          __path__: /var/log/*.log

运行 docker-compose up -d

在3000端口配置Prometheus数据源的dcgm数据可视化json样式

在这里插入图片描述

查看loki日志数据源

在这里插入图片描述

四、配置详解

Grafana Loki笔记04: Promtail简介和配置详解 | 青蛙小白 (frognew.com)

在本项目中,Promtail 扮演了一个日志代理(Agent)的角色,负责将本地日志内容收集并发送到 Loki。Promtail 的配置和日志抓取机制是通过 static_configs 静态配置实现的。在 promtail-config.yaml 文件中,通过 scrape_configs.static_configs.labels.path 字段来指定要抓取的日志路径。

日志抓取路径设置: 在 promtail-config.yaml 中,scrape_configs.static_configs.labels.path 被设置为 /var/log/*.log。使得 Promtail 监视 /var/log/ 目录下所有以 .log 结尾的文件。

Docker Compose 配置: 在 docker-compose.yml 中,通过将 Promtail 容器的 /var/log 目录与本地的 ./var/log/dcgm-exporter 目录绑定,使得 Promtail 可以访问到本地日志文件。此外,将 DCGM Exporter 的 /var/log/ 目录绑定到本地的 ./var/log/dcgm-exporter 目录,从而实现 Promtail 对 DCGM Exporter 容器日志内容的抓取。

static_configs具体内容

# 配置在当前机器上查找发现目标。
# 这是Prometheus服务发现代码所需的,但对于只能查看本地机器上的文件的Promtail来说并不适用。
# 因此,它只应该具有localhost的值,或者可以完全排除它,Promtail将应用localhost的默认值。

targets:
  - localhost

# 定义要抓取的文件和要应用于__path__文件定义的所有流的可选附加标签集合。

labels:
  # 从中加载日志的路径。可以使用通配符模式(例如,/var/log/*.log)。
  __path__: <string>

  # 用于排除要加载的文件。也可以使用通配符模式。
  __path_exclude__: <string>

  # 分配给日志的附加标签
  [ <labelname>: <labelvalue> ... ]

docker-compose.yml 中,所有容器通过桥接网络连接,因此 Promtail 容器能够通过容器名直接访问 Loki 容器。在 Promtail 的配置中,clients.url 字段被设置为 http://loki:3100/loki/api/v1/push,这是Promtail 向 Loki 发送日志数据的 API 端点。

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值