0

如何计算 MQL 中两个 Stackdriver 指标之间的差异和比率?

这个问题有两个部分,但如果您能帮助我解决一个问题,我将不胜感激:

  1. 计算两个时间序列之间的差异
  2. 计算两个时间序列之间的比率。如果可能,附加组件:应该优雅地处理分母为 null 的情况。

我到目前为止,但它没有产生预期的结果(结果时间序列始终为零):

fetch global
| { t_0:
      metric 'custom.googleapis.com/http/server/requests/count'
      | filter
        (metric.service == 'service-a' && metric.uri =~ '/api/started')
      | align next_older(1m);
    t_1:
      metric 'custom.googleapis.com/http/server/requests/count'
      | filter
        (metric.service == 'service-a' && metric.uri =~ '/api/completed')
      | align next_older(1m)
  }
| outer_join 0
| div

显然,代码已被匿名化。我想要完成的是跟踪已启动和已完成的进程之间是否存在差异。

编辑/附加信息 2021-11-18

我使用projects.timeSeries v3 API进行进一步调试。显然,outer_join 操作假定两个时间序列之间的标签相同,但在我的示例中并非如此。

有谁知道,如何删除标签,所以我可以执行连接和聚合?

编辑/附加信息 2021-11-19

聚合现在可以正常工作,因为我设法使用map drop[...]maplet 删除了标签。

挑战确实是标签,因为这些标签是由 Micrometer 的 Spring Boot 实现生成的。由于这两个指标之间的标签不同,因此连接操作始终为空join,或者只有第二个时间序列outer_join

4

3 回答 3

1

正如我所看到的,您想知道进程开始时和完成时server_req _count之间的比率,并且您使用的align next_older(1m)可能会获取该期间的最新值。因此,当进程开始时,计数可能为零。因此,我建议您将aligner更改为 mean 或 max以在不同时间序列开始和完成的过程中获取 req_count。

align mean(1m)

有关执行比率查询的更多方法,请参阅文档:比率查询示例

于 2021-11-18T17:34:41.020 回答
0

在您自己的答案中使用map add / map drop运算符后,请确保使用outer_join 0,0which 将为您提供完整的外部连接。请注意,0,0参数 to 的outer_join意思是“如果缺少任何一个流的值,则替换零”。

在您的情况下,由于第一个流计算“已启动”任务,第二个流计算“已完成”任务,因此您可能会发现第一个指标的行数多于第二个指标的情况。如果要进行左连接操作,语法为outer_join _, 0. 后跟 0 的下划线表示“如果第一个流的值丢失,则不替换任何内容,但如果第二个流的值丢失,则替换零。”

于 2022-01-05T15:55:34.870 回答
0

这是我到目前为止得到的。现在聚合在标签被删除时起作用。当我知道更多时,我会更新这个例子。

fetch global
| { 
    t_0:
      metric 'custom.googleapis.com/http/server/requests/count'
      | filter
        (metric.service == 'service-a' && metric.uri =~ '/api/started')
      | every (1m)
      | map drop [resource.project_id, metric.status, metric.uri, metric.exception, metric.method, metric.service, metric.outcome]
    ; t_1:
      metric 'custom.googleapis.com/http/server/requests/count'
      | filter
        (metric.service == 'service-a' && metric.uri =~ '/api/completed')
      | every (1m)
      | map drop [resource.project_id, metric.status, metric.uri, metric.exception, metric.method, metric.service, metric.outcome]
  }
| within   d'2021/11/18-00:00:00', d'2021/11/18-15:15:00'
| outer_join 0
| value val(0)-val(1)
于 2021-11-19T10:24:30.697 回答