做為一位優秀的技術人員,往往能通過對數據的最大化利用來產生更多價值。而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文章
2368瀏覽量
66753 -
Prometheus
+關注
關注
0文章
36瀏覽量
2054
原文標題:Prometheus API 使用介紹
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
Prometheus的架構原理從“監控”談起
Prometheus的基本原理與開發指南
prometheus做監控服務的整個流程介紹
使用Thanos+Prometheus+Grafana構建監控系統
監控神器:Prometheus
prometheus下載安裝教程
Prometheus存儲引擎簡析
基于kube-prometheus的大數據平臺監控系統設計
基于Prometheus開源的完整監控解決方案
從零入門Prometheus:構建企業級監控與報警系統的最佳實踐指南
Prometheus API使用介紹
評論