文件节拍日期字段映射为类型关键字



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"}

因此,有一个字段logTimestampISO 8601时间格式记录。 问题是这个字段被映射为Elasticsearch文件节拍索引中的关键字

"logTimestamp": {
"type": "keyword",
"ignore_above": 1024
},

另一方面,如果我在同一个 Elasticsearch 实例中索引一个类似的文档,但索引不同,例如

POST /new_index/_doc/
{
"message": "hello world",
"logTimestamp":"2019-11-29T16:39:43.027Z"
}

映射是

"logTimestamp": {
"type": "date"
},

根据此处和此处的文档,默认情况下,如果用strict_date_optional_time格式化,Elastic应该会检测到日期。strict_date_optional_time被描述为

通用 ISO 日期时间解析器,其中日期是必需的,时间是必需的 是可选的。

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

为什么在Filebeat的情况下,logTimestamp被保存为关键字?有什么想法吗?

我正在使用Filbeat 7.2.1,Elasticsearch 7.2.1。 此外,还使用默认的字段.yml

我刚刚发现默认情况下,date_detection对 filebeat 索引是禁用的(Filebeat 版本 7.2.1(。 这可以在这里看到

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

看起来不能被覆盖。

解决方法是使用实验性功能append_fields(至少在撰写本文时是实验性的。请参阅此处了解更多信息。并将以下内容添加到 filebeat.yml 配置中

setup.template.overwrite: true
setup.template.append_fields:
- name: logTimestamp
type: date

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

最新更新