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

发布时间:2026/11/10 1:33:32

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/11/8 16:28:02

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

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

2026/11/9 18:07:41

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

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

2026/11/6 11:37:34

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

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

2026/11/10 1:32:03

怎么查电工证归属省份模拟考试题库

电工证归属省份怎么查?内部消息教你搞定实操考试 实操考试心里没底怕挂科,尤其是你这种天天在工地跑的信阳浉河区中小施工企业负责人,电工证归属省份查不清,报名、考试、复审都得卡壳。别慌,我给你 内部消息…

2026/11/10 1:32:03

河南电工证用年审吗千万别踩坑这些真相你必须知道

河南电工证用年审吗千万别踩坑这些真相你必须知道 你是不是也担心学历不高怕报不上名?别急,河南电工证用年审吗这个问题,其实很多人都搞错了, 千万别踩坑 ,咱们今天就来聊聊你关心的每一个点,从报考条件、年审流程到考试难度,讲得清清楚楚。…

2026/11/10 1:32:03

青山哪里能考电工证在哪考别再交冤枉钱了

青山哪里能考电工证在哪考别再交冤枉钱了 怕考不过白交培训费?你不是一个人!在青山哪里能考电工证,已经成为很多想要从事电工工作的朋友最关心的问题。但别急,今天我用十年行业经验告诉你, 在哪考…

2026/11/10 1:32:03

弱电电工证就业前景保姆级教程:外省证怎么转,现在考值不值?

弱电电工证就业前景保姆级教程:外省证怎么转,现在考值不值? 之前考的证在外省能不能转过来?这是很多已经考了证的弱电电工最担心的事。今天咱们就来聊一聊【弱电电工证就业前景】这个话题,特别是针对那些在外地考了证,现在想回老家或者换地方工作的朋友…

2026/11/10 1:32:03

高压电工证复审方案在哪考?别再被中介忽悠了!

高压电工证复审方案在哪考?别再被中介忽悠了! 你是不是正愁着高压电工证复审方案在哪考?怕被中介骗钱,怕流程复杂,怕找不到靠谱的报名渠道?别急,这篇文章就是给你支招的,教你一步步走好高压电工证复审这条路。…

2026/11/10 1:27:03

考电工证随时能考吗?别让证书过期了才慌!考前押题帮你搞定

考电工证随时能考吗?别让证书过期了才慌!考前押题帮你搞定 证书过期了不知道怎么复审延期?是不是经常看到电工证到期提醒却不知道怎么操作?其实很多电工朋友都遇到过这种情况,特别是从事建筑、电力安装、运维等工作的人员,一旦电工证过期,不仅影响日常…

2026/11/9 0:37:55

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/10 0:01:28

学历不高怕报不上名?考电工证报名费+网上查询全攻略来了

学历不高怕报不上名?考电工证报名费+网上查询全攻略来了 你是不是也担心自己学历不高,考电工证报名费太贵,根本报不上名?别急,今天就来给你讲讲,怎么用最少的钱,把证拿到手,还能在工地上多挣点钱。 电工证报名费多少钱?网上查询是关键…

2026/11/10 0:01:29

绍兴考电工证培训机构怎么选?2026河南最新政策别错过

绍兴考电工证培训机构怎么选?2026河南最新政策别错过 怕考不过白交培训费?你不是一个人。2026河南最新政策出台,对电工证考试、报名、培训、复审都有明确规定。选择绍兴考电工证培训机构,别再踩坑,下面一步步教你避坑。…

2026/11/9 6:30:27

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

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

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

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