Fluentd/FluentBit K8s日志采集方案介绍

本文涉及的产品
对象存储 OSS,标准 - 本地冗余存储 20GB 3个月
对象存储 OSS,内容安全 1000 次 1年
对象存储 OSS,标准 - 同城冗余存储 20GB 3个月
简介: Fluent Bit 是一个开源的多平台日志采集器,旨在打造日志采集处理和分发的通用利器。2014 年,Fluentd 团队预测对于嵌入式 Linux 和 Gateways 等受约束的环境,需要更轻量级的日志处理器,于是便开发了Fluent Bit,并把该项目建设成为Fluentd 生态系统的一部分。

Fluentd/FluentBit简介

Fluentd 是一个开源的可观测数据采集器,致力于建设统一的日志采集层,简化用户的数据接入体验。

Fluent Bit 是一个开源的多平台日志采集器,旨在打造日志采集处理和分发的通用利器。2014 年,Fluentd 团队预测对于嵌入式 Linux 和 Gateways 等受约束的环境,需要更轻量级的日志处理器,于是便开发了Fluent Bit,并把该项目建设成为Fluentd 生态系统的一部分。

两者之间的比较:

Fluentd

Fluent Bit

适用场景

容器/服务器

嵌入式 Linux/容器/服务器

开发语言

C & Ruby

C

初始启动内存

~40MB

~650KB

性能

高性能

高性能

依赖

基于 Ruby Gem 构建,依赖gem。

零依赖,除非一些特殊要求的插件。

插件

1000+插件

70左右

协议

Apache License v2.0

Apache License v2.0

Kubernetes采集方案

FluentD、Fluent Bit官方都提供了Kubernetes的部署方案,主要推荐以Deamonset方式部署。

Fluentd

模版仓库:https://github.com/fluent/fluentd-kubernetes-daemonset 该仓库根据数据采集的输出目的,提供了专有的镜像跟部署模版库。

### 镜像

$ll fluentd-kubernetes-daemonset/docker-image/v1.14/

total 76

drwxr-xr-x 20 root root 4096 Jun 30 09:13 arm64

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-azureblob

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-cloudwatch

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-elasticsearch6

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-elasticsearch7

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-forward

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-gcs

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-graylog

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-kafka

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-kafka2

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-kinesis

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-logentries

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-loggly

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-logzio

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-opensearch

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-papertrail

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-s3

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-stackdriver

drwxr-xr-x  5 root root 4096 Jun 30 09:13 debian-syslog


### 模版

[root@yemo_hongkong fluent]$ll fluentd-kubernetes-daemonset/

-rw-r--r--  1 root root  3571 Jun 30 09:13 fluentd-daemonset-azureblob.yaml

-rw-r--r--  1 root root  2559 Jun 30 09:13 fluentd-daemonset-cloudwatch-rbac.yaml

-rw-r--r--  1 root root  3239 Jun 30 09:13 fluentd-daemonset-elasticsearch-rbac.yaml

-rw-r--r--  1 root root  2845 Jun 30 09:13 fluentd-daemonset-elasticsearch.yaml

-rw-r--r--  1 root root  1872 Jun 30 09:13 fluentd-daemonset-forward.yaml

-rw-r--r--  1 root root  1792 Jun 30 09:13 fluentd-daemonset-gcs.yaml

-rw-r--r--  1 root root  2952 Jun 30 09:13 fluentd-daemonset-graylog-rbac.yaml

-rw-r--r--  1 root root  1960 Jun 30 09:13 fluentd-daemonset-logentries.yaml

-rw-r--r--  1 root root  2999 Jun 30 09:13 fluentd-daemonset-loggly-rbac.yaml

-rw-r--r--  1 root root  2390 Jun 30 09:13 fluentd-daemonset-loggly.yaml

-rw-r--r--  1 root root  3236 Jun 30 09:13 fluentd-daemonset-opensearch.yaml

-rw-r--r--  1 root root  2859 Jun 30 09:13 fluentd-daemonset-papertrail.yaml

-rw-r--r--  1 root root  2563 Jun 30 09:13 fluentd-daemonset-syslog.yaml

下面以Kafka Docker镜像详细说明下:

  • fluent.conf: 采集输出目录的配置,例如Kafka就是brokers地址、Topic等信息。
  • kubernetes.conf: k8s的采集配置。包含了tail input插件及kubernetes_metadata filter插件。
  • tail_container_parse.conf: 标准输出的解析方式,默认json parser,适用于Docker场景;如果是containerd或者CRI-O场景,需要设置为cri parser。
  • prometheus.conf: fluentd的prometheus监控插件。
  • systemd.conf: systemd-journal的采集插件配置。

# 创建configmap

kubectl create configmap fluentd-conf --from-file=kubernetes.conf --namespace=kube-system


# 更改Fluentd部署yaml,添加挂载部分的配置项。

     containers:

     - name: fluentd

       image: fluent/fluentd:v1.2-debian

       resources:

         limits:

           memory: 200Mi

         requests:

           cpu: 100m

           memory: 200Mi

       volumeMounts:

       - name: config-volume

         mountPath: /fluentd/etc/kubernetes.conf

         subPath: kubernetes.conf

       - name: varlog

         mountPath: /var/log

       - name: varlibdockercontainers

         mountPath: /var/lib/docker/containers

         readOnly: true

     terminationGracePeriodSeconds: 30

     volumes:

     - name: config-volume

       configMap:

         name: fluentd-conf

     - name: varlog

       hostPath:

         path: /var/log

     - name: varlibdockercontainers

       hostPath:

         path: /var/lib/docker/containers

Fluent Bit

模版仓库:https://github.com/fluent/fluent-bit-kubernetes-logging

Fluent Bit是一个轻量级且可扩展的日志处理器,在Kubernetes场景下支持:

  • 从文件系统或 Systemd/Journaled采集日志。
  • 可以通过关联Kubernetes元数据富化日志。
  • 支持采集到第三方存储服务。例如 Elasticsearch、Kafka等。


Fluent Bit以Daemonset 运行时,会通过API Server获取Pod及容器的信息(例如,Pod信息、Container信息、Labels等)。

部署方式(以Kafka为例):

  • 配置ConfigMap
  • ConfigMap fluent-bit-config中包含了采集配置文件fluent-bit.conf、input-kubernetes.conf、output-kafka.conf等。

$ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/output/kafka/fluent-bit-configmap.yaml

  • 以Daemonset方式部署Fluent Bit,并挂在上述的ConfigMap到/fluent-bit/etc/目录。

$ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/output/kafka/fluent-bit-ds.yaml

同样的,Fluent Bit提供的模版默认假定日志由 Docker 接口标准格式化。如果对于CRI的场景,需要手动调整解析器。

# CRI Parser

[PARSER]

   # http://rubular.com/r/tjUt3Awgg4

   Name cri

   Format regex

   Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*)$

   Time_Key    time

   Time_Format %Y-%m-%dT%H:%M:%S.%L%z

   

[INPUT]

   Name tail

   Path /var/log/containers/*.log

   Parser cri

   Tag kube.*

   Mem_Buf_Limit 5MB

   Skip_Long_Lines On

鉴权问题

Fluentd/FluentBIt 将从用户应用程序和集群组件(如 kube-apiserver 和 kube-scheduler)收集日志,需要赋予一些K8s的权限。两者的实现方式类似,这里以FluentBIt为例进行说明。

  • 首先创建ServiceAccount

apiVersion: v1

kind: ServiceAccount

metadata:

 name: fluent-bit

 namespace: logging

  • 为了保证FluentBit在K8s集群中有read、list、watch的全新,需要授予一些权限,通过创建ClusterRole实现。

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRole

metadata:

 name: fluent-bit-read

rules:

- apiGroups: [""]

 resources:

 - namespaces

 - pods

 verbs: ["get", "list", "watch"]

  • 绑定ServiceAccount与ClusterRole

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

 name: fluent-bit-read

roleRef:

 apiGroup: rbac.authorization.k8s.io

 kind: ClusterRole

 name: fluent-bit-read

subjects:

- kind: ServiceAccount

 name: fluent-bit

 namespace: logging

  • Fluent Bit Daemonset yaml中通过serviceAccountName关联

serviceAccountName: fluent-bit

总结

对于Fluentd/Fluent Bit官方都建议采用Daemonset部署,都是通过ConfigMap来管理采集配置,Fluentd/Fluent Bit容器挂载ConfigMap来进行配置读取。不同的是,Fluentd提供的模版集成度更高,对于每种输出场景,都有定制的镜像,一般情况用户只需要注入一些环境变量即可完成采集。

此外,两者也都提供了Docker、CRI的标准输出采集支持,但是都需要手动修改模版才可以。

Fluentd/Fluent Bit官方虽然提供了一些K8s的采集部署方案,但是总体来说自动化程度不高,操作也比较繁琐。所以也就催生出了各类Operator,比较有名的是Fluent Operator、Logging Operator,后续文章会展开进一步介绍。

参考文档

Kubernetes Fluentd官方文档

Kubernetes FluentBit官方文档

Cluster-level Logging in Kubernetes with Fluentd

关于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社区

目录
相关文章
|
4月前
|
数据采集 存储 大数据
大数据之路:阿里巴巴大数据实践——日志采集与数据同步
本资料全面介绍大数据处理技术架构,涵盖数据采集、同步、计算与服务全流程。内容包括Web/App端日志采集方案、数据同步工具DataX与TimeTunnel、离线与实时数仓架构、OneData方法论及元数据管理等核心内容,适用于构建企业级数据平台体系。
|
1月前
|
数据采集 缓存 大数据
【赵渝强老师】大数据日志采集引擎Flume
Apache Flume 是一个分布式、可靠的数据采集系统,支持从多种数据源收集日志信息,并传输至指定目的地。其核心架构由Source、Channel、Sink三组件构成,通过Event封装数据,保障高效与可靠传输。
193 1
|
2月前
|
存储 Kubernetes 监控
Kubernetes日志管理:使用Loki进行日志采集
通过以上步骤,在Kubernetes环境下利用LoKi进行有效率且易于管理地logs采集变成可能。此外,在实施过程中需要注意版本兼容性问题,并跟进社区最新动态以获取功能更新或安全补丁信息。
234 16
|
3月前
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
A+流量分析平台是阿里集团统一的全域流量数据分析平台,致力于通过埋点、采集、计算构建流量数据闭环,助力业务提升流量转化。面对万亿级日志数据带来的写入与查询挑战,平台采用Flink+Paimon+StarRocks技术方案,实现高吞吐写入与秒级查询,优化存储成本与扩展性,提升日志分析效率。
490 1
|
4月前
|
JSON 安全 网络安全
LoongCollector 安全日志接入实践:企业级防火墙场景的日志标准化采集
LoonCollector 是一款轻量级日志采集工具,支持多源安全日志的标准化接入,兼容 Syslog、JSON、CSV 等格式,适用于长亭 WAF、FortiGate、Palo Alto 等主流安全设备。通过灵活配置解析规则,LoonCollector 可将原始日志转换为结构化数据,写入阿里云 SLS 日志库,便于后续查询分析、威胁检测与合规审计,有效降低数据孤岛问题,提升企业安全运营效率。
|
4月前
|
运维 监控 安全
2025 年 Splunk 的 5 大替代方案:企业日志管理工具新选择
Splunk 虽强大,但高昂成本和复杂性促使企业寻找替代方案。本文推荐 2025 年五大日志管理与安全分析工具:Log360、Elastic Security、Datadog、Graylog 和 Sumo Logic,涵盖开源、云原生与高性能方向,适配不同企业需求,助你提升安全与运维效率。
344 0
|
4月前
|
存储
WGLOG日志管理系统可以采集网络设备的日志吗
WGLOG日志审计系统提供开放接口,支持外部获取日志内容后发送至该接口,实现日志的存储与分析。详情请访问:https://www.wgstart.com/wglog/docs9.html
|
1月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
240 1
|
1月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
228 89
|
6月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
275 9

相关产品

  • 日志服务
  • 推荐镜像

    更多