Java 日志的日志存储过滤器



我正在尝试为我的 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
---

我的日志转发器非常简单。 它只包含目录中的所有日志(它们都具有与上述相同的格式)

"files": [
    {
        "paths":  [ "/opt/logs/*.log" ],
        "fields": { "type": "javaLogs" }
    }
]

我遇到的麻烦在日志方面。 如何在 logstash 中编写过滤器以匹配此日志格式?

使用这样的东西,让我接近:

filter {
      if [type] == "javaLogs" {
          multiline {
              pattern => "^%{TIMESTAMP_ISO8601}"
              negate => true
              what => "previous"
          }
      }
}

但是我想将日志中的每一行分解为logstash中自己的映射。 例如,创建AppNameAssocHostHostThread等字段。

我认为答案是使用grok.

使用多行(编解码器或过滤器,具体取决于您的需求)连接它们是很好的第一步。

不幸的是,您的模式显示"如果日志条目不以时间戳开头,请将其与上一个条目联接"。

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

相关内容

  • 没有找到相关文章

最新更新