refactor(metrics): 解耦 Portal 指标打点与 Exporter - #814
Draft
feng-95 wants to merge 4 commits into
Draft
Conversation
feng-95
force-pushed
the
refactor/apmplus-meter-uploader
branch
from
August 4, 2026 16:02
2d60db9 to
1e6c1aa
Compare
feng-95
force-pushed
the
refactor/apmplus-meter-uploader
branch
from
August 5, 2026 08:01
15fa31d to
e064701
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
改动说明
本次改造将 VeADK Portal 指标的“执行打点”和“创建导出链路”拆分为两项独立职责:
ENABLE_APMPLUS、APMPlusExporter或其他 Exporter 是否存在;PortalMetricRecorder直接通过 OpenTelemetry GlobalMeterProvider创建测量工具并记录;APMPlusExporter不再创建或注册指标记录器,只在当前仍为_ProxyMeterProvider时兜底创建带 APMPlus Reader 的 GlobalMeterProvider;MeterProvider时,APMPlus 不替换 Provider、不追加 Reader,也不接管其生命周期;MetricUploaderRegistry,进程内只保留一份portal_metrics.portal_metric_recorder。修改原因
旧实现把 Portal 指标是否打点绑定在 APMPlus Exporter 注册流程上,会产生两个问题:
MeterProvider、但没有启用 APMPlus 时,VeADK 指标不会执行打点;改造后,VeADK 只负责产生指标;由业务配置、自动埋点或 APMPlus 兜底创建的 Global
MeterProvider决定是否以及向哪里导出。运行规则
_ProxyMeterProviderOpenTelemetry 1.37.0 会在安装真实 Provider 后,将已有代理测量工具绑定到真实 Provider。安装前发生的打点不会缓存或补报。
与 Trace 的关系
Trace 与 Metrics 保持正交:
TracerProvider时,沿用 fix(tracing): trust preconfigured provider for APMPlus #813 的规则,跳过 APMPlus Span Processor 注册,避免 Trace 重复上报;MeterProvider时,指标始终交给该 Provider。依赖和合入顺序
main,本次没有修改其分支;018cc56dbad7e8fcf192276c7874cd3c252f194d,本次没有更新;#814 已重放到最新
origin/main。本次最终提交为e064701de0f3e40d6746cf0c51bdcdce56e5f2e5。E2E 验证
gen_ai_chat_count_ProxyMeterProvider/ 0MeterProvider/ 1MeterProvider/ 1APMPlusExporter(),无预配置 ProviderMeterProvider/ 1MeterProvider/ 1APMPlusExporter(),代码预配置全局 ProviderMeterProvider/ 1MeterProvider/ 1opentelemetry-instrument自动埋点并启用 APMPlusMeterProvider/ 17 个存在导出链路的指标查询都只有 1 条时序,且
current=min=max=1。所有云端 Trace 的 span 总数与唯一 span 数一致,错误 span 为 0。自动化检查
pytest -q tests/test_agent.py tests/test_portal_metrics.py tests/test_tracing.py tests/test_tracing_content.py:48 项通过;git diff --check:通过;toolchain指令;该问题发生在 hook 安装阶段,Ruff 已单独执行并通过。测试报告
/Users/bytedance/go/src/code.byted.org/byteapm/docs-feng/veadk-python/VeADK_APMPlus_MeterUploader_优化测试报告.md