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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 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日志并进行多维度分析。
目录
相关文章
|
1月前
|
存储 监控 Cloud Native
|
1月前
|
Kubernetes Cloud Native 开发工具
带你读《云原生应用开发:Operator原理与实践》精品文章合集
带你读《云原生应用开发:Operator原理与实践》精品文章合集
|
2月前
|
Prometheus Cloud Native 数据库
Grafana 系列文章(九):开源云原生日志解决方案 Loki 简介
Grafana 系列文章(九):开源云原生日志解决方案 Loki 简介
|
1月前
|
Web App开发 监控 应用服务中间件
全新架构!日志服务 SLS 自研免登录方案发布
全新架构!日志服务 SLS 自研免登录方案发布
87432 7
|
2月前
|
消息中间件 设计模式 Java
spdlog中的异步日志方案
spdlog中的异步日志方案
220 2
|
3月前
|
Java Linux
异步日志方案log4cpp
异步日志方案log4cpp
129 0
|
3月前
|
弹性计算 运维 Cloud Native
阿里云云原生弹性方案,用弹性解决集群资源利用率难题
本文主要介绍了通过弹性,实现成本优化,解决集群资源利用率难题。
92515 8
|
4月前
|
Linux
Linux日志自动清理方案
Linux日志自动清理方案
126 0
|
4月前
|
Prometheus Kubernetes Cloud Native
prometheus|云原生|轻型日志收集系统loki+promtail的部署说明
prometheus|云原生|轻型日志收集系统loki+promtail的部署说明
156 0
|
4月前
|
存储 Kubernetes Cloud Native
云原生|kubernetes|apiserver审计日志的开启
云原生|kubernetes|apiserver审计日志的开启
45 0

相关产品

  • 日志服务