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

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 1个月
简介: 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社区

目录
相关文章
|
10月前
|
监控 Kubernetes Go
日志采集效能跃迁:iLogtail 到 LoongCollector 的全面升级
LoongCollector 在日志场景中实现了全面的重磅升级,从功能、性能、稳定性等各个方面均进行了深度优化和提升,本文我们将对 LoongCollector 的升级进行详细介绍。
735 87
|
8月前
|
数据采集 存储 大数据
大数据之路:阿里巴巴大数据实践——日志采集与数据同步
本资料全面介绍大数据处理技术架构,涵盖数据采集、同步、计算与服务全流程。内容包括Web/App端日志采集方案、数据同步工具DataX与TimeTunnel、离线与实时数仓架构、OneData方法论及元数据管理等核心内容,适用于构建企业级数据平台体系。
756 1
|
存储 运维 开发工具
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文探讨了日志管理中的常见反模式及其潜在问题,强调科学的日志管理策略对系统可观测性的重要性。文中分析了6种反模式:copy truncate轮转导致的日志丢失或重复、NAS/OSS存储引发的采集不一致、多进程写入造成的日志混乱、创建文件空洞释放空间的风险、频繁覆盖写带来的数据完整性问题,以及使用vim编辑日志文件导致的重复采集。针对这些问题,文章提供了最佳实践建议,如使用create模式轮转日志、本地磁盘存储、单线程追加写入等方法,以降低日志采集风险,提升系统可靠性。最后总结指出,遵循这些实践可显著提高故障排查效率和系统性能。
1582 21
|
9月前
|
存储 运维 开发工具
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文总结了日志管理中的六大反模式及优化建议,涵盖日志轮转、存储选择、并发写入等常见问题,帮助提升日志采集的完整性与系统可观测性,适用于运维及开发人员优化日志管理策略。
327 5
|
5月前
|
数据采集 缓存 大数据
【赵渝强老师】大数据日志采集引擎Flume
Apache Flume 是一个分布式、可靠的数据采集系统,支持从多种数据源收集日志信息,并传输至指定目的地。其核心架构由Source、Channel、Sink三组件构成,通过Event封装数据,保障高效与可靠传输。
353 1
|
6月前
|
存储 Kubernetes 监控
Kubernetes日志管理:使用Loki进行日志采集
通过以上步骤,在Kubernetes环境下利用LoKi进行有效率且易于管理地logs采集变成可能。此外,在实施过程中需要注意版本兼容性问题,并跟进社区最新动态以获取功能更新或安全补丁信息。
427 16
|
10月前
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
本文介绍了阿里集团A+流量分析平台的日志查询优化方案,针对万亿级日志数据的写入与查询挑战,提出基于Flink、Paimon和StarRocks的技术架构。通过Paimon存储日志数据,结合StarRocks高效计算能力,实现秒级查询性能。具体包括分桶表设计、数据缓存优化及文件大小控制等措施,解决高并发、大数据量下的查询效率问题。最终,日志查询耗时从分钟级降至秒级,显著提升业务响应速度,并为未来更低存储成本、更高性能及更多业务场景覆盖奠定基础。
|
7月前
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
A+流量分析平台是阿里集团统一的全域流量数据分析平台,致力于通过埋点、采集、计算构建流量数据闭环,助力业务提升流量转化。面对万亿级日志数据带来的写入与查询挑战,平台采用Flink+Paimon+StarRocks技术方案,实现高吞吐写入与秒级查询,优化存储成本与扩展性,提升日志分析效率。
967 1
|
11月前
|
监控 算法 测试技术
突破极限: 高负载场景下的单机300M多行正则日志采集不是梦
在当今数字化时代,日志数据已成为企业 IT 运营和业务分析的关键资源。然而,随着业务规模的扩大和系统复杂度的提升,日志数据的体量呈现爆发式增长,给日志采集和处理系统带来了巨大挑战。
677 101
|
8月前
|
JSON 安全 网络安全
LoongCollector 安全日志接入实践:企业级防火墙场景的日志标准化采集
LoonCollector 是一款轻量级日志采集工具,支持多源安全日志的标准化接入,兼容 Syslog、JSON、CSV 等格式,适用于长亭 WAF、FortiGate、Palo Alto 等主流安全设备。通过灵活配置解析规则,LoonCollector 可将原始日志转换为结构化数据,写入阿里云 SLS 日志库,便于后续查询分析、威胁检测与合规审计,有效降低数据孤岛问题,提升企业安全运营效率。

相关产品

  • 日志服务