SkillByAIOpen interactive version →

Lesson 12 / 25

Aggregation

sum, avg, max, topk with by and without.

Collapse dimensions deliberately

Aggregation operators (sum, avg, min, max, count, topk, bottomk, quantile) combine series. by (label) keeps only the listed labels; without (label) removes the listed labels and keeps the rest. Aggregating a rate by route gives per-route traffic across all instances; topk(5, ...) finds the busiest series. count by (version) (up) is a quick inventory of running versions if a version label exists.

Aggregation examples

PromQL.

# requests per second per route, across all instances
sum by (route) (rate(http_requests_total{job="orders-api"}[5m]))

# error ratio for the whole service
sum(rate(http_requests_total{job="orders-api", status=~"5.."}[5m]))
  /
sum(rate(http_requests_total{job="orders-api"}[5m]))

# five busiest routes
topk(5, sum by (route) (rate(http_requests_total[5m])))

# CPU busy fraction per host (node_exporter)
1 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m]))

Use without to keep useful labels

without (instance, pod) keeps all other labels, so new labels added later are preserved automatically.

Quick check: What does sum by (route) (...) do?

  • Removes the route label
  • Adds series together, keeping only the route label
  • Sorts by route
  • Filters to one route
Answer

Adds series together, keeping only the route label — by keeps the listed labels.