我有一些包含以下格式的时间的日志:20231030 09:41:20.179021
。我想在logstash中将这些日志解析为Date
类型。
这是我目前的过滤器
filter{
grok {
match => {
"message" => "%{YEAR:year}(?<month>\d{2})(?<day>\d{2}) %{TIME:log_time}"
}
}
mutate {
add_field => {
"mytime" => "%{year}-%{month}-%{day}T%{log_time}Z"
}
remove_field => ["day", "month", "year", "log_time"]
}
date {
match => ["mytime", "yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ", "ISO8601"]
timezone => "UTC"
target => "mytime"
}
}
字符串
但这似乎不起作用。虽然字段mytime
被添加,但它的类型不是Date
,而是Keyword
。
我做错了什么?
2条答案
按热度按时间whlutmcx1#
如前所述,如果您还没有创建Map,elasticsearch会创建一个Dynamic Mapping,并自动将它们作为关键字或其他类型进行索引。源代码如下:https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-mapping.html
如果您已经有了另一个Map,并且您创建了不适合当前索引的新文档,并且启用了动态Map,它仍然会动态Map它们。
你应该做的是创建一个Map,并告诉elasticsearch你想如何Map你的字段。这被称为显式Map。这里是源代码:https://www.elastic.co/guide/en/elasticsearch/reference/current/explicit-mapping.html
如果你只有一个索引并想Map它,你可以直接设置显式Map。
如果你有一个或多个类似的索引,并希望显式地Map它们,我建议使用索引模板。
如果您有一个现有的索引,并希望使用显式Map来Map它们,我建议使用索引,特别是如果您不想在旧索引中丢失数据。
在此版本中:
z6psavjg2#
在创建elasticsearch索引之前,您需要创建一个将应用于新索引的模板。
字符串