用于Java日志的logstash过滤器

时间:2016-01-28 22:56:32

标签: logstash logstash-grok logstash-configuration

我正在尝试为我的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中自己的映射。例如,创建AppNameAssocHostHostThread等字段

我认为答案是使用grok

1 个答案:

答案 0 :(得分:0)

将它们与多线(编解码器或过滤器,根据您的需要)连接是一个很好的第一步。

不幸的是,您的模式显示"如果日志条目没有以时间戳开头,请将其与之前的eentry"加入。

请注意,您的所有日志条目都不以时间戳开头。

相关问题