????????需求,日志收集的時候,時間格式是國際標準時間格式。形如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
?