Skip to content

日志 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. 建议的方案

  1. config/default.py 增加环境变量配置,命名区别于 DB 配置项。
  2. LogSearchTimeSeriesDataSource._fetch_white_list 增加环境变量优先级。
  3. LogSearchTimeSeriesDataSource.switch_unify_query 在原有白名单判断基础上扩展 -1 全量灰度标识。
  4. BaseBkMonitorLogDataSource.to_unify_query_configself.query_string 的处理抽象为 _get_unify_query_string,允许子类定制。
  5. LogSearchTimeSeriesDataSource 覆写 _get_unify_query_string,参考日志平台 QueryStringBuilder 对齐处理逻辑,简化为单个方法。

b. 约束

  • 基类默认行为不变(self.query_string or "*")。
  • 参考日志平台 QueryStringBuilder 实现,但简化为单个方法而非独立类。

0x03 参考