Skip to content

枚举值查询接入 UnifyQuery

0x01 背景

a. 问题

日志、调用链和事件的数据查询已经由 UnifyQuery(简称 UQ)判断查询路径。枚举值查询仍存在旁路: GetVariableValue.query_dimension() 直接调用 DataSource.query_dimensions(),不会执行 UnifyQuery.use_unify_query()

b. 目标

  • 所有 DataSource 枚举值查询先构造 UQ,再调用 UnifyQuery.query_dimensions()
  • 单数据源先判断 UQ 枚举能力,再复用 use_unify_query() 选择 UQ tag_values 或原 DataSource。
  • 外部接口和各 DataSource 的返回结构保持不变。

0x02 实现路线

a. 方案

枚举值查询在 UnifyQuery.query_dimensions() 收口:

text
supports_unify_query_dimensions and use_unify_query()
  -> api.unify_query.tag_values(**params)

otherwise
  -> DataSource.query_dimensions()

GetVariableValue.query_dimension() 只负责构造单数据源 UQ。dimension_querydimension_count 继续使用同一个 query_dimensions() 入口。

详细设计见 PLAN.md

b. 约束

  • 多数据源保留现有 query_data() 表达式查询。
  • BKData、InfluxDB 等非目标 DataSource 保留原枚举值查询。
  • CMDB、K8S、采集配置和服务实例等非 DataSource 枚举逻辑保持不变。
  • 日志、调用链和事件仍只查询首字段。
  • 继续使用现有灰度与黑名单,不增加枚举值专用开关。

0x03 参考