本文介紹如何在AnalyticDB for MySQL企業版執行個體下建立PromQL資源群組,開通網路訪問,寫入與查詢指標,以及對接Grafana。
前提條件
-
已購買AnalyticDB for MySQL企業版執行個體,且執行個體處於運行中狀態。基礎版不支援建立PromQL資源群組。
-
已規劃好用戶端的訪問方式:
-
VPC內網訪問(推薦):用戶端ECS與AnalyticDB for MySQL執行個體位於同一VPC內,並擷取用戶端ECS的內網IP地址,用於添加到執行個體白名單。
-
公網訪問:擷取用戶端的公網出口IP,用於添加到執行個體白名單;同時確保已為PromQL資源群組開通公網地址。
-
步驟一:建立PromQL資源群組
-
登入雲原生資料倉儲AnalyticDB MySQL控制台,在左側導覽列選擇集群清單,單擊目標企業版執行個體的ID,進入執行個體詳情頁。
-
在左側導覽列選擇,單擊資源組管理頁簽,然後單擊新增資源組。
-
在彈出的抽屜中填寫資源群組名稱,將任務類型設定為PromQL。表單將自動切換為PromQL資源群組所需的四類節點配置。
-
配置節點規格、節點數量與磁碟容量。首次使用建議保留預設配置(30 ACU + 1500 GB資料磁碟,可承載百萬級樣本每日寫入);如需根據負載精確規劃,參見PromQL資源群組營運管理中的資源規劃章節。
-
表單底部會即時匯總總ACU、資料磁碟空間與緩衝磁碟空間,即為計費依據。確認無誤後,單擊確定。資源群組進入建立中狀態,約5至10分鐘後變為運行中狀態。
資源群組處於建立中狀態時,單擊操作列的詳情,可預覽Endpoint URL模板和節點配置,並複製管理使用者名與密碼用於用戶端預配置。VPC地址與公網地址在資源群組進入運行中狀態後才會被分配。
步驟二:配置網路訪問
查看串連資訊
在資源組管理頁簽找到目標PromQL資源群組,單擊操作列的詳情,在Endpoint區塊查看以下資訊。
|
欄位 |
說明 |
|
VPC地址 |
同VPC內的訪問地址,已包含連接埠 |
|
公網地址 |
公網訪問地址,需單擊開通公網訪問手動開通,開通後立即可用。 |
|
查詢Endpoint |
PromQL查詢請求的完整路徑: |
|
寫入Endpoint |
指標寫入請求的完整路徑: |
|
Admin UI |
VM UI的完整URL: |
|
管理使用者名 / 密碼 |
資源群組的Basic Auth憑證。單擊 |
所有Endpoint均使用HTTP明文協議,連接埠固定為8427。請使用http://首碼訪問,使用https://會失敗。URL路徑中的0是租戶ID,PromQL資源群組的預設查詢入口固定為租戶0,詳情參見PromQL資源群組營運管理中的資料群組織章節。
開通公網地址(僅公網訪問情境)
用戶端不在同一VPC內時,需單擊Endpoint區塊的開通公網訪問按鈕。系統將彈出確認提示。
PromQL資源群組僅支援HTTP明文協議。開通公網地址後,帳號密碼將以明文形式在公網傳輸,存在安全風險。建議優先使用VPC內網訪問;確需通過公網訪問時,必須配合白名單嚴格限定來源IP,且不建議在不可信網路中使用。
確認開通後,按鈕文本將變為釋放公網地址,公網地址立即可用,連接埠仍為8427。如不再需要公網訪問,單擊釋放公網地址即可關閉。
配置白名單
無論使用VPC地址還是公網地址,用戶端的來源IP都需要加入執行個體白名單。請通過以下兩種入口之一進入白名單管理頁面:
-
PromQL資源群組詳情面板Endpoint區塊右上方的管理白名單按鈕(推薦)。
-
執行個體左側導覽列依次選擇,定位到白名單設置區塊。
在白名單分組中追加用戶端IP(支援單個IP或CIDR),儲存後立即生效。如需擷取本地公網出口IP,可在用戶端終端執行:
curl ifconfig.me
驗證連通性
在用戶端執行健全狀態檢查請求:
curl -u '<管理使用者名>:<管理員密碼>' 'http://<VPC或公網地址>:8427/health'
預期返回字串OK,HTTP狀態代碼為200。常見錯誤處理:
-
返回
HTTP 401:帳號或密碼錯誤,請到詳情面板重新複製管理員憑證;或用戶端使用了https://首碼,請改為http://。 -
連線逾時:請按以下順序排查:
-
用戶端來源IP是否已加入執行個體白名單。
-
所用地址與用戶端網路位置是否匹配:使用VPC地址要求用戶端與執行個體位於同一VPC,跨VPC使用VPC地址也會連線逾時;用戶端在阿里雲外或不同VPC時,必須開通並使用公網地址。
-
公網訪問情境下,公網地址是否已成功開通。
-
步驟三:寫入資料
URL路徑規範
所有寫入路徑必須包含租戶ID段。PromQL資源群組的預設租戶固定為0,各協議的路徑如下:
|
協議 |
路徑 |
|
Prometheus文字格式設定 |
|
|
Prometheus remote_write |
|
|
InfluxDB Line Protocol |
|
|
OpenTelemetry Metrics |
|
各協議的請求體格式參見VictoriaMetrics叢集版URL格式。
使用Python指令碼寫入樣本資料
將以下指令碼儲存為vm_writer.py,僅依賴Python 3標準庫,可直接運行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""PromQL 資源群組寫入樣本:以 Prometheus 文字格式設定批量寫入 demo_* 系列指標。"""
import argparse, base64, random, socket, sys, time
import urllib.request, urllib.error
def basic_auth(user, password):
token = base64.b64encode(f"{user}:{password}".encode()).decode()
return f"Basic {token}"
def build_payload(job, instance_prefix, series):
regions = ["cn-beijing", "cn-hangzhou", "cn-shanghai", "cn-shenzhen"]
envs = ["prod", "staging", "dev"]
ts = int(time.time() * 1000)
lines = []
for i in range(series):
labels = (
f'job="{job}",instance="{instance_prefix}-{i}",'
f'region="{regions[i % 4]}",env="{envs[i % 3]}"'
)
lines.append(f'demo_cpu_usage{{{labels}}} {random.random():.4f} {ts}')
lines.append(f'demo_mem_usage_mb{{{labels}}} {random.uniform(100, 8000):.1f} {ts}')
lines.append(f'demo_request_rate{{{labels},status="200"}} {random.uniform(0, 500):.2f} {ts}')
return ("\n".join(lines) + "\n").encode()
def main():
p = argparse.ArgumentParser()
p.add_argument("--host", required=True, help="不含連接埠的VPC或公網地址")
p.add_argument("--port", type=int, default=8427)
p.add_argument("--user", required=True)
p.add_argument("--password", required=True)
p.add_argument("--interval", type=float, default=5.0)
p.add_argument("--series", type=int, default=1)
p.add_argument("--job", default="demo_writer")
p.add_argument("--instance", default=socket.gethostname())
p.add_argument("--once", action="store_true")
args = p.parse_args()
base = f"http://{args.host}:{args.port}"
auth = basic_auth(args.user, args.password)
# 健全狀態檢查
req = urllib.request.Request(f"{base}/health", headers={"Authorization": auth})
try:
with urllib.request.urlopen(req, timeout=10) as r:
print(f"[health] HTTP {r.status} {r.read().decode().strip()}")
except urllib.error.HTTPError as e:
sys.exit(f"健全狀態檢查失敗:HTTP {e.code} {e.read().decode()}")
write_url = f"{base}/insert/0/prometheus/api/v1/import/prometheus"
headers = {"Authorization": auth, "Content-Type": "text/plain"}
seq = 0
while True:
seq += 1
payload = build_payload(args.job, args.instance, args.series)
try:
req = urllib.request.Request(write_url, method="POST", headers=headers, data=payload)
with urllib.request.urlopen(req, timeout=15) as r:
print(f"[#{seq}] HTTP {r.status} 寫入成功")
except urllib.error.HTTPError as e:
print(f"[#{seq}] HTTP {e.code} {e.read().decode()[:200]}")
if args.once:
break
time.sleep(args.interval)
if __name__ == "__main__":
main()
運行樣本:
# 一次性寫入用於連通性驗證
python3 vm_writer.py --host <VPC或公網地址> \
--user <管理使用者名> --password <管理員密碼> --once
# 持續寫入:每5秒1批,每批10個series
python3 vm_writer.py --host <VPC或公網地址> \
--user <管理使用者名> --password <管理員密碼> \
--series 10 --interval 5
寫入成功的請求返回HTTP 204。VictoriaMetrics索引存在1~2秒延遲,寫入後稍候即可查詢到資料。
步驟四:查詢資料
使用curl發起查詢
PromQL資源群組相容Prometheus的全部查詢API。
常用查詢路徑:
-
即時查詢:
/select/0/prometheus/api/v1/query。 -
區間查詢:
/select/0/prometheus/api/v1/query_range。 -
標籤列表:
/select/0/prometheus/api/v1/labels。
使用curl查詢前面寫入的樣本資料:
HOST='<VPC或公網地址>'
AUTH='<管理使用者名>:<管理員密碼>'
# 1. 查詢某個指標的當前值
curl -u "$AUTH" -G "http://$HOST:8427/select/0/prometheus/api/v1/query" \
--data-urlencode 'query=demo_cpu_usage'
# 2. 按region彙總series數量
curl -u "$AUTH" -G "http://$HOST:8427/select/0/prometheus/api/v1/query" \
--data-urlencode 'query=count by (region) (demo_cpu_usage)'
# 3. 最近1分鐘所有demo_*指標的樣本總數
curl -u "$AUTH" -G "http://$HOST:8427/select/0/prometheus/api/v1/query" \
--data-urlencode 'query=sum(count_over_time({__name__=~"demo_.*"}[1m]))'
返回體為JSON,status欄位為success且data.result包含匹配的時序列表,即視為查詢成功。
使用VM UI快速驗證
VM UI是VictoriaMetrics內建的可視化查詢介面,無需自建Grafana即可執行PromQL並查看結果。兩種入口:
-
在資源群組詳情面板Endpoint區塊的Admin UI欄位,單擊右側的打開。
-
瀏覽器直接存取
http://<VPC或公網地址>:8427/select/0/vmui/。
瀏覽器將彈出Basic Auth對話方塊,輸入管理使用者名與密碼即可進入。VM UI的Query頁支援輸入PromQL並以表格、圖表、JSON三種形式查看結果,適合首次接入時驗證寫入是否成功。VM UI的全部功能頁(Cardinality Explorer、Top Queries等)參見PromQL資源群組營運管理。
步驟五:對接Grafana
在Grafana中新增Prometheus類型資料來源,按以下方式填寫:
-
URL:
http://<VPC或公網地址>:8427/select/0/prometheus。 -
Auth:勾選Basic auth,使用者名稱與密碼使用資源群組管理員憑證。
-
HTTP Method:保持POST或GET均可。
儲存並測試通過後,即可在Dashboard中使用PromQL繪圖。
下一步
-
資源規劃、節點擴縮容、參數配置、多業務隔離、VM UI詳解、常見問題等營運內容,參見PromQL資源群組營運管理。
-
產品定位、架構、計費規則與使用限制,參見PromQL資源群組。