输入块中的logstash条件语句

输入块中的logstash条件语句,logstash,elastic-stack,logstash-configuration,logstash-forwarder,Logstash,Elastic Stack,Logstash Configuration,Logstash Forwarder,我正在使用logstash和伐木工人来管理我的日志。Logstash从两种不同的文件类型获取输入,其中一种记录多行堆栈跟踪。我知道我应该使用多行编解码器,但我不知道如何将其仅应用于一种类型的日志。这不起作用: input { lumberjack { #some configs port => 9000 if [type] == "TYPE1" { # IF STATEMENT CAUSES ERROR codec => multiline

我正在使用logstash和伐木工人来管理我的日志。Logstash从两种不同的文件类型获取输入,其中一种记录多行堆栈跟踪。我知道我应该使用多行编解码器,但我不知道如何将其仅应用于一种类型的日志。这不起作用:

input {
  lumberjack {
    #some configs
    port => 9000

    if [type] == "TYPE1" { # IF STATEMENT CAUSES ERROR
      codec => multiline {}
    }
  }
}
是否有任何方法允许输入编解码器使用条件


我知道我可以使用多行过滤器而不是编解码器,但多行过滤器不允许使用多个工作线程,我需要它们。

我怀疑答案是为不同的数据类型设置单独的输入。这样,您就不需要在多行编解码器中添加任何逻辑。 例如: 将所有遵循模式X的Java日志发送到端口N 将所有遵循模式Y的Ruby日志发送到端口N+1

我不确定如何在包含Redis或其他缓存服务器的堆栈中实现这一点,因为理想情况下,所有数据都应该进入缓存而不进行任何处理,但在检索时需要处理逻辑,因为它将包含各种数据类型

我想您需要注意在接收层加入多行日志,以便缓存服务器接收完整的消息,然后在将数据发送到弹性搜索之前运行较重的过滤器

大概是这样的:

LS1 (multiple inputs and codecs like multiline)
Redis (caching)
LS2 (filters)
ES (storage)
KIB (viewing)