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

使用SumoLogic聚合长时间范围Counter指标值的技术问题

问题背景

我有一个Counter类型的指标workflow_completed,用于统计已完成的工作流数量,需要展示选定时间范围内的总完成数。该应用通过Kubernetes部署在多个区域:

  • 执行查询metric=workflow_completed workflow_type=ShopWorkflow后,max和latest列的数值总和为27,这正是我需要的结果。
  • 但执行查询metric=workflow_completed workflow_type=ShopWorkflow | sum by workflow_type时,得到的结果不符合预期。
  • 推测问题与自动量化有关:手动添加quantize to 14d using max(对应14天查询范围)可得到正确结果,但无法硬编码时间范围以适配用户的动态时间选择需求。

疑问

  1. 为何使用sum操作会得到当前的结果?
  2. 如何修改查询以获取max或latest列数值的实际总和?

解答

1. sum操作结果不符的原因

Counter是单调递增的指标,监控系统的自动量化会根据你选的时间范围,把数据拆成多个小时间窗口(比如按分钟、小时分桶)。直接用sum by workflow_type时,sum是对每个窗口内所有实例的指标值求和,再把所有窗口的结果累加——但Counter是持续上涨的,每个窗口的数值都比前一个高,这样就会重复计算,结果自然远大于实际的总完成数。

而你手动加quantize to 14d using max,是把整个查询时间范围当成一个窗口,取每个实例在这个窗口内的最大值(也就是该实例最终的Counter值),之后sum这些最大值就得到了正确的27。但自动量化下的sum没有做这个“先取全局极值再求和”的步骤,所以结果不对。

2. 适配动态时间范围的查询修改

核心是先拿到每个实例在用户选定时间范围内的max或latest值,再对这些值求和,不需要硬编码时间范围。具体语法看你用的监控系统,举几个通用的写法:

写法一(按实例标签聚合极值后求和)

metric=workflow_completed workflow_type=ShopWorkflow | max by instance | sum by workflow_type

或者用latest(Counter只增不减,latest和max结果一致):

metric=workflow_completed workflow_type=ShopWorkflow | latest by instance | sum by workflow_type

注意把instance换成你实际用来区分不同区域/部署实例的标签(比如region、pod)。先通过max by instance拿到每个实例的最终Counter值,再sum这些值就得到总完成数,时间范围会自动跟随用户的选择。

写法二(PromQL风格,用动态范围变量)

如果是Prometheus类的监控系统,可以用:

sum(max_over_time(workflow_completed{workflow_type="ShopWorkflow"}[$__range]))

$__range是系统内置的动态变量,会自动替换成用户选择的时间长度,这样就实现了动态适配。


内容的提问来源于stack exchange,提问作者satnam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:21:07