如何使用Google MQL实现工作时段内的周/月度统计?
如何用Google MQL实现工作时段内的周/月度统计
要实现排除夜间的工作时段统计,同时结合周/月度时间窗口,需要通过时间字段过滤替代within(避免被右上角时间选择器覆盖),再配合window函数分组,具体方案如下:
核心思路
- 右上角时间选择器优先级高于查询内的
within,因此直接用filter筛选数据的小时段来限定工作时间 - 先过滤出工作时段的数据,再按周/月窗口做聚合统计
- 注意时区转换,确保小时判断匹配业务所在时区(而非默认UTC)
具体查询示例
1. 基础版(UTC时区,工作时段7:00-19:00)
fetch k8s_container::'kubernetes.io/container/cpu/request_utilization' | filter resource.container_name == 'xxx' // 过滤UTC时间7:00-19:00的工作时段数据 | filter hour(timestamp()) >= 7 && hour(timestamp()) < 19 // 按周窗口聚合95分位值 | group_by window(1w), .percentile(95)
2. 时区转换版(以东八区为例,工作时段7:00-19:00)
如果业务时区是东八区(UTC+8),需先把时间戳转成目标时区再提取小时:
fetch k8s_container::'kubernetes.io/container/cpu/request_utilization' | filter resource.container_name == 'xxx' // 将UTC时间戳转换为东八区时间,提取小时后过滤工作时段 | filter hour(shift_timestamp(timestamp(), "UTC+8")) >=7 && hour(shift_timestamp(timestamp(), "UTC+8")) <19 // 按周窗口聚合95分位值 | group_by window(1w), .percentile(95)
3. 月度统计调整
把window(1w)替换为window(1mo)即可实现月度统计:
fetch k8s_container::'kubernetes.io/container/cpu/request_utilization' | filter resource.container_name == 'xxx' | filter hour(shift_timestamp(timestamp(), "UTC+8")) >=7 && hour(shift_timestamp(timestamp(), "UTC+8")) <19 | group_by window(1mo), .percentile(95)
扩展说明
- 可根据实际需求调整工作时段的小时范围(比如改为8:00-20:00)
- 如果需要排除周末,可额外添加工作日过滤:
// 过滤周一到周五(1=周一,5=周五) | filter day_of_week(shift_timestamp(timestamp(), "UTC+8")) >=1 && day_of_week(shift_timestamp(timestamp(), "UTC+8")) <=5
内容的提问来源于stack exchange,提问作者lpkej
相关产品推荐
相关产品推荐

