ghcr.io/fluent/fluent-operator/fluent-bit:v4.2
简化 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 插件支持多租户日志隔离。
- 可插拔部署组件:Fluent Bit 或 Fluentd 可单独部署。
目录
- Fluent Operator
- Table of contents
- Overview
- Fluent Bit
- Fluentd
- Get Started
- Prerequisites
- Install
- Deploy Fluent Operator with YAML
- Deploy Fluent Operator with Helm
- Fluent Operator Walkthrough
- Collect Kubernetes logs
- Deploy the Kubernetes logging stack with YAML
- Deploy the Kubernetes logging pipeline with Helm
- Collect audit logs
- Fluentd
- Plugins
- Fluent Bit
- Fluentd
- Best Practice
- Plugin Grouping
- Monitoring
- Custom Parser
- Misc
- Custom Plugin
- Roadmap
- Development
- Requirements
- Running
- Contributing
- Documentation
- Manifests
- Community
- About the community
- Contact us
- Videos and blogs
概述
尽管 Fluent Bit 和 Fluentd 都能收集、处理(解析和过滤)日志并将其转发到最终目标,但它们在不同方面各有优势。
Fluent Bit 因其轻量和高效,是日志代理的理想选择;而 Fluentd 由于其丰富的插件,在日志高级处理方面更加强大。
- 仅 Fluent Bit 模式:如果只需收集日志并发送到最终目标,仅需 Fluent Bit 即可。
- Fluent Bit + Fluentd 模式:如果还需要对收集的日志进行高级处理或发送到更多目标,那么还需要 Fluentd。
- 仅 Fluentd 模式:如果需要通过 HTTP 或 Syslog 等网络接收日志,然后处理并发送到最终目标,仅需 Fluentd 即可。
Fluent Operator 包含 Fluent Bit 和 Fluentd 的 CRD 及控制器,允许您根据需要以上述 3 种模式配置日志处理管道。
Fluent Bit 将以 DaemonSet 形式部署,而 Fluentd 将以 StatefulSet 形式部署。整体工作流程如下所述:
Fluent Bit
为 Fluent Bit 定义了以下 CRD:
FluentBit:定义 Fluent Bit DaemonSet 及其配置。要与 FluentBit Operator 配合实现动态配置重载,需要自定义 Fluent Bit 镜像ghcr.io/fluent/fluent-operator/fluent-bit。ClusterFluentBitConfig:选择集群级别的输入/过滤/输出插件,并将最终配置生成到 Secret 中。FluentBitConfig:选择命名空间级别的过滤/输出/解析器和集群级别的解析器插件,并将最终配置生成到 Secret 中。ClusterInput:定义集群级别的输入配置段。Parser:定义命名空间级别的解析器配置段。ClusterParser:定义集群级别的解析器配置段。MultilineParser:定义命名空间级别的多行解析器配置段。ClusterMultilineParser:定义集群级别的多行解析器配置段。Filter:定义命名空间级别的过滤配置段。ClusterFilter:定义集群级别的过滤配置段。Output:定义命名空间级别的输出配置段。ClusterOutput:定义集群级别的输出配置段。
每个 ClusterInput、ClusterParser、ClusterFilter、ClusterMultilineParser、ClusterOutput 都代表一个 Fluent Bit 配置段,由 ClusterFluentBitConfig 通过标签选择器选择。Fluent Operator 监听这些对象,构建最终配置,并创建 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 Operator 配合实现动态配置重载,需要自定义 Fluentd 镜像kubesphere/fluentd。FluentdConfig:选择集群级别或命名空间级别的输入/过滤/输出插件,并将最终配置生成到 Secret 中。ClusterFluentdConfig:选择集群级别的输入/过滤/输出插件,并将最终配置生成到 Secret 中。Filter:定义命名空间级别的过滤配置段。ClusterFilter:定义集群级别的过滤配置段。Output:定义命名空间级别的输出配置段。ClusterOutput:定义集群级别的输出配置段。
快速开始
前提条件
运行 Fluent Operator 需要 Kubernetes v1.16.13+。
安装
使用 YAML 部署 Fluent Operator
安装最新稳定版本
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 -
安装开发版本
kubectl apply -f https://raw.githubusercontent.com/fluent/fluent-operator/master/manifests/setup/setup.yaml
Fluent Operator 演练
有关 Fluent Operator 各种使用场景的更多信息,可参考 https://github.com/kubesphere-sigs/fluent-operator-walkthrough%E3%80%82
收集 Kubernetes 日志
本指南将配置一个日志流水线,包括 Fluent Bit DaemonSet 及其日志输入/过滤/输出配置,用于收集 Kubernetes 日志(包括容器日志和 kubelet 日志)。
[!NOTE] 开始前,需要一个运行中的 Elasticsearch v5+ 集群来接收日志数据。请务必根据您自己的 Elasticsearch 配置调整 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 插件。
该项目于2021年被Fluent社区接纳为子项目,目前是一个厂商中立、社区驱动的项目。
联系我们
欢迎加入 CNCF Slack 上的 #fluent-operator 频道与我们交流。
视频与博客
- 从 FluentBit Operator 到 Fluent Operator:漫长的发展之路 - Benjamin Huo
- 什么是 Fluent Operator 以及如何使用它 - Henrik Rexed
- 深入解析 Fluent Bit Operator:Kubernetes 原生日志处理器 - Feynman Zhou 与 Dhruv Kela
- 快速入门:5分钟了解 Fluent Operator(中文)- Dehao Cheng
轩辕镜像配置手册
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
Docker 配置
登录仓库拉取
通过 Docker 登录认证访问私有仓库
专属域名拉取
无需登录使用专属域名
K8s Containerd
Kubernetes 集群配置 Containerd
K3s
K3s 轻量级 Kubernetes 镜像加速
Dev Containers
VS Code Dev Containers 配置
Podman
Podman 容器引擎配置
Singularity/Apptainer
HPC 科学计算容器配置
其他仓库配置
ghcr、Quay、nvcr 等镜像仓库
Harbor 镜像源配置
Harbor Proxy Repository 对接专属域名
Portainer 镜像源配置
Portainer Registries 加速拉取
Nexus 镜像源配置
Nexus3 Docker Proxy 内网缓存
系统配置
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
镜像拉取常见问题
使用与功能问题
配置了专属域名后,docker search 为什么会报错?
docker search 限制
Docker Hub 上有的镜像,为什么在轩辕镜像网站搜不到?
站内搜不到镜像
机器不能直连外网时,怎么用 docker save / load 迁镜像?
离线 save/load
docker pull 拉插件报错(plugin v1+json)怎么办?
插件要用 plugin install
WSL 里 Docker 拉镜像特别慢,怎么排查和优化?
WSL 拉取慢
轩辕镜像安全吗?如何用 digest 校验镜像没被篡改?
安全与 digest
第一次用轩辕镜像拉 Docker 镜像,要怎么登录和配置?
新手拉取配置
轩辕镜像合规吗?轩辕镜像的合规是怎么做的?
镜像合规机制
轩辕镜像支持 docker push 上传本地镜像吗?
不支持 push
错误码与失败问题
docker pull 提示 manifest unknown 怎么办?
manifest unknown
docker pull 提示 no matching manifest 怎么办?
no matching manifest(架构)
镜像已拉取完成,却提示 invalid tar header 或 failed to register layer 怎么办?
invalid tar header(解压)
Docker pull 时 HTTPS / TLS 证书验证失败怎么办?
TLS 证书失败
Docker pull 时 DNS 解析超时或连不上仓库怎么办?
DNS 超时
docker 无法连接轩辕镜像域名怎么办?
域名连通性排查
Docker 拉取出现 410 Gone 怎么办?
410 Gone 排查
出现 402 或「流量用尽」提示怎么办?
402 与流量用尽
Docker 拉取提示 UNAUTHORIZED(401)怎么办?
401 认证失败
遇到 429 Too Many Requests(请求太频繁)怎么办?
429 限流
docker login 提示 Cannot autolaunch D-Bus,还算登录成功吗?
D-Bus 凭证提示
为什么会出现「单层超过 20GB」或 413,无法加速拉取?
413 与超大单层
账号 / 计费 / 权限
用户好评
来自真实用户的反馈,见证轩辕镜像的优质服务