技术
Fluentd
用于收集和路由日志的统一日志层
Fluentd 是一个开源的数据收集器,统一了日志的收集和消费。它从众多来源跟踪、解析、缓冲并路由日志数据到许多目的地,将日志的产生方式与其最终去向解耦 —— 搜索索引、对象存储、日志分析平台,或者三者兼有。
工作原理
Fluentd 作为代理运行(通常作为 Kubernetes DaemonSet,每个节点一个),通过输入插件读取日志数据,可选地通过过滤插件转换它,再通过输出插件写出。其插件架构使得单条 Fluentd 管线可以从节点文件系统读取容器日志,并将其以不同的格式和重试语义扇出到多个目的地。
核心概念
- Input 插件 —— 从来源读取日志事件:文件、TCP 套接字、Kubernetes 容器日志目录,以及许多其他来源。
- Filter 插件 —— 在管线中转换或丰富事件,例如从原始日志行中解析出结构化字段,或附加 Kubernetes 元数据。
- Output 插件 —— 将事件写入目的地:Elasticsearch、S3、Kafka、托管的日志平台,以及几十种其他目的地。
- Buffer(缓冲) —— Fluentd 在输入与输出之间的内部队列,用于吸收背压并重试失败的写入。
为什么团队选择 Fluentd
- 厂商中立。 庞大的插件生态意味着切换日志目的地只是一次配置变更,而不是重新设计架构。
- 为高吞吐量而构建。 它的缓冲和分块模型旨在可靠地处理突发的高吞吐量日志流。
- 结构化的日志模型。 事件携带结构化字段而非原始文本,使下游的过滤和路由精确得多。
- CNCF 毕业项目。 它是日志领域中对应 Prometheus 在可观测性栈中地位的项目 —— 被广泛采用并且持续活跃维护。
快速开始
将 Fluentd 部署为 DaemonSet,使每个节点上都有一个代理,配置它跟踪容器日志,并为你希望日志最终到达的地方添加输出插件。下面的指南涵盖最常见的收集和路由配置。