假设我们的数据是json格式,并且可以利用其中的 project 字段区分数据来源,那我们可以这样配置输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
output{
if [project] == "readius" {
elasticsearch {
hosts=>"12.4.5.71:9200"
index=>"logstash-radius-%{+YYYY.MM.dd}"
}
} else if [project] == "redis" {
elasticsearch {
hosts=>"12.4.5.71:9200"
index=>"logstash-redis-%{+YYYY.MM.dd}"
}
}

//
}

假设我们的数据是json格式,但是没有任何字段可以标志数据来源,那我们我可以在输入上下手 , 用多个输入并加以type来辅助标志数据来源 ,但是要注意此时json中不能有type字段,否则会和定义的type冲突

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
30
31
32
33
34
35
input {
kafka {
bootstrap_servers => "3.6.28.66:9092"
group_id => "logstash-group"
topics => "logstash_topic"
auto_offset_reset =>"earliest"
codec => json
type => redis
}

kafka {
bootstrap_servers => "3.6.28.66:9091"
group_id => "logstash-group"
topics => "logstash_topic"
auto_offset_reset =>"earliest"
codec => json
type => redius
}
}

output{
if [type] == "readius" {
elasticsearch {
hosts=>"12.4.5.71:9200"
index=>"logstash-radius-%{+YYYY.MM.dd}"
}
} else if [type] == "redis" {
elasticsearch {
hosts=>"12.4.5.71:9200"
index=>"logstash-redis-%{+YYYY.MM.dd}"
}
}

//
}

如果我们的数据不是json,就和上面一样加入type字段来辅助,且无需关心数据中是否有type导致冲突的问题。除此之外,还可以通过filter把数据格式化为json,然后利用第一种方法区分数据来源,这里不做主要讨论