Skip to content

feat(metadata): 支持自定义格式 DataSource 与多 DataLink --story=137268681 - #12026

Open
unique0lai wants to merge 4 commits into
TencentBlueKing:masterfrom
unique0lai:feat/custom-format-datalink/#1010158081137268681
Open

feat(metadata): 支持自定义格式 DataSource 与多 DataLink --story=137268681#12026
unique0lai wants to merge 4 commits into
TencentBlueKing:masterfrom
unique0lai:feat/custom-format-datalink/#1010158081137268681

Conversation

@unique0lai

Copy link
Copy Markdown
Collaborator

变更内容

  • 新增 bk_custom_format ETL 类型及 ResultTable 自定义清洗配置
  • 支持同一 DataSource 派生多条 VM、Elasticsearch、Doris DataLink
  • VM 使用 Clean + ChannelBinding + AvroToMetric 两段式链路
  • 增加稳定资源命名、独立 consumer group、失败状态与完整生命周期清理
  • 增加无状态 Clean Debug 接口及字段契约校验
  • 增加数据库迁移和自定义链路回归测试

验证

  • 自定义及 DataSource 用例:18 passed
  • DataLink 组合回归:191 passed
  • Django system check 通过
  • Ruff、ruff-format、pre-commit hooks 通过

关联单据:137268681

@github-actions

Copy link
Copy Markdown

请在 PR 中添加项目标签,例如:project/monitorproject/apmproject/logproject/publicproject/aiops

@unique0lai unique0lai self-assigned this Aug 19, 2026
@unique0lai unique0lai added project/monitor project monitor feat A new feature. Correlates with MINOR in SemVer metadata labels Aug 19, 2026
@unique0lai
unique0lai requested a balanced review from Copilot August 19, 2026 12:44

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

本 PR 为 bk-monitor 的 metadata 模块新增了 bk_custom_format 清洗类型,允许同一个 DataSource 派生出多条独立的 VM / Elasticsearch / Doris DataLink。VM 目标采用 Clean → ChannelBinding → AvroToMetric 两段式链路(clean + shipper 两条 Databus、独立 consumer group),ES/Doris 目标采用单段直连链路。同时引入稳定的链路命名、失败状态记录(status_message)、完整生命周期清理,以及无状态的 Clean Debug 接口与字段契约校验,并配套数据库迁移与回归测试。

Changes:

  • 新增 CustomFormatV4DataLinkOptionChannelBindingConfig 模型与 compose_custom_format_configs 组装逻辑,支持 VM/ES/Doris 单目标链路及字段契约校验。
  • 扩展 DataBusConfigsource_kind/source_name/role)与 BkBaseResultTablestatus_message、去除 bkbase_data_name 唯一约束),并新增迁移 0276
  • 打通 DataSource/ResultTable 全生命周期:注册命名空间处理、一对多关联、KafkaTail 采样、健康检查、失败清理与 Debug 接口。

Reviewed changes

Copilot reviewed 23 out of 23 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
metadata/task/datalink.py 新增 compose_custom_format_data_link_nameapply_custom_format_datalink 任务及 VM 依赖解析
metadata/task/bkbase.py Databus 角色反推、ChannelBinding 同步、status_message 清理与去除单一 DSRT 假设
metadata/models/data_link/data_link.py 新增自定义格式策略、契约校验、compose_custom_format_configsdelete_data_link 按租户/命名空间过滤
metadata/models/data_link/data_link_configs.py 新增 ChannelBindingConfig,Databus 增加 source/role 字段并模板化 source
metadata/models/result_table.py 新增 Option、CustomFormatV4DataLinkOption、apply/delete/modify/存储创建的自定义格式分支
metadata/models/data_source.py 注册命名空间参数化、modify_table_id_datasource 支持一对多、禁止原地切换 ETL
metadata/models/bkdata/result_table.py 去除 bkbase_data_name 唯一约束并新增 status_message
metadata/resources/custom_format_datalink.py 新增 Clean Debug 资源
metadata/resources/resources.py KafkaTail 支持自定义格式采样路径
metadata/resources/bkdata_link.py 元数据反查纳入 ChannelBinding,Databus 入口优先展示 clean
metadata/health_check.py 自定义格式按 DataIdConfig 解析命名空间
metadata/models/space/constants.py / data_link/constants.py / config/default.py 新增枚举、Kind、inner Kafka channel 映射配置
metadata/migrations/0276_custom_format_datalink.py 配套 schema 迁移
metadata/models/**/__init__.pycomponent_reuse.py 导出 ChannelBindingConfig
metadata/tests/** 自定义格式链路、KafkaTail、DataLink 回归测试

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

DataLink._validate_custom_format_contract(
generate_result_table_field_list(table_id=table_id, bk_tenant_id=bk_tenant_id),
clean_rules,
require_vm_contract=option.target_storage_type == "victoria_metrics",
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feat A new feature. Correlates with MINOR in SemVer metadata project/monitor project monitor

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants