ES 如何将国际标准时间格式进行格式化与调整时区
  oGEad7UlSFFQ 2023年12月23日 15 0


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

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

先看效果

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

 如何做到?

        这里使用了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

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

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月23日 0

暂无评论

推荐阅读
oGEad7UlSFFQ