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

Python FastAPI应用Otel Metrics疑问:仅显示少量指标是否正常?

问题解答

这不是预期情况,你提到的APM仪表盘需要更丰富的OpenTelemetry指标集才能完整展示内容,当前输出的仅为基础HTTP层面的核心指标。

核心原因分析

你现在看到的http.server.active_requests、http.server.duration等指标,是OpenTelemetry对FastAPI做基础HTTP仪器化后生成的最小指标集,但这类APM仪表盘需要以下几类补充指标才能填充完整:

  • 带维度标签的HTTP指标:比如请求对应的路由、响应状态码、请求方法等(当前指标可能缺少这些标签)
  • 应用依赖指标:数据库查询耗时、外部API调用耗时、缓存操作指标等
  • 自定义业务指标:特定业务逻辑的处理次数、耗时、成功率等

扩展指标的具体步骤

  1. 完善FastAPI仪器化配置
    确保在初始化OpenTelemetry仪器化时,启用路由属性捕获,示例代码:

    from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
    
    FastAPIInstrumentor.instrument_app(
        app,
        excluded_urls="/health",
        server_request_hook=lambda span, request: span.set_attribute("http.route", request.url.path)
    )
    

    这样http.server.duration等指标会带上http.route、http.method等标签,仪表盘才能按路由、请求类型展示数据。

  2. 启用依赖组件的仪器化
    如果你的应用用到了数据库(如SQLAlchemy)、外部请求库(如requests),需要安装并启用对应的OpenTelemetry仪器化库:

    • 数据库:安装opentelemetry-instrumentation-sqlalchemy,并配置仪器化
    • 外部请求:安装opentelemetry-instrumentation-requests,自动捕获出站请求的详细指标
      这些仪器化库会生成db.statement、db.duration、http.client.duration(带目标服务标签)等指标,补充仪表盘的依赖追踪模块。
  3. 添加自定义业务指标
    针对业务逻辑创建自定义指标,比如接口调用计数器、业务流程耗时直方图:

    from opentelemetry import metrics
    from opentelemetry.sdk.metrics import MeterProvider
    from opentelemetry.sdk.resources import Resource
    
    metrics.set_meter_provider(MeterProvider(resource=Resource.create({"service.name": "your-fastapi-service"})))
    meter = metrics.get_meter("your-fastapi-service")
    
    # 创建接口调用计数器
    api_request_counter = meter.create_counter(
        name="api.request.count",
        description="Total number of API requests",
        unit="1"
    )
    
    # 在接口中使用
    @app.get("/api/users")
    def get_users():
        api_request_counter.add(1, {"http.route": "/api/users", "http.method": "GET"})
        # 业务逻辑...
        return {"users": []}
    
  4. 验证指标导出链路
    检查OpenTelemetry Exporter(如OTLP Exporter)的配置,确保所有生成的指标都能被正确导出到OpenTelemetry Collector或Prometheus等存储系统,没有被过滤规则拦截。可以直接访问FastAPI的/metrics端点(如果使用Prometheus Exporter),确认是否有带丰富标签的指标输出。

内容的提问来源于stack exchange,提问作者Johan Eriksson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:55:05