[英]Prometheus: filter query based on another metric
假設我在普羅米修斯中有兩個指標,兩個計數器:
requests_processed_total
requests_failed_total
他們都有匹配service
label。示例:
requests_processed_total{service="news"} 1097
requests_processed_total{service="store"} 487
requests_failed_total{service="news"} 23
requests_failed_total{service="store"} 89
如何查詢requests_failed_total
,但僅限於request_processed_total > 1000
的服務。
我期待以下回應:
requests_failed_total{service="news"} 23
# Note that the "store" service is excluded
requests_failed_total and on(service) requests_processed_total > 1000
https://prometheus.io/docs/prometheus/latest/querying/operators/#logical-set-binary-operators https://prometheus.io/docs/prometheus/latest/querying/operators/#one-to-one -向量匹配
如果您使用的是 Grafana,您可以執行以下操作:
(1) 創建儀表板
(2) 單擊儀表板設置 > 變量 > 新建
(3) 使用以下內容創建一個變量:
Name = service
Type = Query
Data source = Prometheus
Query = query_result(request_processed_total>5)
Regex = /service="(.*)"/
(4) 使用“service”變量在任何面板中顯示“requests_failed_total”指標(您也可以使用“repeat for”Grafana 功能。
您可以使用HTTP API來執行此操作。
以下命令將查找 request_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'
以下命令將顯示給定服務的 requests_failed_total:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.