如何配置 Fluent Bit 来收集 K8s 集群的日志
Fluent Bit 被广泛认为是 Fluentd 的小弟,但它同样强大、灵活,在构建时不但考虑了物理机、虚拟机环境,也考虑到了云原生环境。
在本教程中,我们将在 K8s 集群中部署 Fluent Bit 以从 pod 收集日志。首先,我们将使用Loki来存储日志;然后,我们将部署标准 Fluent Bit 并将其配置为将日志流发送到 Dynatrace。这是一个完美的练习,可以了解构建日志流管道的各种可能性。
Fluent Bit 是什么?
Fluent Bit 是日志收集器/转发器大家族中的日志处理工具。它是 Fluentd 的兄弟姐妹,也是性能最高、最轻量级的日志处理器。
日志在可观察性方面很有价值,因为它们扩展了您分析数据、排除故障等的能力。在前面的几集中,我们主要讨论了应用程序日志。但许多其他类型的解决方案也会生成日志:
- 数据库日志
- 系统日志
- Web Server 日志
- 访问日志
- 等等
收集和关联所有这些日志对于在正确的背景下准确了解我们的环境中当前发生的情况至关重要。这就是 Fluent Bit 发挥作用的地方。
Fluent Bit 从各种来源收集日志,即传统服务器、Linux 环境、容器、Kubernetes 或 Pod。然后,它向数据添加上下文 Context(标签),并将日志流转换为键值对格式,以发送到日志存储解决方案(Elasticsearch、Kafka、Dynatrace 等)。
就像 Fluentd 一样,Fluent Bit 也使用了很多插件。要构建用于摄取和转换日志的管道,您将需要许多插件。
这是一个简要概述:
-
- INPUT 插件用来收集日志和指标(statsd、collectd、CPU metrics、Disk IO、docker metrics、docker events)
-
- PARSER 插件用于做数据转换和数据结构化(JSON、Regexp、LTSV、Logfmt 等)
-
- FILTER 插件用于修改、丰富、删除一些日志信息(Nest、Throttle、Expect、Geoplp、Grep、K8s 等)对于过滤,您还可以使用 LUA 脚本。
-
- OUTPUT 插件将日志流发送到多个输出,这些输出将负责存储日志流并将其可视化。 Fluent Bit 的奇妙之处在于,您可以为管道使用多个输出插件,并指定定义日志发送位置的规则。 (Loki、Azure Blob、Azure Log Analytics、Google Cloud Big Query、Elasticsearch 等)
如何配置 Fluent Bit?
Fluent Bit 可以使用 Helm chart 快速部署。在幕后,将会创建一个 DaemonSet 和 Fluent Bit 的配置文件,配置文件将存储在 ConfigMap 中。您可以在此配置文件中定义 pipeline,用于说明您希望如何收集和发送数据的一系列步骤:
[Input]
[Parser]
[Filter]
[Output]
Helm 安装使用 DaemonSet,因此,日志流管道(Pipeline)上的任何更新都需要重新启动所有 Fluent Bit 代理。运维人员通过引入几个CRD 来解决这个问题:
- Fluentbit
- Fluentbitconfig
- Input
- Filter
- Parser
- Output
每个 CRD 都允许我们动态更新日志流管道。
为了简化日志流管道的创建,我们建议使用工具来帮助您配置 Fluent Bit。在本教程中,我们将使用 Calyptia ,它验证您的语法并为您提供管道的可视化。
为什么 Fluent Bit 在 K8s 中如此强大?
Fluent Bit 的一大功能是您可以直接在 Deployment 上添加 Annotation,从而允许您定义需要使用哪种类型的解析器来从特定 pod 收集日志。
apiVersion: v1
kind: Pod
metadata:
name: apache-logs
labels:
app: apache-logs
annotations:
fluentbit.io/exclude: "true"
spec:
containers:
- name: apache
image: eclipser/apache_logs
与 Promtail 等其他解决方案相比,插件架构使 Fluent Bit 更强大且更易于定制。它还支持许多安全概念,特别是对于输出插件。大家都希望将数据发送到存储时能确保安全。
Fluent Bit 和 Fluentd 有什么区别?
正如已经提到的,Fluent Bit 是 Fluentd 的兄弟姐妹,从某种意义上说,它们实现了许多相同的事情,但范围大小不同。
Fluentd 是为服务器设计的,而 Fluent Bit 是云原生的,可以与 Kubernetes 配合使用。它可以处理许多节点、Pod、组件等,并且与服务器、容器和嵌入式系统兼容。
此外,Fluent Bit 的优势在于其重量较轻(与 Fluentd 的 40MB 相比为 650kb),并且已针对大规模和低成本运行进行了优化。
值得一提的是,Fluent Bit 和 Fluentd 并不是相互排斥的——它们也可以是互补的。结合使用这两个工具,您可以构建更复杂的管道来收集和提取日志。
教程:如何配置 Fluent Bit 收集日志
完整教程可以在 YouTube 上找到视频格式,也可以在 GitHub 上找到书面分步说明。以下是链接:
- Youtube 视频:如何配置 Fluent Bit 来收集 K8s 集群的日志
- GitHub 页面:K8s 和使用 Fluent Bit 进行日志记录
原文连接:https://isitobservable.io/observability/kubernetes/how-to-configure-fluent-bit-to-collect-logs-for-your-k8s-cluster