0%

[Logstash] 修改 timestamp

前言

如果我們希望讓 Elasticsearch 的 timestamp 和 Log 的時間是一樣的,我們可以在 Filter 的部分做 timestamp 替換的動作,替換之後可以更清楚地了解系統狀態,我們可以方便地切換時間區間,觀察每個時段的系統狀態、成長趨勢等等,下圖範例是本周的系統狀態:

Kibana (@timestamp per 3 hour)

設定

我們接下來看一下要如何修改 Logstash config, 替換 timestamp:

Logstash config:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
input {
file {
path => ["/home/user/test.log"]
type => "test_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 {
elasticsearch {
hosts => ["localhost:9200"]
index => "log-test"
}
}

在 Filter 中,我們先利用 grok 取出所需要的欄位資料,再將 date 利用 date filter 來替換掉目前的 timestamp, 其中第 15 行的 match array 的格式是: match => [field, formats...],第 0 個元素是欄位名稱,以此範例來說就是 date,而第 1 個元素以後都是 date 的日期格式,如果有多種日期格式,可以寫在 match array 中,例如:

1
2
3
4
5
filter {
date {
match => ["date", "yyyy-MM-dd HH:mm:ss.SSS", "MMM dd yyy HH:mm:ss", "ISO8601"]
}
}

修改好 Logstash config 之後重新啟動 Logstash, 就可以在 Kibana 中看到新的 Log 資料,也可以輕鬆地調整時間範圍來觀察系統狀態囉!

Kibana (Hourly)

參考資料