logstash grok TIMESTAMP_ISO8601类型?

时间:2017-03-14 16:35:56

标签: logstash logstash-grok

我有一个简单的logstash grok过滤器:

filter {
  grok {
    match => { "message" => "^%{TIMESTAMP_ISO8601:timestamp} %{NOTSPACE:name} %{WORD:level} %{SPACE} %{GREEDYDATA:message}$" }
    overwrite => [ "message" ]
  }
}

这可行,它会解析我的日志,但根据Kibana,时间戳值以数据类型string输出。

logstash @timestamp字段的数据类型为date

grok文档说您可以指定数据类型转换,但只支持int和float:

  

如果您希望转换语义的数据类型,例如更改a   字符串到整数然后用目标数据类型后缀。对于   示例%{NUMBER:num:int},用于转换num语义   字符串到整数。目前唯一支持的转换是int   和漂浮。

这表明我应该将其保留为字符串,但是,如果索引支持datetime值,为什么不希望它正确存储并可以作为日期时间进行排序?

1 个答案:

答案 0 :(得分:6)

您可以,但需要使用其他过滤器将其转换为日期。

filter {
  date {
    match => [ "timestamp", ISO8601 ]
  }
}

通常的用法是以这种方式设置@timestamp字段。但是,如果你想将它做到另一个领域并单独留下@timestamp

filter {
  date {
    match  => [ "timestamp", ISO8601 ]
    target => "target_timestamp"
  }
}

这将为您提供一个名为target_timestamp的字段,该字段将包含您正在寻找的ElasticSearch数据类型。