云原生日志采集管理方案--Fluent Operator

本文涉及的产品
对象存储 OSS,20GB 3个月
文件存储 NAS,50GB 3个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
简介: Fluent Operator是由KubeSphere 社区于2021年捐献给Fluent 社区的,最初是为了满足以云原生的方式管理 Fluent Bit 的需求。Fluentbit Operator可以灵活且方便地部署、配置及卸载 Fluent Bit 以及 Fluentd。同时, 还提供支持 Fluentd 以及 Fluent Bit 的插件,用户可以根据实际需求进行定制化配置。

背景

Fluentd/Fluent Bit作为云原生场景的可观测采集器,致力于打造云原生场景下的日志采集方案。Fluentd/Fluent Bit官方虽然提供了一些K8s的采集部署方案,但是总体来说自动化程度不高,操作也比较繁琐。所以也就催生出了各类Operator,比较有名的是Fluent Operator、Logging Operator,本文将重点介绍Fluent Operator的原理及实战。

Fluent Operator是由KubeSphere 社区于2021年捐献给Fluent 社区的,最初是为了满足以云原生的方式管理 Fluent Bit 的需求。Fluentbit Operator可以灵活且方便地部署、配置及卸载 Fluent Bit 以及 Fluentd。同时, 还提供支持 Fluentd 以及 Fluent Bit 的插件,用户可以根据实际需求进行定制化配置。

Fluent Operator原理

整体部署形态

Fluent Bit 与 Fluentd 都有采集、处理(解析和过滤)以及输出日志的能力,两者差异表现在:Fluent Bit 相对 Fluentd 更为轻量与高效,而 Fluentd借助更丰富的插件提供了更强的数据处理能力。基于Fluent Bit、Fluentd的各自的优点,在K8s日志采集场景下,Fluent Operator 提供了多种部署模式供用户根据实际业务情况进行选择:

  • Fluent Bit only 模式:适用于采集日志后仅需要简单处理,即发送到第三方存储系统的场景。
  • Fluent Bit + Fluentd 模式:适用于采集日志后需要更高级处理,才发送到第三方存储系统的场景。
  • Fluentd only 模式:适用于以 HTTP 或 Syslog 等的方式接收日志,经过日志处理后,发送到第三方存储系统的场景。


以Fluent Bit、Fluentd模式为例,Fluent Bit以DaemonSet用于采集K8s集群内各节点上的容器日志;而Fluentd则部署为StatefulSet,接收来自Fluent Bit的请求,之后经过日志处理后发送到第三方存储系统(例如,ES、Kafka、Loki等)。一个典型的处理pipiline如下图所示,包含了将采集、转发、过滤、输出等阶段。用户可以通过CRD的方式来配置pipiline,进而构建K8s下的日志采集系统。

CRD

Fluent Bit CRDs

Fluent Bit CRDs包含了如下几种类型:

  • FluentBit: Fluent Bit DaemonSet配置定义。
  • ClusterFluentBitConfig: 选择ClusterInput、ClusterParser、ClusterFilter、ClusterOutput,并生成配置存入Secret Config。
  • ClusterInput: 集群粒度的Input插件配置。通过该插件,用户可以自定义采集的日志类型。
  • ClusterParser: 集群粒度的Parser插件配置。通过该插件进行日志解析。
  • ClusterFilter: 集群粒度的Filter插件配置。通过该插件进行日志的过滤。
  • ClusterOutput: 集群粒度的Output插件配置。该插件主要负责将处理后的日志发送到第三方存储系统。

其中,每个ClusterInput、ClusterParser、ClusterFilter、ClusterOutput 代表一个 Fluent Bit 配置段,之后Fluent Operator 根据ClusterFluentBitConfig的标签选择器进行选择。Fluent Operator将符合条件的CRD构建成最终的配置,并存入Secret Config中,最后挂在到Fluent Bit的DaemonSet中。

为了解决Fluent Bit不支持热加载配置的问题,添加了一个名为Fluent Bit watcher的包装器,用于检测到 Fluent Bit 配置更改时立即重新启动 Fluent Bit 进程,而无需重新启动 Fluent Bit的pod。

Fluentd CRDs

Fluentd CRDs包含了如下几种类型:

  • Fluentd: Fluentd Statefulset配置定义。
  • FluentdConfig: 选择namespace粒度的ClusterInput、ClusterParser、ClusterFilter、ClusterOutput,并生成配置存入Secret Config。
  • ClusterFluentdConfig: 选择集群粒度的ClusterInput、ClusterParser、ClusterFilter、ClusterOutput,并生成配置存入Secret Config。
  • Filter: namespace粒度的Filter插件配置。
  • ClusterFilter: 集群粒度的Filter插件配置。
  • Output: namespace粒度的Ouptut插件配置。
  • ClusterOutput: 集群粒度的Ouptut插件配置。

ClusterFluentdConfig为集群级别,具有watchedNamespaces字段,可以设置监听的namespace;如果不设置,则表示全局监听。FluentdConfig为namespace级别,只能监听所在的namespace的CR。通过ClusterFluentdConfig、FluentdConfig可以在namespace层面实现多租户日志隔离。

Fluent Operator实战

入门实战

代码仓库:https://github.com/fluent/fluent-operator

通过执行如下命令,可以快速实现上图的采集处理pipeline。

###### 部署Fluent Operator

kubectl apply -f https://raw.githubusercontent.com/fluent/fluentbit-operator/master/manifests/setup/setup.yaml


# You can change the namespace in manifests/setup/kustomization.yaml

# and then use command below to install to another namespace

# kubectl kustomize manifests/setup/ | kubectl apply -f -


###### 部署Kubernetes logging stack

kubectl apply -f manifests/logging-stack

# You can change the namespace in manifests/logging-stack/kustomization.yaml

# and then use command below to install to another namespace

# kubectl kustomize manifests/logging-stack/ | kubectl apply -f -


完整的yaml配置相见链接。不同的yaml配置,通过tag: kube.*进行串联。

进阶实战

代码仓库:https://github.com/kubesphere-sigs/fluent-operator-walkthrough

fluent-operator-walkthrough提供了更上层的封装,针对于不同的业务场景,提供了一键部署能力。

  • Fluent Bit Only:只启用轻量级的 Fluent Bit 对日志进行采集、处理以及转发。

  • Fluent Bit + Fluentd 模式:借助 Fluentd 丰富的插件,提供更高级的日志处理能力。Fluent Operator 轻松地实现将采集的日志从 Fluent Bit 转发到 Fluentd。


参考文档

Fluent Operator:云原生日志管理的一把瑞士军刀

fluent-operator-walkthrough文档

关于iLogtail

iLogtail作为阿里云SLS提供的可观测数据采集器,可以运行在服务器、容器、K8s、嵌入式等多种环境,支持采集数百种可观测数据(日志、监控、Trace、事件等),已经有千万级的安装量。目前,iLogtail已正式开源,欢迎使用及参与共建。

GitHub:https://github.com/alibaba/ilogtail

社区版文档:https://ilogtail.gitbook.io/ilogtail-docs/about/readme

企业版官网:https://help.aliyun.com/document_detail/65018.html

钉钉群:iLogtail社区

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
18天前
|
监控 测试技术 开发者
一行代码改进:Logtail的多行日志采集性能提升7倍的奥秘
一个有趣的现象引起了作者的注意:当启用行首正则表达式处理多行日志时,采集性能出现下降。究竟是什么因素导致了这种现象?本文将探索Logtail多行日志采集性能提升的秘密。
|
1月前
|
消息中间件 存储 监控
微服务日志监控的挑战及应对方案
【10月更文挑战第23天】微服务化带来模块独立与快速扩展,但也使得日志监控复杂。日志作用包括业务记录、异常追踪和性能定位。
|
2月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
56 1
|
3月前
|
Kubernetes API Docker
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
|
4月前
|
存储 Prometheus Kubernetes
在K8S中,如何收集K8S日志?有哪些方案?
在K8S中,如何收集K8S日志?有哪些方案?
|
4月前
|
存储 Kubernetes Java
在k8S中,容器内日志是怎么采集的?
在k8S中,容器内日志是怎么采集的?
|
4月前
|
数据采集 监控 Kubernetes
Job类日志采集问题之iLogtail以减小容器发现和开始采集的延时如何优化
Job类日志采集问题之iLogtail以减小容器发现和开始采集的延时如何优化
|
4月前
|
数据采集 Kubernetes Java
Job类日志采集问题之在日志中添加容器的元信息标签,如何操作
Job类日志采集问题之在日志中添加容器的元信息标签,如何操作
|
4月前
|
存储 容器
Job类日志采集问题之DaemonSet采集方式的参数以减小采集延时如何调整
Job类日志采集问题之DaemonSet采集方式的参数以减小采集延时如何调整
|
4月前
|
容器
Job类日志采集问题之ECI产品采集方式对于弹性扩缩容是如何支持的
Job类日志采集问题之ECI产品采集方式对于弹性扩缩容是如何支持的

相关产品

  • 日志服务