版本

v1.0 (td-agent3)
修订日期 20190111

什么是fluentd

Fluentd是一个完全免费且开源的日志收集器,支持125种日志类型,最终实现“Log Everything”。
fluentd-architecture
Fluentd用C语言编写,以json格式处理日志,利用瘦Ruby封装器实现了更大的灵活性。
Fluentd的可扩展性极好,已知其最大的用户目前从50,000多台服务器上收集日志。

Fluentd事件生命周期

基本设置

配置文件是Fluentd功能得以实现的基础,它定义了Fluentd监听哪些输入,并通过匹配规则以将事件数据发送到特定输出。
我们将使用in_http和out_stdout插件作为示例来描述事件周期。
以下是配置文件的基本定义,用于指定http输入

<source>
  @type http
  port 8888
  bind 0.0.0.0
</source>

该定义指定HTTP服务器将侦听TCP端口8888.现在让我们定义匹配规则和所需的输出,它将只打印到每个传入请求的数据到标准输出:

<match test.cycle>
  @type stdout
</match>

Match设置一个规则,其中每个使用Tag等于test.cycle的Incoming事件将匹配并使用名为stdout的Output插件类型。
此时我们有一个输入类型,一个匹配和一个输出。
让我们使用Curl测试设置:

$ curl -i -X POST -d 'json={"action":"login","user":2}' http://localhost:8888/test.cycle
HTTP/1.1 200 OK
Content-type: text/plain
Connection: Keep-Alive
Content-length: 0

在Fluentd服务器端,输出应如下所示:

$ bin/fluentd -c in_http.conf
2015-01-19 12:37:41 -0600 [info]: reading config file path="in_http.conf"
2015-01-19 12:37:41 -0600 [info]: starting fluentd-0.12.3
2015-01-19 12:37:41 -0600 [info]: using configuration file: <ROOT>
  <source>
    @type http
    bind 0.0.0.0
    port 8888
  </source>
  <match test.cycle>
    @type stdout
  </match>
</ROOT>
2015-01-19 12:37:41 -0600 [info]: adding match pattern="test.cycle" type="stdout"
2015-01-19 12:37:41 -0600 [info]: adding source type="http"
2015-01-19 12:39:57 -0600 test.cycle: {"action":"login","user":2}

事件结构

流利的事件包括标签,时间和记录。
tag:事件来自何处。
用于邮件路由
时间:事件发生时。
Epoch 时间
记录:实际日志内容。
JSON对象
输入插件负责从数据源生成Fluentd事件。
例如,in_tail从文本行生成事件。
如果您在apache日志中有以下行: