三大例項帶你搞定 Prometheus API 使用

Linksla發表於2022-11-30

作為一位優秀的技術人員,往往能透過對資料的最大化利用來產生更多價值。而 Prometheus 的監控資料則是可以為我們所用的重要資料,它並不只能用於日常的監控和告警使用,也可以用於資料分析、成本管理等企業需求。

在這種場景下,需要我們從 Prometheus 去獲取相關的資料,並對其進行處理加工。關於資料的獲取方法,通常會使用 Prometheus 提供的 API 來操作,本文將會對此進行講解介紹。

1. 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 資料格式。
在功能上,Prometheus  API 提供了豐富的介面型別,包括 表示式查詢、後設資料查詢、配置查詢、規則查詢等多個功能,甚至還有清理資料的介面。
當API正常響應後,將返回如下的Json資料格式。

    
    {
    
      "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

    該介面可使用如下引數進行查詢,其中time為需要獲取值的時間戳,如果不填則預設返回最新的值 。

    • query= :Prometheus 表示式查詢字串。

    • time= :評估時間戳,可選引數。

    • timeout= :  查詢超時設定,可選引數,預設將使用-query.timeout的全域性引數。

    示例:

    獲取例項”192.168.214.108”的node_load5值。

    請求的引數如下:

    curl {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_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. 獲取資料

      上面的 curl 訪問方式更多是用於測試,在實際應用中,我們通常會用程式碼的方式來獲取資料並進行處理。
      此處以 Python 為例,演示關於程式碼呼叫介面的應用方法。(PS:這裡需要具備一點 Python 程式設計基礎)
      安裝 requests 庫,用於 url 訪問。

      $ 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

        結語

        本文僅展示了 Prometheus API 的簡單應用,更多的介面使用可參考官方文獻:。


        來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70013542/viewspace-2925848/,如需轉載,請註明出處,否則將追究法律責任。

        相關文章