全部產品
Search
文件中心

AnalyticDB:快速使用PromQL資源群組

更新時間:May 22, 2026

本文介紹如何在AnalyticDB for MySQL企業版執行個體下建立PromQL資源群組,開通網路訪問,寫入與查詢指標,以及對接Grafana。

前提條件

  • 已購買AnalyticDB for MySQL企業版執行個體,且執行個體處於運行中狀態。基礎版不支援建立PromQL資源群組。

  • 已規劃好用戶端的訪問方式:

    • VPC內網訪問(推薦):用戶端ECS與AnalyticDB for MySQL執行個體位於同一VPC內,並擷取用戶端ECS的內網IP地址,用於添加到執行個體白名單。

    • 公網訪問:擷取用戶端的公網出口IP,用於添加到執行個體白名單;同時確保已為PromQL資源群組開通公網地址。

步驟一:建立PromQL資源群組

  1. 登入雲原生資料倉儲AnalyticDB MySQL控制台,在左側導覽列選擇集群清單,單擊目標企業版執行個體的ID,進入執行個體詳情頁。

  2. 在左側導覽列選擇集群管理 > 資源管理,單擊資源組管理頁簽,然後單擊新增資源組

  3. 在彈出的抽屜中填寫資源群組名稱,將任務類型設定為PromQL。表單將自動切換為PromQL資源群組所需的四類節點配置。

  4. 配置節點規格、節點數量與磁碟容量。首次使用建議保留預設配置(30 ACU + 1500 GB資料磁碟,可承載百萬級樣本每日寫入);如需根據負載精確規劃,參見PromQL資源群組營運管理中的資源規劃章節。

  5. 表單底部會即時匯總總ACU資料磁碟空間緩衝磁碟空間,即為計費依據。確認無誤後,單擊確定。資源群組進入建立中狀態,約5至10分鐘後變為運行中狀態。

說明

資源群組處於建立中狀態時,單擊操作列的詳情,可預覽Endpoint URL模板和節點配置,並複製管理使用者名與密碼用於用戶端預配置。VPC地址與公網地址在資源群組進入運行中狀態後才會被分配。

步驟二:配置網路訪問

查看串連資訊

資源組管理頁簽找到目標PromQL資源群組,單擊操作列的詳情,在Endpoint區塊查看以下資訊。

欄位

說明

VPC地址

同VPC內的訪問地址,已包含連接埠:8427,資源群組建立後預設開通。樣本:amv-xxxxxxxx-yyyyy-atm.ads.aliyuncs.com:8427

公網地址

公網訪問地址,需單擊開通公網訪問手動開通,開通後立即可用。

查詢Endpoint

PromQL查詢請求的完整路徑:{VPC地址或公網地址}/select/0/prometheus/api/v1/query

寫入Endpoint

指標寫入請求的完整路徑:{VPC地址或公網地址}/insert/0/prometheus/api/v1/import/prometheus

Admin UI

VM UI的完整URL:{VPC地址或公網地址}/select/0/vmui/,單擊右側的打開可一鍵跳轉。

管理使用者名 / 密碼

資源群組的Basic Auth憑證。單擊image可查看使用者名稱或密碼的明文,單擊image可將憑證複製到用戶端配置。

重要

所有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文字格式設定

/insert/0/prometheus/api/v1/import/prometheus

Prometheus remote_write

/insert/0/prometheus/api/v1/write

InfluxDB Line Protocol

/insert/0/influx/write

OpenTelemetry Metrics

/insert/0/opentelemetry/v1/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欄位為successdata.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類型資料來源,按以下方式填寫:

  • URLhttp://<VPC或公網地址>:8427/select/0/prometheus

  • Auth:勾選Basic auth,使用者名稱與密碼使用資源群組管理員憑證。

  • HTTP Method:保持POSTGET均可。

儲存並測試通過後,即可在Dashboard中使用PromQL繪圖。

下一步