已合并
[Metrics] 支持用户单目录多 YAML 及外部 Handler #439
[Metrics] 支持用户单目录多 YAML 及外部 Handler #439
已合并
ChaseChe77创建于 29 天前
ChaseChe77
ChaseChe77成员
29 天前

1. 修改描述

  • 修改原因:
    当前用户自定义指标仅支持通过 MS_SERVICE_METRIC_CONFIG_PATH 指定单个 YAML;自定义 Handler 还需要修改、安装 Python 包或调整 PYTHONPATH,不利于用户按模块组织和维护自定义指标。

    同时,vLLM Metrics 插件初始化异常会向上传播,依赖缺失等 Metrics 故障可能导致 vllm serve 启动失败,不符合 Metrics 可选观测能力的 fail-open 原则。

  • 修改内容:

    1. 扩展 MS_SERVICE_METRIC_CONFIG_PATH,兼容原有单 YAML,并支持指定单目录下多个 .yaml/.yml 文件。
    2. YAML 按文件名稳定排序加载,忽略子目录和非 YAML 文件,复用原有配置合并及语义去重逻辑。
    3. 支持用户在配置根目录提供多个外部 Handler,保持原有 module.path:function_name 写法,无需修改 PYTHONPATH 或安装额外 Handler 包。
    4. 新增受控外部 Handler 加载器,仅加载 YAML 明确引用的文件,不修改全局 sys.path
    5. 校验 Handler 模块路径、目标文件和真实路径,防止非法路径、目录穿越及符号链接逃逸。
    6. 外部 Handler 模块使用真实文件路径哈希进行进程内缓存;Handler 文件变更后需重启 vLLM 服务。
    7. 配置或 Handler 构造失败时保留原配置及 Hook,避免提交部分状态。
    8. vLLM Metrics 插件入口增加 fail-open 保护:Metrics 初始化失败时记录错误、清理半初始化状态并禁用 Metrics,不再阻断 vLLM 启动。
    9. 更新 README 和整体重构设计文档,补充使用方法、文件放置要求、安全边界及责任边界。
    10. 外部 YAML 和外部 Handler 的正确性、依赖及维护由用户自行负责。

2. 功能验证

    • 相关 UT:112 passed, 1 skipped
    • 跳过项为 Windows 环境无权限创建符号链接,不影响 Linux CI 对应能力。
    • 真实 vLLM-Ascend 服务验证通过。
    • 同一用户配置目录成功加载 2 个 YAML。
    • 成功加载并执行两个不同位置的外部 Handler:
      • execute_handler.py
      • handlers/prepare_handler.py
    • 实际采集结果:
      • vllm_profiling_user:external_execute_model:duration_count = 100
      • vllm_profiling_user:external_prepare_inputs_total = 80
    • vLLM 请求正常,指标可通过 /metrics 获取。
    • Ruff、Ruff format、Pylint、Bandit、codespell、typos 等检查通过。
  • 522c439f-fc38-4a71-8b6d-d09eefca7853.png

    f44be179-fdba-420d-9956-bf7f7a8e30e6.png

    56e86662-8bc3-4c75-b5fd-16f8324ab165.png


3. 代码检视

  • 要求:

    • 合入代码大于 200 行,需三人以上会议检视。
    • 检视密度≥2个/100行。
    • 检视缺陷密度达不到要求的需给出说明。
    • 大于1000行代码原则上不允许合入,需进行备案。
    • 单 YAML 兼容。
    • 单目录多 YAML 排序和加载。
    • 多 YAML 语义去重。
    • 同目录及子目录外部 Handler。
    • 多个外部 Handler。
    • 非法模块名和目录穿越。
    • 符号链接逃逸。
    • Handler 文件、函数缺失及加载异常。
    • 加载失败后的重试。
    • 配置及 Handler 构造失败回滚。
    • vLLM Metrics 插件初始化 fail-open。
    • 半初始化 Manager 清理。

4. 安全自检

典型安全编码问题


5. 变更知会

  • 资料修改:
    已更新:

    • ms_service_metric/README.md
    • docs/design/ms_service_metric_Refactor_Design.md
  • 变更通知(消息知会 + 邮件知会):


6. 冒烟修改

  • PR 来源:

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 ChaseChe77 的贡献)
atomgit-bot
atomgit-bot成员
29 天前 评论:

变更摘要

本次 PR 主要围绕 Metrics 系统扩展用户自定义能力并增强健壮性:一是扩展 MS_SERVICE_METRIC_CONFIG_PATH 支持单目录下多个 YAML 配置文件的加载与合并;二是新增受控外部 Handler 加载机制,允许用户在配置根目录放置自定义 Handler 文件而无需修改 PYTHONPATH;三是为 vLLM Metrics 插件入口增加 fail-open 保护,使初始化失败时仅禁用 Metrics 而不阻断服务启动。同时包含 shutdown 流程加固、Handler 指纹扩展以及全面的安全校验和测试覆盖。

主要改动

  • 多 YAML 目录加载SymbolConfig._load_config_path 方法从仅支持单文件扩展为兼容目录,扫描根目录下 .yaml/.yml 文件并按文件名稳定排序后逐一加载合并,忽略子目录和非 YAML 文件,复用原有的语义去重逻辑。
  • 外部 Handler 加载器:新增 external_handler_loader.py 模块,提供 resolve_external_handler_rootload_external_handler_module 两个函数,实现从用户配置根目录按 module.path:function_name 加载 Handler 模块,不修改 sys.path,并对模块路径、目录穿越和符号链接逃逸进行安全校验,模块以真实路径哈希缓存在进程内。
  • vLLM 插件 fail-openinitialize_vllm_metric 函数增加 try-except 保护,初始化失败时记录异常日志、调用 adapter.shutdown() 清理半初始化状态并继续启动,不再向上传播异常阻断 vLLM 服务。
  • Handler 指纹与导入扩展MetricHandler.from_config_fingerprint_config_import_handler 新增 user_handler_root 参数,非内置允许模块时委托 load_external_handler_module 加载,同时将 user_handler_root 纳入配置指纹计算,确保不同外部根目录的 Handler 具备不同标识。
  • shutdown 流程加固VLLMMetricAdapter.shutdown 改为先保存 _manager 引用并置空再执行 manager.shutdown(),避免半初始化状态下 _initializedFalse 时跳过清理,且支持对已部分初始化的 Manager 进行安全清理。
likedislike
不准确?
atomgit-bot
atomgit-bot成员
29 天前 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
xzm123成员
29 天前 评论:

🤖 AIDD 文档质量检测报告

PR #439 的文档检测已全部完成。

📊 任务统计:共 9 个任务(✅ 0 完成 / ❌ 0 失败 / ⊘ 9 取消)
🐛 问题统计:共 0 个问题(致命 0 / 严重 0 / 一般 0 / 提示 0)

🔗 查看完整报告点击进入平台报告
🔗 查看 PR 检测问题点击查看问题列表

评论由 AIDD 自动生成,多次推送会增量更新本评论。

likedislike
ascend-robotascend-robot成员
29 天前 添加了label:stat/needs-squash
此处折叠了92条消息 查看更多
ascend-robot
ascend-robot成员
28 天前 评论:

The MR can not be merged, because of CodeReview discussion not resolved

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
ChaseChe77ChaseChe77成员
28 天前 解决了最后一个问题
ascend-robotascend-robot成员
28 天前 关闭了关联的issue
ascend-robotascend-robot成员
28 天前 合入了pull request
ascend-robot
ascend-robot成员
28 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike