You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Kusto筛选每日18:00至次日6:00时段的SignInLogs日志

Kusto实现不限制具体日期、按每日固定时段筛选日志

你要实现的每日18:00到次日6:00的跨天时段筛选,不需要绑定具体日期值,直接提取时间戳的当日时间维度字段做判断即可,不需要写死年月日。

整小时精度最简写法

如果筛选精度只需要到整小时,直接用内置的hourofday()函数即可,写法如下:

SignInLogs
// 先限定查询的大时间范围,避免扫描全量历史数据提升查询效率,可根据需求自行调整范围
| where TimeGenerated between(ago(30d) .. now())
// 筛选每日18点(含)到次日6点(不含)的记录
| where hourofday(TimeGenerated) >= 18 or hourofday(TimeGenerated) < 6
  • hourofday()会返回时间戳对应当日的小时数值,取值范围为0-23的整数,返回值和年、月、日字段完全无关,正好匹配只按每日时间维度过滤的需求。
  • 跨天时段的判断逻辑拆成两部分:当日18点到24点的记录满足小时>=18,次日0点到6点的记录满足小时<6,两个条件满足任意一个即可。

精确到分/秒的通用写法

如果需要卡更细的时间粒度,比如要精确到分、秒,或者需要配置非整小时的时段(比如18:15到次日6:20),可以把时间戳转换成当日0点起累计的秒数再做阈值比对:

SignInLogs
| where TimeGenerated between(ago(30d) .. now())
// 计算当前时间是当日的第几秒
| extend dayTotalSeconds = datetime_part("hour", TimeGenerated)*3600 + datetime_part("minute", TimeGenerated)*60 + datetime_part("second", TimeGenerated)
// 18:00对应累计秒数为18*3600=64800,6:00对应累计秒数为6*3600=21600
| where dayTotalSeconds >= 64800 or dayTotalSeconds < 21600

注意:以上写法默认基于TimeGenerated字段自带的时区计算,如果你的日志存的是UTC时间,需要按本地时区筛选,可以先用datetime_utc_to_local()做时区转换,比如按北京时间计算就把判断部分改成hourofday(datetime_utc_to_local(TimeGenerated, "Asia/Shanghai"))。

内容的提问来源于stack exchange,提问作者Gill-Bates

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:45:51