无法在logstash / elasticSearch中解析日期中的字符串

时间:2018-05-23 14:12:51

标签: elasticsearch logstash elastic-stack kibana-4

我创建了一个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"
        }

请告诉我上述代码中的错误>我尝试了很多其他选择,但仍然无法正常工作。

2 个答案:

答案 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}?