更新时间:2026-08-14 GMT+08:00
分享

配置Kibana查询响应熔断

在业务查询过程中,Elasticsearch可能返回超大响应体,如全量索引导出、高基数字段聚合等。当Kibana后端进程缓冲和解析这些超大响应时,堆内存会被迅速占满,导致进程OOM(Out of Memory,内存溢出)崩溃,影响所有用户的可视化操作。CSS服务提供查询响应熔断功能,在Kibana后端进程收到响应但尚未缓冲body之前,根据响应头的content-length预估堆内存消耗,一旦超过阈值即销毁响应流并返回错误,避免进程崩溃。

功能介绍

当Kibana后端进程收到查询响应时,熔断器会在缓冲响应体之前进行判断,决定是放行还是拦截。

图1 查询流程

熔断器满足以下任一条件即触发,触发后请求响应体会直接被丢弃:

  • 绝对值上限:当“maxContentLength > 0”“请求响应体的contentLength ≥ maxContentLength”时触发,表示响应体本身过大,无论当前堆占用如何都拒绝。
  • 堆占用上限:当“contentLength × heapMultiplier + heapUsed > heapSizeLimit × maxPercentage”时触发,表示预估该响应入堆后会超过堆内存上限。

其中各参数含义如下:

  • maxContentLength:响应体绝对上限。响应体大小达到该值即触发熔断。
  • contentLength:当前请求响应体的大小,即HTTP响应头“content-length”字段的值。
  • heapSizeLimit:进程的堆内存上限。
  • heapUsed:进程当前已使用的堆内存。
  • heapMultiplier:堆估算倍数,默认值为4。将contentLength放大后用于预估响应入堆后的内存占用。默认值4是因为JSON数据在JavaScript中解析为对象后,内存占用约为原始文本的3~5倍,4倍是一个兼顾安全与资源的经验值。
  • maxPercentage:堆占用上限比例。

查询响应熔断作用于Kibana后端进程,与Elasticsearch集群的配置大查询隔离功能互补。前者保护Kibana进程免受超大响应影响,后者管理引擎侧的大查询任务。

约束限制

  • 仅当Elasticsearch集群版本号为7.10.2,且镜像版本号不低于7.10.2_26.6.0_xxx时,才支持Kibana查询响应熔断功能。满足条件的集群默认启用该功能。
  • 安全集群(开启“安全模式”的集群)的Kibana查询响应熔断参数仅支持在Global租户下可见可改。
  • Advanced Settings修改后不是即时生效,而是后台周期性同步,最迟1分钟后生效。

登录Kibana的Advanced settings页面

  1. 登录云搜索服务管理控制台
  2. 在左侧导航栏,选择“集群管理 > Elasticsearch”
  3. 在集群列表,选择目标集群,单击操作列的“Kibana”,登录Kibana。
  4. (可选)如果是安全集群,需要切换到Global租户才能配置Kibana查询响应熔断参数。

    在Kibana页面,单击右上方用户名,选择“Switch tenants”,在Select your tenant页面选择“Global”,单击“Confirm”

  5. 在左侧导航栏选择“Management > Stack Management”,选择“Advanced settings”,进入Settings页面。

配置Kibana查询响应熔断参数

  1. 在Settings页面,找到Search模块,配置以下Kibana查询响应熔断的参数。
    图2 配置Kibana查询响应熔断
    表1 Kibana查询响应熔断的参数说明

    参数

    类型

    默认值

    说明

    circuitBreaker:enabled

    Boolean

    On

    是否启用Kibana查询响应熔断。

    • On:启用。
    • Off:关闭。关闭熔断功能后,Kibana后端进程将不再拦截超大响应,大查询响应可能导致进程OOM崩溃,影响所有用户的可视化操作。建议仅在确认业务无大查询风险时关闭。

    circuitBreaker:heapMultiplier

    Integer

    4

    堆估算倍数,用于预估响应入堆后的内存占用。

    取值范围:1~10

    circuitBreaker:maxContentLength

    Integer

    104857600

    响应体绝对上限。

    取值范围:

    • 0(表示不限)
    • 1048576(1MB)~1073741824(1GB)

    单位:字节

    circuitBreaker:maxPercentage

    Float

    1.0

    堆占用上限比例。

    取值范围:0.1~1.0

    1.0表示可用满堆。

  2. 修改完成后,单击“Save changes”保存参数。
  3. 等待约1分钟后,执行一次大查询验证熔断功能生效。
    1. 在左侧导航栏选择“Dev Tools”,进入操作页面。
    2. 执行一次大查询,返回请求失败,错误码为502。
      图3 大查询
    3. 在浏览器,按F12进入开发者工具,切换至“Network”页签,查看“Response”,显示“Memory circuit breaker triggered”,则表示查询响应已被熔断。
      图4 查询响应

相关文档