Fluentd插件:过滤插件概述
“ 过滤插件是用来修改日志记录的”
同样,Fluentd也使用filter插件来实现对日志记录的过滤和修改。
过滤插件通常用于以下场景:
-
通过grep匹配一个或多个日志字段,过滤掉不符合条件的日志
-
向日志中增加新的字段,以丰富日志内容
-
删除或掩盖某些字段,使得日志合乎规格
【使用方法】
在配置文件中通过使用<filter>指令来添加一个过滤器插件。
<filter foo.bar>@type grepregexp1 message cool</filter>
这个配置片段用来对tag为foo.bar的日志进行过滤。
只有日志的message字段包含"cool",这条日志才会继续执行后续处理。
和用于输出插件的<match>指令一样,<filter>也是针对具有特定tag标签的日志的。
一旦日志事件被filter处理,该事件的处理过程会遵循配置文件中的顺序,自上而下地进行。
所以,如果有多个filter处理相同的tag,这些filter会依次被调用。
比如:
<filter foo.bar>@type grepregexp1 message cool</filter><filter foo.bar>@type record_transformer<record>hostname "#{Socket.gethostname}"</record></filter>
这个配置片段中,只有message字段中包含"cool"的日志记录才会被增加hostname字段。
【过滤链路优化】
我们看到,多个filter可以形成一个过滤链路,依次执行不同的处理逻辑。
如果在处理链路中使用了多个filter,Fluentd会尝试优化对filter的调用,以提升性能。
这个优化的执行有一个前提条件,就是过滤链路中的所有插件必须使用filter方法,而不是filter_stream方法。
这个涉及到插件的开发细节,我们先不用管。
如果你在Fluentd的运行日志中发现以下信息,这表示优化被禁用了。
disable filter chain optimization because [Fluent::Plugin::XXXFilter] uses `#filter_stream` method
这是一个不太重要的信息,可以忽略。
【过滤插件列表】
这里列出几个常用的filter插件。
grep
record_transformer
filter_stdout
我们接下来会一起学习这几个常用过滤插件的使用方法。
【感谢你看到这里,如本文对你有帮助,
不妨分享给其他朋友,或者赏个小钱鼓励一下】
本文分享自微信公众号 - Fluentd学习交流(fluentd)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
