You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Uvicorn是否支持类似uWSGI的Stats Server统计服务机制?

Uvicorn 服务统计功能问题解答

原生支持情况说明

Uvicorn 目前没有内置类似 uWSGI Stats Server 的独立端口统计服务机制,官方未提供可直接开启该类功能的启动参数。

可替代的实现方案

你可以根据自身统计需求选择以下方案实现同类效果:

  • 应用层埋点统计
    为 FastAPI 应用添加自定义中间件,即可覆盖绝大多数服务运行指标统计:请求总数量、各接口请求占比、HTTP 状态码分布、请求平均/分位延迟、当前活跃请求数等。也可以直接集成成熟的监控指标中间件,输出标准化格式的指标数据供后续监控系统采集分析。
  • 进程级状态监控
    如果需要统计 Uvicorn 工作进程的资源占用情况(CPU 使用率、内存占用、进程存活状态等),可搭配系统级进程监控工具实现,将进程指标与应用层统计指标统一存储展示,即可实现和 uWSGI Stats Server 类似的全维度统计效果。
  • 独立统计端口扩展
    如果你需要完全对标 uWSGI 用独立端口提供统计数据的模式,可以在启动 Uvicorn 时同时挂载一个仅用于统计查询的极简子应用,绑定到单独端口运行,与主业务服务端口完全隔离,访问该端口即可获取所有统计数据。

简单统计中间件示例

from fastapi import FastAPI, Request
import time
from collections import defaultdict

app = FastAPI()

# 统计数据存储
stats = {
    "total_requests": 0,
    "status_count": defaultdict(int),
    "total_request_time": 0.0,
    "active_requests": 0
}

@app.middleware("http")
async def stats_collect_middleware(request: Request, call_next):
    start_time = time.time()
    stats["active_requests"] += 1
    response = await call_next(request)
    process_time = time.time() - start_time
    
    stats["total_requests"] += 1
    stats["status_count"][response.status_code] += 1
    stats["total_request_time"] += process_time
    stats["active_requests"] -= 1
    return response

# 统计数据查询接口,可单独挂载到其他端口
@app.get("/service-stats")
async def get_service_stats():
    avg_request_time = stats["total_request_time"] / stats["total_requests"] if stats["total_requests"] else 0
    return {
        "total_requests": stats["total_requests"],
        "active_requests": stats["active_requests"],
        "status_code_distribution": stats["status_count"],
        "average_request_time_s": round(avg_request_time, 4)
    }

内容的提问来源于stack exchange,提问作者Suyog Shimpi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:06:05