规则:
对于metrics1 和 metrics2,
为每一个metrics1的值, 找对应的在metrics2中匹配的值
One-to-one 1对1
method_code:http_errors:rate5m{method="get", code="500"} 24
method_code:http_errors:rate5m{method="get", code="404"} 30
method_code:http_errors:rate5m{method="put", code="501"} 3
method_code:http_errors:rate5m{method="post", code="500"} 6
method_code:http_errors:rate5m{method="post", code="404"} 21
method:http_requests:rate5m{method="get"} 600
method:http_requests:rate5m{method="del"} 34
method:http_requests:rate5m{method="post"} 120
对于查询
method_code:http_errors:rate5m{code="500"} / ignoring(code) method:http_requests:rate5m
忽略code值的不同,然后需要其他label意义对应
结果是
{method="get"} 0.04 // 24 / 600
{method="post"} 0.05 // 6 / 120
其实 method=“get” 有两对,如果是1-1,只会有一个结果。
Many-to-one one-to-Many 多对1,1对多
对于上面的数据,使用如下查询
method_code:http_errors:rate5m / ignoring(code) group_left method:http_requests:rate5m
结果是
{method="get", code="500"} 0.04 // 24 / 600
{method="get", code="404"} 0.05 // 30 / 600
{method="post", code="500"} 0.05 // 6 / 120
{method="post", code="404"} 0.175 // 21 / 120
And 操作符
metrics1 and metrics2 的结果是 对左边的每一个数据判断,如果在右边的metrics里,那么输出这个数据。
https://prometheus.io/docs/prometheus/latest/querying/operators/#vector-matching