logstash 多数据源

单个数据源:

1
2
3
4
5
6
7
8
9
10
11
input {
# 输入配置
}

filter {
# 过滤器逻辑
}

output {
# 输出配置
}

如果有多个数据源,而且给不同的数据源采用不同的 filter 和 output 应该怎么办呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
input {
beats {
type => "beats_events"
# 其他 beats 配置
}
jdbc {
type => "jdbc_events"
# 其他 jdbc 配置
}
}

filter {
if [type] == "beats_events" {
# 其他 beats 过滤逻辑
}

if [type] == "jdbc_events" {
# 其他 jdbc 过滤逻辑
}
}

output {
if [type] == "beats_events" {
# 其他 beats 配置
}
if [type] == "jdbc_events" {
# 其他 jdbc 配置
}
}

虽然这种做法会让配置文件变得复杂,但是好处就是只用起一个 logstash 实例。还有一种方式是使用 tags:

1
2
3
4
5
6
7
8
9
10
11
12
13
input {
jdbc {
tags => "table1"
}
jdbc {
tags => "table2"
}
}
output {
if "table1" in [tags] {

}
}