gpt4 book ai didi

elasticsearch - Filebeat日期字段映射为type关键字

转载 作者:行者123 更新时间:2023-12-03 02:34:39 28 4
gpt4 key购买 nike

Filebeat正在从文件读取日志,其中日志采用以下格式:

{"logTimestamp":"2019-11-29T16:39:43.027Z","@version":"1","message":"Hello world","logger_name":"se.lolotron.App","thread_name":"thread-1","level":"INFO","level_value":40000,"application":"my-app"}

因此,存在一个以 ISO 8601 时间格式记录的 logTimestamp 字段。
问题是该字段在Elasticsearch filebeat索引中被映射为关键字
"logTimestamp": {
"type": "keyword",
"ignore_above": 1024
},

另一方面,如果我在相同的Elasticsearch实例中索引相似的文档但索引不同,例如
POST /new_index/_doc/
{
"message": "hello world",
"logTimestamp":"2019-11-29T16:39:43.027Z"
}

映射是
"logTimestamp": {
"type": "date"
},

根据 herehere的文档,默认情况下,如果使用 strict_date_optional_time 进行格式化,则Elastic应该检测到日期。并且strict_date_optional_time被描述为

A generic ISO datetime parser where the date is mandatory and the time is optional.



我假设是ISO 8601,并认为我通过在上面的示例中将新文档索引到new_index证明了这一点。

为什么在Filebeat中将logTimestamp保存为关键字?有任何想法吗?

我正在使用Filbeat 7.2.1,Elasticsearch 7.2.1。
还使用默认的 fields.yml

最佳答案

我刚刚发现默认情况下,文件拍索引禁用了 date_detection (文件拍版本7.2.1)。
可以看到here

var (
// Defaults used in the template
defaultDateDetection = false
...


看起来好像不能被覆盖。

解决方法是使用实​​验性功能 append_fields (至少在撰写本文时为试验性。有关更多信息,请参见 here。),并将以下内容添加到filebeat.yml配置中
setup.template.overwrite: true
setup.template.append_fields:
- name: logTimestamp
type: date

这将确保logTimestamp的映射是日期。

关于elasticsearch - Filebeat日期字段映射为type关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59137618/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com