I am trying to query an Amazon Managed Service for Prometheus endpoint to extract some metrics data via a python script. I am using the make_request
method from the awscurl module in the following way (cleary this is an example snippet):
import awscurl.awscurl as aws
uri = 'https://<SERVICE>-workspaces.<REGION>.amazonaws.com/workspaces/<WORKSPACE_ID>/api/v1/query_range?query=http_request_total&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)
In this way, I am able to successfully connect to the endpoint and download the data related to the query query=http_request_total&start=1710720000.0&end=1710806400.0&step=1h
.
However, as soon as I try to add a filter (as statuscode="200"
) in the query using the PromQL syntax (e.g. query=http_request_total{statuscode="200"}&start=1710720000.0&end=1710806400.0&step=1h
), the same script as above, returns a tedious 400 status code and an annoying 'x-amzn-errortype': 'InvalidQueryStringException'
error.
What am I doing wrong? Is it possible to add filters to prometheus queries through awscurl python library?
Thanks in advance.
This is a documented issue in the awscurl repo issues section. Replacing the above query string with the URL encoded one retruns an InvalidSignatureException
error.
The solution that worked for me: removing function aws_url_encode()
from this line as explained in this issue comment.