Logstash过滤器插件作为文件

Logstash过滤器插件作为文件,logstash,elk,Logstash,Elk,我正在使用logstash7.0。我要筛选多个事件。我不希望只有一个配置文件,而是希望每个事件都有多个过滤器配置文件 作为一个例子,我有一个登录事件,我将过滤器配置存储在单独的文件中。我希望给出过滤器中的文件路径,如下所示 filter { if [I]=="login_event" { file { path => "/home/logstash/config/login_event.txt" } } else if[I] == "other_even

我正在使用
logstash7.0
。我要筛选多个事件。我不希望只有一个配置文件,而是希望每个事件都有多个过滤器配置文件

作为一个例子,我有一个登录事件,我将过滤器配置存储在单独的文件中。我希望给出过滤器中的文件路径,如下所示

filter {
  if [I]=="login_event" {
    file {
      path => "/home/logstash/config/login_event.txt"
    }
  } else if[I] == "other_event" {
    file {
      path => "/home/logstash/config/other_event.txt"
    }
  }
}

但我看到过滤器中没有可用的文件插件。还有其他方法吗?

有两种方法可以实现您想要的功能,其中一种是使用选项运行logstash,其中一个管道指向一个文件夹,您可以将过滤器保存在单独的文件中

例如,下面的
pipelines.yml
将创建一个名为
events
的管道,指向存储在文件夹
/etc/logstash/conf.d/events/
中的配置文件

- pipeline.id: events
  path.config: "/etc/logstash/conf.d/events/"
在文件夹
/etc/logstash/conf.d/events/
中,您需要一个用于输入的文件、一个用于输出的文件以及您需要的任何过滤器文件,以便在管道中处理它们

例如,您需要以下内容:

-rw-r--r-- 1 root root  91 Nov 30 00:30 00-input.conf
-rw-r--r-- 1 root root 155 Nov 30 00:34 01-filterA.conf
-rw-r--r-- 1 root root 160 Nov 30 00:35 02-filterB.conf
-rw-r--r-- 1 root root  73 Nov 30 00:35 99-output.conf
filter {
    if [I] == "login_event" {
        your filters
    }
}
00 input.conf
文件将有一个
input
块,文件
99 output.conf
将有一个
output
块,每个
0X filterN.conf
文件将有一个
filter

对于
login\u事件
,应该是这样的:

-rw-r--r-- 1 root root  91 Nov 30 00:30 00-input.conf
-rw-r--r-- 1 root root 155 Nov 30 00:34 01-filterA.conf
-rw-r--r-- 1 root root 160 Nov 30 00:35 02-filterB.conf
-rw-r--r-- 1 root root  73 Nov 30 00:35 99-output.conf
filter {
    if [I] == "login_event" {
        your filters
    }
}
对于
其他事件
也一样,只是更改您的条件

在这两个文件之前,您可能需要一个过滤器文件来解析消息并创建要在条件中使用的字段,但想法是一样的,您只需要按照希望过滤器执行的顺序命名文件


您还可以将多个管道和消息代理(如
redis
kafka
)组合在一起,以解决相同的问题,在这种情况下,您需要一个管道来接收消息,解析消息,并将其存储在
列表
主题
)中,用于每个不同的事件,然后你就可以使用不同的管道了。

这很好。我可以在conf.d/events中创建一个输出文件夹并将所有输出文件分开放置吗?从未尝试过拥有子文件夹,但我认为它应该可以工作,只需尝试保持命名约定,将文件夹命名为
99 outputs
,并将文件命名为
99-01-outputA.conf
99-02-outputB.conf
,然后继续。