什么是事件? 事件(Event)是Fluentd内部处理流程使用的数据结构,日志记录一旦进入Fluentd便被封装成一个event。Event由三部分组成:tag、time、record。
Input插件负责将源数据封装为event,比如in_tail插件从文本中生成event。对于下边这行文本:
将会产生下边的event对象:
下边我们通过一个具体的配置来讲解事件的处理过程。 本例使用一个很基础的配置片段来描述各插件是如何关联到一起的,它包括了如何定义输入源(或者说监听器),以及如何设置通用的匹配规则将event路由到输出端。 我们使用in_http和out_stdout这两个插件来描述event的循环过程。 <source> @type http port 8888 bind 0.0.0.0 </source> 上边的配置使用in_http插件定义了一个HTTP服务器,监听端口为8888。然后我们再定义一个匹配(Match)规则,event路由引擎会根据这个规则将http请求派发到输出端。这里的输出端是stdout,仅仅将http请求打印到屏幕上。 <match test.cycle> @type stdout </match> Match的作用是设置一个匹配规则test.cycle,对于每个进入Fluentd的event,如果其tag值和test.cycle相等(或者说匹配,因为match可以使用通配符。这里的tag是由in_http插件生成的。),那么这个event就会进入此match定义的output插件,本例中的output插件就是out_stdout。 至此,我们定义了三个基本项:Input、Match和Output,虽然仅仅使用两个配置段。这就是一个可以使用的采集配置了,可以通过以下命令进行测试: 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 在/var/log/td-agent.log中会有如下输出: 2020-03-05 14:06:24.144168913 +0800 test.cycle: {"action":"login","user":2} 过滤器用于对事件进行筛选,决定是否接收或者丢弃事件。我们可以在上边的示例中增加一个过滤器。 <source> @type http port 8888 bind 0.0.0.0 </source>
<filter test.cycle> @type grep <exclude> key action pattern ^logout$ </exclude> </filter>
<match test.cycle> @type stdout </match> 添加过滤器之后,事件在路由到match之前必须经过过滤器的处理。过滤器根据事件的类型和过滤规则来决定是否接受此事件。 我们示例中使用的是grep过滤器,这个过滤器对test.cycle这类事件进行过滤,会排除http请求中action值为logout的事件。 所以,如果尝试发送下边的请求,在td-agent.log中是看不到任何输出的。 curl -i -X POST -d 'json={"action":"logout","user":2}' http://localhost:8888/test.cycle 从示例中可以看到,事件是根据配置顺序自上而下来被处理的。我们可以根据需要配置任意多个过滤器,这样一来,配置文件会变得很长很复杂。Fluentd提供了标签来解决此问题。 |
|
来自: RealPython > 《Fluentd》