OpenTelemetry Python运行报PushController模块不存在错误
报错根因
这是OpenTelemetry Python SDK跨版本API不兼容导致的:
- 你参考的教程基于1.10及更早的Metrics预览版本编写,旧版本中定期推送指标的逻辑封装在
opentelemetry.sdk.metrics.export.controller模块的PushController类下。 - 从1.11版本开始,官方完成Metrics API稳定化重构,直接删除了旧的
PushController实现,改用PeriodicExportingMetricReader承担定期导出指标的能力,模块路径也同步调整,旧的导入路径自然无法找到对应模块。 - 你当前安装的1.12.0rc1属于重构后的新版本,和旧教程的示例代码完全不匹配。
修复步骤
直接把旧版PushController的逻辑替换为新版API实现即可:
- 删除代码中旧的导入行:
from opentelemetry.sdk.metrics.export.controller import PushController - 添加新版API需要的导入:
from opentelemetry.sdk.metrics import MeterProvider from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader from opentelemetry import metrics - 替换原PushController初始化逻辑。如果你的旧代码类似下面的写法:
替换为新版的初始化逻辑:# 旧版废弃写法,直接删除 meter = metrics.get_meter(__name__) controller = PushController( meter=meter, exporter=your_configured_exporter, interval=5 )# 新版稳定API写法 reader = PeriodicExportingMetricReader( exporter=your_configured_exporter, export_interval_millis=5000 # 对应原interval参数的5秒间隔,单位为毫秒 ) provider = MeterProvider(metric_readers=[reader]) metrics.set_meter_provider(provider) meter = metrics.get_meter(__name__)
补充说明:你当前安装的OTLP、Jaeger、Prometheus等官方exporter均为1.12.0rc1版本,已经适配新的Metrics API,不需要调整exporter本身的初始化代码,仅替换控制器相关逻辑即可。如果后续遇到预览版的未修复bug,可以把所有opentelemetry相关包切换到1.11.1正式版,稳定性更有保障。
内容的提问来源于stack exchange,提问作者Ibrahim Salim Omari
相关产品推荐
相关产品推荐

