跳转至

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 年