配置和管理 Ray 仪表板#
Ray 仪表盘 是监控和调试 Ray 应用和集群最重要的工具之一。本页描述了如何在您的集群上配置 Ray 仪表盘。
仪表板配置可能因您启动 Ray 集群的方式而异(例如,本地 Ray 集群与 KubeRay)。与 Prometheus 和 Grafana 的集成是可选的,以增强仪表板体验。
备注
Ray Dashboard 仅用于交互式开发和调试,因为集群终止后,Dashboard UI 和底层数据将无法访问。对于生产监控和调试,用户应依赖 持久化日志、持久化指标、持久化 Ray 状态 和其他可观测性工具。
更改 Ray 仪表板端口#
Ray Dashboard 运行在头节点的端口 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 仪表板#
当您在笔记本电脑上启动单节点 Ray 集群时,您可以通过 Ray 初始化时打印的 URL 访问仪表板(默认 URL 是 http://localhost:8265
)。
当你使用 VM 集群启动器、KubeRay 操作员 或手动配置启动一个远程 Ray 集群时,Ray 仪表板会在头节点上启动,但仪表板端口可能不会公开暴露。你需要额外的设置来从头节点外部访问 Ray 仪表板。
危险
出于安全考虑,在没有适当身份验证的情况下,不要公开暴露 Ray 仪表板。
端口转发
你可以使用 ray dashboard
命令安全地将本地流量端口转发到仪表板。
$ ray dashboard [-p <port, 8265 by default>] <cluster config file>
仪表板现在可以在 http://localhost:8265
访问。
KubeRay 操作符通过一个名为 <RayCluster 名称>-head-svc
的服务使 Dashboard 可用,该服务指向 Ray 头节点 pod。在 Kubernetes 集群内部访问 Dashboard 的地址为 http://<RayCluster 名称>-head-svc:8265
。
有两种方法可以在集群外部公开仪表板:
1. 设置入口
按照 说明 设置入口以访问 Ray 仪表板。入口必须仅允许从受信任的来源访问。
2. 端口转发
您还可以通过使用端口转发从Kubernetes集群外部查看仪表板:
$ 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 仪表板应能开箱即用。API 请求不需要单独代理。
始终在URL末尾加上尾随的 /
来访问仪表盘。例如,如果你的代理设置为处理 /ray/dashboard
的请求,请在 www.my-website.com/ray/dashboard/
查看仪表盘。
仪表板发送带有相对URL路径的HTTP请求。当 window.location.href
以斜杠 /
结尾时,浏览器会如预期处理这些请求。
这是许多浏览器处理带有相对URL请求的特性,尽管MDN定义了预期的行为。
通过在反向代理中包含一个规则,使您的仪表板在没有尾部 /
的情况下可见,该规则将用户的浏览器重定向到 /
,例如 /ray/dashboard
–> /ray/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 = "http://localhost:8265"
警告
Ray 仪表板提供对 Ray 集群的读 和写 访问权限。反向代理必须提供身份验证或网络入口控制,以防止未经授权访问集群。
禁用仪表板#
如果你使用 ray[default]
或 其他安装命令,仪表盘将被包含并自动启动。
要禁用仪表板,请使用以下参数 --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,因为 RayJob
和 RayService
等几个 KubeRay 功能依赖于它。
将 spec.headGroupSpec.rayStartParams.include-dashboard
设置为 False
。查看这个 示例 YAML 文件。
将 Grafana 可视化嵌入到 Ray 仪表板中#
为了获得增强的 Ray 仪表板体验,例如 查看时间序列指标 以及日志、作业信息等,请设置 Prometheus 和 Grafana 并将它们与 Ray 仪表板集成。
设置 Prometheus#
要渲染 Grafana 可视化,您需要 Prometheus 从 Ray 集群中抓取指标。请按照 说明 设置您的 Prometheus 服务器,并开始从 Ray 集群中抓取系统和应用程序指标。
设置 Grafana#
Grafana 是一个支持 Prometheus 指标高级可视化的工具,并允许您使用您喜欢的指标创建自定义仪表板。请按照 说明 设置 Grafana。
将 Grafana 可视化嵌入到 Ray 仪表板中#
要在 Ray 仪表板中查看嵌入的时间序列可视化,必须设置以下内容:
集群的头节点能够访问 Prometheus 和 Grafana。
仪表盘用户的浏览器能够访问 Grafana。
在启动 Ray 集群时,使用 RAY_GRAFANA_HOST
、RAY_PROMETHEUS_HOST
、RAY_PROMETHEUS_NAME
和 RAY_GRAFANA_IFRAME_HOST
环境变量配置这些设置。
将
RAY_GRAFANA_HOST
设置为一个头节点可以用来访问 Grafana 的地址。头节点在后端对 Grafana 进行健康检查。将
RAY_PROMETHEUS_HOST
设置为头节点可以用来访问 Prometheus 的地址。将
RAY_PROMETHEUS_NAME
设置为选择不同的数据源,以供Grafana仪表板面板使用。默认值为“Prometheus”。将
RAY_GRAFANA_IFRAME_HOST
设置为用户浏览器可以访问 Grafana 并嵌入可视化的地址。如果未设置RAY_GRAFANA_IFRAME_HOST
,Ray Dashboard 将使用RAY_GRAFANA_HOST
的值。
例如,如果头节点的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 集群,环境变量应该在
head_start_ray_commands
下作为ray start ...
命令的前缀设置。
如果所有环境变量都设置正确,你应该会在 Ray 仪表板 中看到时间序列指标。
备注
如果你为每个 Ray 集群使用不同的 Prometheus 服务器,并为所有集群使用相同的 Grafana 服务器,请为每个 Ray 集群设置 RAY_PROMETHEUS_NAME
环境变量为不同的值,并在 Grafana 中添加这些数据源。按照 这些说明 来设置 Grafana。
备用 Prometheus 主机位置#
默认情况下,Ray 仪表盘假设 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
。
备用 Grafana 主机位置#
默认情况下,Ray Dashboard 假设 Grafana 托管在 localhost:3000
。您可以选择在非默认端口或不同机器上运行 Grafana,只要头节点和仪表板用户的浏览器可以访问它。
如果在 Kubernetes 集群上使用 NGINX ingress 暴露 Grafana,Grafana ingress 注解中应包含以下行:
nginx.ingress.kubernetes.io/configuration-snippet: |
add_header X-Frame-Options SAMEORIGIN always;
当Grafana和Ray集群在同一个Kubernetes集群中时,将 RAY_GRAFANA_HOST
设置为Grafana入口的外部URL。
Grafana 的用户认证#
当Grafana实例需要用户认证时,以下设置必须在它的配置文件中,以便在Ray仪表盘中正确嵌入:
[security]
allow_embedding = true
cookie_secure = true
cookie_samesite = none
故障排除#
仪表盘消息:未检测到 Prometheus 或 Grafana 服务器#
如果你已经按照上面的指示设置了所有内容,请在你的浏览器中运行以下连接检查:
检查 Head Node 与 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,请检查:
你在URL中包含了协议(例如,
http://your-grafana-url.com
而不是your-grafana-url.com
)。URL 没有尾部斜杠(例如,
http://your-grafana-url.com
而不是http://your-grafana-url.com/
)。
查看内置的仪表板 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 查询这些指标。关于如何设置这些工具的说明,请参见上文。