做為一位優(yōu)秀的技術人員,往往能通過對數(shù)據(jù)的最大化利用來產生更多價值。而Prometheus的監(jiān)控數(shù)據(jù)則是可以為我們所用的重要數(shù)據(jù),它并不只能用于日常的監(jiān)控和告警使用,也可以用于數(shù)據(jù)分析、成本管理等企業(yè)需求。
在這種場景下,需要我們從Prometheus去獲取相關的數(shù)據(jù),并對其進行處理加工。關于數(shù)據(jù)的獲取方法,通常會使用Prometheus提供的API來操作,本文將會對此進行講解介紹。
01—API格式
目前,Prometheus API 的穩(wěn)定版本為V1,針對該API的訪問路徑為 /api/v1。API支持的請求模式有GET和POST兩種,當正常響應時,會返回2xx的狀態(tài)碼。 反之,當API調用失敗時,則可能返回以下幾種常見的錯誤提示碼:
400 Bad Request 參數(shù)丟失或不正確時出現(xiàn)。 422 Unprocessable Entity 當表達無法被執(zhí)行時。 503 Service Unavailiable 查詢超時或中止時。在功能上,Prometheus API 提供了豐富的接口類型,包括表達式查詢、元數(shù)據(jù)查詢、配置查詢、規(guī)則查詢等多個功能,甚至還有清理數(shù)據(jù)的接口。 當API正常響應后,將返回如下的Json數(shù)據(jù)格式。
{
"status":"success"|"error",
"data":,
//Onlysetifstatusis"error".Thedatafieldmaystillhold
//additionaldata.
"errorType":"",
"error":"",
//Onlyiftherewerewarningswhileexecutingtherequest.
//Therewillstillbedatainthedatafield.
"warnings":[""]
}
02—
API調用
下面,我們將以兩個樣例來演示關于API的調用,方便大家理解掌握。
即時查詢
說明:該接口屬于表達式查詢,將根據(jù)表達式返回單個時間點的數(shù)據(jù)。
GET/api/v1/query POST/api/v1/query
該接口可使用如下參數(shù)進行查詢,其中time為需要獲取值的時間戳,如果不填則默認返回最新的值 。
query=
time=
timeout=
示例:
獲取實例"192.168.214.108"的node_load5值。
請求的參數(shù)如下:
curlhttp://localhost:9090/api/v1/query?query=node_load5{instance="192.168.214.108:9100"}
返回數(shù)據(jù):
status 字段為success,表明請求成功;data字段包括了數(shù)據(jù)的相關參數(shù),其中value為對應的時間戳和數(shù)據(jù)值 ,也即是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"#數(shù)據(jù)值
]
}
]
}
}
2. 范圍查詢
說明:接口將根據(jù)表達式,返回指定時間范圍內的數(shù)據(jù)。
GET/api/v1/query_range POST/api/v1/query_range
該接口支持如下參數(shù)查詢:
query=
start=
end=
step=
timeout=
示例:
獲取實例"192.168.214.108"在某段時間內node_load5的所有值。
請求的參數(shù)如下 :
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
返回數(shù)據(jù) :
以下示例為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—獲取數(shù)據(jù)
上面的curl訪問方式更多是用于測試,在實際應用中,我們通常會用代碼的方式來獲取數(shù)據(jù)并進行處理。
此處以Python為例,演示關于代碼調用接口的應用方法。(PS:這里需要具備一點Python編程基礎)
安裝requests庫,用于url訪問。
$pipinstallrequests
2. 編寫python腳本test_api.py。
#-*-coding:utf-8-*- importrequests #定義參數(shù) url='http://192.168.214.108:9090' query_api='/api/v1/query' params='query=node_load5{instance="192.168.214.108:9100"}' #訪問prometheusAPI獲取數(shù)據(jù) 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('無法獲取有效數(shù)據(jù)')
腳本運行結果:
$pythontest_api.py 服務器192.168.214.108的node_load5值為0.01
結語:
本文僅展示了Prometheus API的簡單應用,更多的接口使用可參考官方文獻。
審核編輯:湯梓紅
-
API
+關注
關注
2文章
2462瀏覽量
66972 -
Prometheus
+關注
關注
0文章
36瀏覽量
2072
原文標題:Prometheus API 使用介紹
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
Prometheus的架構原理從“監(jiān)控”談起
Prometheus的基本原理與開發(fā)指南
prometheus做監(jiān)控服務的整個流程介紹
使用Thanos+Prometheus+Grafana構建監(jiān)控系統(tǒng)
監(jiān)控神器:Prometheus
prometheus下載安裝教程
Prometheus存儲引擎簡析
基于kube-prometheus的大數(shù)據(jù)平臺監(jiān)控系統(tǒng)設計
基于Prometheus開源的完整監(jiān)控解決方案
從零入門Prometheus:構建企業(yè)級監(jiān)控與報警系統(tǒng)的最佳實踐指南
詳解Prometheus的數(shù)據(jù)類型
Prometheus API使用介紹
評論