Skip to main content

Prometheus Query Builder (PromQL Playground)

Learn Prometheus Query Language (PromQL) with an interactive playground. Master label filtering, rate calculations, aggregations, and histogram quantiles with real-time query execution.

Category: Observability

Topics covered: prometheus, promql, observability, sre, metrics, monitoring

// simulator

Prometheus Query Builder (PromQL Playground)

Learn Prometheus Query Language (PromQL) with an interactive playground. Master label filtering, rate calculations, aggregations, and histogram quantiles with real-time query execution.

Supported byBecome a sponsor
BitriseAtomsizedDigitalOceanDevDojoSMTPfastQuizAPI
Prometheus Query Builder
Cmd/Ctrl + Enter Execute Query

Learn Prometheus queries interactively. No experience needed, start with tutorials below!

basic

🎯 Your First Query: See All Requests

Learn how to view a metric - think of it like looking at your app's request counter

http_requests_total

This shows every HTTP request your app has handled. Each row is a different server or endpoint (like api-1, api-2).

label

🔍 Filter What You See: Only GET Requests

Too much data? Let's narrow it down to just GET requests

http_requests_total{method="GET"}

The {method="GET"} part is like a filter - it says "only show me GET requests, ignore POST, DELETE, etc."

multi

🎯 Get Specific: Successful GET Requests

Combine filters to see exactly what you want - only successful (200) GET requests

http_requests_total{method="GET",status="200"}

You can stack filters with commas. This shows GET requests that returned a 200 (success) status code.

rate

📈 Speed Matters: Requests Per Second

How fast are requests coming in? Use rate() to see per-second speed

rate(http_requests_total[5m])

rate() converts your growing counter into "requests per second over the last 5 minutes". Like checking your car's speedometer!

sum

🧮 Total It Up: All Requests Combined

Add up all servers to get your total request rate

sum(rate(http_requests_total[5m]))

sum() adds up all your servers' request rates into one number. Perfect for dashboards!

sum

📊 Break It Down: Requests by HTTP Method

See totals separated by GET, POST, etc.

sum by(method) (rate(http_requests_total[5m]))

"sum by(method)" means "give me separate totals for each HTTP method". Like organizing by category!

error

🚨 Real-World: Error Rate Percentage

What % of requests are failing? This is how SREs monitor health

sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) * 100

This divides 5xx errors by total requests and converts to %. If you see 2.5, that means 2.5% of requests are failing.

Understanding Prometheus & PromQL

Core concepts

  • Time Series: A stream of timestamped values identified by a metric name and labels (key-value pairs).
  • Instant Vector: A set of time series with one sample per series at a single point in time.
  • Range Vector: A set of time series with multiple samples over a time range (e.g., [5m]).
  • Scalar: A simple numeric floating point value.

Common functions

  • rate(): Calculate per-second rate over a time range (for counters).
  • irate(): Instant rate based on last two samples (more responsive).
  • sum/avg/max/min: Aggregation operators across multiple series.
  • histogram_quantile(): Calculate percentiles from histogram buckets.

Key concepts

  • Counters: Monotonically increasing values (use rate() or increase()).
  • Gauges: Values that can go up and down (use directly).
  • Histograms: Observations bucketed by value (use histogram_quantile()).
  • Summaries: Pre-calculated quantiles (use directly, no histogram_quantile()).

Label matching

  • = Exact match: method="GET"
  • != Negative match: status!="500"
  • =~ Regex match: path=~"/api/.*"
  • !~ Negative regex: job!~"dev-.*"

Overview

PromQL is the query language of Prometheus, and most of it comes down to selecting a time series, turning counters into rates and aggregating by labels. This playground teaches that in a guided sequence against sample HTTP request metrics. You start by selecting every series of a request counter, then filter it with label matchers to keep only GET requests, then narrow further to successful GET requests. Next you use rate() to turn an ever-growing counter into requests per second, sum() to add the series together, and sum by method to break the total down by HTTP method. The last step builds a real-world error rate: the rate of 5xx responses divided by the rate of all responses, expressed as a percentage, which is the query behind many alerts and SLOs. Each step shows the query and its result, so you can see what each function does to the data. The explanation below covers counters, gauges, histograms, label matching and the common functions you will meet in dashboards.

Try this

  1. Run the first query to see every request series, then add a label matcher to keep only GET requests.
  2. Use the requests per second step to see how rate() turns a counter into a per-second value.
  3. Build the error rate percentage query and compare it with the total requests per second.

Frequently asked questions

Why use rate() on a Prometheus counter?
A counter only goes up, so its raw value says little. rate() computes the per-second increase over a time window, handles counter resets and gives you a usable throughput number.
What is the difference between rate() and irate()?
rate() averages the increase across the whole range, which suits alerts and graphs. irate() uses only the last two samples, so it reacts faster but is noisier.
How do I calculate an error rate in PromQL?
Divide the rate of error responses by the rate of all responses, for example sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])), and multiply by 100 for a percentage.

Try next

Sponsored
Carbon Ads
$ cd /games
// share