全部产品
Search
文档中心

云原生数据仓库AnalyticDB:快速使用PromQL资源组

更新时间:May 21, 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绘图。

下一步

  • 资源规划、节点扩缩容、参数配置、多业务隔离、VM UI详解、常见问题等运维内容,参见PromQL资源组运维管理

  • 产品定位、架构、计费规则与使用限制,参见PromQL资源组