可觀測監控 Prometheus 版提供了HTTP API地址,以便您在自建的Grafana中接入Prometheus監控資料,或在二次開發過程中通過Prometheus API擷取監控資料。
前提條件
已接入Prometheus,具體操作,請參見:
步驟一:擷取HTTP API地址
-
登入CloudMonitor控制台,在左側導覽列選擇Prometheus 監控 - 執行個體列表,進入執行個體列表頁面。
-
在頁面頂部功能表列選擇Prometheus執行個體所在的地區,並在目的地組群右側的操作列單擊設定。
-
在設定頁簽上,根據需求複製公網或內網的HTTP API地址。
設定頁簽展示公網和內網兩類HTTP API地址,可按需複製。頁面同時提供產生token入口,使用Token可提升資料讀取安全性。
-
對於V1版本的Prometheus執行個體,如果您需要提高Grafana資料讀取的安全性,可以單擊產生token,擷取Prometheus執行個體的鑒權Token。
重要-
V1版本:產生Token後,在Grafana中添加資料來源時必須配置Token,否則無法讀取Prometheus的監控資料。
-
V2版本:預設必須使用帳號的AcessKey和SecretKey才能訪問資料,且AcessKey 所屬的RAM 使用者需擁有AliyunPrometheusMetricReadAccess 或 AliyunCloudMonitorFullAccess 系統角色許可權。
-
步驟二:接入自建Grafana
配置Grafana資料來源。
以管理員帳號登入本地Grafana系統。
單擊頁面左上方的
表徵圖。在左側導覽列中選擇。
說明僅管理員可以看到此菜單。
在Data Sources頁簽上單擊+ Add new data source。
在Add data source頁面上單擊Prometheus。
在Settings頁簽的Name欄位中輸入自訂的名稱,在Prometheus server URL欄位中粘貼上文步驟一:擷取HTTP API地址中獲得的HTTP API地址。
設定安全增強。
V1版本(可選)
單擊+ Add header,在Custom HTTP Headers地區單擊+Add header,設定Header為Authorization,設定Value為步驟一:擷取HTTP API地址中擷取的鑒權Token。

V2版本
開啟Basic auth,並設定User為使用者的AccessKey,設定Password為使用者的SecretKey。

單擊頁簽底部的Save & Test。
驗證結果。
登入本地Grafana系統。
單擊頁面左上方的
表徵圖,然後在左側導覽列中單擊Dashboards,單擊Dashboards頁面右側的New,然後在下拉式功能表中單擊New dashboard。
單擊+ Add visualization,在Select data source頁面選擇您建立的資料來源。
在Edit Panel頁面的Query頁簽下的A地區的Metrics欄位和Label filters欄位中輸入指標名稱和值,單擊Run queries進行查詢。
如果能顯示出相應指標的圖表,則說明操作成功。否則請檢查填寫的介面地址或Token是否正確,以及資料來源是否有Prometheus的監控資料。

步驟三:擷取Prometheus監控資料
調用Prometheus監控資料的請求樣本如下。更多使用HTTP API擷取Prometheus監控資料的操作,請參見開源版Prometheus HTTP API。
V1版本
GET {HTTP API}/api/v1/query
Accept: application/json
Content-Type: application/json
Authorization: {Token}
{
"query":"arms_prometheus_target_interval_length_seconds_sum",
"time":"1635302655",
"timeout":"1000"
}{HTTP API}和{Token}請替換為上文步驟一擷取的HTTP API和鑒權Token。
V2版本
GET {HTTP API}/api/v1/query
Accept: application/json
Content-Type: application/json
Authorization: Basic <base64Encode(<accessKey:secretKey>)>
{
"query":"arms_prometheus_target_interval_length_seconds_sum",
"time":"1635302655",
"timeout":"1000"
}除通過HTTP請求直接調用外,也可以使用Python的requests庫,通過Basic Auth調用Prometheus HTTP API,樣本如下:
import requests
import time
# 從控制台擷取HTTP API地址
api_url = 'http://cn-hangzhou.arms.aliyuncs.com:9090/api/v1/prometheus/{token}/{user_id}/{cluster_id}/{region}'
# AccessKey ID作為使用者名稱,AccessKey Secret作為密碼
ak_id = 'your_access_key_id'
ak_secret = 'your_access_key_secret'
# 查詢指標
resp = requests.get(f'{api_url}/api/v1/query', params={'query': 'up'}, auth=(ak_id, ak_secret))
print(resp.json())
# 範圍查詢(最近1小時)
end = int(time.time())
start = end - 3600
resp = requests.get(f'{api_url}/api/v1/query_range', params={'query': 'up', 'start': start, 'end': end, 'step': '60s'}, auth=(ak_id, ak_secret))
print(resp.json())返回樣本: