Here’s a PromQL (Prometheus Query Language) cheat sheet to help you quickly grasp its essential concepts and syntax. PromQL is a powerful language used to query and extract meaningful insights from Prometheus time-series data. This cheat sheet covers key query types, functions, and operators, making it easier to analyze system metrics effectively. Use it as a handy reference for building PromQL queries efficiently.
Basic Query Elements
Metric Names
- Directly query a metric by its name:  
http_requests_total
Labels & Filtering
- 
Filter metrics using labels: http_requests_total{job="api-server", status="500"}
- 
Use regex matching: http_requests_total{method=~"GET|POST"}
- 
Negation example: http_requests_total{status!="200"}
Operators
Arithmetic Operators
- Basic math operations:  
rate(http_requests_total[5m]) * 100
Comparison Operators
- 
Compare two expressions: http_requests_total > 100
- 
Keep matching labels using bool:http_requests_total > bool 100
Logical Operators
- and,- or,- unless:- http_requests_total{job="api-server"} and up
Aggregation
Common Aggregation Functions
- 
Sum: sum(http_requests_total)
- 
Average: avg(http_requests_total)
- 
Minimum & Maximum: min(http_requests_total) max(http_requests_total)
- 
Standard Deviation & Variance: stddev(http_requests_total) stdvar(http_requests_total)
Grouping
- 
Aggregate by a label: sum by (status) (http_requests_total)
- 
Removing a label from aggregation: sum without (instance) (http_requests_total)
Time Ranges & Rate Calculations
Instant & Range Vectors
- 
Instant query (current value): http_requests_total
- 
Range query (past 5 minutes): http_requests_total[5m]
Rate & Increase
- 
Rate of increase per second: rate(http_requests_total[5m])
- 
Total increase over a period: increase(http_requests_total[1h])
Delta & Resets
- 
Change in value over time: delta(http_requests_total[5m])
- 
Ignore counter resets: resets(http_requests_total[1h])
Advanced Functions
Histogram Quantiles
- 90th percentile of request durations:  
histogram_quantile(0.90, rate(http_request_duration_seconds_bucket[5m]))
Time Functions
- Current Unix timestamp:  
time()
Label Manipulation
- 
Rename labels: label_replace(up, "new_label", "$1", "instance", "(.*):.*")
- 
Drop specific labels: label_join(up, "group", "-", "datacenter", "rack")
Tips and Sources
Useful Tips
- Always use rate()for counters to avoid misinterpretations.
- Use sum by (label)when grouping metrics by a specific dimension.
- Be cautious with large queries to avoid high computational costs.
- histogram_quantile()works with histograms, not normal counters.
Reliable Sources
- Prometheus Documentation: https://prometheus.io/docs/querying/basics/
- PromQL Examples: https://promlabs.com/promql-cheat-sheet
- Grafana PromQL Guide: https://grafana.com/docs/grafana/latest/datasources/prometheus/promql/
