Logstash 添加日期类型的字段

问题描述 投票:0回答:2

我的日志包含以下格式的时间:

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
类型。

我做错了什么?

elasticsearch logstash logstash-grok
2个回答
0
投票

在创建 Elasticsearch 索引之前,您需要创建一个将应用于新索引的模板。

PUT _template/template_name
{
  "index_patterns": ["indices_name*"],
  "mappings" : {
      "dynamic_templates" : [
      ],
      "properties" : {
        "mytime" : {
          "format" : "the format",
          "type" : "date",
          "doc_values" : true
        }
      }
    }
}

0
投票

如上所述,如果您尚未创建映射,elasticsearch 会创建一个 动态映射 并将它们自动索引为关键字或其他类型。 这是来源:https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-mapping.html

如果您已经有另一个映射,并且创建了不适合当前索引的新文档,并且启用了动态映射,它仍然会动态映射它们。

你应该做的是创建一个映射并告诉elasticsearch你想要如何映射你的字段。这称为“显式映射”。 这是来源:https://www.elastic.co/guide/en/elasticsearch/reference/current/explicit-mapping.html 如果你只有一个索引并想映射它,你可以直接设置显式映射。

如果您有 1 个或多个相似索引并希望显式映射它们,我建议使用

索引模板

您可以在 Kibana 中的
    堆栈管理
  • 下找到它们,然后在左侧的索引管理部分找到它们。 或者您可以使用 Kibana Dev Tools 或类似的 Postman 发送您的模板。
  • 如果您有现有索引并希望使用显式映射来映射它们,我建议使用
Alias

,特别是如果您不想丢失旧索引中的数据。 在此版本中:

为 OLD_INDEX 创建别名 MYALIAS
  • 使用 NEW_INDEX 创建索引模板
  • 使用 Kibana 中的开发工具重新索引 OLD_INDEX -> NEW_INDEX)
  • 现在您有两个索引。
  • 将您的 MYALIAS 设置为 NEW_INDEX 即可完成。
© www.soinside.com 2019 - 2024. All rights reserved.