簡體   English   中英

Prometheus:根據另一個指標過濾查詢

[英]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

如果您使用的是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM