配置和管理 Ray Dashboard#

Ray Dashboard 是监控和调试 Ray 应用程序和集群最重要的工具之一。本页面将介绍如何在您的集群上配置 Ray Dashboard。

Dashboard 的配置可能因启动 Ray 集群的方式(例如,本地 Ray 集群 vs. KubeRay)而异。与 Prometheus 和 Grafana 的集成是可选的,用于增强 Dashboard 体验。

注意

Ray Dashboard 对于交互式开发和调试非常有用,因为当集群终止时,Dashboard UI 和底层数据将不再可访问。对于生产环境的监控和调试,您应该依赖 持久化日志持久化指标持久化 Ray 状态 以及其他可观测性工具。

更改 Ray Dashboard 端口#

Ray Dashboard 在 head 节点上运行,端口为 8265。如需自定义端口,请按照以下说明操作。

通过 CLI 显式启动集群
在命令行中使用 ray start 并传递 --dashboard-port 参数。

通过 ray.init 隐式启动集群
在调用 ray.init() 时,传递 dashboard_port 关键字参数。

Cluster Launcher 的 YAML 文件head_start_ray_commands 部分中,包含 --dashboard-port 参数。

head_start_ray_commands:
  - ray stop
  # Replace ${YOUR_PORT} with the port number you need.
  - ulimit -n 65536; ray start --head --dashboard-port=${YOUR_PORT} --port=6379 --object-manager-port=8076 --autoscaling-config=~/ray_bootstrap_config.yaml

有关详情,请参阅 指定非默认端口 页面。

在浏览器中查看 Ray Dashboard#

当您在笔记本电脑上启动单节点 Ray 集群时,您可以通过 Ray 初始化时打印的 URL 访问 Dashboard(默认 URL 为 https://:8265)。

当您使用 VM 集群启动器KubeRay Operator 或手动配置启动远程 Ray 集群时,Ray Dashboard 会在 head 节点上启动,但 Dashboard 端口可能未公开。您需要进行额外的设置才能从 head 节点外部访问 Ray Dashboard。

危险

出于安全考虑,请勿在未设置适当身份验证的情况下公开 Ray Dashboard。

端口转发
您可以使用 ray dashboard 命令安全地将本地流量端口转发到 Dashboard。

$ ray dashboard [-p <port, 8265 by default>] <cluster config file>

Dashboard 现在可以在 https://:8265 访问。

KubeRay Operator 通过一个指向 Ray head pod 的 Service 使 Dashboard 可用,该 Service 名为 <RayCluster name>-head-svc。在 Kubernetes 集群内部,可以通过 http://<RayCluster name>-head-svc:8265 访问 Dashboard。

有两种方法可以将 Dashboard 暴露到集群外部

1. 设置 Ingress
请按照 说明 设置 Ingress 以访问 Ray Dashboard。**Ingress 必须只允许来自受信任来源的访问。**

2. 端口转发
您也可以通过端口转发从 Kubernetes 集群外部查看 Dashboard。

$ kubectl port-forward service/${RAYCLUSTER_NAME}-head-svc 8265:8265
# Visit ${YOUR_IP}:8265 for the Dashboard (e.g. 127.0.0.1:8265 or ${YOUR_VM_IP}:8265)

注意

请勿在生产环境中使用端口转发。请按照上述说明使用 Ingress 暴露 Dashboard。

有关配置 Kubernetes 上 Ray 集群网络访问的更多信息,请参阅 网络注意事项

在反向代理后运行#

通过反向代理访问 Ray Dashboard 时,它应该可以开箱即用。API 请求不需要单独代理。

请始终在 URL 末尾带有斜杠 / 来访问 Dashboard。例如,如果您的代理设置为处理对 /ray/dashboard 的请求,请在 www.my-website.com/ray/dashboard/ 访问 Dashboard。

Dashboard 发送的 HTTP 请求使用相对 URL 路径。当 window.location.href 以尾部斜杠 / 结尾时,浏览器会按预期处理这些请求。

这是许多浏览器处理相对 URL 请求的一种特殊情况,尽管 MDN 将其定义为预期行为。

通过在反向代理中添加一条规则,将用户浏览器重定向到 /(即 /ray/dashboard -> /ray/dashboard/),可以使 Dashboard 在没有尾部斜杠的情况下可见。

以下是一个使用 Traefik TOML 文件的示例,该文件实现了这一点。

[http]
  [http.routers]
    [http.routers.to-dashboard]
      rule = "PathPrefix(`/ray/dashboard`)"
      middlewares = ["test-redirectregex", "strip"]
      service = "dashboard"
  [http.middlewares]
    [http.middlewares.test-redirectregex.redirectRegex]
      regex = "^(.*)/ray/dashboard$"
      replacement = "${1}/ray/dashboard/"
    [http.middlewares.strip.stripPrefix]
      prefixes = ["/ray/dashboard"]
  [http.services]
    [http.services.dashboard.loadBalancer]
      [[http.services.dashboard.loadBalancer.servers]]
        url = "https://:8265"

警告

Ray Dashboard 提供对 Ray 集群的读**和写**访问。反向代理必须提供身份验证或网络入口控制,以防止对集群的未经授权访问。

禁用 Dashboard#

如果您使用 ray[default]其他安装命令,Dashboard 将被包含并自动启动。

要禁用 Dashboard,请使用 --include-dashboard 参数。

通过 CLI 显式启动集群

ray start --include-dashboard=False

通过 ray.init 隐式启动集群

import ray
ray.init(include_dashboard=False)

Cluster Launcher 的 YAML 文件head_start_ray_commands 部分中,包含 ray start --head --include-dashboard=False 参数。

警告

不建议禁用 Dashboard,因为 RayJobRayService 等多个 KubeRay 功能依赖于它。

spec.headGroupSpec.rayStartParams.include-dashboard 设置为 False。请参阅此 示例 YAML 文件

将 Grafana 可视化嵌入 Ray Dashboard#

为了获得增强的 Ray Dashboard 体验,例如与日志、Job 信息等一起查看时间序列指标,请设置 Prometheus 和 Grafana 并将它们与 Ray Dashboard 集成。

设置 Prometheus#

要渲染 Grafana 可视化,您需要 Prometheus 从 Ray 集群抓取指标。请按照 说明 设置您的 Prometheus 服务器,并开始从 Ray 集群抓取系统和应用程序指标。

设置 Grafana#

Grafana 是一个支持 Prometheus 指标的高级可视化的工具,它允许您使用喜欢的指标创建自定义仪表板。请按照 说明 设置 Grafana。

将 Grafana 可视化嵌入 Ray Dashboard#

要查看嵌入 Ray Dashboard 的时间序列可视化,必须进行以下设置:

  1. 集群的 head 节点能够访问 Prometheus 和 Grafana。

  2. Dashboard 用户的浏览器能够访问 Grafana。

在启动 Ray 集群时,使用 RAY_GRAFANA_HOSTRAY_PROMETHEUS_HOSTRAY_PROMETHEUS_NAMERAY_GRAFANA_IFRAME_HOST 环境变量配置这些设置。

  • RAY_GRAFANA_HOST 设置为 head 节点可以访问 Grafana 的地址。Head 节点在后端对 Grafana 进行健康检查。

  • RAY_GRAFANA_ORG_ID 设置为您在 Grafana 中使用的组织 ID。默认值为“1”。

  • RAY_PROMETHEUS_HOST 设置为 head 节点可以访问 Prometheus 的地址。

  • RAY_PROMETHEUS_NAME 设置为选择一个不同的数据源,供 Grafana Dashboard 面板使用。默认值为“Prometheus”。

  • RAY_GRAFANA_IFRAME_HOST 设置为用户浏览器可以访问 Grafana 并嵌入可视化的地址。如果未设置 RAY_GRAFANA_IFRAME_HOST,Ray Dashboard 将使用 RAY_GRAFANA_HOST 的值。

例如,如果 head 节点的 IP 是 55.66.77.88,Grafana 托管在端口 3000。将值设置为 RAY_GRAFANA_HOST=http://55.66.77.88:3000

  • 如果您手动启动单节点 Ray 集群,请确保在启动集群之前设置好这些环境变量,或者将其作为 ray start ... 命令的前缀,例如 RAY_GRAFANA_HOST=http://55.66.77.88:3000 ray start ...

  • 如果您使用 VM 集群启动器 启动 Ray 集群,则应将环境变量作为 ray start ... 命令的前缀,设置在 head_start_ray_commands 下。

  • 如果您使用 KubeRay 启动 Ray 集群,请参阅此 教程

如果所有环境变量都设置正确,您应该能在 Ray Dashboard 中看到时间序列指标。

注意

如果您为每个 Ray 集群使用不同的 Prometheus 服务器,并为所有集群使用相同的 Grafana 服务器,请为每个 Ray 集群将 RAY_PROMETHEUS_NAME 环境变量设置为不同的值,并在 Grafana 中添加这些数据源。请按照 这些说明 设置 Grafana。

备用 Prometheus 主机位置#

默认情况下,Ray Dashboard 假定 Prometheus 托管在 localhost:9090。您可以选择在非默认端口或不同机器上运行 Prometheus。在这种情况下,请确保 Prometheus 可以抓取您 Ray 节点的指标,请遵循 此处 的说明。

然后,如上所述正确配置 RAY_PROMETHEUS_HOST 环境变量。例如,如果 Prometheus 托管在 IP 为 55.66.77.88 的节点上,端口为 9000,则设置 RAY_PROMETHEUS_HOST=http://55.66.77.88:9000

自定义 Ray Dashboard 到 Prometheus 的请求头#

如果 Prometheus 需要额外的身份验证头,请以以下 JSON 格式之一设置 RAY_PROMETHEUS_HEADERS,以便 Ray Dashboard 将其发送到 Prometheus。

  1. {"Header1": "Value1", "Header2": "Value2"}

  2. [["Header1", "Value1"], ["Header2", "Value2"], ["Header2", "Value3"]]

备用 Grafana 主机位置#

默认情况下,Ray Dashboard 假定 Grafana 托管在 localhost:3000。您可以选择在非默认端口或不同机器上运行 Grafana,只要 head 节点和 Dashboard 浏览器能够访问它即可。

如果在 Kubernetes 集群上,Grafana 通过 NGINX Ingress 暴露,则 Grafana Ingress 注释中应包含以下行:

nginx.ingress.kubernetes.io/configuration-snippet: |
    add_header X-Frame-Options SAMEORIGIN always;

当 Grafana 和 Ray 集群都在同一个 Kubernetes 集群上时,将 RAY_GRAFANA_HOST 设置为 Grafana Ingress 的外部 URL。

Grafana 用户身份验证#

当 Grafana 实例需要用户身份验证时,必须在其 配置文件 中进行以下设置,才能正确嵌入到 Ray Dashboard 中。

  [security]
  allow_embedding = true
  cookie_secure = true
  cookie_samesite = none

故障排除#

Dashboard 消息:未检测到 Prometheus 或 Grafana 服务器#

如果您已按照上述说明设置好一切,请在浏览器中运行以下连接检查:

  • 检查 Head 节点与 Prometheus 服务器的连接:在 Ray Dashboard URL 后面添加 api/prometheus_health(例如:http://127.0.0.1:8265/api/prometheus_health)并访问。

  • 检查 Head 节点与 Grafana 服务器的连接:在 Ray Dashboard URL 后面添加 api/grafana_health(例如:http://127.0.0.1:8265/api/grafana_health)并访问。

  • 检查浏览器与 Grafana 服务器的连接:访问 RAY_GRAFANA_IFRAME_HOST 中使用的 URL。

收到错误消息“RAY_GRAFANA_HOST 未设置”#

如果您已设置 Grafana,请检查:

  • 您已包含协议(例如,http://your-grafana-url.com 而不是 your-grafana-url.com)。

  • URL 没有尾部斜杠(例如,http://your-grafana-url.com 而不是 http://your-grafana-url.com/)。

证书颁发机构 (CA) 错误#

如果您的 Grafana 实例托管在 HTTPS 之后,您可能会看到 CA 错误。请联系 Grafana 服务所有者以正确启用 HTTPS 流量。

查看内置 Dashboard API 指标#

Dashboard 由一个服务器提供支持,该服务器通过 API 端点提供 UI 代码和集群数据。Ray 为每个 API 端点发出基本的 Prometheus 指标。

ray_dashboard_api_requests_count_requests_total:收集请求的总数。此指标按端点、方法和 http_status 标记。

ray_dashboard_api_requests_duration_seconds_bucket:收集请求的持续时间。此指标按端点和方法标记。

例如,您可以使用此查询查看所有请求的 p95 持续时间:

histogram_quantile(0.95, sum(rate(ray_dashboard_api_requests_duration_seconds_bucket[5m])) by (le))

您可以在 Prometheus 或 Grafana UI 中查询这些指标。有关如何设置这些工具的说明,请参阅上文。