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

如何配置Fluentd采集Kubernetes指定命名空间日志至OpenSearch

Fluentd 按K8s命名空间筛选日志发送OpenSearch配置方案

现有配置的核心问题

  • 未加载Kubernetes元数据过滤插件,日志中没有命名空间维度字段,无法实现命名空间维度的筛选
  • 日志采集路径配置错误,容器标准输出日志的正确路径为/var/log/containers/*.log
  • Filter段语法错误,同一个Filter块不能同时声明两个@type,record_modifier与parser插件不能混用在同一个过滤规则中
  • Match段匹配逻辑错误,仅靠日志文件名模糊匹配无法精准对应命名空间维度,且OpenSearch输出配置缺少必填的服务地址、索引名等参数,无法正常发送数据

可直接使用的正确ConfigMap配置

apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    k8s-app: fluentd-logging
  name: simple-fluentd-configmap
  namespace: fluent-log
data:
  fluent.conf: |
    # 丢弃Fluentd自身运行日志
    <match fluent.**>
      @type null
    </match>

    # 采集节点上所有容器的标准输出日志
    <source>
      @type tail
      path /var/log/containers/*.log
      pos_file /var/log/fluentd-containers.pos
      tag kubernetes.*
      read_from_head true
      <parse>
        @type json
        time_key time
        time_format %Y-%m-%dT%H:%M:%S.%NZ
      </parse>
    </source>

    # 为日志注入K8s元数据,包含命名空间、Pod名称、容器名称等维度字段
    <filter kubernetes.**>
      @type kubernetes_metadata
      skip_labels false
      skip_container_metadata false
      skip_namespace_metadata true
    </filter>

    # 解析日志内容中的JSON格式业务日志,纯文本日志场景可删除该段配置
    <filter kubernetes.**>
      @type parser
      key_name log
      reserve_data true
      <parse>
        @type json
      </parse>
    </filter>

    # 命名空间筛选规则:仅保留指定命名空间的日志
    # 示例中匹配production、middleware两个命名空间,按需修改正则即可
    <filter kubernetes.**>
      @type grep
      <regexp>
        key $.kubernetes.namespace_name
        pattern /^(production|middleware)$/
      </regexp>
    </filter>

    # 将筛选后的日志输出到OpenSearch
    <match kubernetes.**>
      @type opensearch
      host 替换为你的OpenSearch服务访问地址
      port 443
      scheme https
      ssl_verify false
      # 若OpenSearch开启账号认证,取消下方注释填写对应凭据
      # user 替换为OpenSearch访问账号
      # password 替换为OpenSearch访问密码
      index_name k8s-namespace-logs-%Y.%m.%d
      logstash_format false
      auto_create_index true
    </match>

    # 丢弃所有不符合筛选规则的日志
    <match **>
      @type null
    </match>

配置注意事项

  • 运行前确认Fluentd镜像已预装fluent-plugin-kubernetes_metadata_filter、fluent-plugin-opensearch两个插件,否则配置会加载失败
  • 调整采集的命名空间时,仅需修改grep过滤规则中的pattern正则即可,单命名空间直接写/^你的命名空间名$/,多命名空间用|分隔
  • 注入元数据后,所有日志都会携带kubernetes.namespace_name字段存储所属命名空间,你也可以基于该插件生成的其他字段,实现按Pod、工作负载类型等维度的日志筛选
  • 如果需要将不同命名空间的日志写入不同OpenSearch索引,可以通过标签路由拆分match规则,无需重复编写重复的输出配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:36:19