logstash如何实现多对多匹配filter?
匿名 | 发布于2020年01月07日 | 阅读数:3869
elastic stack 7.5
需求是现在有很多的不同类型的日志源(logsrc1~m),以及多种日志类型(logtype1~n),并且同一个日志源可能对应多个日志类型(比如防火墙会产生防火墙拦截日志、防火墙管理员登录日志、防火墙系统状态日志等),而多个日志源可能有同样的日志类型(比如边界防火墙和内网防火墙,加入同品牌,都会产生类似的系统登录日志),也就是多对多的关系
假如按照每个日志源写一个filter显然会导致一方面filter的配置文件很长(因为可能多种日志类型,不同的预处理逻辑)并且另外一个类似的日志源还要再重复写filter其中的一部分,是否可以使用logstash做多对多的日志预处理?
我的想法是,设置n个filter(flt1~n),然后每个日志源分配k个filter,比如防火墙1(logsrc1)匹配防火墙拦截日志类型logtype2,防火墙管理员登录日志类型logtype4,防火墙系统状态日志类型logtype10,另一个防火墙3(logsrc3)匹配防火墙拦截日志logtype3,防火墙管理员登录日志logtype4,防火墙系统状态日志类型logtype5
我看到有大佬实现了类似的,是不是这个思路我不确定,具体怎么做的大佬也没公开,我想如果要实现,就要解决如何在一个config配置中调用另一个filter,之前我考虑是通过自定义filter可以实现,但是问题在于自定义filter好像没法调用已实现的filter比如mutate/grok之类的,实际上mutate/grok这些自带的filter已经可以实现绝大多数的需求,只是无法更灵活地进行多对多匹配,比如在一个flt1.conf里面写,if condition { call flt2.conf } else { call flt3.conf \ncall flt5.conf}这样的
需求是现在有很多的不同类型的日志源(logsrc1~m),以及多种日志类型(logtype1~n),并且同一个日志源可能对应多个日志类型(比如防火墙会产生防火墙拦截日志、防火墙管理员登录日志、防火墙系统状态日志等),而多个日志源可能有同样的日志类型(比如边界防火墙和内网防火墙,加入同品牌,都会产生类似的系统登录日志),也就是多对多的关系
假如按照每个日志源写一个filter显然会导致一方面filter的配置文件很长(因为可能多种日志类型,不同的预处理逻辑)并且另外一个类似的日志源还要再重复写filter其中的一部分,是否可以使用logstash做多对多的日志预处理?
我的想法是,设置n个filter(flt1~n),然后每个日志源分配k个filter,比如防火墙1(logsrc1)匹配防火墙拦截日志类型logtype2,防火墙管理员登录日志类型logtype4,防火墙系统状态日志类型logtype10,另一个防火墙3(logsrc3)匹配防火墙拦截日志logtype3,防火墙管理员登录日志logtype4,防火墙系统状态日志类型logtype5
我看到有大佬实现了类似的,是不是这个思路我不确定,具体怎么做的大佬也没公开,我想如果要实现,就要解决如何在一个config配置中调用另一个filter,之前我考虑是通过自定义filter可以实现,但是问题在于自定义filter好像没法调用已实现的filter比如mutate/grok之类的,实际上mutate/grok这些自带的filter已经可以实现绝大多数的需求,只是无法更灵活地进行多对多匹配,比如在一个flt1.conf里面写,if condition { call flt2.conf } else { call flt3.conf \ncall flt5.conf}这样的
1 个回复
tacsklet - 公司有用到es
赞同来自:
然后不同的filter可以放在不同的目录管理,在总的filter中进行引用。
如果想把日志源也区分开的话,可以在采集的时候加入标识字段,看日志量或者安全级别决定是分索引或者通过逻辑字段区分。