ES 如何将国际标准时间格式进行格式化与调整时区

2023-12-13 15:34:26

????????需求,日志收集的时候,时间格式是国际标准时间格式。形如yyyy-MM-dd'T'HH:mm:ss.SSS。 (2023-12-05T02:45:50.282Z)这个时区也不对,那如何将此类型的时间,进行格式化呢?

????????本篇文章体统一个案例,可以格式化各种类型的时间,已经调整到各个时区。

先看效果

?如何做到?

????????这里使用了es的 pipeline 来转换数据。因为日志是beat收集的,如果使用logstash收集日志,则可以在logstash上进行修改。这里并不需要引入新的技术,已经引入更多的资源开销。实际上logstash的资源开销还是很大的。固这里使用?pipeline 的方式。

添加一个 pipeline 管道

PUT _ingest/pipeline/angus_test_pipeline
{
  "description": "日期格式化示例",
  "processors": [
    {
      # 用到管道的时间处理
      "date": {
        # 要转换的字段。
        "field": "crawler_time",
        # 转换后的字段,这里是可以将字段转到另外一个字段上,也可以转回当前字段。
        "target_field": "crawler_time",
        # 注意这里是输入时间的格式,可以填多个。因为是标准时间,所以指定了ISO8601。这里一定要知道自己输入的时间格式,然后配置到这里。
        "formats": [
          "ISO8601"
        ],
        # 这里是输出字段的时间格式。然后会进行格式化。
        "output_format": "yyyy-MM-dd HH:mm:ss",
        # 如果想要调整时区,在这里修正时区。注意这是输出时间的时区。
        "timezone": "Asia/Shanghai"
      }
    }
  ]
}

创建索引,指定默认的管道

这里只用了最见到的配置,为了测试好演示。其它配置都是默认的。

PUT angus_temp
{
  "mappings": {
    "properties": {
      "crawler_time": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss"
      }
    }
  },
  "settings": {
    "index": {
      "default_pipeline": "angus_test_pipeline"
    }
  }
}

添加一条时间测试

POST angus_temp/_doc/1
{
  "crawler_time":"2023-12-05T02:45:50.282Z"
}

验证结果

GET angus_temp/_search

?

文章来源:https://blog.csdn.net/star1210644725/article/details/134892991
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。