0%

[Logstash] Multiple Elasticsearch outputs

前言

如果我們希望可以依照不同的 Input 做不同的 Output 處理,可以參考此文章來做設定。

設定

我們在設定 Logstash 時,可以設定 Input 的 type, 之後在 Filter 或是 Output 的部分可以利用 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
36
37
38
39
40
41
42
input {
file {
path => ["/home/user/test.log"]
type => "test_log"
}
file {
path => ["home/user/logs/server.log"]
type => "server_log"
}
file {
path => ["home/user/logs/dev.log"]
type => "dev_log"
}file {
path => ["home/user/logs/tmp.log"]
type => "sys_log"
}
}
filter {
grok {
match => {
"message" => "\[(?<date>.+?)\] %{LOGLEVEL:level} %{DATA:logger} - client:%{IPV4:client_ip}, %{DATA:message}"
}
}
date {
match => ["date", "yyyy-MM-dd HH:mm:ss.SSS"]
}
}
output {
if [type] in ["test_log", "server_log"] {
elasticsearch {
hosts => ["localhost:9200"]
index => "%{type}" # index 名稱 = type value
}
}
else if [type] == "sys_log" {
hosts => ["localhost:9200"]
index => "syslog"
}
else {
hosts => ["localhost:9200"]
}
}

上面的範例是只有做 Multiple outputs, 依據 type 不同輸出到不同的 Elasticsearch index.

依照範例設定好之後,重新啟動 Logstash 就可以在 Kibana 看到新的 Log 資料囉!

參考資料