我發現Logstash在解析像這樣的較少結構的日誌時會遇到麻煩。
您可以提取使用grok with a custom capture pattern串的任務,然後將其轉換爲字符串數組與mutate's split option:
filter {
grok {
match => ["message", "slow:\[(?<tasks>(?:Task\[%{USER} %{NUMBER} ms\],?)+)\]"]
}
mutate {
split => ["tasks", ","]
}
}
麻煩之後是,有通過所產生的任務的數組沒有直接的辦法grok
。根據你需要的數據,這可能是好的。
如果你真的想分析的領域進行這些任務,我能想到的唯一的事情就是提供grok
具有多個匹配的候選人,像這樣:
filter {
grok {
match => [
"message", "slow:\[Task\[%{USER:name} %{NUMBER:time} ms\],Task\[%{USER:name} %{NUMBER:time} ms\],Task\[%{USER:name} %{NUMBER:time} ms\],Task\[%{USER:name} %{NUMBER:time} ms\],Task\[%{USER:name} %{NUMBER:time} ms\]\]",
"message", "slow:\[Task\[%{USER:name} %{NUMBER:time} ms\],Task\[%{USER:name} %{NUMBER:time} ms\],Task\[%{USER:name} %{NUMBER:time} ms\],Task\[%{USER:name} %{NUMBER:time} ms\]\]",
"message", "slow:\[Task\[%{USER:name} %{NUMBER:time} ms\],Task\[%{USER:name} %{NUMBER:time} ms\],Task\[%{USER:name} %{NUMBER:time} ms\]\]",
"message", "slow:\[Task\[%{USER:name} %{NUMBER:time} ms\],Task\[%{USER:name} %{NUMBER:time} ms\]\]",
"message", "slow:\[Task\[%{USER:name} %{NUMBER:time} ms\]\]"
]
}
}
由於grok
通常會break on match,它將在匹配的第一個模式後停止處理。這會給你平行陣列,name
和time
。