[英]Logstash grok filter grok parse failure
我使用 Logstash 和 Filebeat 對其進行了配置。 我使用了 MongoDB output 插件。
我想像這樣在 mongoDB 中制作數據:
{
"_id": {"$oid": "62ea3197736a54952d56e2fe"},
"category": "TEST",
"date": "2022-08-03T17:28:07+09:00",
"level": "WARNING",
"message": "statistics_sales.go:136: sdb.FindUserByID, error: mongo: no documents in result",
"title": "statistics_sales"
}
這是原始日志數據:
ERROR: 2022/08/16 13:27:42.292305 statistics_sales.go:136: sdb.FindUserByID, error: mongo: no documents in result
所以我像這樣配置logstash.conf:
filter {
grok {
match => {
"message" => "%{LOGLEVEL:level}: %{YEAR:year}/%{MONTHNUM:month}/%{MONTHDAY:day} %{TIME:time} %{GREEDYDATA:message}"
}
overwrite => [ "message" ]
}
grok {
match => {
"message" => "%{DATA:title}\.go%{GREEDYDATA}"
}
}
grok {
match => {
"time" => "%{DATA:sec}\.%{GREEDYDATA}"
}
}
grok {
add_field => {
"date" => "%{year}-%{month}-%{day}T%{time}+09:00"
}
}
grok {
remove_field => ["year", "month", "day", "time", "event", "@version", "agent", "host", "@timestamp", "ecs"]
}
}
但是,我在 time(sec) 配置下遇到錯誤。
我嘗試了很多方法,但我找不到問題所在。
這是 Logstash 結果:
{
"month" => "08",
"input" => {
"type" => "log"
},
"agent" => {
"name" => "HOSTNAME",
"version" => "8.3.3",
"id" => "8a97df17-1977-472f-b6f1-6c7a7359c372",
"type" => "filebeat",
"ephemeral_id" => "34333de9-c892-42a0-bc35-ee49a0f06721"
},
"log" => {
"offset" => 575,
"file" => {
"path" => "/home/bjkang/LogCollector/Log/service_log_2022-08-23.log"
}
},
"ecs" => {
"version" => "8.0.0"
},
"title" => "statistics_sales",
"@timestamp" => 2022-08-23T11:30:42.407Z,
"time" => "13:27:42.293679",
"sec" => "13:27:42",
"host" => {
"name" => "HOSTNAME"
},
"tags" => [
[0] "_grokparsefailure"
],
"@version" => "1",
"message" => "statistics_sales.go:136: sdb.FindUserByID, error: mongo: no documents in result",
"day" => "16",
"level" => "ERROR",
"year" => "2022",
"event" => {
"original" => "ERROR: 2022/08/16 13:27:42.293679 statistics_sales.go:136: sdb.FindUserByID, error: mongo: no documents in result"
}
}
我能得到一些提示嗎?
我通過這樣設置解決了它:
filter {
grok {
match => {
"message" => "%{LOGLEVEL:level}: %{YEAR:year}/%{MONTHNUM:month}/%{MONTHDAY:day} %{TIME:time} %{GREEDYDATA:message}"
}
overwrite => [ "message" ]
}
grok {
match => {
"message" => "%{DATA:title}\.go%{GREEDYDATA}"
}
}
grok {
match => {
"time" => "%{DATA:hhmmss}\.%{GREEDYDATA}"
}
}
mutate {
add_field => {
"date" => "%{year}-%{month}-%{day}T%{hhmmss}+09:00"
}
}
prune {
whitelist_names => ["level", "message", "title", "date", "@timestamp", "@version"]
}
}
但是,我無法插入沒有元數據的文檔 [@timestamp, @version]
也許有人知道這一點,請評論:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.