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