Use awscurl to query with Prometheus-compatible APIs
API requests for Amazon Managed Service for Prometheus must be signed with SigV4. You can use awscurl
To install awscurl, you need to have Python 3 and pip package manager
installed.
On a Linux based instance, the following command installs
awscurl.
$pip3 install awscurl
On a macOS machine, the following command installs awscurl.
$brew install awscurl
The following example is a sample awscurl query. Replace the
Region, Workspace-id and
QUERY inputs with appropriate values for your use
case:
# Define the Prometheus query endpoint URL. This can be found in the Amazon Managed Service for Prometheus console page # under the respective workspace.$export AMP_QUERY_ENDPOINT=https://aps-workspaces.Region.amazonaws.com/workspaces/Workspace-id/api/v1/query # credentials are infered from the default profile$awscurl -X POST --regionRegion\ --service aps "${AMP_QUERY_ENDPOINT}" -d 'query=QUERY' --header 'Content-Type: application/x-www-form-urlencoded'
Note
Your query string must be url encoded.
For a query like query=up, you could get results such as:
{ "status": "success", "data": { "resultType": "vector", "result": [ { "metric": { "__name__": "up", "instance": "localhost:9090", "job": "prometheus", "monitor": "monitor" }, "value": [ 1652452637.636, "1" ] }, ] } }
In order for awscurl to sign the provided requests, you will need to
pass the valid credentials in one of the following ways:
-
Provide the access key ID and the Secret key for the IAM role. You can find the access key and the secret key for the role in the https://console.aws.amazon.com/iam/
. For example:
$export AMP_QUERY_ENDPOINT=https://aps-workspaces.Region.amazonaws.com/workspaces/Workspace_id/api/v1/query$awscurl -X POST --region <Region> \ --access_key <ACCESS_KEY> \ --secret_key <SECRET_KEY> \ --service aps "$AMP_QUERY_ENDPOINT?query=<QUERY>"
-
Reference the configuration files stored in the
.aws/credentialsand/aws/configfile. You can also choose to specify the name of the profile to be used. If unspecified, thedefaultfile will be used. For example:$export AMP_QUERY_ENDPOINT=https://aps-workspaces.<Region>.amazonaws.com/workspaces/<Workspace_ID>/api/v1/query$awscurl -X POST --region <Region> \ --profile <PROFILE_NAME> --service aps "$AMP_QUERY_ENDPOINT?query=<QUERY>" -
Use the instance profile associated with the EC2 instance.
Executing query requests using awscurl container
When installing a different version of Python and the
associated dependencies is not feasible, a container can be used to package the
awscurl application and its dependencies. The following example
uses a Docker runtime to deploy awscurl, but
any OCI compliant runtime and image will work.
$docker pull okigan/awscurl$export AMP_QUERY_ENDPOINT=https://aps-workspaces.Region.amazonaws.com/workspaces/Workspace_id/api/v1/query$docker run --rm -it okigan/awscurl --access_key $AWS_ACCESS_KEY_ID --secret_key $AWS_SECRET_ACCESS_KEY \ --regionRegion--service aps "$AMP_QUERY_ENDPOINT?query=QUERY"