Prometheus on group_left用法
时间: 2024-01-12 22:17:37 浏览: 145
prometheus_wireguard_exporter:用Rust编写的用于WireGuard的Prometheus出口商
在Prometheus中,group_left操作符用于在一个表达式中进行向左分组。它的语法如下:
```
<metric_expression> [group_left <label_list>] <aggregation_operator> (<aggregation_expression>)
```
其中,`<metric_expression>`是一个Prometheus表达式,用于选择要聚合的指标,`<label_list>`是一个或多个标签,用于指定要进行分组的标签键,`<aggregation_operator>`是一个聚合操作符,如sum、avg等,`<aggregation_expression>`是一个聚合表达式,用于计算聚合值。
使用group_left操作符时,表达式中的每个数据点都将以其标签的值作为键进行分组,并且在计算聚合值时,只有那些具有相同标签值的数据点会被聚合在一起。
例如,假设我们有以下指标:
```
http_requests_total{method="GET", handler="/api/foo"} 50
http_requests_total{method="POST", handler="/api/foo"} 20
http_requests_total{method="GET", handler="/api/bar"} 30
http_requests_total{method="POST", handler="/api/bar"} 10
```
如果我们想要按`method`标签对请求进行分组并计算每种`method`的总请求数,可以使用以下表达式:
```
sum(http_requests_total) by (method)
```
这将返回以下结果:
```
{method="GET"} 80
{method="POST"} 30
```
但是,如果我们想要基于`handler`标签对请求进行分组,并计算每个`handler`中每种`method`的总请求数,我们可以使用group_left操作符,如下所示:
```
sum(http_requests_total) by (handler) group_left(method) sum without(handler, method)(http_requests_total)
```
这将返回以下结果:
```
{handler="/api/foo", method="GET"} 50
{handler="/api/foo", method="POST"} 20
{handler="/api/bar", method="GET"} 30
{handler="/api/bar", method="POST"} 10
```
可以看到,使用group_left操作符,我们得到了按`handler`标签分组的结果,并在每个`handler`中为每种`method`计算了总请求数。
阅读全文