如何用OpenSearch Data Prepper将Unix时间戳转为指定格式时间?
在OpenSearch Data Prepper中将秒级Unix时间戳转换为可读时间格式
要将日志中字符串类型的秒级Unix时间戳转换为dd/MMM/yyyy:HH:mm:ss格式,需要分两步处理:先将字符串转成数值类型的时间戳,再用date处理器格式化。以下是具体实现方案:
完整Pipeline配置示例
source: http: path: "/log/ingest" processor: # 第一步:将字符串类型的时间戳转为长整型 - convert: fields: - from: "customField" to: "customField_timestamp" # 生成中间字段,也可直接覆盖原字段 type: "long" # 第二步:将秒级时间戳格式化为目标格式 - date: from_time_received: false source: "customField_timestamp" destination: "formatted_time" # 存储格式化后时间的新字段 format: "dd/MMM/yyyy:HH:mm:ss" time_zone: "UTC" # 根据实际需求调整时区,比如Asia/Shanghai # 可选:删除中间字段 - remove: entries: - key: "customField_timestamp" sink: - opensearch: hosts: ["https://localhost:9200"] index: "logs-index" username: "admin" password: "admin"
配置说明
- convert处理器:原始日志中
customField是字符串格式的时间戳,date处理器无法直接解析,因此需要先转换为长整型。如果不需要保留原字段,可将to的值设为customField直接覆盖。 - date处理器:
source指定待转换的数值型时间戳字段;destination定义格式化后时间的存储字段;format严格遵循JavaDateTimeFormatter的规则,这里设置为需求的dd/MMM/yyyy:HH:mm:ss;time_zone需根据业务场景设置对应时区,确保时间显示准确。
处理后日志示例
{ "ua": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/21.0 Chrome/110.0.5481.154 Safari/537.36", "customField": "1685959346", "key3": "test", "securityRule": "test|112122|super", "formatted_time": "06/Jun/2023:10:02:26" }
直接覆盖原字段的简化配置
如果希望直接替换原customField字段为格式化后的时间,可使用以下配置:
processor: - convert: fields: - from: "customField" to: "customField" type: "long" - date: from_time_received: false source: "customField" destination: "customField" format: "dd/MMM/yyyy:HH:mm:ss" time_zone: "UTC"
内容的提问来源于stack exchange,提问作者Youness CHETOUI
相关产品推荐
相关产品推荐

