PromQL (Prometheus Query Language) is a query language for querying and analyzing time series data in Prometheus.
Why Learn PromQL?#
| Use Case | Description |
|---|
| Dashboards | Visualize data in Grafana panels |
| Alerting | Write condition-based automatic alert rules |
| Analysis | Analyze root causes with ad-hoc queries |
| Recording Rules | Optimize performance by pre-computing complex queries |
Learning Path#
Fundamentals (1 hour)#
- Basic Syntax - Selectors, label matching, time ranges
- Aggregation Operators - sum, avg, count, topk, by/without
Practical Application (2 hours)#
- rate and increase - Core concepts for Counter metrics
- histogram_quantile - Calculate P50/P95/P99 percentiles
Advanced (1 hour)#
- Recording Rules - Pre-compute complex queries
- Alerting Rules - Write alert rules
Quick Reference#
Commonly Used Functions#
| Function | Purpose | Example |
|---|
rate() | Per-second rate of Counter | rate(http_requests_total[5m]) |
increase() | Total increase of Counter | increase(http_requests_total[1h]) |
sum() | Sum | sum(rate(http_requests_total[5m])) |
avg() | Average | avg(node_cpu_seconds_total) |
histogram_quantile() | Percentile | histogram_quantile(0.99, rate(...[5m])) |
Common Patterns#
# Error rate
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m]))
# P99 response time
histogram_quantile(0.99,
sum(rate(http_request_duration_seconds_bucket[5m])) by (le)
)
# CPU usage
100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
Learning Path#
graph LR
A["Basic Syntax"] --> B["Aggregation Operators"]
B --> C["rate/increase"]
C --> D["histogram_quantile"]
D --> E["Recording Rules"]
E --> F["Alerting Rules"]
style A fill:#e3f2fd
style F fill:#c8e6c9