收集和监控指标#
指标对于监控和排除 Ray 应用及集群的故障非常有用。例如,如果节点意外终止,您可能需要访问其指标。
Ray 使用 Prometheus 格式记录和发出时间序列指标。Ray 不提供原生的指标存储解决方案。用户需要自行管理指标的生命周期。本页提供了如何从 Ray 集群收集和监控指标的说明。
对于 Kubernetes 用户,请参阅使用 KubeRay 的 Prometheus 和 Grafana。
系统和应用指标#
如果您使用 ray[default]
或包含 Dashboard 组件的其他安装命令,Ray 会导出指标。Dashboard agent 进程负责聚合指标并将其报告给 Prometheus 用于抓取的端点。
系统指标:Ray 导出了许多系统指标。查看系统指标以了解有关发出的指标的更多详细信息。
应用指标:特定于应用的指标对于监控应用状态非常有用。查看添加应用指标以了解如何记录指标。
设置 Prometheus#
您可以使用 Prometheus 从 Ray 集群抓取指标。Ray 不会自动为您启动 Prometheus 服务器。您需要决定在哪里托管并配置它来抓取集群中的指标。
为了快速演示,您可以在本地机器上运行 Prometheus。按照下面的快速入门说明设置 Prometheus 并从本地单节点 Ray 集群抓取指标。
快速入门:在本地运行 Prometheus#
注意
如果您需要在 Ray 集群设置中使用“–temp-dir”更改根临时目录,请按照这些手动步骤在本地设置 Prometheus。
运行以下命令在本地下载并启动 Prometheus,并使用配置从本地 Ray 集群抓取指标。
ray metrics launch-prometheus
您应该看到以下输出
2024-01-11 16:08:45,805 - INFO - Prometheus installed successfully.
2024-01-11 16:08:45,810 - INFO - Prometheus has started.
Prometheus is running with PID 1234.
To stop Prometheus, use the command: 'kill 1234', or if you need to force stop, use 'kill -9 1234'.
您还应该看到 Prometheus 的一些日志
[...]
ts=2024-01-12T00:47:29.761Z caller=main.go:1009 level=info msg="Server is ready to receive web requests."
ts=2024-01-12T00:47:29.761Z caller=manager.go:1012 level=info component="rule manager" msg="Starting rule manager..."
现在您可以从默认的 Prometheus URL http://localhost:9090 访问 Ray 指标。
为了演示 Prometheus 正在从 Ray 抓取指标,请运行以下命令
ray start --head --metrics-export-port=8080
然后转到 Prometheus UI 并运行以下查询
ray_dashboard_api_requests_count_requests_total
然后您可以查看 Ray Dashboard API 随时间变化的请求数量。
要停止 Prometheus,请运行以下命令
# case 1: Ray > 2.40
ray metrics shutdown-prometheus
# case 2: Otherwise
# Run `ps aux | grep prometheus` to find the PID of the Prometheus process. Then, kill the process.
kill <PID>
[可选] 手动:在本地运行 Prometheus#
如果前面的自动脚本不起作用,或者您希望手动安装和启动 Prometheus,请按照以下说明进行。
首先,下载 Prometheus。请确保下载适合您操作系统的正确二进制文件。例如,macOS X 的 Darwin。
然后,使用以下命令将存档解压缩到本地目录
tar xvfz prometheus-*.tar.gz
cd prometheus-*
Ray 提供了一个开箱即用的 Prometheus 配置。运行 Ray 后,您可以在 /tmp/ray/session_latest/metrics/prometheus/prometheus.yml
找到该配置文件。如果您在启动 Ray 集群时指定了 --temp-dir={your_temp_path}
,则配置文件位于 {your_temp_path}/session_latest/metrics/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
# Scrape from each Ray node as defined in the service_discovery.json provided by Ray.
- job_name: 'ray'
file_sd_configs:
- files:
- '/tmp/ray/prom_metrics_service_discovery.json' # or '${your_temp_path}/prom_metrics_service_discovery.json' if --temp-dir is specified
接下来,启动 Prometheus
# With default settings
./prometheus --config.file=/tmp/ray/session_latest/metrics/prometheus/prometheus.yml
# With specified --temp-dir
./prometheus --config.file={your_temp_path}/session_latest/metrics/prometheus/prometheus.yml
注意
如果您使用的是 macOS,此时可能会收到关于尝试启动一个开发者未经验证的应用的错误。请参阅下面的“故障排除”指南来解决此问题。
现在,您可以从默认的 Prometheus URL http://localhost:9090
访问 Ray 指标。
在生产环境中运行 Prometheus#
对于生产环境,请查阅Prometheus 文档以获取设置 Prometheus 服务器的最佳策略。Prometheus 服务器应位于 Ray 集群外部,以便在集群宕机时指标仍然可访问。对于 KubeRay 用户,请按照这些说明设置 Prometheus。
故障排除#
在 macOS X 上使用 Homebrew 和 Ray 配置来配置 Prometheus#
Homebrew 将 Prometheus 安装为自动启动的服务。要配置这些服务,您不能简单地将配置文件作为命令行参数传递。
取而代之的是,将 /usr/local/etc/prometheus.args
中的 –config-file
行更改为 --config.file /tmp/ray/session_latest/metrics/prometheus/prometheus.yml
。
然后您可以使用 brew services start prometheus
启动或重启服务。
macOS 不信任开发者安装 Prometheus#
您可能会收到以下错误
从互联网下载二进制文件时,macOS 要求二进制文件必须由受信任的开发者 ID 签名。许多开发者不在 macOS 的信任列表中。用户可以手动覆盖此要求。
有关如何覆盖限制并安装或运行应用的说明,请参阅这些说明。
使用 Docker Compose 加载 Ray Prometheus 配置#
在 Ray 容器中,符号链接“/tmp/ray/session_latest/metrics”指向最新的活动 Ray 会话。但是,Docker 不支持在共享卷上挂载符号链接,您可能无法加载 Prometheus 配置文件。
要解决此问题,请使用自动化 shell 脚本将 Prometheus 配置从 Ray 容器无缝传输到共享卷。为确保正确设置,请在容器的相应路径上挂载共享卷,该路径包含启动 Prometheus 服务器的推荐配置。
抓取指标#
Ray 在每个节点上运行一个指标代理,用于导出系统和应用指标。每个指标代理收集本地节点的指标,并以 Prometheus 格式暴露它们。然后,您可以抓取每个端点来访问指标。
要抓取端点,我们需要确保服务发现,这使得 Prometheus 能够找到每个节点上的指标代理端点。
自动发现指标端点#
您可以使用 Prometheus 的基于文件的服务发现来允许 Prometheus 动态查找要抓取的端点。在使用 Ray 集群启动器时,由于节点 IP 地址会随集群的扩展和收缩而经常变化,请使用自动发现来导出 Prometheus 指标。
Ray 在头节点上自动生成一个 Prometheus 服务发现文件,以促进指标代理的服务发现。此功能允许您抓取集群中的所有指标,而无需知道它们的 IP。以下信息指导您进行设置。
服务发现文件生成在头节点上。在此节点上,查找 /tmp/ray/prom_metrics_service_discovery.json
(如果使用了自定义 Ray temp_dir
,则为等效文件)。Ray 会定期更新此文件,其中包含集群中所有指标代理的地址。
Ray 会自动生成一个 Prometheus 配置,该配置抓取位于 /tmp/ray/session_latest/metrics/prometheus/prometheus.yml
的服务发现文件。您可以选择使用此配置或修改自己的配置来启用此行为。有关配置的详细信息,请参见下文。完整的文档请参见此处。
使用此配置,Prometheus 会根据 Ray 的服务发现文件的内容自动更新其抓取的地址。
# Prometheus config file
# my global config
global:
scrape_interval: 2s
evaluation_interval: 2s
# Scrape from Ray.
scrape_configs:
- job_name: 'ray'
file_sd_configs:
- files:
- '/tmp/ray/prom_metrics_service_discovery.json'
手动发现指标端点#
如果您知道 Ray 集群中节点的 IP 地址,可以配置 Prometheus 从静态端点列表中读取指标。设置一个固定的端口供 Ray 用于导出指标。如果您使用的是 VM 集群启动器,请将 --metrics-export-port=<port>
传递给 ray start
。如果您使用的是 KubeRay,请在 RayCluster 配置文件中指定 rayStartParams.metrics-export-port
。您必须在集群中的所有节点上指定该端口。
如果您不知道 Ray 集群中节点的 IP 地址,也可以通过读取 Ray 集群信息以编程方式发现端点。以下示例使用 Python 脚本和 ray.nodes
API,通过将 NodeManagerAddress
与 MetricsExportPort
结合来查找指标代理的 URL。
# On a cluster node:
import ray
ray.init()
from pprint import pprint
pprint(ray.nodes())
"""
Pass the <NodeManagerAddress>:<MetricsExportPort> from each of these entries
to Prometheus.
[{'Alive': True,
'MetricsExportPort': 8080,
'NodeID': '2f480984702a22556b90566bdac818a4a771e69a',
'NodeManagerAddress': '192.168.1.82',
'NodeManagerHostname': 'host2.attlocal.net',
'NodeManagerPort': 61760,
'ObjectManagerPort': 61454,
'ObjectStoreSocketName': '/tmp/ray/session_2020-08-04_18-18-16_481195_34255/sockets/plasma_store',
'RayletSocketName': '/tmp/ray/session_2020-08-04_18-18-16_481195_34255/sockets/raylet',
'Resources': {'CPU': 1.0,
'memory': 123.0,
'node:192.168.1.82': 1.0,
'object_store_memory': 2.0},
'alive': True},
{'Alive': True,
'MetricsExportPort': 8080,
'NodeID': 'ce6f30a7e2ef58c8a6893b3df171bcd464b33c77',
'NodeManagerAddress': '192.168.1.82',
'NodeManagerHostname': 'host1.attlocal.net',
'NodeManagerPort': 62052,
'ObjectManagerPort': 61468,
'ObjectStoreSocketName': '/tmp/ray/session_2020-08-04_18-18-16_481195_34255/sockets/plasma_store.1',
'RayletSocketName': '/tmp/ray/session_2020-08-04_18-18-16_481195_34255/sockets/raylet.1',
'Resources': {'CPU': 1.0,
'memory': 134.0,
'node:192.168.1.82': 1.0,
'object_store_memory': 2.0},
'alive': True}]
"""
处理和导出指标#
如果您需要将指标处理并导出到其他存储或管理系统,请查看 Vector 等开源指标处理工具。
监控指标#
要可视化和监控收集到的指标,有 3 种常用方法
最简单:使用 Grafana 和 Ray 提供的配置,其中包括默认 Grafana 仪表板,显示一些对调试 Ray 应用最有价值的指标。
推荐:使用 Ray Dashboard,它嵌入了 Grafana 可视化,可以在一个面板中同时查看指标、日志、作业信息等。
手动:从头开始设置 Grafana 或其他工具,如 CloudWatch、Cloud Monitoring 和 Datadog。
以下是每种方法的说明
最简单:使用 Ray 提供的配置设置 Grafana#
Grafana 是一种工具,支持 Prometheus 指标的高级可视化,并允许您使用喜欢的指标创建自定义仪表板。
注意
以下说明描述了在 macOS 机器上启动 Grafana 服务器的一种方法。有关如何在不同系统中启动 Grafana 服务器的信息,请参阅Grafana 文档。
对于 KubeRay 用户,请按照这些说明设置 Grafana。
首先,下载 Grafana。按照下载页面上的说明下载适合您操作系统的正确二进制文件。
转到二进制文件所在位置,并使用 /tmp/ray/session_latest/metrics/grafana
文件夹中找到的内置配置运行 Grafana。
./bin/grafana-server --config /tmp/ray/session_latest/metrics/grafana/grafana.ini web
使用默认的 grafana URL http://localhost:3000
访问 Grafana。通过导航到 dashboards -> manage -> Ray -> Default Dashboard 查看默认仪表板。将 Grafana 与 Ray Dashboard 集成后,可以在Ray Dashboard中访问相同的指标图表。
注意
如果您是首次使用 Grafana,请使用用户名:admin
和密码 admin
登录。
故障排除 在 macOS X 上使用 Homebrew 和 Ray 配置来配置 Grafana
Homebrew 将 Grafana 安装为自动启动的服务。因此,要配置这些服务,您不能简单地将配置文件作为命令行参数传递。
取而代之的是,更新 /usr/local/etc/grafana/grafana.ini
文件,使其内容与 /tmp/ray/session_latest/metrics/grafana/grafana.ini
的内容匹配。
然后您可以使用 brew services start grafana
和 brew services start prometheus
启动或重启服务。
使用 Docker Compose 加载 Ray Grafana 配置 在 Ray 容器中,符号链接“/tmp/ray/session_latest/metrics”指向最新的活动 Ray 会话。但是,Docker 不支持在共享卷上挂载符号链接,您可能无法加载 Grafana 配置文件和默认仪表板。
要解决此问题,请使用自动化 shell 脚本将必要的 Grafana 配置和仪表板从 Ray 容器无缝传输到共享卷。为确保正确设置,请在容器的相应路径上挂载共享卷,该路径包含启动 Grafana 服务器的推荐配置和默认仪表板。
Grafana 服务器运行后,启动 Ray 集群,并在 /tmp/ray/session_latest/metrics/grafana/dashboards
查找 Ray 提供的默认 Grafana 仪表板 JSON 文件。复制这些 JSON 文件并将其导入到您的 Grafana 中。
如果 Grafana 报告数据源未找到,请添加一个数据源变量。数据源的名称必须与 RAY_PROMETHEUS_NAME
环境变量中的值相同。默认情况下,RAY_PROMETHEUS_NAME
等于 Prometheus
。
推荐:使用嵌入了 Grafana 可视化的 Ray Dashboard#
按照上面的说明,使用 Ray 提供的可视化设置 Grafana
查看配置和管理 Ray Dashboard,了解如何将 Grafana 可视化嵌入到 Dashboard 中
查看Dashboard 的指标视图,了解如何在 Ray Dashboard 中检查指标。
手动:从头设置 Grafana 或其他工具,如 CloudWatch、Cloud Monitoring 和 Datadog#
请查阅这些工具的文档,了解如何查询和可视化指标。
提示
如果您需要手动编写 Prometheus 查询,请查看 Ray 提供的 Grafana 仪表板 JSON 文件 /tmp/ray/session_latest/metrics/grafana/dashboards/default_grafana_dashboard.json
中的 Prometheus 查询作为参考。