【问题标题】:Grok filter for my log pattern我的日志模式的 Grok 过滤器
【发布时间】:2017-03-28 14:08:18
【问题描述】:

我正在试验 ELK。我尝试将具有以下模式的日志输入到logstash

14:25:43.324 [http-nio-9090-exec-116] INFO  com.app.MainApp - Request has been detected

我在 logstash.conf 中尝试了以下 grok 模式作为过滤器

match => { “message” => [ “ (?<timestamp>%{HOUR}:%{MINUTE}:%{SECOND}) \[%{NOTSPACE:thread}\] %{LOGLEVEL:loglevel} %{DATA:Class}\- %{GREEDYDATA:message}“ ]}

match => { “message” => [ “ %{TIME:timestamp} \[%{NOTSPACE:thread}\] %{LOGLEVEL:loglevel} %{DATA:Class}\- %{GREEDYDATA:message}“ ]}

但是当我将日志输入到 logstash 时,我收到以下错误

   [0] "_grokparsefailure"

有人可以为上述日志模式推荐正确的 grok 过滤器吗?

【问题讨论】:

  • 模式中的第一个字符是空格。这是故意的吗?
  • @Fairy 不,不是
  • 那么你就有问题了。摆脱空间将正确匹配您的两种模式。
  • @Fairy 它工作正常。但我现在面临的问题是 wrt 消息解析“消息”=> [ [0] “20:19:05.216 [qtp231935802-12] INFO com.iriiis.app.notes.NoteService - ping 调用”, [1] “ping 调用”] 我该如何解决这个问题?
  • 请更新问题。从 cmets 读取它是相当困难的。

标签: logging logstash elastic-stack grok


【解决方案1】:

删除起始空间后,此解析失败得到修复。所以删除空间后的工作logstash.conf如下所示

input {
  file {
    path => ["./debug.log"]
    codec => multiline {
      # Grok pattern names are valid! :)
      pattern => "^%{TIMESTAMP_ISO8601} "
      negate => true
      what => previous
    }
  }
}

filter {
  grok {
    match => [ "message", "%{TIMESTAMP_ISO8601:timestamp} \[%{NOTSPACE:uid}\] \[%{NOTSPACE:thread}\] %{LOGLEVEL:loglevel} %{DATA:class}\-%{GREEDYDATA:message}" ]
    overwrite => [ "message" ]
  }
  date {
    match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss" ]
  }
}


output {
  elasticsearch { hosts => localhost }
  stdout { codec => rubydebug }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多