Skip to main content

Prometheus Query Builder - Learn PromQL Step-by-Step

Supported byDigitalOceanDevDojoAcronisPluralsightBecome a sponsor
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-.*"
Sponsored
Carbon Ads