Junos 中用于 AI/ML 工作负载的遥测
作者:Shalini Mukherjee
介绍
由于 AI 集群流量需要高吞吐量和低延迟的无损网络,因此 AI 网络的一个关键要素是监控数据的收集。Junos Telemetry 支持对关键性能指标进行细粒度监控,包括拥塞管理和流量负载平衡的阈值和计数器。gRPC 会话支持遥测数据的流式传输。gRPC 是一个基于 HTTP/2 传输的现代、开源、高性能框架。它支持本机双向流式传输功能,并在请求标头中包含灵活的自定义元数据。遥测的第一步是知道要收集哪些数据。然后,我们可以以各种格式分析这些数据。一旦我们收集到数据,重要的是以一种易于监控、做出决策和改进所提供的服务的格式呈现它。在本文中,我们使用由 Telegraf、InfluxDB 和 Grafana 组成的遥测堆栈。该遥测堆栈使用推送模型收集数据。传统的拉动模型需要大量资源,需要人工干预,并且可能在收集的数据中包含信息缺口。推送模型通过异步传递数据克服了这些限制。它们通过使用用户友好的 tags 和名称。一旦数据变成更易读的格式,我们就会将其存储在数据库中,并在交互式可视化中使用它 web 用于分析网络的应用程序。图 1 向我们展示了如何设计此堆栈以实现高效的数据收集、存储和可视化,从网络设备将数据推送到收集器到数据显示在仪表板上以供分析。
TIG 堆栈
我们使用 Ubuntu 服务器安装包括 TIG 堆栈在内的所有软件。
电报
为了收集数据,我们在运行 22.04.2 的 Ubuntu 服务器上使用 Telegraf。本演示中运行的 Telegraf 版本为 1.28.5。
Telegraf 是一个插件驱动的服务器代理,用于收集和报告指标。它使用处理器 plugins 丰富和规范化数据。输出 plugins 用于将这些数据发送到各种数据存储。在本文档中,我们使用两个 plugins:一个用于 openconfig 传感器,另一个用于 Juniper 本机传感器。
流入数据库
为了将数据存储在时间序列数据库中,我们使用 InfluxDB。Telegraf 中的输出插件将数据发送到 InfluxDB,后者以高效的方式存储数据。我们使用 V1.8,因为 V2 及更高版本没有 CLI。
格拉法纳
Grafana 用于可视化这些数据。Grafana 从 InfluxDB 中提取数据,并允许用户创建丰富且交互式的仪表板。这里,我们运行的是版本 10.2.2。
交换机上的配置
为了实现此堆栈,我们首先需要配置交换机,如图 2 所示。我们使用了端口 50051。这里可以使用任何端口。登录 QFX 交换机并添加以下配置。
笔记: 此配置适用于实验室/POC,因为密码以明文传输。使用 SSL 可避免这种情况。
环境
Nginx
如果您无法公开托管 Grafana 的端口,则需要这样做。下一步是在 Ubuntu 服务器上安装 nginx 以用作反向代理。安装 nginx 后,将图 4 所示的行添加到“默认”文件中,并将文件从 /etc/nginx 移动到 /etc/nginx/sites-enabled。
确保防火墙已调整为授予 nginx 服务的完全访问权限,如图 5 所示。
一旦安装了 nginx 并进行了必要的更改,我们就可以从 web 使用安装所有软件的 Ubuntu 服务器的 IP 地址来访问浏览器。
Grafana 中有一个小故障,不允许您重置默认密码。如果遇到此问题,请按照以下步骤操作。
在 Ubuntu 服务器上设置 Grafana 密码需要执行的步骤:
- 转到 /var/lib/grafana/grafana.db
- 安装 sqllite3
o sudo apt 安装 sqlite3 - 在终端上运行此命令
sqlite3 grafana.db - Sqlite 命令提示符打开;运行以下查询:
>从登录名为'admin' 的用户中删除 - 重新启动 grafana 并输入 admin 作为用户名和密码。它会提示输入新密码。
安装所有软件后,在 Telegraf 中创建配置文件,这将有助于从交换机提取遥测数据并将其推送到 InfluxDB。
Openconfig 传感器插件
在 Ubuntu 服务器上,编辑 /etc/telegraf/telegraf.conf 文件以添加所有必需的 plugins 和传感器。对于 openconfig 传感器,我们使用图 6 所示的 gNMI 插件。出于演示目的,添加主机名为“spine1”,用于 gRPC 的端口号为“50051”,交换机的用户名和密码,以及发生故障时重拨的秒数。
在订阅部分,为该特定传感器添加一个唯一名称“cpu”,传感器路径以及从交换机抓取此数据的时间间隔。为所有打开的配置传感器添加相同的插件inputs.gnmi和inputs.gnmi.subscription。(图6)
原生传感器插件
这是用于本机传感器的 Juniper 遥测接口插件。在同一个 telegraf.conf 文件中,添加本机传感器插件 input.jti_openconfig_telemetry,其中字段几乎与 openconfig 相同。为每个传感器使用唯一的客户端 ID;这里我们使用“telegraf3”。此处为该传感器使用的唯一名称是“mem”(图 7)。
最后,添加一个输出插件outputs.influxdb,将传感器数据发送到InfluxDB。此处,数据库名为“telegraf”,用户名为“influx”,密码为“influxdb”(图8)。
编辑完 telegraf.conf 文件后,重新启动 telegraf 服务。现在,检查 InfluxDB CLI,以确保是否为所有唯一传感器创建了测量值。输入“influx”进入 InfluxDB CLI。
如图 9 所示,输入 influxDB 提示符并使用数据库“telegraf”。所有赋予传感器的唯一名称都列为测量值。
要查看任何一个测量的输出,只是为了确保电报文件正确且传感器正常工作,请使用命令“select * from cpu limit 1”,如图 10 所示。
每次对 telegraf.conf 文件进行更改时,请确保停止 InfluxDB,重新启动 Telegraf,然后启动 InfluxDB。
从浏览器登录 Grafana,确保数据正确收集后创建仪表板。
转到连接>InfuxDB>添加新数据源。
- 给这个数据源命名。在这个演示中它是“test-1”。
- 在 HTTP 节下,使用 Ubuntu 服务器 IP 和 8086 端口。
- 在 InfluxDB 详细信息中,使用相同的数据库名称“telegraf”,并提供 Ubuntu 服务器的用户名和密码。
- 单击“保存并测试”。确保您看到“成功”消息。
- 成功添加数据源后,转到仪表板并单击新建。让我们在编辑器模式下创建一些对 AI/ML 工作负载至关重要的仪表板。
Examp传感器图表
以下是amp监控 AI/ML 网络所必需的一些主要计数器。
百分比tage 脊柱-0 上入口接口 et-0/0/1 的利用率
- 选择数据源为test-1。
- 在 FROM 部分,选择测量为“接口”。这是此传感器路径使用的唯一名称。
- 在 WHERE 部分中,选择设备::tag,并且在 tag 值中选择交换机的主机名,即spine1。
- 在 SELECT 部分中,选择要监控的传感器分支;在本例中,选择“field(/interfaces/interface[if_name='et-0/0/0']/state/counters/if_in_1s_octets)”。现在在同一部分中,单击“+”并添加此计算数学 (/50000000000 * 100)。我们基本上是在计算百分比tag使用 400G 接口。
- 确保格式为“时间序列”,并在别名部分中命名图表。
任何队列的峰值缓冲区占用率
- 选择数据源为test-1。
- 在 FROM 部分中,选择测量值为“buffer”。
- 在 WHERE 部分,有三个字段需要填写。选择设备:tag,并且在 tag 值选择交换机的主机名(即 spine-1);并选择 /cos/interfaces/interface/@name::tag 并选择接口(即 et- 0/0/0);并选择队列,/cos/interfaces/interface/queues/queue/@queue::tag 并选择队列号4。
- 在 SELECT 部分中,选择您想要监控的传感器分支;在本例中选择“field(/cos/interfaces/interface/queues/queue/PeakBufferOccupancy)”。
- 确保格式为“时间序列”,并在 ALIAS 部分中命名图表。
您可以在同一张图表上整理多个接口的数据,如图 17 所示,包括 et-0/0/0、et-0/0/1、et-0/0/2 等。
PFC 和 ECN 均值导数
为了找到平均导数(时间范围内的值的差异),请使用原始查询模式。
这是我们用来在一秒内查找 Spine-0 的 et-0/0/1 上两个 PFC 值之间的平均导数的流入查询。
从“接口”中选择导数(平均值(“/interfaces/interface[if_name='et-0/0/0′]/state/pfc-counter/tx_pkts”),1s),其中(“设备”::tag ='Spine-1') AND $timeFilter GROUP BY 时间($interval)
从“接口”中选择导数(平均值(“/interfaces/interface[if_name='et-0/0/8′]/state/error-counters/ecn_ce_marked_pkts”),1s),其中(“设备”::tag ='Spine-1') AND $timeFilter GROUP BY 时间($interval)
输入资源误差意味着导数
资源错误的原始查询平均导数为:
从“接口”中选择导数(平均值(“/interfaces/interface[if_name='et-0/0/0′]/state/error-counters/if_in_resource_errors”),1s),其中(“设备”::tag ='Spine-1') AND $timeFilter GROUP BY 时间($interval)
尾部掉落意味着衍生
尾部丢弃的原始查询平均导数为:
选择导数(平均值(“/cos/interfaces/interface/queues/queue/tailDropBytes”),1s)从“buffer”中获取(“device”::tag ='Leaf-1' 和 “/cos/interfaces/interface/@name”::tag ='et-0/0/0' 和 “/cos/interfaces/interface/queues/queue/@queue”::tag = '4') AND $timeFilter GROUP BY time($__interval) 填充(null)
CPU 利用率
- 选择数据源为test-1。
- 在 FROM 部分中,选择测量值为“newcpu”
- 在 WHERE 中,有三个字段需要填写。选择设备:tag 并在 tag value 选择交换机的主机名(即 spine-1)。并且在 /components/component/properties/property/name 中:tag,并选择 cpuutilization-total AND in name::tag 选择 RE0。
- 在 SELECT 部分中,选择要监控的传感器分支。在本例中,选择“field(state/value)”。
原始查询用于查找多个接口上的多个交换机的尾部丢弃的非负导数(以比特/秒为单位)。
从“buffer”中选择 non_negative_derivative(mean(“/cos/interfaces/interface/queues/queue/tailDropBytes”), 1s)*8,其中(设备::tag =~ /^Spine-[1-2]$/) 和 (“/cos/interfaces/interface/@name”::tag =~ /et-0\/0\/[0-9]/ 或 “/cos/interfaces/interface/@name”::tag=~/et-0\/0\/1[0-5]/) AND $timeFilter GROUP BY 时间($__interval),设备::tag 填充(null)
以下是一些前amp可以为监控 AI/ML 网络而创建的图表。
概括
本文说明了提取遥测数据并通过创建图表对其进行可视化的方法。本文专门讨论了 AI/ML 传感器(包括本机和 openconfig),但该设置可用于所有类型的传感器。我们还提供了您在创建设置时可能遇到的多个问题的解决方案。本文中描述的步骤和输出特定于前面提到的 TIG 堆栈版本。它可能会根据软件版本、传感器和 Junos 版本而发生变化。
参考
适用于所有传感器选项的 Juniper Yang 数据模型浏览器
https://apps.juniper.net/ydm-explorer/
Openconfig 传感器的 Openconfig 论坛
https://www.openconfig.net/projects/models/
公司和销售总部
瞻博网络公司
1133创新方式
桑尼维尔,CA 94089 美国
电话:888.JUNIPER (888.586.4737)
或 +1.408.745.2000
传真:+1.408.745.2100
www.juniper.net
亚太和欧洲、中东和非洲总部
瞻博网络国际有限公司
波音大道 240 号
1119 PZ 史基浦-莱克
荷兰阿姆斯特丹
电话:+31.207.125.700
传真:+31.207.125.701
版权所有 2023 Juniper Networks。保留所有权利。Juniper Networks、Juniper Networks 徽标、Juniper、Junos 和其他商标是 Juniper Networks. inc. 及其附属公司在美国和其他国家/地区的注册商标。其他名称可能是其各自所有者的商标。Juniper Networks 对本文档中的任何错误不承担任何责任。Juniper Networks 保留更改、修改、转让或以其他方式修订本出版物的权利,恕不另行通知。
发送反馈至: 设计中心评论@juniper.net V1.0/240807/ejm5-遥测-junos-ai-ml
文件/资源
![]() |
瞻博网络 Junos 中的 AI ML 工作负载遥测软件 [pdf] 用户指南 Junos 中的遥测适用于 AI ML 工作负载软件、Junos 适用于 AI ML 工作负载软件、AI ML 工作负载软件、工作负载软件、软件 |