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

EKS Fargate环境Fluent Bit对接CloudWatch日志模板变量配置问题

EKS Fargate Fluent Bit 动态路由CloudWatch日志方案

获取Fargate托管Fluent Bit全量传递字段的方法

Fargate平台托管的Fluent Bit INPUT段默认不会把Kubernetes元数据封装为嵌套结构,而是以打平的顶层字段形式附加到每条日志上,你之前配置解析失败的核心原因是误用了嵌套结构的变量引用语法。获取全量字段可通过两种方式:

  • 临时添加标准输出调试段
    新增一个匹配所有日志的stdout输出段,将日志内容和附带字段直接打印:
    [OUTPUT]
        Name   stdout
        Match  *
        Format json_lines
    
    配置生效后查看输出的JSON结构,就能拿到所有传递到OUTPUT段的字段。Fargate默认注入的常用K8s相关字段包括:
    • kubernetes_namespace_name:Pod所在命名空间
    • kubernetes_pod_name:Pod名称
    • kubernetes_container_name:容器名称
    • kubernetes_labels_<label-key>:Pod上的对应标签值,比如kubernetes_labels_app对应Deployment配置的app标签
  • 读取平台默认配置文件
    你可以在业务Pod中挂载Fargate节点上的Fluent Bit配置路径/fluent-bit/etc/,直接读取平台预置的INPUT、FILTER段配置,确认所有字段的提取规则和命名。

单OUTPUT段实现日志按命名空间、工作负载分流的方案

不需要编写数十个独立OUTPUT配置,直接修正旧版cloudwatch插件的变量引用语法即可实现需求,可直接使用如下配置:

[OUTPUT]
    Name              cloudwatch
    Match             *container_name*
    region            us-east-1
    log_group_name    /eks/${kubernetes_namespace_name}
    log_stream_name   ${kubernetes_labels_app}
    auto_create_group on

注意:变量引用直接使用${顶层字段名}格式即可,不要使用$(kubernetes['namespace_name'])这类嵌套结构写法,后者仅在开启Kubernetes元数据嵌套封装的自托管Fluent Bit场景下生效,Fargate托管环境不支持该写法,会触发变量解析失败回退逻辑。

如果需要更细粒度的日志流划分,比如区分容器、区分部署环境,直接在log_stream_name字段拼接变量即可,例如${kubernetes_namespace_name}-${kubernetes_labels_app}-${kubernetes_container_name},全程仅需维护单个OUTPUT段,后续新增服务、新增命名空间都不需要修改配置。
如果后续需要切换到新版cloudwatch_logs插件,可提前添加rewrite_tag过滤器将需要的字段值拼接到日志Tag中,再通过Tag变量实现动态路由,不需要新增多个OUTPUT段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:33:26