[英]Prometheus query to calculate percentage from two metrics with different set of labels
我们有一个服务,它接受 HTTP 请求并使用响应中所有匹配的用户数据进行响应,并生成两个应该在 grafana 上以图形/图表形式提供的指标。 这里提到的指标 -
应用程序在不同数据中心区域收到的请求总数
application_requests_total{data_center_region_id=1} //200 application_requests_total{data_center_region_id=2} //100
对应用程序的每个请求都将尝试在响应指标中包含所有匹配的用户数据
application_response_total{user="user1, data_center_region_id=1} //100 application_response_total{user="user1, data_center_region_id=2} //100 application_response_total{user="user2, data_center_region_id=1} //50 application_response_total{user="user2, data_center_region_id =2} //100
快速观察指标
user
label 仅存在于响应指标application_response_total
data_center_region_id
是请求和响应指标中常见的 labelapplication_response_total
中。我需要找出用户级别的响应与特定数据中心区域中对应用程序的总请求数的百分比。
例如:根据上述数据,预期结果将是
对于 data_center_region_id=1
对于 data_center_region_id=2
我尝试了几个基于Prometheus 矢量匹配文档的查询,但无法达到预期的结果。 几个示例查询如下; 我不确定,但我想我搞砸了ON
/ IGNORING
和GROUP_LEFT
/ GROUP_RIGHT
键
sum(rate(application_response_total{data_center_region_id=~"$region"}[5m])) by (user, data_center_region_id) / on(user) group_left(data_center_region_id) sum(rate(application_requests_total{data_center_region_id=~"$region"}[5m])) by (user, data_center_region_id)
也参考了这里的问题,但没有什么对我有用。
请以超出预期的结果指导我;
此外,这是获得所需图表的唯一方法吗?
请注意,如果应用程序要为无限数量的用户提供服务,那么将user
放入度量标签可能是个坏主意。 这可能导致例如高基数问题。
至于原始问题,您需要在on(...)
修饰符中放置左侧和右侧系列的公共标签,以便 Prometheus 可以在/
运算符的两侧找到具有给定标签的系列对。 以下查询返回每个(用户、区域)的 rps 共享:
rate(application_response_total[5m])
/ on(data_center_region_id) group_left()
rate(application_requests_total[5m])
group_left()
修饰符指示 Prometheus 左侧可能包含具有相同data_center_region_id
label 值的多个系列。 在这种情况下,Prometheus 独立地将每个此类系列除以右侧具有匹配data_center_rrgion_id
label 值的系列。 结果系列将具有与左侧系列相同的标签集。 有关详细信息,请参阅这些文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.