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

如何配置Fluent Bit实现K8S日志分流向Elasticsearch与Syslog输出?

Fluent Bit 配置方案

要实现你的需求,核心是通过过滤器分流+复制日志流完成双重转发,以下是具体配置步骤:

1. 输入配置(Kubernetes 日志采集)

先配置 Kubernetes 日志输入,这里以官方 kubernetes 插件为例,自动采集容器日志并解析结构化数据:

[INPUT]
    Name              kubernetes
    Tag               k8s.raw
    Kube_Tag_Prefix   k8s.var.log.containers.
    Merge_Log         On          # 将容器日志合并到结构化字段中
    Merge_Log_Key     log_content # 合并后的日志内容字段名
    K8S-Logging.Parser On         # 启用 K8S 日志自动解析
    K8S-Logging.Exclude Off       # 不排除标记了 K8S-Logging: false 的日志

2. 过滤器配置(分流与筛选)

第一步:筛选含 syslog 字符串的日志

用 grep 过滤器过滤出所有包含 syslog 字符串的日志(这里假设检查的是合并后的 log_content 字段,可根据实际字段调整):

[FILTER]
    Name    grep
    Match   k8s.raw
    Regex   log_content syslog  # 匹配字段中包含 syslog 字符串的日志

第二步:复制日志流

用 copy 过滤器将筛选后的日志复制成两个流,分别用于转发到 Elasticsearch 和额外的 Syslog 输出:

[FILTER]
    Name    copy
    Match   k8s.raw
    Name    stream_es        # 用于 Elasticsearch 的流
    Name    stream_syslog_check # 用于检查是否需要转发到 Syslog 的流

第三步:筛选含 syslog: true 的日志

对 stream_syslog_check 流再用 grep 过滤器,只保留 syslog 字段值为 true 的日志:

[FILTER]
    Name    grep
    Match   stream_syslog_check
    Regex   syslog true  # 匹配结构化字段 syslog 等于 true 的日志

3. 输出配置

转发到 Elasticsearch

将 stream_es 和 stream_syslog_check 两个流的日志都发送到 Elasticsearch(因为 syslog: true 的日志也要同步到 ES):

[OUTPUT]
    Name            es
    Match           stream_es stream_syslog_check
    Host            your-es-host.example.com  # 替换为你的 ES 地址
    Port            9200
    Index           k8s-syslog-logs-%Y.%m.%d # 按日期分索引
    Logstash_Format On
    Retry_Limit     False  # 不限制重试次数

额外转发到 Syslog 插件

将筛选后的 stream_syslog_check 流日志发送到指定的 Syslog 服务器:

[OUTPUT]
    Name            syslog
    Match           stream_syslog_check
    Host            your-syslog-host.example.com # 替换为你的 Syslog 地址
    Port            514
    Mode            tcp  # 可选 udp,根据你的 Syslog 服务器配置
    Syslog_Format   rfc5424
    Syslog_Hostname k8s-cluster
    Syslog_AppName  fluent-bit
    Syslog_Message_Key log_content # 指定作为 Syslog 消息内容的字段

关键说明

  • 如果你的日志中 syslog 字符串不在 log_content 字段,可调整 grep 过滤器的 Regex 参数,比如要匹配任意字段中的 syslog,可以写 Regex .* syslog。
  • 若使用 tail 插件采集日志(而非 kubernetes 插件),只需调整 INPUT 部分的配置,过滤器和输出逻辑保持一致。
  • 注意过滤器的匹配顺序:先筛选含 syslog 字符串的日志,再复制流,最后筛选 syslog: true 的日志,避免无意义的日志流转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:35:23