我正在尝试为我的Java日志编写一个logstash过滤器,以便我可以干净地将它们插入到我的数据库中。
以下是我的日志格式示例:
FINE 2016-01-28 22:20:42.614+0000 net.myorg.crypto.CryptoFactory:getInstance:73:v181328
AppName : MyApp AssocAppName:
Host : localhost 127.000.000.001 AssocHost:
Thread : http-bio-8080-exec-5[23]
SequenceId: -1
Logger : net.myorg.crypto.CryptoFactory
Message : ENTRY
---
FINE 2016-01-28 22:20:42.628+0000 net.myorg.crypto.CryptoFactory:getInstance:75:v181328
AppName : MyApp AssocAppName:
Host : localhost 127.000.000.001 AssocHost:
Thread : http-bio-8080-exec-5[23]
SequenceId: -1
Logger : net.myorg.crypto.CryptoFactory
Message : RETURN
---
我的logstash-forwarder非常简单。它只包含目录中的所有日志(它们都具有与上面相同的格式)
"files": [
{
"paths": [ "/opt/logs/*.log" ],
"fields": { "type": "javaLogs" }
}
]
我遇到的问题是在logstash方面。如何在logstash中编写过滤器以匹配此日志格式?
使用这样的东西,让我接近:
filter {
if [type] == "javaLogs" {
multiline {
pattern => "^%{TIMESTAMP_ISO8601}"
negate => true
what => "previous"
}
}
}
但我想将日志中的每一行分解为logstash中自己的映射。例如,创建AppName
,AssocHost
,Host
,Thread
等字段
我认为答案是使用grok
。
答案 0 :(得分:0)
将它们与多线(编解码器或过滤器,根据您的需要)连接是一个很好的第一步。
不幸的是,您的模式显示"如果日志条目没有以时间戳开头,请将其与之前的eentry"加入。
请注意,您的所有日志条目都不以时间戳开头。