我有一个场景,Logstash 使用 grok 将消息拆分为不同的字段。其中一个字段是 message_date 字段,该字段被提取并发送到 elasticsearch。
现在 Elasticsearch/Kibana 中的类型是字符串而不是日期。索引映射正在设置“动态”:true。
消息中的字符串看起来像这样 yyyy-MM-dd HH:mm:ss,SSS 表示日期,而 grok 过滤器是
格洛克{ 匹配=> {“消息”=> ['%{TIMESTAMP_ISO8601:message_date} %{GREEDYDATA:egMessage}'] } }
我需要找到一种方法将 Elasticsearch 中的类型更改为字符串或 Logstash 中的最后一种情况。
默认情况下,Elasticsearch 端启用日期检测。 自动识别的默认模式是
"dynamic_date_formats": [ "strict_date_optional_time","yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"]
您现在有两个选择:A.您可以修改 Logstash 配置,将日期值转换为受支持的格式之一
B.您可以在创建索引时修改
dynamic_date_formats
以包含您的特定日期格式:
PUT <your-index>
{
"mappings": {
"dynamic_date_formats": [
"strict_date_optional_time",
"yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z",
"yyyy-MM-dd HH:mm:ss,SSS"
]
}
}
最后一个日期模式将识别您的日期格式,并且将创建一个 date
字段,而不是
text
一个