Prometheus
Run PromQL instant and range queries against a Prometheus server, and list label names or series metadata — all via the Prometheus HTTP API v1.
Operations
| Operation | Endpoint | Description |
|---|---|---|
instant_query |
GET /api/v1/query |
Evaluate a PromQL expression at a single point in time |
range_query |
GET /api/v1/query_range |
Evaluate a PromQL expression over a time range (returns a matrix) |
list_labels |
GET /api/v1/labels |
List all label names known to Prometheus, optionally filtered by selector and time range |
list_series |
GET /api/v1/series |
Find all series matching one or more selector strings |
Authentication
Prometheus itself has no built-in authentication. When your Prometheus instance is protected by a reverse proxy (e.g. Grafana Cloud, nginx with Basic Auth middleware, or a JWT gateway), pass a Bearer token in the apiKey field. It is sent as:
Authorization: Bearer <apiKey>
For unauthenticated Prometheus instances on a private network, leave apiKey blank.
Inputs
| Field | Required | Description |
|---|---|---|
serverUrl |
Yes | Base URL of the Prometheus server, e.g. http://prometheus.example.com:9090. No trailing slash. |
operation |
Yes | One of the four operations above. |
apiKey |
No | Bearer token for reverse-proxy-protected instances. Leave blank for open servers. |
query |
For instant_query, range_query |
PromQL expression, e.g. up or rate(http_requests_total[5m]). |
time |
No | Evaluation timestamp for instant_query. RFC 3339 or UNIX epoch seconds. Defaults to server's current time. |
start |
For range_query |
Range start. RFC 3339 or UNIX epoch seconds. |
end |
For range_query |
Range end. RFC 3339 or UNIX epoch seconds. |
step |
For range_query |
Resolution step, e.g. 15s, 1m, or 300. |
match |
For list_series (required); list_labels (optional) |
Comma-separated series selectors, e.g. up,{job="prometheus"}. |
timeout |
No | Server-side evaluation timeout, e.g. 30s. |
Outputs
| Field | Description |
|---|---|
result |
Full JSON response body from Prometheus (the data field contains the query result). |
status |
HTTP status code as a string (e.g. 200). |
truncated |
Present and set to "true" if the response was truncated at 5 MB. |
Examples
Check which targets are up (instant query)
[
{
"name": "check_targets",
"tool": "prometheus",
"input": {
"serverUrl": "http://prometheus.example.com:9090",
"operation": "instant_query",
"query": "up"
}
}
]
CPU usage over the last hour (range query)
[
{
"name": "cpu_usage",
"tool": "prometheus",
"input": {
"serverUrl": "http://prometheus.example.com:9090",
"operation": "range_query",
"query": "100 - (avg by(instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)",
"start": "2024-01-15T11:00:00Z",
"end": "2024-01-15T12:00:00Z",
"step": "1m"
}
}
]
List all label names
[
{
"name": "labels",
"tool": "prometheus",
"input": {
"serverUrl": "http://prometheus.example.com:9090",
"operation": "list_labels"
}
}
]
Find all series for a specific job
[
{
"name": "series",
"tool": "prometheus",
"input": {
"serverUrl": "http://prometheus.example.com:9090",
"operation": "list_series",
"match": "{job=\"node_exporter\"}"
}
}
]
Grafana Cloud (authenticated)
[
{
"name": "gf_query",
"tool": "prometheus",
"input": {
"serverUrl": "https://prometheus-prod-01-eu-west-0.grafana.net",
"apiKey": "glc_eyJ...",
"operation": "instant_query",
"query": "up"
}
}
]
Notes
- The
resultoutput contains the raw Prometheus JSON response, which has the shape{"status":"success","data":{"resultType":"...","result":[...]}}. - Response bodies are capped at 5 MB. For very high-cardinality queries, add aggregation to your PromQL expression.
list_serieswith broad selectors (e.g.{__name__=~".+"}) can be extremely expensive on large Prometheus instances; prefer narrower selectors.
Publishes
The keys a later task may reference as {{taskName.key}}. Referencing anything not listed here resolves to nothing at run time.
errorresultstatustruncated
Input Properties
Every property this tool accepts, from its own tool.iml.
| Property | Type | Required | Default | Description |
|---|---|---|---|---|
serverUrl |
string | yes | — | Base URL of the Prometheus server, e.g. http://prometheus.example.com:9090. Must not include the /api/v1 path. |
operation |
string | yes | — | One of: instant_query, range_query, list_labels, list_series |
apiKey |
string | no | — | DEPRECATED — bind an API Key credential to the task with credentialName instead. A key pasted here is stored in the workflow definition in clear and appears in every export of it. Still honoured for workflows built before the change. |
query |
string | no | — | PromQL expression. Required for instant_query and range_query, e.g. 'up' or 'rate(http_requests_total[5m])'. |
time |
string | no | — | Evaluation timestamp for instant_query. RFC 3339 string or UNIX epoch seconds, e.g. '2024-01-15T12:00:00Z' or '1705312800'. Defaults to the server's current time when blank. |
start |
string | no | — | Start of the time range for range_query. RFC 3339 or UNIX epoch seconds. Required for range_query. |
end |
string | no | — | End of the time range for range_query. RFC 3339 or UNIX epoch seconds. Required for range_query. |
step |
string | no | — | Query resolution step width for range_query. Duration string or float seconds, e.g. '15s', '1m', '300'. Required for range_query. |
match |
string | no | — | Comma-separated series selectors for list_series, e.g. 'up,{job="prometheus"}'. Required for list_series. Also optionally filters list_labels results. |
timeout |
string | no | — | Evaluation timeout for the Prometheus server (not the network timeout), e.g. '30s'. Optional. |