Spring Boot 项目日志平台对接使用
之后再阅读本章节
Fluentd 是一个开源的数据收集器,专为处理数据流设计,使用 JSON 作为数据格式。它采用了插件式的架构,具有高可扩展性高可用性,同时还实现了高可靠的信息转发。加入 Fluentd 来收集日志。加入后的 EFK 架构如图所示
在这个图中,上下两个框分别表示使用 Fluentd 前后的日志收集。在第二个框中,Consul 能够使用灵活的 key/value 仓库去存储动态配置。而 confd 能够使用从 consul 来的模版管理本地配置
/etc/td-agent/td-agent.conf
每个 source 指令必须包含 @type 参数。@type 参数指定了何种输入插件将被使用。
Fluentd 的标准输入插件包括 http 和 forward。http 监听 HTTP 端口,并接受从 HTTP 来的日志消息。forward 让 fluentd 监听 TCP 端口,并接受 TCP 包。当然,两者可以同时开启(可以添加任意多需要的源)。
<source>
@type forward
port 24224
</source>
match 用来指定动作,通过 tag 匹配 source,然后执行指定的命令来分发日志,最常见的用法就是将 source 收集的日志转存到数据库。
# 将标记为 myapp.access 的日志转存到文件
<match myapp.access>
@type file
path /var/log/fluent/access
</match>
myapp.access 就是 tag,tag 有好几种匹配模式:
:匹配任意一个 tag;
*:匹配任意数量个 tag;
a b:匹配 a 或 b;
{X,Y,Z}:匹配 X, Y, Z 中的一个。
<match a.*>
<match **>
<match a.{b,c}>
<match a.* b.*>
fluentd 按照 match 出现的顺序依次匹配,一旦匹配成功就不会再往下匹配,所以如果你先写了一个 match **,然后后面的所有的 match 都会被忽略。
filter 和 match 的语法几乎完全一样,但是 filter 可以串联成 pipeline,对数据进行串行处理,最终再交给 match 输出。
<filter myapp.access>
@type record_transformer
<record>
host_param "#{Socket.gethostname}"
</record>
</filter>
收到事件 {“event”: “data”} 后,先扔到 filter: record_transformer 中,record_transformer 在事件中添加了"host_param" 字段并且继续向后传,{“event”:“data”,“host_param”:“webserver1”},事件最终到达 file 输出插件。
下列 match 模板可以用于 和中的 tag:
Fluentd 尝试以模板在配置文件中出现的顺序进行匹配
myapp.access 永远都匹配不到。更宽松的匹配模板应定义在更严格的匹配模板之后
<match **>
@type blackhole_plugin
</match>
<match myapp.access>
@type file
path /var/log/fluent/access
</match>