指标采集面临的动态难题
在LLM推理服务等复杂分布式系统中,实时监测函数级性能指标是保障服务稳定性、诊断性能瓶颈的关键。然而,传统的指标埋点方式常常让开发者陷入两难:要么在代码中硬编码埋点,侵入性强、维护成本高;要么依赖庞大的应用性能监测系统,部署复杂、资源消耗大。更棘手的是,生产环境的指标采集需求往往是动态变化的------白天需要高精度追踪特定函数,晚上则希望降低采集粒度以减少开销;定位问题时需要临时开启局部函数的详细指标,问题解决后立即关闭。如何实现零代码侵入、运行时动态开关、并且能够灵活适配不同框架的指标采集,成为服务可观测性建设的一大挑战。
针对这一痛点,msServiceProfiler新增特性 ms_service_metric ------ 一个专为大模型推理场景设计的轻量级Python指标采集库。它基于动态字节码注入技术,支持通过YAML配置在运行时动态Hook目标函数,零修改即可构建覆盖推理服务全链路的立体化监测体系,让指标采集真正实现"按需获取、灵活控制"。
开箱即用的全链路监测能力
msServiceProfiler指标采集库深度集成vLLM等主流推理框架,构建了覆盖推理服务全链路的指标采集能力:
-
• 100+核心指标开箱即用:基于vLLM社区原生Metrics体系,涵盖QPS、时延、KV Cache利用率、调度吞吐、NPU资源占用等关键指标,实现请求、调度、性能、资源四大维度的立体化监测。开发者无需任何配置,即可获得全面的推理服务可观测性。
-
• 动态注册与灵活扩展:支持指标动态注册和采集策略热更新,用户可根据业务需求自定义指标,实现"开箱即用+灵活定制"双轮驱动。无论是排查偶发问题还是长期性能优化,都能快速获得所需数据。
-
• 30+可视化面板:指标数据统一接入Prometheus进行存储与告警管理,结合Grafana构建涵盖NPU资源监测、请求时延拆解、调度排队、显存瓶颈等关键场景的可视化面板,实现性能问题与系统异常更高效发现、更清晰呈现、更精准定位,显著提升运维效率。
图 1. Metric 可视化
msServiceProfiler指标采集库核心能力
围绕“动态、轻量、易用”三大设计理念,提供以下核心能力:
核心能力一:动态Hook,配置即埋点
传统埋点需要修改源码,而msServiceProfiler指标采集库允许你通过简单的YAML配置文件,声明需要监测的函数以及要采集的指标。工具会在运行时动态地将采集逻辑植入目标函数,全程无需改动任何业务代码,做到零侵入接入。
-
• 符号寻址:采用module.path:ClassName.method_name格式精确指定目标函数,支持任意深度嵌套。
-
• 多指标类型:内置Timer、Counter、Gauge、Histogram四种Prometheus标准指标类型,满足不同监测场景。
-
• 表达式标签:可通过Python表达式从函数返回值或局部变量中动态提取标签值,实现高维度数据分类。例如从vLLM的调度函数中提取batch size、排队长度等关键信息。
图 2. 配置案例
核心能力二:运行时动态开关,零重启调整采集策略
生产环境最忌讳因变更而重启服务。msServiceProfiler指标采集库通过共享内存+信号机制实现了真正的运行时控制:
-
• 命令行一键控制:提供ms-service-metric on/off/restart/status命令,可随时开启或关闭指标采集,无需重启服务进程。白天开启全量指标进行性能分析,夜间关闭以减少开销,一切尽在掌握。
-
• 配置热加载:执行restart命令时会重新读取配置文件,新增或修改的监测规则立即生效。当需要临时追踪某个suspected 瓶颈函数时,只需添加配置后重启采集,问题定位效率大幅提升。
-
• 多进程支持:通过Prometheus的多进程模式(PROMETHEUS_MULTIPROC_DIR)和共享内存前缀隔离,完美兼容vLLM等框架常用的多进程部署架构,确保指标采集的准确性和一致性。
图 3. 动态启停命令控制
核心能力三:vLLM深度集成
针对当前主流的大模型推理框架vLLM,msServiceProfiler指标采集库提供了开箱即用的适配能力:
-
• 一键初始化:initialize_vllm_metric()自动Hook vLLM的调度、执行、显存管理等核心链路,内置V1版本配置,帮助分析Prefill/Decode阶段耗时、Batch大小分布、KV Cache利用率等关键指标。
-
• 关键函数全覆盖:自动采集包括Scheduler.schedule(调度)、Worker.execute_model(推理)、CacheEngine.allocate(KVCache管理)等核心函数的性能数据,构建从请求入场到结果返回的全链路指标视图。
-
• 调度细节透视:通过访问调度函数的局部变量,可精确获取每轮调度的等待队列长度、被抢占请求数、正在运行的序列数等内部状态,为推理性能优化提供数据支撑。
图 4. vLLM自动集成采集,通过访问metrics接口可以看到采集的数据
msServiceProfiler指标采集库使用指南
1. 安装
pip install ms_service_metric
依赖说明:需要Python ≥ 3.10,Linux系统。
2. vLLM快速集成
无需修改vLLM源码,就这么简单!无需添加繁琐的埋点,即可获得覆盖100+核心指标的全链路监测能力。
3. 自定义指标配置
如需添加自定义监测,创建YAML配置文件(例如metric_config.yaml):
- symbol: vllm.core.scheduler.Scheduler._schedule
need_locals: true
metrics:
- name: vllm_waiting_queue_size
type: gauge
expr: "len(waiting)"
description: "Current size of waiting queue"
- symbol: vllm.worker.worker.Worker.execute_model
metrics:
- name: vllm_execute_model_duration_seconds
type: timer
label:
- name: model_name
expr: "self.model_config.model"
通过环境变量指定配置路径:
# 不配置将直接使用内置默认配置
export MS_SERVICE_METRIC_CONFIG_PATH=/path/to/metric_config.yaml
具体配置项说明可以参考:gitcode.com/Ascend/msse…
4. 运行时控制指标采集
使用命令行工具动态开关采集:
# 开启采集(采集数据将写入多进程目录)
ms-service-metric on
# 关闭采集
ms-service-metric off
# 重启采集(重新加载配置,新增指标立即生效)
ms-service-metric restart
# 查看当前采集状态
ms-service-metric status
5. 对接Prometheus + Grafana
安装Promethues 和 Grafana,导入预置的Grafana仪表盘模板,即可获得包含30+可视化面板的全链路监测视图,涵盖NPU资源监测、请求时延拆解、调度排队、显存瓶颈等关键场景。
具体安装步骤参见:gitcode.com/Ascend/msse…
图 5. 对接Grafana 显示图
总结
msServiceProfiler指标采集库通过创新的动态字节码注入技术,为vLLM等大模型推理服务提供了一种零侵入、运行时可控、轻量高效的指标采集方案。它让开发者能够像"打补丁"一样灵活地为任何函数添加监测,配合开箱即用的100+核心指标和30+可视化面板,构建起覆盖请求、调度、性能、资源四大维度的立体化监测体系。无论是排查线上问题、优化推理性能,还是保障服务SLA,都能做到"召之即来,挥之即去"。
目前工具已在GitCode(**gitcode.com/Ascend/msse…
扫描二维码,关注昇腾MindStudio微信公众号查看前沿昇腾科技!