在 Kubernetes 中使用 Fluent Bit 进行日志采集

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: Fluent Bit 和 Fluentd 一样,是 Treasure Data 资助的采集工具,二者对比如下: Fluentd FluentBit 范围 服务器 嵌入设备和 IoT 设备 内存 约 20 MB 约 150 KB 语言 C 和 Ruby C 性能 高 高 依赖 以 Ruby Gem 构建,依赖一系列的 Gem 零依赖,可能有些插件会有依赖。

Fluent Bit 和 Fluentd 一样,是 Treasure Data 资助的采集工具,二者对比如下:


Fluentd FluentBit
范围 服务器 嵌入设备和 IoT 设备
内存 约 20 MB 约 150 KB
语言 C 和 Ruby C
性能
依赖 以 Ruby Gem 构建,依赖一系列的 Gem 零依赖,可能有些插件会有依赖。
插件 超过三百个 目前15个左右
授权 Apache License v2.0 Apache License v2.0

从上表可以看出,Fluentd 具有众多插件,随之而来的是很好的弹性。而 Fluent Bit 则更适用于嵌入设备等资源受限的场景。另外二者并非互斥关系,Fluent Bit 提供了输出插件,可以把数据发给 Fluentd,因此他们可以在系统中作为独立服务互相协作。

Fluent Bit 也提供了 Kubernetes Filter 插件,用于将采集到的日志结合对 Kubernetes API 的查询,为日志加入 Kubernetes 的相关数据,例如 Pod 信息、容器信息、命名空间以及标签和注解等内容。

仅就此来说,Fluent Bit 是可以替代 Kubernetes 缺省推荐的 Fluentd 进行日志采集工作的,经过笔者测试,可以直接使用他替代原有的 Fluentd,使用 DaemonSet 运行,结合 Elastic Search 进行日志归集工作。

详情参见:http://fluentbit.io/documentation/0.11/filter/kubernetes.html

简单的使用如下命令就可以运行:

kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-daemonset/master/fluent-bit-daemonset-elasticsearch.yaml

这一 YAML 文件中的镜像版本为 0.11,具体版本更新可以到 Docker Hub 进行查询,其中包含的缺省 elasticsearch 地址为 elasticsearch-logging,端口为 9200,如上配置如果不符,可以下载文件自行修改运行。

另外目前 RBAC 的访问控制模式已经成为缺省,在启用了 RBAC 模式的集群中,该 Pod 的运行是无法成功的,具体表现是日志中出现无法获取 Pod 元数据的信息,这是因为缺省情况下,这一 YAML 中使用的是 kube-system 中的 default Service Account,这一服务账号并不具备获取 Pod 信息的授权,要成功运行,就必须按照 RBAC 的规矩,让 Fluent Bit 的 Service Account 能够获取 Pod 信息,可以用如下方式来解决:

首先为 Fluent bit 创建专门的 Service Account:

kubectl create sa logging -n kube-system

然后为日志收集器创建角色,让该角色可以读取 Pod 信息。

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
 name: pod-reader
rules: - apiGroups: [""]
 resources: ["pods"]
 verbs: ["get", "watch", "list"]

接下来创建 ClusterRoleBinding,把新建的角色和 Service Account 绑定在一起:

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
 name: read-pods-global
subjects: - kind: ServiceAccount
 name: logging
 namespace: kube-system
 apiGroup: rbac.authorization.k8s.io
roleRef:
 kind: ClusterRole
 name: pod-reader
 apiGroup: rbac.authorization.k8s.io

最后在 Fluent Bit 的 yaml 中加入 Service Account 的指派:

# 省略若干
spec: template:
 metadata:
 labels:
 k8s-app: fluent-bit-logging
 version: v1
 kubernetes.io/cluster-service: "true"
 spec:
 serviceAccountName: logging
# 省略若干

经过这一番折腾之后,Fluent Bit 就可以在开启 RBAC 的 1.6/1.7 集群上运行了。打开相应的 Kibana 页面,会看到和标配 Fluentd 一致的日志搜集结果。

本文转自中文社区-在 Kubernetes 中使用 Fluent Bit 进行日志采集

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
131 3
|
1月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
44 1
|
2月前
|
Kubernetes API Docker
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
|
3月前
|
消息中间件 Kubernetes API
在K8S中,如何收集k8s集群日志?
在K8S中,如何收集k8s集群日志?
|
3月前
|
存储 Kubernetes 容器
在k8S中,如何查看一个Pod最近20分钟日志?
在k8S中,如何查看一个Pod最近20分钟日志?
|
2月前
|
运维 Kubernetes 监控
Loki+Promtail+Grafana监控K8s日志
综上,Loki+Promtail+Grafana 监控组合对于在 K8s 环境中优化日志管理至关重要,它不仅提供了强大且易于扩展的日志收集与汇总工具,还有可视化这些日志的能力。通过有效地使用这套工具,可以显著地提高对应用的运维监控能力和故障诊断效率。
292 0
|
3月前
|
消息中间件 Kubernetes Kafka
微服务从代码到k8s部署应有尽有系列(十一、日志收集)
微服务从代码到k8s部署应有尽有系列(十一、日志收集)
|
3月前
|
Kubernetes Shell 网络安全
【Azure K8S】记录AKS VMSS实例日志收集方式
【Azure K8S】记录AKS VMSS实例日志收集方式
|
3月前
|
存储 Prometheus Kubernetes
在K8S中,如何收集K8S日志?有哪些方案?
在K8S中,如何收集K8S日志?有哪些方案?
|
3月前
|
存储 Kubernetes 数据可视化
在K8S中,如何使用 EFK 实现日志的统一管理?
在K8S中,如何使用 EFK 实现日志的统一管理?