关于 ci-metrics
ci-metrics 是供 PyTorch 贡献者查询 Grafana 中 CI、测试运行和基础设施指标的技能。它通过封装脚本配置 Grafana 并进行只读认证,提供 ClickHouse 和 Prometheus 查询示例。
主要功能
- 01通过封装脚本访问 Grafana
- 02查询 ClickHouse CI 与测试数据
- 03查询 Prometheus 基础设施指标
- 04自动配置固定版本 gcx
适用场景
- 01查找频繁失败的工作流任务
- 02统计测试运行次数及结果
- 03查看运行器队列和集群活动
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ pytorch/ pytorch --skill ci-metrics安装后在 Claude Code 中输入/ci-metrics确认已加载。
附带文件gcx-wrapper.sh
详细介绍
PyTorch CI 指标
PyTorch CI 和基础设施指标通过 Grafana 提供。所有 Grafana 访问都请使用 .agents/skills/ci-metrics/gcx-wrapper.sh;它会配置 PyTorch Grafana 服务器、上下文和身份验证。只有对该仓库有写入权限的用户才能访问 Grafana。身份验证仅提供只读访问权限。
要求
该包装脚本需要以下工具位于 PATH 中:
gh- 获取 Grafana 令牌,且必须已通过身份验证;如果尚未通过身份验证,请运行gh auth login --hostname github.com --git-protocol ssh --web。curl- 下载gcx并从 HUD 获取令牌。
首次使用时,包装脚本会将固定版本且经过校验和验证的 gcx 二进制文件下载到私有缓存(~/.cache/pytorch-ci-metrics/)中,并自动完成身份验证。不会在 PATH 中安装任何内容。如果缺少某个工具或 gh 尚未通过身份验证,脚本会退出并显示说明如何修复的错误信息。
数据源
获取可用数据源列表:
.agents/skills/ci-metrics/gcx-wrapper.sh datasources list
数据包含许多由 PyTorch 仓库所有的仓库的指标。请尽可能将查询限制为仅针对 pytorch/pytorch 仓库。
CI 和测试运行数据
CI 和测试运行数据存储在 grafana-clickhouse-datasource 中。列出所有可用表:
.agents/skills/ci-metrics/gcx-wrapper.sh datasources clickhouse list-tables
重要数据集:
- GitHub webhook 数据
- 数据库:default
- 注意:default 数据库还包含其他与 webhook 无关的表。
- 了解有关事件和负载的更多信息:https://docs.github.com/en/webhooks/webhook-events-and-payloads
- 数据库:default
- 测试
- 数据库:tests
- tests.all_test_runs - 包含每一次测试运行记录。此表非常庞大,请谨慎设置筛选条件并控制查询频率。
- 不要使用 tests.test_run_s3,因为它只包含部分数据。
如需了解常见查询的更多指导,请将 https://github.com/pytorch/test-infra 克隆到临时目录,并阅读 torchci 文件夹。
查询示例
在 pytorch/pytorch 仓库的 main 分支中,列出过去 2 周失败次数最多的工作流作业:
.agents/skills/ci-metrics/gcx-wrapper.sh datasources clickhouse query "
SELECT name, count(DISTINCT id) AS failures
FROM default.workflow_job
WHERE conclusion = 'failure'
AND completed_at >= now() - INTERVAL 2 WEEK
AND repository_full_name = 'pytorch/pytorch'
AND head_branch = 'main'
GROUP BY name ORDER BY failures DESC LIMIT 10"
对于某个测试文件,过去一周运行了多少次?通过或失败了多少次?
.agents/skills/ci-metrics/gcx-wrapper.sh datasources clickhouse query "
SELECT
file,
classname,
name,
count() AS runs,
countIf(failure_count = 0 AND error_count = 0 AND skipped_count = 0) AS successful,
countIf(failure_count > 0 OR error_count > 0) AS fails,
countIf(skipped_count > 0) AS skipped
FROM tests.all_test_runs
WHERE time_inserted >= now() - INTERVAL 7 DAY
AND file = 'lazy/test_ts_opinfo.py'
GROUP BY file, classname, name
ORDER BY runs DESC"
CI 基础设施
CI 基础设施指标存储在 grafanacloud-pytorchci-prom 中。若要更好地了解这些数据,请将以下仓库克隆到临时目录:
- https://github.com/pytorch/ci-infra -
/osdc中包含 OSDC(运行 PyTorch CI 的基础设施)的代码。请阅读该代码,了解指标的导出方式以及可用指标。请阅读 /osdc/docs 中的文档,了解其范围和项目设置。 - https://github.com/jeanschmidt/actions-runner-controller - 了解 actions-runner-controller 如何公开数据。
查询示例
目前哪些 runner 类型的队列最深(已分配但尚未运行的作业)?
.agents/skills/ci-metrics/gcx-wrapper.sh datasources prometheus query -d grafanacloud-prom 'topk(10, clamp_min(sum by (name) (gha_assigned_jobs) - sum by (name) (gha_running_jobs), 0))'
过去 6 小时内每个集群运行了多少个作业,每 30 分钟采样一次?范围查询请使用 --since/--step(或 --from/--to):
.agents/skills/ci-metrics/gcx-wrapper.sh datasources prometheus query -d grafanacloud-prom 'sum by (cluster) (gha_running_jobs)' --since 6h --step 30m