APM 支持应用级别配置
0x01 背景
a. 痛点
当前 APM 的服务关联配置全部以 (bk_biz_id, app_name, service_name) 为粒度。
日志关联、返回码重定义和返回码备注均没有「应用级(全局)」或「按服务列表共享」的概念。
用户想为应用下所有服务设置统一配置时,只能逐服务手动配置,成本高且易遗漏。
b. 现状
- 核心模型为
ServiceBase(抽象基类),下挂 7 个子类子表。 - 各子表的查询、写入散落在不同调用方,模式不统一。
- 若只改造部分子表,后续扩展时容易重复劳动、遗漏保护逻辑。
c. 目标
- 支持应用级别(全局)的日志关联、返回码重定义和返回码备注配置。
- 支持指定服务列表作为配置生效范围,而不仅是单个服务。
- 全局配置与服务级配置可共存。
- 返回码备注展示优先级为服务级覆盖全局。
- 改造后模式统一,便于维护和扩展。
0x02 需求范围
a. 日志关联(LogServiceRelation)
- Setup 写入、按应用名查询、服务级配置界面展示,均需支持应用级关联。
- 获取关联信息需收口,避免多处自行拼
(bk_biz_id, app_name, service_name)条件。
b. 返回码重定义(CodeRedefinedConfigRelation)
- List、Set 接口需支持全局与跨服务共享规则。
- 支持按
service_names展开写入,以及按 scope 选择更新策略(服务级 / 全局 / 全量)。 - 全局返回码配置页面仅 RPC 场景需要展示(应用配置模块的业务约束)。
c. 返回码备注(Code Remarks)
- Get、Set 接口需同时支持应用级(全局)视角与服务视角。
- 支持框架内置错误码默认备注补齐。
- 增加返回码备注的统一管理能力,支持全局生效与按服务列表生效。
d. 非目标与后续议题
- 除 Log、CodeRedefine 外,
ServiceBase下另有 5 张子表,建议后续统一纳入查询、写入收口范围。 - 但本轮核心交付仍聚焦在日志关联、返回码重定义与返回码备注。
0x03 设计约束
a. 配置分层
- 日志关联、返回码重定义等关系型配置继续基于
ServiceBase体系扩展应用级能力。 - 返回码备注继续使用
ApmMetaConfig维护,不进入关系表。 - 返回码备注与返回码重定义共用业务概念,但存储模型和写入路径保持分离。
b. 作用域与兼容
- 关系表配置需支持全局与服务级两种作用域,并保持旧服务视角调用方式可兼容。
- 返回码备注需同时支持全局视角与服务视角。
- 返回码备注保留
kind作为调用视角维度。 - 返回码备注服务视角返回值保持
{code: remark}不变。 - 返回码备注全局视角改为批量维护
remarks。
c. 展示与默认值
- 返回码备注展示优先级固定为:服务规则覆盖全局规则(
内置默认 < 全局规则 < 服务规则)。 - 框架内置错误码默认备注仅在服务视角读取时做后置补齐,全局视角不返回内置默认项。
- 返回码重定义全局规则下发到采集端时,仍需支持应用级通配生效。
d. 写入保护
- 引入全局配置后,服务级写入需从机制上排除对全局记录的误改。
- 返回码备注服务级写入需避免同一服务在相同
(kind, code)下命中多条服务规则。
e. 代码清理
- 部分接口、方法可能已无引用,制定实施方案时需识别并标记待废弃/删除项。
0x04 参考
- 实施方案:PLAN.md
- 返回码备注默认值附录:PLAN.md / 0x05 附录
- APM SaaS 配置代码片段:apm-saas-config.md
- tRPC 协议定义:trpc.proto