logo
logo

DeepFlow 最佳实践 —— NVIDIA GPU 指标数据集成及统一观测

李飞 2024-08-15

DeepFlow 可观测性平台以 eBPF 技术实现的零侵扰(Zero Code)分布式追踪为核心,不仅实现了面向应用的全栈(Full Stack)观测能力,同时通过开放的数据集成接口和智能标签(SmartEncoding)技术支持汇聚外部的 Metrics、Tracing、Logging、Profiling 等各类的海量观测数据,消除运维数据孤岛,为 IT 系统的运行维护、安全监测、运营分析提供统一的可观测性数据综合解决方案。

在本篇实践案例中,将向您介绍如何在 DeepFlow 可观测性平台快速集成 NVIDIA GPU 指标数据,补充、丰富可观测性数据湖的信号种类,面向 AI 智算场景提供 GPU 指标与主机指标、应用调用指标的统一观测能力,提升 AI 智算应用的质量监控、故障诊断能力。

0x0: DeepFlow NVIDIA GPU 指标数据集成方案

整体架构

我们使用 DeepFlow Agent + Grafana Alloy + DCGM Exporter 实现 NVIDIA GPU 服务器的应用观测数据、主机指标数据、GPU 指标数据的统一采集。Grafana Alloy 是由 Grafana Labs 开发的用于多类观测数据的搜集工具。DCGM Exporter 是由 NVIDIA 公司提供的 GPU 指标 Exporter。

GPU 指标数据集成方案的关键点包括:

  • 在 GPU 服务器中部署 DCGM Exporter,采集 GPU 指标并提供向 Alloy 提供暴露接口;
  • 在 GPU 服务器中部署 Grafana Alloy,采集主机指标和 DCGM Exporter 的暴露指标,并发送到主机内部署的 DeepFlow Agent;
  • 在 GPU 服务器中部署 DeepFlow Agent,采集应用观测数据,并汇聚 Alloy 的主机指标数据、GPU 指标数据后,统一回送至 DeepFlow Server;
  • DeepFlow Server 汇聚 DeepFlow Agent 回送的所有数据,并打上统一的标签,构建统一的数据观测能力。

NVIDIA GPU 指标数据集成部署架构NVIDIA GPU 指标数据集成部署架构

部署 DeepFlow Agent

安装指导链接

部署并运行后,DeepFlow Agent 开始对云端 K8s 集群中的应用服务进行零侵扰的 eBPF 数据采集,支持获取的数据主要包括:

  • 应用调用的 RED 指标(支持的应用协议详见链接
  • 分布式调用链追踪数据
  • 应用实例 CPU、Memory Profiling 数据
  • 慢文件读写事件
  • 网络流量的 L3 吞吐、L4 吞吐、TCP 性能、TCP 异常、TCP 时延等指标

同时 DeepFlow Agent 默认开启数据集成接口(默认端口号为 38086)用于其他 Metrics、Tracing、Logging、Profiling 等数据的接收,其中用于 Prometheus 指标数据 Remote Write 的接口 API 为:/api/v1/prometheus

部署 Grafana Alloy

第 1 步:安装 Grafana Alloy

安装指导链接

第 2 步:修改运行配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
cat << EOF > /etc/alloy/config.alloy
logging {
level = "warn"
}

prometheus.exporter.unix "local_system" {
include_exporter_metrics = true
disable_collectors = ["mdadm"]
}

prometheus.scrape "scrape_metrics" {
targets = prometheus.exporter.unix.local_system.targets
forward_to = [prometheus.relabel.filter_metrics.receiver]
scrape_interval = "10s"
}

prometheus.scrape "nvdia_gpu_metrics" {
targets = [{"__address__" = "127.0.0.1:9400"}]

forward_to = [prometheus.relabel.filter_metrics.receiver]
scrape_interval = "10s"
metrics_path = "/metrics"
}

prometheus.relabel "filter_metrics" {
rule {
action = "replace"
replacement = "IP_OF_HOST"
target_label = "instance"
}
forward_to = [prometheus.remote_write.deepflowagent.receiver]
}

prometheus.remote_write "deepflowagent" {
endpoint {
url = "http://127.0.0.1:38086/api/v1/prometheus"
EOF
DEFAULT_INTERFACE=$(ip route | grep default | awk '{print $5}')
DEFAULT_IP=$(ip -4 addr show $DEFAULT_INTERFACE | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
sed -i "s|IP_OF_HOST|$DEFAULT_IP|g" /etc/alloy/config.alloy

注:DeepFlow Server 收到 DeepFlow Agent 回送的 Metrics 数据后,会尝试根据数据中的 instance 标签值标记更多的 DeepFlow 原生的可观测性标签(比如 chost、vpc、az、cloud、region 等),因此在 Metrics 数据集成时,上述 “filter_metrics” 的 “relabel” 策略用于确保 instance 填入正确的主机 IP。否则,在 DeepFlow 平台中将产生数据孤岛,且只能通过 tag.instance、tag.agent_hostname、tag.*** 等原生 Prometheus 标签检索分析所集成的 Metrics 数据。

第 3 步:启动服务

1
2
sudo systemctl start alloy
sudo systemctl enable alloy

(可选步骤)检查服务状态

1
sudo systemctl status alloy -l

(可选步骤)检查运行日志

1
sudo journalctl -u alloy -e

部署 DCGM Exporter

安装指导链接

第 1 步:安装

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

注:安装前请确保系统中已部署 Docker。

第 2 步:检查

安装后等待 1-2 分钟,执行 curl 命令检查 GPU 数据是否正确暴露

1
curl localhost:9400/metrics

0x1: GPU 指标、主机指标与应用调用指标的统一观测

在 DeepFlow 的视图功能中内置了多个不同维度的监控视图,面向 GPU 服务器提供 GPU 指标与主机指标、应用调用指标的统一观测能力,包括:

  • 「GPU 指标详情监控」视图,实时观测 NVIDIA GPU 运行性能。
  • 「主机指标详情监控」视图,实时观测主机运行性能。
  • 「主机应用详情监控」视图,实时观测应用调用性能。

GPU 指标详情监控

在「GPU 指标详情监控」视图的下拉框中选择所关注的 GPU 服务器,便可自动过滤出服务器各 GPU 卡的实时性能,包括:

  • 关键性能指标统计列表
  • 资源使用率的变化曲线
  • 硬件指标(温度、功耗、时钟频率)的变化曲线
  • PCIe 指标变化曲线
  • 其他指标的变化曲线

GPU 指标详情监控视图GPU 指标详情监控视图

主机指标详情监控

在「主机指标详情监控」视图的下拉框中选择所关注的 GPU 服务器,便可自动过滤出服务器的主机系统实时性能,包括:CPU、内存、负载、磁盘、文件 IO、网络、进程等相关的监测指标曲线。

主机指标详情监控视图主机指标详情监控视图

主机应用详情监控

在「主机应用详情监控」视图的下拉框中选择所关注的 GPU 服务器,便可自动过滤出服务器的业务应用互访实时性能,包括:

  • 业务应用的互访拓扑/互访关系
  • 请求速率曲线
  • 响应速率曲线
  • 客户端异常比例曲线
  • 服务端异常比例曲线
  • 应用平均响应时延曲线
  • 应用最大响应时延曲线
  • 各应用协议的访问性能统计列表

主机应用详情监控视图主机应用详情监控视图

0x2: 什么是 DeepFlow

DeepFlow 是云杉网络开发的一款可观测性产品,旨在为复杂的云原生AI 应用提供深度可观测性。DeepFlow 基于 eBPF 实现了应用性能指标、分布式追踪、持续性能剖析等观测信号的零侵扰Zero Code)采集,并结合智能标签SmartEncoding)技术实现了所有观测信号的全栈Full Stack)关联和高效存取。使用 DeepFlow,可以让云原生及 AI 应用自动具有深度可观测性,从而消除开发者不断插桩的沉重负担,并为 DevOps/SRE 团队提供从代码到基础设施的监控及诊断能力。

GitHub 地址:https://github.com/deepflowio/deepflow

访问 DeepFlow Demo,体验零侵扰、全栈的可观测性。