You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用awscurl Python模块调用Prometheus API添加过滤器失败排查

解决方案

问题出在URL编码上。当你在PromQL里添加statuscode="200"后,查询字符串里的{、}、=、"属于URL特殊字符,未编码会被服务端判定为无效的查询参数格式,触发InvalidQueryStringException。

你需要对完整的PromQL查询语句进行URL编码,再拼接到uri中,具体有两种实现方式:

  • 手动编码查询字符串:
    将query=http_request_total{statuscode="200"}替换为编码后的query=http_request_total%7Bstatuscode%3D%22200%22%7D,直接更新uri中的对应部分。

  • 使用Python内置工具自动编码:
    借助urllib.parse.quote方法对原始PromQL查询编码,避免手动编码出错,修改后的代码示例如下:

import awscurl.awscurl as aws
from urllib.parse import quote

# 构造原始带过滤器的PromQL查询
promql_query = 'http_request_total{statuscode="200"}'
# 对查询语句进行URL编码
encoded_query = quote(promql_query)

# 拼接完整的请求uri
uri = f'https://<SERVICE>-workspaces.<REGION>.amazonaws.com/workspaces/<WORKSPACE_ID>/api/v1/query_range?query={encoded_query}&start=1710720000.0&end=1710806400.0&step=1h'

headers = {
    'Content-Type': 'application/json',
}
awscurl_auth_params = {
        'method': 'GET',
        'service': <SERVICE>,
        'region': <REGION>,
        'uri': uri,
        'headers': headers,
        'data': '',
        'access_key': <ACCES_KEY>,
        'secret_key': <SECRET_KEY>,
        'security_token': None,
        'data_binary': False}
r = aws.make_request(**awscurl_auth_params)

awscurl完全支持带过滤器的PromQL查询,只要保证URL格式合法(特殊字符正确编码)即可,处理后服务端就能正常解析你的查询请求。


内容的提问来源于stack exchange,提问作者true_vices

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 12:34:52