Prometheus Query Builder - Learn PromQL Step-by-Step
Learn Prometheus queries interactively. No experience needed – start with tutorials below!
🎯 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_totalThis shows every HTTP request your app has handled. Each row is a different server or endpoint (like api-1, api-2).
🔍 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."
🎯 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.
📈 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!
🧮 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!
📊 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!
🚨 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])) * 100This 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
Common Functions
💡 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-.*"