Skip to content

【告警中心】优化关联日志条件构造不准确的问题

0x01 背景

a. Why

日志告警进入新版告警详情关联日志面板时,后端返回的过滤语义被拆成 keywordaddition 两种载体。

前端根据 keyword 是否存在选择检索模式:

  • 非空且不为 * 时进入 Lucene 语句模式。
  • Lucene 语句模式只向日志检索接口提交 keyword

当前 build_log_search_condition 会把告警维度和策略过滤条件构造成 addition,并把策略 query_string 原样返回为 keyword

当策略同时配置 query_stringagg_condition 时,关联日志实际只按 query_string 查询,范围会大于触发告警时的策略范围。

这会让告警详情混入不满足策略过滤条件的日志,降低关联日志对问题定位的准确性。

b. 目标

  • 关联日志默认查询范围与日志告警策略触发范围一致。
  • 无有效 query_string 的策略继续使用 UI 过滤模式。
  • 日志聚类告警继续使用现有 addition 过滤,不破坏聚类签名和敏感度过滤。

0x02 实现路线

a. 建议的方案

bkmonitor.utils.alert_drilling.build_log_search_condition 作为过滤语义收敛入口。

调用方明确要求进入语句模式时,把策略 query_string 与可表达的过滤条件合并为一个 Lucene keyword

合并逻辑复用 bkmonitor.utils.elasticsearch.handler.QueryStringGenerator 生成过滤片段,但需要补齐操作符映射和聚类豁免:

  • keyword 为空或 * 时不合并,保留 UI 模式。
  • 存在有效 keywordaddition 非空时,输出 (<原 keyword>) AND (<过滤条件 query_string>)
  • 合并成功后清空 addition,避免前端继续保留互斥模式下的过滤条件。
  • DefaultTarget.list_related_log_targets 抽象 is_clustering = bool(clustering_type and clustering_index_set_id)
  • 聚类场景不启用 keyword 合并,并继续把 keyword 置空,让前端保持 UI 过滤模式。

b. 约束

  • 不改前端检索模式选择逻辑,本期由后端保证 keyword 语义完整。
  • 以当前构造出的 addition 作为合并来源,命中映射的条件才转入 keyword
  • 保留 addition 返回字段,但合并成功时返回空列表。
  • 首页跳转等非详情面板调用方是否启用合并,需要按实际日志平台参数语义单独验证。

0x03 参考