如何在Kibana(Elastic)中过滤夜间时段统计工作时间异常数
在Kibana中过滤多日数据的工作时段(05:00-21:00)
针对多日场景下过滤夜间时段(00:00-05:00)、仅保留工作时段数据的需求,有两种高效实现方式:
方法一:创建脚本字段后过滤
- 进入Discover页面,打开对应索引模式的字段管理
- 新增脚本字段,命名为
is_work_hour - 填入Painless脚本(替换
@timestamp为你的实际时间字段):
LocalDateTime dt = doc['@timestamp'].value.toLocalDateTime(); int hour = dt.getHour(); return hour >= 5 && hour <= 21;
- 保存字段后,回到Discover添加过滤器:
is_work_hour: true,即可过滤所有日期的工作时段数据
方法二:直接使用脚本过滤器(无需预创建字段)
在Discover的搜索栏中直接输入以下Lucene脚本查询,执行后即可生效:
{ "script": { "script": { "source": "doc['@timestamp'].value.toLocalDateTime().getHour() >=5 && doc['@timestamp'].value.toLocalDateTime().getHour() <=21", "lang": "painless" } } }
时区适配提示
如果需要基于本地时区而非UTC判断时段,修改脚本为(以北京时间为例):
ZonedDateTime zdt = doc['@timestamp'].value.atZone(ZoneId.of('Asia/Shanghai')); int hour = zdt.getHour(); return hour >=5 && hour <=21;
替换Asia/Shanghai为你的目标时区ID即可。
内容的提问来源于stack exchange,提问作者Nux
相关产品推荐
相关产品推荐

