Kibana 7.14日期格式:Epoch存储的日期能否在查询中显示为ISO格式
需求实现结论
完全可以实现该需求,无需修改Elasticsearch侧的写入配置,仅通过Kibana侧配置即可做到底层存储为Epoch格式、前端展示为ISO Date格式,且不影响正常的日期范围查询、过滤逻辑。
具体操作步骤
1. 前置校验:确认ES字段类型
首先确保存储Epoch值的字段在Elasticsearch中是date类型,而非数值类型。ES的date类型原生支持Epoch毫秒、Epoch秒、ISO格式等多种输入格式,内部会标准化存储时间值,写入时输入的Epoch格式不会限制后续的展示格式。
若当前字段为数值类型,需要先调整索引映射为date类型,可配置
format: epoch_millis(13位毫秒)或format: epoch_second(10位秒)适配你写入的Epoch格式。
2. 全局配置:Kibana索引模式字段格式调整
这是最推荐的方案,配置后所有Kibana页面(Discover、Dashboard、Canvas等)都会自动生效,无需修改任何查询语句:
- 打开Kibana侧边栏,进入「Stack Management」→「索引模式」,找到对应的业务索引模式
- 在字段列表中搜索目标日期字段,点击右侧的铅笔形状「编辑」按钮
- 「格式」下拉选项选择
Date类型 - 在「格式配置」的「模式」输入框中填入ISO格式模板:
yyyy-MM-dd'T'HH:mm:ss.SSSZ,可根据需求调整精度,比如不需要毫秒时可删除.SSS - 保存配置后刷新页面即可看到生效的ISO格式展示,查询过滤时既可以输入Epoch值也可以输入ISO格式值,都能正常匹配结果。
3. 临时适配:单次查询自定义展示格式
如果不需要全局生效,仅单次查询需要展示ISO格式,可通过Runtime Field临时定义字段:
GET /你的索引名/_search { "runtime_mappings": { "iso_date": { "type": "keyword", "script": "emit(doc['你的原日期字段名'].value.toInstant().toString())" } }, "fields": ["iso_date", "*"] }
上述查询返回结果中iso_date字段即为标准ISO格式的日期值。
预期效果示意图

内容的提问来源于stack exchange,提问作者Dinesh
相关产品推荐
相关产品推荐

