做為一位優秀的技術人員,往往能通過對數據的最大化利用來產生更多價值。而Prometheus的監控數據則是可以為我們所用的重要數據,它并不只能用于日常的監控和告警使用,也可以用于數據分析、成本管理等企業需求。
在這種場景下,需要我們從Prometheus去獲取相關的數據,并對其進行處理加工。關于數據的獲取方法,通常會使用Prometheus提供的API來操作,本文將會對此進行講解介紹。
01—API格式
目前,Prometheus API 的穩定版本為V1,針對該API的訪問路徑為 /api/v1。API支持的請求模式有GET和POST兩種,當正常響應時,會返回2xx的狀態碼。 反之,當API調用失敗時,則可能返回以下幾種常見的錯誤提示碼:
400 Bad Request 參數丟失或不正確時出現。 422 Unprocessable Entity 當表達無法被執行時。 503 Service Unavailiable 查詢超時或中止時。在功能上,Prometheus API 提供了豐富的接口類型,包括表達式查詢、元數據查詢、配置查詢、規則查詢等多個功能,甚至還有清理數據的接口。 當API正常響應后,將返回如下的Json數據格式。
{ "status":"success"|"error", "data":, //Onlysetifstatusis"error".Thedatafieldmaystillhold //additionaldata. "errorType":"", "error":" ", //Onlyiftherewerewarningswhileexecutingtherequest. //Therewillstillbedatainthedatafield. "warnings":[" "] }
02—
API調用
下面,我們將以兩個樣例來演示關于API的調用,方便大家理解掌握。
即時查詢
說明:該接口屬于表達式查詢,將根據表達式返回單個時間點的數據。
GET/api/v1/query POST/api/v1/query
該接口可使用如下參數進行查詢,其中time為需要獲取值的時間戳,如果不填則默認返回最新的值 。
query=
time=
timeout=
示例:
獲取實例"192.168.214.108"的node_load5值。
請求的參數如下:
curlhttp://localhost:9090/api/v1/query?query=node_load5{instance="192.168.214.108:9100"}返回數據:
status 字段為success,表明請求成功;data字段包括了數據的相關參數,其中value為對應的時間戳和數據值 ,也即是node_load5的值。
{ "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_range POST/api/v1/query_range
該接口支持如下參數查詢:
query=
start=
end=
step=
timeout=
示例:
獲取實例"192.168.214.108"在某段時間內node_load5的所有值。
請求的參數如下 :
curlhttp://localhost:9090/api/v1/query_range?query=node_load5{instance="192.168.214.108:9100"}&start=2022-10-28T0210.000Z&end=2022-10-28T0200.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" ] ] } ] } }
03—獲取數據
上面的curl訪問方式更多是用于測試,在實際應用中,我們通常會用代碼的方式來獲取數據并進行處理。
此處以Python為例,演示關于代碼調用接口的應用方法。(PS:這里需要具備一點Python編程基礎)
安裝requests庫,用于url訪問。
$pipinstallrequests
2. 編寫python腳本test_api.py。
#-*-coding:utf-8-*- importrequests #定義參數 url='http://192.168.214.108:9090' query_api='/api/v1/query' params='query=node_load5{instance="192.168.214.108:9100"}' #訪問prometheusAPI獲取數據 res=requests.get(url+query_api,params) metrics=res.json().get("data").get("result") #判斷結果是否為空 ifmetrics: value=metrics[0].get('value')[1] print('服務器192.168.214.108的node_load5值為%s'%value) else: print('無法獲取有效數據')
腳本運行結果:
$pythontest_api.py 服務器192.168.214.108的node_load5值為0.01
結語:
本文僅展示了Prometheus API的簡單應用,更多的接口使用可參考官方文獻。
審核編輯:湯梓紅
-
API
+關注
關注
2文章
1553瀏覽量
63259 -
Prometheus
+關注
關注
0文章
28瀏覽量
1823
原文標題:Prometheus API 使用介紹
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
Prometheus的架構原理從“監控”談起

Stream API原理介紹
Prometheus的基本原理與開發指南

prometheus做監控服務的整個流程介紹
vc++ api函數 (Windows API大全)
使用Thanos+Prometheus+Grafana構建監控系統
監控神器:Prometheus
prometheus下載安裝教程

Prometheus存儲引擎簡析
基于kube-prometheus的大數據平臺監控系統設計
基于Prometheus開源的完整監控解決方案

從零入門Prometheus:構建企業級監控與報警系統的最佳實踐指南

評論