starlette 提供内置 http 请求追踪,但它还不是接口稳定的完整监控服务。截至 2026 年 11 月 2 日,官方文档仍把 opentelemetrymiddleware 标为实验性:接口和生成的遥测数据可能在次版本中改变,而且不一定经过弃用期。接入这项能力的团队,需要把这一兼容性边界与框架正式版本的状态分开看。

来源:Starlette 官方文档
该中间件为进入应用的 HTTP 请求创建服务端 span,也就是一次请求在追踪链路中的记录。它从请求头提取分布式追踪上下文,并以匹配的路由模板设置记录名称和 http.route 属性。记录能对应到路由规则,而不只是把每个具体请求地址当作一条互不相关的数据。
依赖范围很明确:Starlette 使用的是 OpenTelemetry API,SDK 与数据导出器由应用自行选择、配置。官方列出的可选依赖是 opentelemetry-api,也包含在完整可选依赖集合中。如果没有配置追踪提供者,中间件会跳过追踪;安装了框架或 API 包,并不意味着数据已经发送到某个观测平台。
官方已合并的提供者参数变更允许传入 tracer_provider;未显式提供时使用全局提供者,显式空操作提供者则能关闭这层追踪。当前官方源码还保留了 meter_provider 参数,但中间件并未因此自动生成指标。追踪记录、指标采集和后台展示不是同一项功能,不能由参数名称推断出完整能力。
Starlette 1.5.1 是轻量级 Python ASGI 框架与工具集,提供路由、请求响应、中间件、WebSocket 和后台任务等组件,适合构建异步 Web 服务。本下载为官方 PyPI 通用 wheel 包,可使用 pip 安装,并由包管理器处理依赖;运行应用时还需配置 ASGI 服务器。
高频但不需要追踪的入口可以排除。excluded_urls 接受以逗号分隔的表达式字符串,或一组正则表达式;匹配对象是完整请求 URL,命中后不创建 span。文档把健康检查、就绪探针作为典型场景,而不是要求所有请求一律进入采集链路。

来源:Starlette 官方文档
应用还可以用这层中间件直接包装其他 ASGI 应用。按官方说明,同一请求经过多个原生追踪中间件实例时只创建一个 span;这不等于所有第三方观测组件都自动去重,也不表示 WebSocket 消息获得了相同的 HTTP 请求追踪。当前实现会把非 HTTP 连接交给下游处理。
以上内容可在官方文档与提供者参数变更记录中核对。对已有观测系统的服务,直接影响是可复用既有提供者与导出链路,但实验性接口仍需随依赖升级检查;框架提供请求记录入口,不代替应用对采集范围和数据去向的配置。

















