映射为类型关键字的 Filebeat 日期字段
Filebeat date field mapped as type keyword
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"}
所以有一个字段logTimestamp以ISO 8601时间格式登录。
问题是这个字段被映射为 Elasticsearch filebeat index
中的关键字
"logTimestamp": {
"type": "keyword",
"ignore_above": 1024
},
另一方面,如果我在同一个 Elasticsearch 实例中索引一个相似的文档但索引不同,例如
POST /new_index/_doc/
{
"message": "hello world",
"logTimestamp":"2019-11-29T16:39:43.027Z"
}
映射是
"logTimestamp": {
"type": "date"
},
根据文档 here and here,默认情况下 Elastic 应该检测格式为 strict_date_optional_time 的日期。而 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 默认情况下禁用 filebeat 索引(Filebeat 版本 7.2.1)。
这个可以看here
var (
// Defaults used in the template
defaultDateDetection = false
...
看起来无法覆盖。
解决此问题的方法是使用实验性功能 append_fields(至少在撰写本文时是实验性的 post。参见 here 了解更多。)并将以下内容添加到 filebeat.yml 配置
setup.template.overwrite: true
setup.template.append_fields:
- name: logTimestamp
type: date
这将确保 logTimestamp 的映射是日期。
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"}
所以有一个字段logTimestamp以ISO 8601时间格式登录。 问题是这个字段被映射为 Elasticsearch filebeat index
中的关键字"logTimestamp": {
"type": "keyword",
"ignore_above": 1024
},
另一方面,如果我在同一个 Elasticsearch 实例中索引一个相似的文档但索引不同,例如
POST /new_index/_doc/
{
"message": "hello world",
"logTimestamp":"2019-11-29T16:39:43.027Z"
}
映射是
"logTimestamp": {
"type": "date"
},
根据文档 here and here,默认情况下 Elastic 应该检测格式为 strict_date_optional_time 的日期。而 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 默认情况下禁用 filebeat 索引(Filebeat 版本 7.2.1)。 这个可以看here
var (
// Defaults used in the template
defaultDateDetection = false
...
看起来无法覆盖。
解决此问题的方法是使用实验性功能 append_fields(至少在撰写本文时是实验性的 post。参见 here 了解更多。)并将以下内容添加到 filebeat.yml 配置
setup.template.overwrite: true
setup.template.append_fields:
- name: logTimestamp
type: date
这将确保 logTimestamp 的映射是日期。