本文介绍如何在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资源组。