influxdb - 总和小于 InfluxDB 测量中标签的总和?
问题描述
或者我做错了什么。我有一项服务可以计算它收到的请求。请求具有平台、执行它们的客户端应用程序的版本以及其他标签。当服务重新启动时(在更新时很少发生这种情况,指标会被重置)。
因此,我想计算最近时间范围内来自每个平台的查询百分比,并执行以下操作:
SELECT SUM("received") as "received"
FROM (
SELECT NON_NEGATIVE_DIFFERENCE(MAX("received")) as "received"
FROM "http_metrics"
WHERE time >= now() - 4h GROUP BY time(1s)
) GROUP BY "platform";
返回:
...
tags: platform=ios
time received
---- --------
1970-01-01T00:00:00Z 581
tags: platform=unknown
time received
---- --------
1970-01-01T00:00:00Z 12310
tags: platform=web
time received
---- --------
1970-01-01T00:00:00Z 6196
在不分组的情况下做同样的事情:
SELECT SUM("received") as "received"
FROM (
SELECT NON_NEGATIVE_DIFFERENCE(MAX("received")) as "received"
FROM "http_metrics"
WHERE time >= now() - 4h GROUP BY time(1s)
);
返回:
time received
---- --------
1970-01-01T00:00:00Z 8274
这显然是不正确的,因为“未知”平台无法接收比所有请求更多的请求。但我什至不知道哪个是不正确的,完全的还是按平台的,或者两者兼而有之?
如何正确计算请求的总数和按平台的总和?
解决方案
好的,所以问题是,由于我的测量有其他标签,例如服务器和应用程序版本,以及每个标签的单独计数器,所以它们都变得交错,可以在图表上看到,这应该是平滑和累积的,但是非常尖锐:
但是当我们添加GROUP BY *
SELECT "received" FROM "http_metrics" WHERE $timeFilter GROUP BY *;
它分成许多单独的平滑系列:
现在,这是可区分的,我们可以从中创建子查询来聚合。
全部的:
SELECT SUM("received") as "received" FROM (
SELECT NON_NEGATIVE_DIFFERENCE(MAX("received")) as "received"
FROM "http_metrics"
WHERE time >= now() - 6h
GROUP BY time(1s), *
) WHERE time >= now() - 6h;
time received
---- --------
2018-07-17T01:07:46.184292033Z 1367
分组:
SELECT SUM("received") as "received" FROM (
SELECT NON_NEGATIVE_DIFFERENCE(MAX("received")) as "received"
FROM "http_metrics"
WHERE time >= now() - 6h
GROUP BY time(1s), *
) WHERE time >= now() - 6h
GROUP BY "platform";
... I'm not going to bore you with response, but sum matches total sum.
所以,我猜道德故事应该是:每次你想区分有标签的计数器时,你需要GROUP BY *
推荐阅读
- javascript - 切换元素的可见性
- vue.js - 在 bootstrap-vue 模态(b-modal)int 测试中找不到按钮
- centos - Tex 现场安装
- oauth-2.0 - [OAuth][Keycloak] 尝试使用 refresh_token 时,invalid_grant 会话不活动
- php - 未设置经过身份验证的用户的会话
- r - 添加带有纯斜体字体的文本以进行绘图
- blockchain - Geth (go-ethereum) 在挖矿期间使用 100% CPU,即使指定了 1 个线程
- .net - 测试 TCP 端口是否在未连接的情况下打开
- amazon-web-services - 数组中的 AWS 控制台搜索
- c# - 正则表达式匹配和替换整个单词或部分单词