Fluentd 日志收集¶
一句话概述:Fluentd 是 CNCF 毕业的开源日志收集器,统一收集各种来源的日志,经过过滤、转换后输出到 Elasticsearch/S3 等存储,是 EFK 栈的核心组件。
核心知识点¶
| 概念 | 白话解释 |
|---|---|
| Input | 输入 = 从哪里收集日志(文件、HTTP、syslog) |
| Filter | 过滤器 = 对日志做处理(解析、添加字段、过滤) |
| Output | 输出 = 把日志发到哪里(ES、S3、Kafka) |
| Buffer | 缓冲 = 暂存日志防止丢失 |
| Tag | 标签 = 日志的路由标记 |
| Match | 匹配 = 根据标签决定日志去向 |
安装配置¶
# Docker
docker run -d --name fluentd -p 24224:24224 fluent/fluentd:latest
# Ubuntu(td-agent)
curl -fsSL https://toolbelt.treasuredata.com/sh/install-ubuntu-jammy-fluent-package5-lts.sh | sh
sudo systemctl start fluentd
基本使用¶
<!-- fluent.conf -->
<source>
@type tail <!-- 输入:监听文件变化 -->
path /var/log/app/*.log <!-- 日志文件路径 -->
tag app.log <!-- 标签 -->
<parse>
@type json <!-- 解析 JSON 格式日志 -->
</parse>
</source>
<filter app.**>
@type record_transformer <!-- 过滤器:添加字段 -->
<record>
hostname "#{Socket.gethostname}" <!-- 添加主机名 -->
</record>
</filter>
<match app.**>
@type elasticsearch <!-- 输出到 Elasticsearch -->
host elasticsearch
port 9200
logstash_format true <!-- 使用 logstash 索引格式 -->
<buffer>
@type file <!-- 文件缓冲(防丢失) -->
path /var/log/fluentd-buffer
flush_interval 5s <!-- 每5秒刷新 -->
</buffer>
</match>
常见报错¶
| 报错信息 | 原因 | 解决方法 |
|---|---|---|
Permission denied | 文件权限不足 | 检查 Fluentd 用户权限 |
buffer overflow | 缓冲区溢出 | 增大 buffer 或加快输出 |
Connection refused | 输出目标不可达 | 检查 ES/Kafka 连接 |
速查表¶
fluentd -c fluent.conf # 启动
fluentd --dry-run -c fluent.conf # 检查配置
fluent-cat app.log < test.json # 发送测试消息
# 常用插件:tail(文件) forward(转发) http(HTTP) elasticsearch kafka s3
# Fluentd vs Fluent Bit: Fluentd 功能全,Fluent Bit 更轻量(适合容器/边缘)
参考:Fluentd 文档 | 更新于 2026 年