Prhub

#22859 ci: add modal slurm log analyzer

sgl-project/sglang · 作者 ishandhanani · 合并时间 2026-04-16 05:10

分析状态 已生成
文件变更 3提交数 8 · 评论 1
代码增减 +501 / -0
run-ci documentation

执行摘要

添加基于 Modal 的 Slurm 日志分析工具,自动化 CI 失败调试。

根据PR body描述,夜间GB200工作流会保存失败日志作为tarball,但缺乏自动化分析工具。此变更使这些tarball可操作,提供重复的方式解压日志、使用结构化调试提示分析,并输出简明的后分析报告。

值得精读,展示了如何将AI工具集成到CI/CD流水线中,特别是安全处理和错误恢复的设计决策,可作为基础设施自动化的参考案例。

讨论亮点

没有review讨论,但提交历史显示从初始实现到完善安全功能(如添加sanitize函数)的演进,表明对安全风险的关注。

实现拆解

  1. 创建日志分析脚本:新增 scripts/ci/slurm/analyze_logs_with_modal.py,实现日志上传、Modal沙箱构建和AI分析调用。关键函数包括 sanitize(安全清理API密钥)、extract_tarball(解压日志)、build_sandbox_image(构建沙箱镜像),确保安全性和可重复性。
  2. 提供分析提示:新增 scripts/ci/slurm/log_analysis_prompt.md,定义AI分析日志的优先级顺序(如先读sweep日志)和输出格式,指导Claude Code进行结构化分析,避免噪声干扰。
  3. 集成到CI工作流:修改 .github/workflows/nightly-72-gpu-gb200.yml,在失败时添加步骤调用分析脚本,使用GitHub secrets传递Modal凭证,并将分析结果输出到Step Summary,实现自动化故障诊断。
  4. 安全与完善:通过提交历史迭代,添加sanitize函数防止API密钥泄露,修复输出处理逻辑,并迁移到新版Modal API,确保工具稳定性和安全性。
文件 模块 状态 重要度
scripts/ci/slurm/analyze_logs_with_modal.py CI 脚本 added 7.74
scripts/ci/slurm/log_analysis_prompt.md CI 脚本 added 4.55
.github/workflows/nightly-72-gpu-gb200.yml 工作流配置 modified 4.35
scripts/ci/slurm/analyze_logs_with_modal.py infrastructure

核心分析脚本,实现日志上传、Modal 集成、安全清理和 AI 调用,是整个工具的主要入口。

def sanitize(text: str) -> str:
    """清理API密钥和秘密信息,防止泄露到日志中。"""
    if not text:
        return text
    # 使用正则表达式匹配常见API密钥模式(如sk-、ak-开头)
    sanitized = _SECRET_PATTERN.sub("[REDACTED]", text)
    # 额外清理已知环境变量中的秘密值,增强安全性
    for var in ("OPENROUTER_API_KEY", "MODAL_TOKEN_ID", "MODAL_TOKEN_SECRET"):
        val = os.environ.get(var)
        if val and len(val) > 8:
            sanitized = sanitized.replace(val, "[REDACTED]")
    return sanitized

关键符号

sanitize configure_logging extract_tarball parse_args build_sandbox_image prepare_log_dir build_prompt upload_tree

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

安全风险:sanitize函数可能漏掉某些密钥模式,导致敏感信息泄露到CI日志中。性能风险:Modal调用可能引入额外延迟,影响CI流程执行时间。外部依赖:工具依赖Modal服务和opencode模型,若服务不可用或模型变更,可能导致分析失败或结果不一致。

对工程师:减少手动调试时间,加速故障定位,提升工作效率。对CI系统:增加自动化分析能力,但可能因外部依赖增加运行不稳定风险。对团队:提升运维效率,但需要维护新工具和监控其依赖性。

安全泄露风险 外部依赖风险

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

执行摘要

  • 一句话:添加基于Modal的Slurm日志分析工具,自动化CI失败调试。
  • 推荐动作:值得精读,展示了如何将AI工具集成到CI/CD流水线中,特别是安全处理和错误恢复的设计决策,可作为基础设施自动化的参考案例。

功能与动机

根据PR body描述,夜间GB200工作流会保存失败日志作为tarball,但缺乏自动化分析工具。此变更使这些tarball可操作,提供重复的方式解压日志、使用结构化调试提示分析,并输出简明的后分析报告。

实现拆解

  1. 创建日志分析脚本:新增 scripts/ci/slurm/analyze_logs_with_modal.py,实现日志上传、Modal沙箱构建和AI分析调用。关键函数包括 sanitize(安全清理API密钥)、extract_tarball(解压日志)、build_sandbox_image(构建沙箱镜像),确保安全性和可重复性。
  2. 提供分析提示:新增 scripts/ci/slurm/log_analysis_prompt.md,定义AI分析日志的优先级顺序(如先读sweep日志)和输出格式,指导Claude Code进行结构化分析,避免噪声干扰。
  3. 集成到CI工作流:修改 .github/workflows/nightly-72-gpu-gb200.yml,在失败时添加步骤调用分析脚本,使用GitHub secrets传递Modal凭证,并将分析结果输出到Step Summary,实现自动化故障诊断。
  4. 安全与完善:通过提交历史迭代,添加sanitize函数防止API密钥泄露,修复输出处理逻辑,并迁移到新版Modal API,确保工具稳定性和安全性。

关键文件:

  • scripts/ci/slurm/analyze_logs_with_modal.py(模块 CI脚本;类别 infra;类型 infrastructure;符号 sanitize, configure_logging, extract_tarball, parse_args): 核心分析脚本,实现日志上传、Modal集成、安全清理和AI调用,是整个工具的主要入口。
  • scripts/ci/slurm/log_analysis_prompt.md(模块 CI脚本;类别 docs;类型 documentation): AI分析提示文件,定义日志分析的步骤、优先级和输出格式,确保分析结果结构化。
  • .github/workflows/nightly-72-gpu-gb200.yml(模块 工作流配置;类别 infra;类型 infrastructure): 集成分析工具到夜间工作流,实现失败时自动调用,提升CI自动化水平。

关键符号:sanitize, configure_logging, extract_tarball, parse_args, build_sandbox_image, prepare_log_dir, build_prompt, upload_tree

关键源码片段

scripts/ci/slurm/analyze_logs_with_modal.py

核心分析脚本,实现日志上传、Modal集成、安全清理和AI调用,是整个工具的主要入口。

def sanitize(text: str) -> str:
    """清理API密钥和秘密信息,防止泄露到日志中。"""
    if not text:
        return text
    # 使用正则表达式匹配常见API密钥模式(如sk-、ak-开头)
    sanitized = _SECRET_PATTERN.sub("[REDACTED]", text)
    # 额外清理已知环境变量中的秘密值,增强安全性
    for var in ("OPENROUTER_API_KEY", "MODAL_TOKEN_ID", "MODAL_TOKEN_SECRET"):
        val = os.environ.get(var)
        if val and len(val) > 8:
            sanitized = sanitized.replace(val, "[REDACTED]")
    return sanitized

评论区精华

没有review讨论,但提交历史显示从初始实现到完善安全功能(如添加sanitize函数)的演进,表明对安全风险的关注。

  • 暂无高价值评论线程

风险与影响

  • 风险:安全风险:sanitize函数可能漏掉某些密钥模式,导致敏感信息泄露到CI日志中。性能风险:Modal调用可能引入额外延迟,影响CI流程执行时间。外部依赖:工具依赖Modal服务和opencode模型,若服务不可用或模型变更,可能导致分析失败或结果不一致。
  • 影响:对工程师:减少手动调试时间,加速故障定位,提升工作效率。对CI系统:增加自动化分析能力,但可能因外部依赖增加运行不稳定风险。对团队:提升运维效率,但需要维护新工具和监控其依赖性。
  • 风险标记:安全泄露风险, 外部依赖风险

关联脉络

  • PR #22899 ci: add issue filing and suspect PR identification to log analyzer: 同属CI日志分析工具增强系列,补充了自动提Issue功能,与本PR共同完善故障处理流程。

参与讨论