热门搜索:
ghcr.io/fluent/fluent-operator/fluent-bit

ghcr.io/fluent/fluent-operator/fluent-bit:latest

ghcr.iolinux/amd64latest大小: 未知更新于 2026年5月29日

简化Kubernetes中Fluent Bit和Fluentd的管理

Fluent Operator

Fluent Operator为基于Fluent Bit和Fluentd构建日志层提供了极大的灵活性。

安装后,Fluent Operator提供以下功能:

  • Fluent Bit管理:自动部署和销毁Fluent Bit DaemonSet。
  • Fluentd管理:自动部署和销毁Fluentd StatefulSet。
  • 自定义配置:通过标签选择输入/过滤/输出插件。
  • 动态重载:无需重启Fluent Bit和Fluentd Pod即可更新配置。
  • 多租户日志隔离:Fluentd通过https://github.com/kube-logging/fluent-plugin-label-router%E6%8F%92%E4%BB%B6%E6%94%AF%E6%8C%81%E5%A4%9A%E7%A7%9F%E6%88%B7%E6%97%A5%E5%BF%97%E9%9A%94%E7%A6%BB%E3%80%82
  • 可插拔部署组件:Fluent Bit或Fluentd可单独部署。

目录

  • Fluent Operator
  • 目录
  • 概述
  • Fluent Bit
  • Fluentd
  • 快速开始
  • 前提条件
  • 安装
  • 使用YAML部署Fluent Operator
  • 使用Helm部署Fluent Operator
  • Fluent Operator演练
  • 收集Kubernetes日志
  • 使用YAML部署Kubernetes日志栈
  • 使用Helm部署Kubernetes日志管道
  • 收集审计日志
  • Fluentd
  • 插件
  • Fluent Bit
  • Fluentd
  • 最佳实践
  • 插件分组
  • 监控
  • 自定义解析器
  • 其他
  • 自定义插件
  • 路线图
  • 开发
  • 要求
  • 运行
  • 贡献
  • 文档
  • 清单
  • 社区
  • 关于社区
  • 联系我们
  • 视频和博客

概述

尽管Fluent Bit和Fluentd都能收集、处理(解析和过滤)日志并将其转发到最终目的地,但它们在不同方面各有优势。

Fluent Bit因其轻量高效,是日志采集器的理想选择;而Fluentd则因其丰富的插件,更擅长对日志进行高级处理。

  • 仅Fluent Bit模式:如果只需收集日志并发送到最终目的地,仅需Fluent Bit。
  • Fluent Bit + Fluentd模式:如果还需对收集的日志进行高级处理或发送到更多目标,还需Fluentd。
  • 仅Fluentd模式:如果需要通过HTTP或Syslog等网络接收日志,然后处理并发送到最终目标,仅需Fluentd。

Fluent Operator包含Fluent Bit和Fluentd的CRD及控制器,允许您根据上述三种模式配置日志处理管道。

Fluent Bit将以DaemonSet形式部署,Fluentd将以StatefulSet形式部署。整体工作流程如下:

Fluent Bit

为Fluent Bit定义了以下CRD:

  • FluentBit:定义Fluent Bit DaemonSet及其配置。需要自定义Fluent Bit镜像ghcr.io/fluent/fluent-operator/fluent-bit以配合FluentBit Operator实现动态配置重载。
  • ClusterFluentBitConfig:选择集群级别的输入/过滤/输出插件,并将最终配置生成到Secret中。
  • FluentBitConfig:选择命名空间级别的过滤/输出/解析器和集群级别的解析器插件,并将最终配置生成到Secret中。
  • ClusterInput:定义集群级别的输入配置段。
  • Parser:定义命名空间级别的解析器配置段。
  • ClusterParser:定义集群级别的解析器配置段。
  • MultilineParser:定义命名空间级别的多行解析器配置段。
  • ClusterMultilineParser:定义集群级别的多行解析器配置段。
  • Filter:定义命名空间级别的过滤配置段。
  • ClusterFilter:定义集群级别的过滤配置段。
  • Output:定义命名空间级别的输出配置段。
  • ClusterOutput:定义集群级别的输出配置段。

每个**ClusterInputClusterParserClusterFilterClusterMultilineParserClusterOutput** 都代表一个Fluent Bit配置段,由**ClusterFluentBitConfig**通过标签选择器选择。Fluent Operator监听这些对象,构建最终配置,并创建Secret存储配置,该Secret将挂载到Fluent Bit DaemonSet中。整体工作流程如下:

为使Fluent Bit在配置更改时能获取并使用最新配置,添加了名为Fluent Bit watcher的包装器,用于在检测到Fluent Bit配置更改时立即重启Fluent Bit进程。这样无需重启Fluent Bit Pod即可重载新配置。采用这种方式是因为Fluent Bit本身没有重载接口,更多详情请参考此https://github.com/fluent/fluent-bit/issues/365%E3%80%82

Fluentd

为Fluentd定义了以下CRD:

  • Fluentd:定义Fluentd StatefulSet及其配置。需要自定义Fluentd镜像kubesphere/fluentd以配合Fluentd Operator实现动态配置重载。
  • FluentdConfig:选择集群级别或命名空间级别的输入/过滤/输出插件,并将最终配置生成到Secret中。
  • ClusterFluentdConfig:选择集群级别的输入/过滤/输出插件,并将最终配置生成到Secret中。
  • Filter:定义命名空间级别的过滤配置段。
  • ClusterFilter:定义集群级别的过滤配置段。
  • Output:定义命名空间级别的输出配置段。
  • ClusterOutput:定义集群级别的输出配置段。

快速开始

前提条件

运行Fluent Operator需要Kubernetes v1.16.13+。

安装

使用YAML部署Fluent Operator

安装最新稳定版本

kubectl create namespace fluent
kubectl apply -f https://github.com/fluent/fluent-operator/releases/latest/download/setup.yaml

# 您可以在 manifests/setup/kustomization.yaml 中修改命名空间
# 然后使用以下命令安装到其他命名空间
# kubectl kustomize manifests/setup/ | kubectl apply -f -

安装开发版本

使用 Helm 部署 Fluent Operator

[!NOTE] 需要 Helm v3.2.1 或更高版本。

标准安装(CRD 包含在图表中):

helm repo add fluent https://fluent.github.io/helm-charts
helm repo update

helm install fluent-operator fluent/fluent-operator \
--create-namespace -n fluent

默认容器运行时为 containerd。如果集群使用不同的运行时,请设置 --set containerRuntime=docker--set containerRuntime=crio

Helm 在首次安装时会安装 CRD,但在后续的 helm upgradehelm uninstall 调用中不会升级或删除它们。要在升级图表时更新 CRD:

helm pull fluent/fluent-operator --untar
kubectl apply --server-side --force-conflicts -f fluent-operator/crds/
helm upgrade fluent-operator fluent/fluent-operator -n fluent

高级安装 — 通过单独的 fluent-operator-fluent-bit-crdsfluent-operator-fluentd-crds 图表实现 CRD 的完整 Helm 生命周期管理:

# 步骤 1:将 Fluent Bit CRD 作为单独管理的发布版本安装
helm install fluent-operator-fluent-bit-crds fluent/fluent-operator-fluent-bit-crds -n fluent --create-namespace

# 步骤 2:将 Fluentd CRD 作为单独管理的发布版本安装(可选)
helm install fluent-operator-fluentd-crds fluent/fluent-operator-fluentd-crds -n fluent

# 步骤 3:安装操作员,跳过 CRD(已在上面安装)
helm install fluent-operator fluent/fluent-operator -n fluent --skip-crds

通过这种方法,可以使用 helm upgrade fluent-operator-fluent-bit-crds / helm upgrade fluent-operator-fluentd-crds 升级 CRD,并可以通过 --set additionalAnnotations."helm\.sh/resource-policy"=keep 防止删除。

有关从 v3.x 升级的更多信息,请参见 MIGRATION-v4.md 指南。

Fluent Operator 演练

有关 Fluent Operator 的各种用例的更多信息,请参考 https://github.com/kubesphere-sigs/fluent-operator-walkthrough%E3%80%82

收集 Kubernetes 日志

本指南提供了一个日志管道,包括 Fluent Bit DaemonSet 及其日志输入/过滤/输出配置,用于收集 Kubernetes 日志,包括容器日志和 kubelet 日志。

[!NOTE] 开始之前,您需要一个运行中的 Elasticsearch v5+ 集群来接收日志数据。请记住根据您自己的 es 设置调整 output-elasticsearch.yaml。Kafka 和 Fluentd 输出是可选的,默认情况下处于关闭状态。

使用 YAML 部署 Kubernetes 日志栈

kubectl apply -f manifests/logging-stack

# 您可以在 manifests/logging-stack/kustomization.yaml 中更改命名空间
# 然后使用以下命令安装到另一个命名空间
# kubectl kustomize manifests/logging-stack/ | kubectl apply -f -

使用 Helm 部署 Kubernetes 日志管道

Kubernetes 日志管道(通过 Fluent Bit 收集容器日志)默认启用(Kubernetes: true)。要同时部署 Fluentd 作为日志聚合层:

helm upgrade fluent-operator fluent/fluent-operator -n fluent --set fluentd.enable=true

几分钟后,您应该会看到一个可用的索引:

$ curl localhost:9200/_cat/indices
green open ks-logstash-log-2020.04.26 uwQuoO90TwyigqYRW7MDYQ 1 1 99937 0 31.2mb 31.2mb

成功!

收集审计日志

Linux 审计框架提供了一个符合 CAPP(受控访问保护配置文件)的审计系统,可可靠地收集系统上任何与安全相关(或非安全相关)事件的信息。参考 manifests/logging-stack/auditd,它支持从 Linux 审计框架收集审计日志的方法。

kubectl apply -f manifests/logging-stack/auditd

# 您可以在 manifests/logging-stack/auditd/kustomization.yaml 中更改命名空间
# 然后使用以下命令安装到另一个命名空间
# kubectl kustomize manifests/logging-stack/auditd/ | kubectl apply -f -

几分钟后,您应该会看到一个可用的索引:

$ curl localhost:9200/_cat/indices
green open ks-logstash-log-2021.04.06 QeI-k_LoQZ2h1z23F3XiHg 5 1 404879 0 298.4mb 149.2mb

Fluentd

Fluentd 作为日志转发层,通过网络从 Fluent Bit 或其他应用接收日志。

有关 Fluent Operator Fluentd CRD 的各种用例的更多信息,请参考 https://github.com/kubesphere-sigs/fluent-operator-walkthrough#fluent-bit--fluentd-mode%E3%80%82

插件

Fluent Bit

此处可找到支持的 Fluent Bit 插件。

Fluentd

此处可找到支持的 Fluentd 插件。

最佳实践

插件分组

此处可找到插件组信息。

监控

此处可使用 Fluent Bit 中的内置 HTTP 服务器。

自定义解析器

此处可在 Fluent Bit 中自定义解析器。

其他

如果您想了解更多关于 Fluent-Operator 的信息,请参考 其他。

自定义插件

此处可了解如何在 FluentBit 和 Fluentd 中使用自定义插件。

路线图

  • 支持 containerd 日志格式
  • 添加 Fluentd CRD 作为日志聚合层,组名称为 fluentd.fluent.io
  • 添加 FluentBit 集群 CRD,新组名称为 fluentbit.fluent.io
  • 将整个项目重命名为 Fluent Operator
  • 支持更多 Fluentd 和 FluentBit 插件

开发

要求

  • golang v1.16+。
  • kubectl v1.19.2+。
  • kubebuilder v3.1+(项目使用 v3.1.0 构建)
  • 可访问 Kubernetes 集群 v1.19.2+

运行

确保为本地开发 Kubernetes 集群加载了 KUBECONFIG 文件。

  1. 安装 CRD:make install
  2. export NAMESPACE=something 设置操作员的命名空间
  3. 运行:make run

贡献

文档

API 文档是自动生成的。要修改它,请编辑结构体字段上方的注释,然后运行 go run cmd/doc-gen/main.go

清单

manifests/setup 文件夹下的大多数文件是从 config 自动生成的。不要直接编辑它们,而是运行 make manifests,然后相应地替换这些文件。

社区

视频和博客

  • 从 FluentBit Operator 到 Fluent Operator:漫长的发展之路 - Benjamin Huo
  • 什么是 Fluent Operator 以及如何使用它 - Henrik Rexed
  • 深入了解 Fluent Bit Operator:Kubernetes 原生日志处理器 - Feynman Zhou 与 Dhruv Kela
  • 快速入门:5 分钟了解 Fluent Operator(中文)- Dehao Cheng

镜像拉取常见问题

用户好评

来自真实用户的反馈,见证轩辕镜像的优质服务

用户头像

oldzhang

运维工程师

Linux服务器

5

"Docker访问体验非常流畅,大镜像也能快速完成下载。"

镜像拉取问题咨询请 提交工单。官方公众号:源码跳动。官方技术交流群:51517718。轩辕镜像所有镜像均来源于原始仓库,本站不存储、不修改、不传播任何镜像内容。