Monitoring 普罗米修斯:基于另一个度量的筛选查询

Monitoring 普罗米修斯:基于另一个度量的筛选查询,monitoring,prometheus,grafana,Monitoring,Prometheus,Grafana,假设我在普罗米修斯有两个指标,两个计数器: requests\u processed\u total 请求\u失败\u总数 它们都有一个匹配的服务标签。例如: requests_processed_total{service="news"} 1097 requests_processed_total{service="store"} 487 requests_failed_total{service="news"} 23 reque

假设我在普罗米修斯有两个指标,两个计数器:

  • requests\u processed\u total
  • 请求\u失败\u总数
它们都有一个匹配的
服务
标签。例如:

requests_processed_total{service="news"} 1097
requests_processed_total{service="store"} 487
requests_failed_total{service="news"} 23
requests_failed_total{service="store"} 89
如何查询
请求\u失败\u总数
,但仅查询其
请求\u总数>1000的服务

我期待着以下回应:

requests_failed_total{service="news"} 23

# Note that the "store" service is excluded
您可以使用来执行此操作

以下命令将查找请求_processed _total>1000的服务:

curl --silent --user USER:PASS --globoff --request GET "https://PROMETHEUS-SERVER/query?query=request_processed_total>1000" | jq --raw-output '.data.result[].metric.service'
以下命令将显示给定服务的请求\u失败\u总数:

curl --silent --user USER:PASS --globoff --request GET "https://PROMETHEUS-SERVER/query?query=request_failed_total{service=\"SERVICE\"}" | jq --raw-output '.data.result[].value[1]'
因此,如果你两者兼得,你就会得到你想要的:

for s in $(curl --silent --user USER:PASS --globoff --request GET "https://PROMETHEUS-SERVER/query?query=request_processed_total>1000" | jq --raw-output '.data.result[].metric.service')
do
    curl --silent --user USER:PASS --globoff --request GET "https://PROMETHEUS-SERVER/query?query=request_failed_total{service=\"$s\"}" | jq --raw-output '.data.result[] | .metric.service + " " + .value[1]'
done
您可以使用来执行此操作

以下命令将查找请求_processed _total>1000的服务:

curl --silent --user USER:PASS --globoff --request GET "https://PROMETHEUS-SERVER/query?query=request_processed_total>1000" | jq --raw-output '.data.result[].metric.service'
以下命令将显示给定服务的请求\u失败\u总数:

curl --silent --user USER:PASS --globoff --request GET "https://PROMETHEUS-SERVER/query?query=request_failed_total{service=\"SERVICE\"}" | jq --raw-output '.data.result[].value[1]'
因此,如果你两者兼得,你就会得到你想要的:

for s in $(curl --silent --user USER:PASS --globoff --request GET "https://PROMETHEUS-SERVER/query?query=request_processed_total>1000" | jq --raw-output '.data.result[].metric.service')
do
    curl --silent --user USER:PASS --globoff --request GET "https://PROMETHEUS-SERVER/query?query=request_failed_total{service=\"$s\"}" | jq --raw-output '.data.result[] | .metric.service + " " + .value[1]'
done

如果您正在使用Grafana,您可以执行以下操作:

Name        = service
Type        = Query

Data source = Prometheus
Query       = query_result(request_processed_total>5)
Regex       = /service="(.*)"/
(1) 创建仪表板

(2) 单击仪表板设置>变量>新建

(3) 创建具有以下内容的变量:

Name        = service
Type        = Query

Data source = Prometheus
Query       = query_result(request_processed_total>5)
Regex       = /service="(.*)"/

(4) 使用“service”变量在任何面板中显示“requests\u failed\u total”指标(您也可以使用“repeat for”Grafana功能。

如果您使用Grafana,您可以执行以下操作:

Name        = service
Type        = Query

Data source = Prometheus
Query       = query_result(request_processed_total>5)
Regex       = /service="(.*)"/
(1) 创建仪表板

(2) 单击仪表板设置>变量>新建

(3) 创建具有以下内容的变量:

Name        = service
Type        = Query

Data source = Prometheus
Query       = query_result(request_processed_total>5)
Regex       = /service="(.*)"/

(4) 使用“service”变量在任何面板中显示“requests\u failed\u total”指标(您也可以使用“repeat for”Grafana功能。

我想这可能是一个解决方案,但我不能使用它有两个原因:1.它将发出大量请求(许多不同的标签值)2.我使用grafana来执行请求。你没有提到grafana。我现在使用grafana添加了另一个答案。我想这可能是一个解决方案,但我不能使用它,原因有两个:1.它会发出很多请求(很多不同的标签值)2.我正在使用grafana来执行请求。你没有提到grafana。我现在使用grafana添加了另一个答案。很好,这样就可以了!我希望prometheus有一个内置语法来处理这个问题。很好,这样就可以了!我希望prometheus有一个内置语法来处理这个问题。