Xinference 可观测性体系:Supervisor 与 Worker 双端 Prometheus 指标导出器实战

发布时间:2026/9/17 4:24:00

Xinference 可观测性体系:Supervisor 与 Worker 双端 Prometheus 指标导出器实战 Xinference 可观测性体系Supervisor 与 Worker 双端 Prometheus 指标导出器实战【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inference本文基于仓库文档 doc/source/user_guide/metrics.rst 展开系统讲解 Xinference 集群中两类指标导出端点Supervisor 端/metrics与 Worker 端独立 exporter的开启方式、指标清单与底层实现原理并结合 xinference/core/metrics.py 等源码说明指标注册、Registry 隔离与周期性刷新机制。读完本篇你可以独立完成指标端点的配置与验证并能准确理解每个指标的类型、标签和数据来源。两类指标导出端点一个 Xinference 集群中存在两类 metrics exporter分别面向控制面与推理面Supervisor 指标导出器挂载在 Supervisor 的 RESTful 端点上地址为endpoint/metrics例如http://127.0.0.1:9997/metrics。其中9997是默认服务端端口对应 xinference/constants.py 中的XINFERENCE_DEFAULT_ENDPOINT_PORT 9997。Worker 指标导出器运行在每个 worker 节点上的独立进程其监听地址与端口可通过xinference-local或xinference-worker命令的--metrics-exporter-host简写-MH与--metrics-exporter-port简写-mp两个选项设置。从 xinference/deploy/cmdline.py 的 CLI 定义可以看到两者的默认行为存在差异xinference-local--metrics-exporter-host未指定时默认与--host相同见local命令中if metrics_exporter_host is None: metrics_exporter_host host的兜底逻辑因此单机模式下 exporter 与主服务同主机。xinference-worker--metrics-exporter-host默认为XINFERENCE_DEFAULT_DISTRIBUTED_HOST端口需显式通过-mp指定。Worker 端的 exporter 由 xinference/core/metrics.py 中的launch_metrics_export_server()启动它新建一个 FastAPI 应用并注册/metrics路由基于aioprometheus.asgi.starlette中间件根路径/重定向到/metrics服务使用 uvicorn 运行日志级别固定为warning并启用 xinference/core/http_protocol.py 中的加固 HTTP 协议以防御 Slowloris 类慢速攻击。启动后实际绑定的 socket 地址会经队列回传给 Worker 进程写入启动日志Starting metrics export server at {host}:{port}方便定位。禁用指标导出通过环境变量XINFERENCE_DISABLE_METRICS1可同时关闭两端导出器判定逻辑见 xinference/constants.py 的is_metrics_disabled()。测试 xinference/core/tests/test_metrics.py 中的test_disable_metrics_exporter_server验证了禁用后的行为Supervisor 端GET {endpoint}/metrics返回404Worker 端 metrics 端口直接连接被拒ConnectionError。Supervisor 指标文档列出的四个 Supervisor 侧指标均由aioprometheus的 Starlette 请求中间件自动采集覆盖 RESTful API 的请求生命周期指标名类型含义exceptions_total_countercounter产生异常抛出异常的请求总数requests_total_countercounter接收到的请求总数responses_total_countercounter已发送的响应总数status_codes_countercounter各响应状态码的计数/metrics路由在 RESTful API 进程中注册见 xinference/api/restful_api.py当is_metrics_disabled()为 False 时执行self._app.add_route(/metrics, metrics)且注册前会先从 Registry 中剔除_WORKER_ONLY_METRICS里的 worker 专属指标避免 Supervisor 端出现空的HELP/TYPE头。测试 test_metrics_exporter_server 通过请求{endpoint}/metrics并断言响应中包含/v1/models验证了该端点确实承载了 API 请求统计。源码中的集群级指标文档的纵深补充当前版本的 xinference/core/metrics.py 在 Supervisor 侧还注册了一整套集群/Worker/模型信息类 Gauge由 API 进程中的_cluster_metrics_update_loop周期性调用update_cluster_metrics()从 Supervisor 的get_cluster_metrics_data()刷新指标名含义关键标签xinference:supervisor_uptime_secondsSupervisor 运行时长—xinference:workers_total在线 worker 数量—xinference:models_loaded_total按类型统计的已加载模型数model_typexinference:worker_cpu_utilizationWorker CPU 利用率0-1worker_addressxinference:worker_memory_used_bytes/worker_memory_total_bytesWorker 内存已用/总量字节worker_addressxinference:worker_gpu_utilization_percentWorker GPU 利用率0-100worker_address,gpu_index,gpu_namexinference:worker_gpu_memory_used_bytes/worker_gpu_memory_total_bytesWorker GPU 显存已用/总量字节同上xinference:model_info运行中模型信息值恒为 1model_uid,model_name,model_type,worker_address,replica_on_worker,replica_totalxinference:model_status模型生命周期状态值恒为 1model_uid,model_name,statusxinference:model_gpu_binding每副本的 GPU 绑定关系值恒为 1增加gpu_index,replica_indexxinference:model_gpu_memory_used_bytes按模型/GPU 的实时显存占用字节同上xinference:model_unexpected_termination因 worker 故障而下线的副本值恒为 1重新部署后清除model_uid,model_name,replica_indexxinference:build_info/xinference:config_info构建与配置信息值恒为 1version,python_version,xinference_home,cluster等除了这些源码中还包含 Token Router 控制面快照指标族如xinference:token_router_runtime_up、xinference:token_router_status等见 metrics.py与 API Key 审计指标xinference:api_keys_active_total、xinference:banned_ips_total等后者由update_security_gauges()周期刷新。值得注意的实现细节update_cluster_metrics()采用整帧快照 过期序列清理策略——每轮刷新时用_drop_series()从 Gauge 底层MetricDict中弹出本帧已不存在的标签组合确保已下线 worker、已卸载模型不会在/metrics中残留过期时间序列aioprometheus没有公开的remove()接口这是从源码注释看唯一正确的删除方式。Worker 指标文档列出的四个 Worker 侧模型推理指标文档指标名类型含义xinference:generate_tokens_per_sgauge生成吞吐tokens/sxinference:input_tokens_total_countercounter输入 token 总数xinference:output_tokens_total_countercounter输出 token 总数xinference:time_to_first_token_msgauge首 token 延迟ms需要说明的是当前仓库源码中对应采集器命名为xinference:generate_tokens_totalcounter与xinference:time_to_first_token_secondsHistogram桶边界 0.05s~inf并标注 LLM only见 metrics.py。从源码结构看文档中的generate_tokens_per_s/time_to_first_token_ms是早期版本的命名快照当前版本的实际输出以源码为准即吞吐需由 token 总量计数配合 Prometheusrate()计算TTFT 则以直方图形式支持分位数聚合。除 LLM 指标外源码还注册了覆盖所有模型类型的服务质量指标metrics.py指标名类型含义xinference:model_request_totalcounter模型请求总数xinference:model_request_errors_totalcounter失败的模型请求总数xinference:model_request_duration_secondshistogram模型请求耗时14 个桶0.01s~120sxinference:model_serve_countgauge当前正在处理的请求数xinference:model_request_limitgauge模型并发请求上限xinference:model_last_load_duration_secondsgauge最近一次模型加载耗时指标如何被记录与输出Worker 推理路径通过model_ref.record_metrics(name, op, kwargs)上报数据该调用最终落到 metrics.py 的record_metrics()以指标名为键从全局命名空间取出采集器按操作inc/set/observe反射调用任何异常仅记录日志而不影响推理主流程。测试 test_metrics_exporter_server 展示了端到端效果# 向模型上报一次输入 token 计数后GET {worker_metrics_address} 可看到 xinference:input_tokens_total_counter{model_uidqwen1.5-chat} 1test_metrics_exporter_data则进一步断言了模型元信息标签的完整性输出中包含formatggufv2,gpu_index,model_nameqwen1.5-chat,model_typeLLM,model_uidqwen1.5-chat说明指标携带了足以区分格式、GPU 与模型实例的标签集。双端 Registry 隔离机制Supervisor 与 Worker 共用同一份指标定义文件但两个端点暴露的指标集必须互不污染。metrics.py 用两个集合显式划分_SUPERVISOR_ONLY_METRICS集群/Worker/模型信息与 Token Router、API Key 审计等 60 余项。Worker 启动 exporter 时launch_metrics_export_server()会在进程内遍历REGISTRY.get_all()并deregister这些采集器避免 Worker 端输出大量恒为空/零的序列头。_WORKER_ONLY_METRICS上述 9 项 LLM 推理与服务质量指标。RESTful API 进程注册/metrics路由前同样会将其剔除。从源码结构看这一同一模块、按角色裁剪的设计使指标定义集中维护同时保证每个端点的/metrics输出都是最小且干净的。实操配置与验证1. 单机模式默认端点xinference-local --host 127.0.0.1 --port 9997 # metrics exporter 默认与 --host 相同端口需显式指定 xinference-local --host 127.0.0.1 --port 9997 \ --metrics-exporter-port 9999验证curl http://127.0.0.1:9997/metrics # Supervisor请求计数 集群/模型 Gauge curl http://127.0.0.1:9999/metrics # Worker 端 exportertoken 计数、TTFT、请求耗时等2. 分布式模式xinference-supervisor --host 10.0.0.1 --port 9997 xinference-worker --endpoint http://10.0.0.1:9997 \ --host 10.0.0.2 \ --metrics-exporter-host 10.0.0.2 \ --metrics-exporter-port 9999Prometheus 抓取时建议把 Supervisor 的endpoint/metrics与每个 worker 的 exporter 地址都配置为 scrape targetworker 地址取自启动日志或xinference:model_info的worker_address标签。3. 关闭指标XINFERENCE_DISABLE_METRICS1 xinference-local # 效果/metrics 返回 404worker exporter 端口不监听4. 典型 PromQL 用法# LLM 生成吞吐由源码中的 token 计数推导 rate(xinference:output_tokens_total_counter{model_uidqwen1.5-chat}[1m]) # 首 token 延迟 P99 histogram_quantile(0.99, sum(rate(xinference:time_to_first_token_seconds_bucket[5m])) by (le)) # 模型请求成功率 1 - rate(xinference:model_request_errors_total[5m]) / rate(xinference:model_request_total[5m]) # 单模型 GPU 显存占用 xinference:model_gpu_memory_used_bytes小结Xinference 的指标体系以Supervisor 控制面 Worker 推理面双导出器为核心前者通过 API 进程的/metrics路由暴露请求统计与集群资源快照后者以独立 uvicorn 进程暴露 token 吞吐、TTFT 与请求耗时等推理质量指标。两端共用 xinference/core/metrics.py 中的采集器定义通过_SUPERVISOR_ONLY_METRICS/_WORKER_ONLY_METRICS按角色裁剪并支持XINFERENCE_DISABLE_METRICS1一键关闭。仓库中 monitor/ 目录还附带了 DCGM exporter 配置与 Grafana 仪表盘 JSON可作为接入现有监控栈的进一步参考。【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inference创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/17 4:24:00

VSCode + LaTeX 环境配置指南:掌握编译输出目录与排错技巧

拖了好几年,我终于把写毕业论文的战场从 Overleaf 彻底搬回了 VsCode。不是因为网页版不好用,而是当文档越来越长、章节越来越多,我在本地反复编译时,根目录里堆满了.aux、.log、.toc这些中间文件,看着就烦躁。更让人抓…

2026/9/17 4:24:00

IoT项目源码交付全栈指南:从硬件调试到平台落地

1. 为什么"源码交付"才是IoT项目真正的分水岭1.1 传统交付模式的三个断点在IoT项目里,"交付"这个词和传统软件交付完全不是一个量级。传统软件交付,客户拿到安装包、配上数据库就能跑,顶多再给一套API文档。但IoT项目交付…

2026/9/17 4:19:00

Windows 10安装错误“无法判断”排查指南:从日志到分区表全解决

“云里黑白”这部连载写到第十九回,按老规矩该是越写越玄乎的时候了。可这回我不打算讲什么高深莫测的道理,就说一件几乎每个人在重装或升级Windows 10时都会撞见的怪事——屏幕忽然弹出一句冷冰冰的话:“我们无法判断你的电脑是否已准备好继…

2026/9/17 5:14:02

AI作图中文提示词失效原因与实战解决方案

1. 项目概述:为什么“中文提示词支持”成了AI作图的生死线?有没有支持中文提示词的AI作图工具?这个问题过去半年在设计师群、插画师社群和小红书创作圈被反复刷屏,不是因为大家突然对母语有了执念,而是被现实狠狠教育过…

2026/9/17 5:14:02

0x0000012B 蓝屏排查与 WinDbg 转储分析

1. 先把 FAULTY_HARDWARE_CORRUPTED_PAGE 这个名字拆开看1.1 停止码 0x0000012B 到底在报什么错FAULTY_HARDWARE_CORRUPTED_PAGE 对应的停止码是 0x0000012B。我第一次见到它的时候也懵,因为名字里带 HARDWARE,第一反应就是内存条挂了。但真正把这行字报…

2026/9/17 5:14:02

软考系统规划与管理师:人员管理核心考点与应试技巧

1. 软考系统规划与管理师考试概述系统规划与管理师作为计算机技术与软件专业技术资格(水平)考试(简称"软考")的高级资格认证,是IT服务管理领域含金量极高的职业资格证书。考试涵盖IT服务管理体系、系统规划、…

2026/9/17 5:14:02

MATLAB处理SVC PSR光谱数据:读入、平滑、重采样与批处理全流程

简介:针对SVC PSR光谱数据的处理需求,这套MATLAB源码实现了数据读入、光谱平滑、重采样与测量数据平均批处理等核心功能,面向遥感、地物光谱分析领域的新手及有一定经验的开发人员。压缩包内共2个.m脚本,整体大小仅2KB&#xff0c…

2026/9/17 5:14:02

工业互联网数据采集与智能运维:从Modbus到预测性维护的完整落地指南

简介:工业互联网作为智能制造的关键基础设施,正在推动传统生产模式向智能应用平台演进。这份PDF文档系统阐述了工业互联网的核心架构与落地路径,涵盖物联网数据采集、云计算平台支撑、大数据分析优化及人工智能质检、预测性维护等典型应用场景…

2026/9/17 5:09:02

嵌入式软件架构入门:从分层、状态机到事件驱动的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/17 0:03:13

WiFi密码安全测试:从原理到实战的字典暴力破解指南

1. 写在前面:我为什么要研究WiFi密码这件事先交代一下背景。我身边有不少朋友,家里的WiFi密码常年是"12345678"或者"88888888",问就是"好记"。直到有一次,隔壁邻居蹭网蹭到我家路由器后台都进不去&…

2026/9/17 0:03:13

redis-py服务控制与监控函数实战:从ping到slowlog的巡检指南

我用 redis-py 写了快五年的业务代码,坦白说,真正让我觉得这个客户端“像一个成熟工具箱”的,不是 get/set 那套基本操作,而是它那批专门做服务控制与状态监控的辅助函数。日常开发里,大家把redis.Redis(host..., deco…

2026/9/17 0:03:13

SpringBoot+Vue3实现中小企业设备管理系统开发实践

1. 项目概述与核心价值中小企业设备管理系统是制造业、服务业等领域的基础信息化工具。传统设备管理往往依赖Excel表格或纸质记录,存在数据孤岛、流程混乱、维护成本高等痛点。这套基于Java SpringBootVue3MyBatis的技术方案,通过前后端分离架构实现了设…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码