从日志消息中提取时间戳

时间:2019-08-14 22:43:10

标签: elasticsearch logstash-grok filebeat grok

我正在尝试将日志文件索引到Elastic搜索。所有日志条目都被索引到名为message的字段中。 @timestamp字段显示索引条目的时间,而不是日志条目的时间戳。

我用grok处理器创建了一个摄取管道来定义日志条目的模式。我尝试了几种模式,但无法正常工作,特别是因为我不熟悉。

日志样本

2019-08-05 00:04:06 info [index.js]: Request: HTTP GET /
2019-08-05 00:04:06 error [error.js]: No authorization token was found

使用grok和日期处理器提取管道

"description" : "Extracting date from log line"
, "processors": [
{
"grok": {
"field": "message",
"patterns": ["%{yyyy-mm-dd HH:mm:ss:logtime} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}"]
},
"date": {
"field": "logtime",
"target_field": "@timestamp",
"formats": ["yyyy-mm-dd HH:mm:ss"]
}
}
]
}

我想要的只是从日志消息中提取时间戳的功能,其他所有内容都可以忽略或通配或存储在仅一个变量(如message)中。因此,从本质上说,对日志文件建立索引应该对日志消息中的时间戳进行索引,并且消息的其余部分可以文本或字符串形式保留在一个字段中,而无需解析消息的其余部分。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

将此模式用作grok模式:

%{TIMESTAMP_ISO8601:logtime} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}

使用thes设置timestamps

date{
      match => ["logtime", "yyyy-MM-dd HH:mm:ss", "ISO8601"]
      timezone => "Europe/Berlin"
      target => "@timestamp"
    }

您可以将timezone更改为您的

答案 1 :(得分:0)

我对此进行了以下更改,并且现在正在对日志消息建立索引。虽然我不知道该怎么做,但是请感谢有人可以对此有所了解

我在filebeat配置文件的 Elasticsearch输出部分中设置了管道:“管道名称”设置。我将该行移动到文件路径部分正下方的 filebeat输入部分处,

  

filebeat.inputs:   -类型:日志     路径:       -D:\ home \ site \ wwwroot \ logs * .log     管道:“ redate”

现在日志消息已被索引。