日志 UnifyQuery 环境变量白名单与 query_string 增强
0x01 背景
a. Why
- 日志数据源切换 UnifyQuery 采用灰度白名单(
LOG_UNIFY_QUERY_WHITE_BIZ_LIST)。 - 当前只能通过 DB 动态配置设置,灰度发布需登录管理后台,不利于按环境差异化管控。
- 需要增加环境变量配置层,部署时通过 Helm values 注入即可。
此外:
- 切换 UnifyQuery 后绕过了日志平台 API。
- 日志平台对
query_string的预处理(HTML 反转义、通配符包裹)缺失,可能导致查询行为不一致。
b. 目标
- 环境变量
LOG_UNIFY_QUERY_WHITE_BIZ_LIST支持灰度白名单,优先级高于 DB。 - 灰度白名单支持
-1作为全量灰度标识,列表中存在-1时所有业务均走 UnifyQuery。 LogSearchTimeSeriesDataSource对齐日志平台的query_string处理。- 抽象
_get_unify_query_string方法,允许日志数据源子类定制。
0x02 实现路线
a. 建议的方案
config/default.py增加环境变量配置,命名区别于 DB 配置项。LogSearchTimeSeriesDataSource._fetch_white_list增加环境变量优先级。LogSearchTimeSeriesDataSource.switch_unify_query在原有白名单判断基础上扩展-1全量灰度标识。BaseBkMonitorLogDataSource.to_unify_query_config中self.query_string的处理抽象为_get_unify_query_string,允许子类定制。LogSearchTimeSeriesDataSource覆写_get_unify_query_string,参考日志平台 QueryStringBuilder 对齐处理逻辑,简化为单个方法。
b. 约束
- 基类默认行为不变(
self.query_string or "*")。 - 参考日志平台 QueryStringBuilder 实现,但简化为单个方法而非独立类。
0x03 参考
- 前置需求:
knowledge/bkmonitor/issues/2026-02-10-log-ds-to-unify-query/ - 日志平台 QueryStringBuilder:bklog query_string_builder.py