Skip to main content

Command Palette

Search for a command to run...

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

Updated
2 min read

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

FluentdFluentBit
范围服务器嵌入设备和 IoT 设备
内存约 20 MB约 150 KB
语言C 和 RubyC
性能
依赖以 Ruby Gem 构建,依赖一系列的 Gem零依赖,可能有些插件会有依赖。
插件超过三百个目前15个左右
授权Apache License v2.0Apache 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 一致的日志搜集结果。

好吧,今天讲的其实是 RBAC。

More from this blog

龙虾恐慌:AIOps 又要改名了?

ChatGPT 开始,把 AI 拉近到普罗大众的面前,让无数人感受到 AI 的亲民魅力。而龙虾,则把大模型驱动的自动化能力,突然间变得水灵灵、活泼泼地走进千家万户。它不只是“风口上的猪”,而是风口本身。热度高到让 Mac mini 一度断货,不知道这在不在库克的预料之内。 每代人都有每代人的鸡蛋,春节期间,我就领了我的鸡蛋。翻出古老的 MacBook Air M1,充值各种大模型。当然了,这个工具

Mar 9, 20261 min read

再见 2025

我猜不少人以为这个号废了吧?并没有,只是今年变化有点大,一直有种抄起键盘,无从说起的感觉,所以一直偷懒到今天,2025 的最后一天。 今年是我的第四个本命年,去年末一期播客里,大内说本命年不是灾年,是变化年,有危也有机。可是讲真啊,只看到危,没看到机。 各种因缘际会,从鹅厂跳槽到前东家,已经接近四年,第一个合同期已经进入尾声。除了前两年还在云原生领域嗷嗷叫,后两年基本都是些鸡零狗碎的东西了,用老东家的术语说是——偏离主航道,可谓是前景暗淡了。 一旦确定要滚蛋,反倒心思轻松起来,每天骑着我的小红车...

Jan 5, 20261 min read

辅助编程?dora 说:我知道你很急可是请你别急

从 OpenGPT 把大模型的火烧旺了之后,这三年来,相信很多组织或摩拳擦掌、或躬身入局,希望借助聪明能干的大模型,或想偿还技术宅,或想降本增效,或想弯道超车。一时间,沉寂许久的 AIxx 又活过来了,LLM Ops、Vibe Coding、中医大模型、GPT 算命等等,全都老树发新芽,焕发了勃勃生机。那么视角拉回从业者最关注的饭碗相关的领域之一——AI 辅助开发,产生了什么触动,应该如何拥抱呢? DORA 的年度报告中给出了很有意思的结论——强者恒强。 执行摘要部分总结了几个有趣的点: 问题...

Oct 6, 20251 min read

[译]dora:ai 辅助软件开发状态报告

执行摘要 在 2025 年,科技领导者面临的核心问题已不再是“是否要采用 AI”,而是“如何实现其价值”。 DORA 的研究基于超过 100 小时的定性访谈和来自全球近 5,000 名技术专业人士的问卷调查。研究揭示了一个关键事实:AI 在软件开发中的主要角色是“放大器”。它会放大高效能组织的优势,也会凸显组织的缺陷。 关键结论:AI 是放大器 AI 投资的最大回报并非来自工具本身,而是来自组织底层系统的战略性建设: 高质量的内部平台 清晰的工作流 团队的协同能力 缺少这些基础,AI ...

Oct 2, 202514 min read

僭越了,有人在用 Rust 写 Kubernetes

一个新语言问世,最爱做的事情之一,就是重写存量软件了。 云原生喝酒 SIG 重点扶持项目——rk8s(https://github.com/rk8s-dev/rk8s) 也可以归在这个范畴里,只不过这个项目重写的东西比较大,是 Kubernetes。 从 2025 年 1 月第一个 Commit 开始,到现在有了 200 多次 Commit,十几万行代码。当然距离 Kubernetes 的几百万行代码还差得远——老马就是喜欢整这种大无畏项目。 另外该项目也是国内第一个脱离 Cargo 转向使用 ...

Sep 27, 20253 min read

【伪】架构师

342 posts