You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fluent-bit传输NestJS日志到ES报failed to flush chunk错误

问题原因

这个报错是ES批量写入部分失败导致的,不是全量写入失败:

  • Fluent-bit按批次把日志发给ES时,只要批次里有1条日志写入失败,ES就会返回errors:true标记
  • 你贴的报错里ES返回的JSON被截断了,所有显示出来的条目都是201写入成功,失败的那条在截断的内容里
  • Fluent-bit默认会把整个批次标记为失败重试,哪怕批次里绝大多数日志都已经写入成功,所以才会出现"日志看起来都正常进ES,但一直刷flush失败警告"的现象。
排查&修复步骤
  1. 先定位具体失败原因
    你已经在ES输出配置里开了Trace_Error On,临时把[SERVICE]段的Log_level改成debug,重启后就能看到具体是哪条日志、因为什么原因写入失败。结合你当前的配置,最常见的几个诱因:
    • 配置里写了Type docker,Fluent-bit 1.8以上版本对接ES 7.x+时,这个参数已经被废弃,强行传type会触发ES参数校验错误
    • NestJS输出的日志存在字段类型冲突,比如同名字段在不同日志里分别是字符串、数字、对象格式,ES自动映射时拒绝写入
    • 单条日志体积过大,超过ES默认的HTTP请求大小限制
    • 开了Logstash_Format On之后,你配置的Index fluentbit是不生效的,配置冲突也可能触发异常
  2. 优先修正现有配置的明显问题
    替换ES输出段的配置为以下内容,适配高版本ES、避免常见冲突:
    [OUTPUT]
        Name es
        Trace_Error On
        Match docker_logs
        Host 127.0.0.1
        Port 9200
        Logstash_Format On
        Logstash_Prefix docker_log
        Replace_Dots On
        Suppress_Type_Name On
        Retry_Limit 2
        Buffer_Size 20M
    
    改动点说明:
    • 删除了废弃的Type docker和不生效的Index fluentbit配置
    • 加了Replace_Dots On,自动把字段名里的.替换成_,避免ES字段映射冲突
    • 加了Suppress_Type_Name On,对接ES7+版本时不再提交type参数
    • 调整重试次数为2次,避免失败的chunk无限重试堆积内存
    • 限制单次批量请求体积为20M,避免超过ES的请求大小限制
  3. 补充过滤器处理冲突字段
    在你现有的三个parser过滤器后面,加一个modify过滤器,移除容易和ES内置字段冲突的键:
    [FILTER]
        Name modify
        Match docker_logs
        Remove_key _id
        Remove_key _type
    
    避免日志自带的_id、_type字段和ES内置文档字段冲突导致写入失败。
验证

改完配置重启Fluent-bit后观察运行日志:

  • 如果不再出现chunk flush失败的警告,说明问题已经解决
  • 如果还有报错,看debug日志里的具体错误原因,针对性处理即可,比如字段类型冲突可以提前在ES创建索引模板固定字段类型。

内容的提问来源于stack exchange,提问作者Erika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:27:19