三大例項帶你搞定 Prometheus API 使用
作為一位優秀的技術人員,往往能透過對資料的最大化利用來產生更多價值。而 Prometheus 的監控資料則是可以為我們所用的重要資料,它並不只能用於日常的監控和告警使用,也可以用於資料分析、成本管理等企業需求。
在這種場景下,需要我們從 Prometheus 去獲取相關的資料,並對其進行處理加工。關於資料的獲取方法,通常會使用 Prometheus 提供的 API 來操作,本文將會對此進行講解介紹。
1. API格式
目前,Prometheus API 的穩定版本為V1,針對該 API 的訪問路徑為
/api/v1
。API支援的請求模式有 GET 和 POST 兩種,當正常響應時,會返回2xx的狀態碼。
400 Bad Request 引數丟失或不正確時出現。422 Unprocessable Entity 當表達無法被執行時。503 Service Unavailiable 查詢超時或中止時。
{
"status": "success" | "error",
"data": <data>,
// Only set if status is "error". The data field may still hold
// additional data.
"errorType": "<string>",
"error": "<string>",
// Only if there were warnings while executing the request.
// There will still be data in the data field.
"warnings": ["<string>"]
}
2. API呼叫
下面,我們將以兩個樣例來演示關於API的呼叫,方便大家理解掌握。
1. 即時查詢
說明:該介面屬於表示式查詢,將根據表示式返回單個時間點的資料。
GET /api/v1/queryPOST /api/v1/query
-
query= :Prometheus 表示式查詢字串。
-
time= :評估時間戳,可選引數。
-
timeout= : 查詢超時設定,可選引數,預設將使用-query.timeout的全域性引數。
示例:
獲取例項”192.168.214.108”的node_load5值。
請求的引數如下:
curl {instance="192.168.214.108:9100"}
{ "status": "success", "data": { "resultType": "vector", "result": [ { "metric": { "__name__": "node_load5", "instance": "192.168.214.108:9100", "job": "node" }, "value": [ 1666865246.993, # 時間戳 "0.04" # 資料值 ] } ] }}
2. 範圍查詢
說明:介面將根據表示式,返回指定時間範圍內的資料。
GET /api/v1/query_rangePOST /api/v1/query_range
該介面支援如下引數查詢:
-
query= :Prometheus 表示式查詢字串。
-
start= :開始時間戳。
-
end= :結束時間戳。
-
step= :查詢解析度步長。
-
timeout= :查詢超時設定,可選引數,預設將使用-query.timeout的全域性引數。
示例:
獲取例項”192.168.214.108”在某段時間內node_load5的所有值。
請求的引數如下 :
curl {instance="192.168.214.108:9100"}&start=2022-10-28T02:10:10.000Z&end=2022-10-28T02:13:00.000Z&step=60s
返回資料 :
以下示例為3分鐘範圍內的表示式返回值,查詢解析度為60秒,故返回三次值。
{ "status": "success", "data": { "resultType": "matrix", "result": [ { "metric": { "__name__": "node_load5", "instance": "192.168.214.108:9100", "job": "node" }, "values": [ [ 1666923010, "0.04" ], [ 1666923070, "0.04" ], [ 1666923130, "0.03" ] ] } ] }}
3. 獲取資料
$ pip install requests
編寫python指令碼
test_api.py
。
# -*- coding: utf-8 -*-
import requests
# 定義引數
url = 'http://192.168.214.108:9090'
query_api = '/api/v1/query'
params = 'query=node_load5{instance="192.168.214.108:9100"}'
# 訪問 prometheus API 獲取資料
res = requests. get(url + query_api, params)
metrics = res.json(). get( "data"). get( "result")
# 判斷結果是否為空
if metrics:
value = metrics[ 0]. get( 'value')[ 1]
print( '伺服器 192.168.214.108的node_load5值為 %s' % value)
else:
print( '無法獲取有效資料')
指令碼執行結果:
$ python test_api.py 伺服器 192.168.214.108的node_load5值為 0.01
結語
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70013542/viewspace-2925848/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Prometheus搞定微服務監控Prometheus微服務
- 用例項帶你深入理解Java記憶體模型Java記憶體模型
- 一文帶你搞定AOP切面
- css選擇器,帶例項CSS
- CSS 選擇器 - 帶例項CSS
- Linkerd 2.10(Step by Step)—4. 如何配置外部 Prometheus 例項Prometheus
- 一篇文章帶你瞭解CSS 分頁例項CSS
- Angular 使用 Injector API 人工獲取依賴注入的例項AngularAPI依賴注入
- msfvenom使用例項
- pinctrl使用例項
- expect使用例項
- 一篇文章帶你搞定HashTable
- 6個例項帶你解讀TinyVue 元件庫跨框架技術Vue元件框架
- tunna工具使用例項
- awk命令使用例項
- restorecon 命令使用例項REST
- Tee命令使用例項
- Thinkphp帶表情的評論回覆例項PHP
- Maven例項講解教程,從零開始學Maven,帶你快速入門!Maven
- cut命令的使用例項
- docker-compose 使用例項Docker
- C# IDispose使用例項C#
- 30分鐘帶你搞定Dokcer部署Kafka叢集Kafka
- 【專案實踐】手把手帶你搞定SSMSSM
- 使用Prometheus監控Linux系統各項指標PrometheusLinux指標
- 執行caffe自帶的mnist例項教程
- 【RabbitMQ】一文帶你搞定RabbitMQ延遲佇列MQ佇列
- Linux中printf命令使用例項Linux
- Memcached安裝與使用例項
- Composer 使用 JWT 生成 TOKEN 例項JWT
- iptables 常用規則使用例項
- shell script程式設計小結——附帶例項程式設計
- CSS 並不簡單–例項帶你領略實現SVG動畫的姿勢CSSSVG動畫
- 使用DDD和Spring HATEOAS構建一個MRP的API例項和原始碼 - elcaSpringAPI原始碼
- k8s透過api介面刪除例項K8SAPI
- 一篇文章帶你搞定 SpringBoot 整合 Swagger2Spring BootSwagger
- 帶你十天輕鬆搞定 Go 微服務系列(六)Go微服務
- 帶你十天輕鬆搞定 Go 微服務系列(七)Go微服務