我创建了一个logstash脚本来读取日志文件,该日志文件具有格式为“2018-05-08T12:18:53.506 + 0530”的各种时间戳。我试图使用日志存储中的日期过滤器来解析它到目前为止
date{
match => ["edrTimestamp","yyyy-MM-dd'T'HH:mm:ss.SSS'Z'","ISO8601"]
target => "edrTimestamp"
}
运行上面的logstash脚本,它会创建一个弹性搜索索引。但是到目前为止还没有解析字符串。它还在索引中显示日期解析异常。
它会创建这样的输出。
{
"tags": [
"_dateparsefailure"
],
"statusCode": "805",
"campaignRedemptionLimitTotal": 1000,
"edrTimestamp": "2018-05-22T16:41:25.162+0530 ",
"msisdn": "+919066231327",
"timestamp": "2018-05-22T16:41:25.122+0530",
"redempKeyword": "print1",
"campaignId": "C910101-1527004962-1582",
"category": "RedeemRequestReceived"
}
请告诉我上述代码中的错误>我尝试了很多其他选择,但仍然无法正常工作。
答案 0 :(得分:2)
您的问题是您的时间戳在其末尾有一个空格"edrTimestamp": "2018-05-22T16:41:25.162+0530 ",
,导致日期解析失败。您需要添加:
mutate {
strip => "edrTimestamp"
}
在您的日期过滤器之前。
答案 1 :(得分:1)
我认为你不应该逃避Z.所以你可能想要这样的东西:
yyyy-MM-dd'T'HH:mm:ss,SSS
此外,您不应该使用" Z"因为你的时间不是祖鲁(0偏移)。您将希望包含偏移量作为模式的一部分。 Heroku grok debug app对此非常有用。
如果我传递你的字符串
2018-05-08T12:18:53.506+0530
并使用过滤器%{TIMESTAMP_ISO8601}
然后匹配,此模式由以下子模式组成:
TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?