使用logstash

时间:2016-06-08 06:58:56

标签: logstash-grok grok

我一直在尝试使用logstash grok过滤器解析示例日志文件,但无法输出区分字段。 我的示例日志如下所示 -

INFO  [2016-05-26 11:54:57,741]  [main]: org.eclipse.jetty.util.log:?:?- Logging initialized @5776ms`enter code here`

我要分离的是 INFO 时间戳 [main ] ,来自 ?:? 的两部分信息。 我在grok过滤器中尝试过的模式是 - >

  

match => {“message”=> “%{WORD:严重性}   %{CISCOTIMESTAMP:timestamp}%{NOTSPACE}%{GREEDYDATA:logmsg}“}

但它没有正确输出模式。 可以请有人为我提供正确的grok模式匹配!! 任何相关的帮助都很有用!!

1 个答案:

答案 0 :(得分:0)

由于目前尚不清楚您希望获得什么样的格式,我会为您提供以下过滤器:

match => { "message" => "%{LOGLEVEL:severity} *\[%{TIMESTAMP_ISO8601:timestamp}\] *\[%{WORD:tread}\]\: *%{NOTSPACE:file} *%{GREEDYDATA:msg}" }

这将有效地将您的示例拆分为:

{
  "severity": [
    [
      "INFO"
    ]
  ],
  "timestamp": [
    [
      "2016-05-26 11:54:57,741"
    ]
  ],
  "YEAR": [
    [
      "2016"
    ]
  ],
  "MONTHNUM": [
    [
      "05"
    ]
  ],
  "MONTHDAY": [
    [
      "26"
    ]
  ],
  "HOUR": [
    [
      "11",
      null
    ]
  ],
  "MINUTE": [
    [
      "54",
      null
    ]
  ],
  "SECOND": [
    [
      "57,741"
    ]
  ],
  "ISO8601_TIMEZONE": [
    [
      null
    ]
  ],
  "tread": [
    [
      "main"
    ]
  ],
  "file": [
    [
      "org.eclipse.jetty.util.log:?:?-"
    ]
  ],
  "msg": [
    [
      "Logging initialized @5776ms`enter code here`"
    ]
  ]
}

这不会优雅地解析:?:?-部分,因此如果需要,请进行调整。

查看Grokdebug,这对于即时过滤器测试非常有用。