Aggregation operators :: Kloudfuse Docs
Aggregation operators
Aggregation operators combine input series into fewer series. Use by (label, …) to keep the listed labels as grouping dimensions, or without (label, …) to drop them.
avg
Averages the values of the input series per group. Every series weighs equally regardless of how it was produced.
Syntax
avg by (<labels>) (<expr>) (also: avg without (<labels>) (...))
Parameters
| Parameter | Required | Description |
|---|---|---|
by (<labels>) |
Optional | Keep only the listed labels as grouping dimensions. |
without (<labels>) |
Optional | Group by every label except the listed ones. |
Example
Apply avg to the goroutine gauges of the Kloudfuse query services, grouped by service name.
avg by (app_kubernetes_io_name) (
go_goroutines{app_kubernetes_io_name=~".*query-service"}
)
| app_kubernetes_io_name | Value |
|---|---|
| trace-query-service | 15.42 |
| logs-query-service | 97.5 |
| rum-query-service | 11.34 |
| events-query-service | 15.5 |
| query-service | 313.35 |
Expected output
Without by or without, all labels are dropped and a single series is returned. |
bottomk
Returns the k input series with the smallest values, keeping their labels. The quiet outliers are often as interesting as the noisy ones.
Syntax
bottomk(<k>, <expr>)
Parameters
| Parameter | Required | Description |
|---|---|---|
<k> |
Required | How many series to return. |
Example
Find the two Kloudfuse services running the fewest goroutines.
bottomk(2, sum by (app_kubernetes_io_name) (
go_goroutines{app_kubernetes_io_instance="kfuse"}
))
| app_kubernetes_io_name | Value |
|---|---|
| analytics-service | 11 |
| recorder | 14 |
Expected output
bottomk ranks only series that exist; detect fully missing series with absent. |
count_values
Groups the input series by their sample value and counts how many series hold each value, writing the value itself into a new label. Use it for discrete-valued metrics — versions, capacities, states — to see the distribution at a glance.
Syntax
count_values("<label>", <expr>)
Parameters
| Parameter | Required | Description |
|---|---|---|
<label> |
Required | The label that will carry each distinct value. |
Example
Count how many node-capacity series report each distinct CPU capacity value.
count_values("cores", kubernetes_state_node_cpu_capacity)
| cores | Value |
|---|---|
| 96 | 31 |
| 10000 | 1 |
| 48 | 8 |
| 1 | 4 |
| 16 | 159 |
Expected output
High-cardinality float metrics explode into one group per distinct value — reserve count_values for discrete values. |
count
Counts how many series the inner expression produced, per group. Useful for fleet-size questions: how many pods, how many targets.
Syntax
count by (<labels>) (<expr>) (also: count without (<labels>) (...))
Example
Apply count to the goroutine gauges of the Kloudfuse query services, grouped by service name.
count by (app_kubernetes_io_name) (
go_goroutines{app_kubernetes_io_name=~".*query-service"}
)
| app_kubernetes_io_name | Value |
|---|---|
| rum-query-service | 116 |
| events-query-service | 195 |
| trace-query-service | 199 |
| query-service | 206 |
| logs-query-service | 200 |
Expected output
Without by or without, all labels are dropped and a single series is returned. |
group
Collapses each group to a single series with value 1. Use it to deduplicate label combinations before counting or joining, when the values themselves do not matter.
Syntax
group by (<labels>) (<expr>) (also: group without (<labels>) (...))
Example
Apply group to the goroutine gauges of the Kloudfuse query services, grouped by service name.
group by (app_kubernetes_io_name) (
go_goroutines{app_kubernetes_io_name=~".*query-service"}
)
| app_kubernetes_io_name | Value |
|---|---|
| logs-query-service | 1 |
| rum-query-service | 1 |
| events-query-service | 1 |
| query-service | 1 |
| trace-query-service | 1 |
Expected output
Without by or without, all labels are dropped and a single series is returned. |
max
Returns the largest value among the input series per group — the worst-case detector.
Syntax
max by (<labels>) (<expr>) (also: max without (<labels>) (...))
Example
Apply max to the goroutine gauges of the Kloudfuse query services, grouped by service name.
max by (app_kubernetes_io_name) (
go_goroutines{app_kubernetes_io_name=~".*query-service"}
)
| app_kubernetes_io_name | Value |
|---|---|
| events-query-service | 21 |
| trace-query-service | 21 |
| query-service | 3,285 |
| logs-query-service | 1,507 |
| rum-query-service | 16 |
Expected output
Without by or without, all labels are dropped and a single series is returned. |
min
Returns the smallest value among the input series per group — the floor of a fleet.
Syntax
min by (<labels>) (<expr>) (also: min without (<labels>) (...))
Example
Apply min to the goroutine gauges of the Kloudfuse query services, grouped by service name.
min by (app_kubernetes_io_name) (
go_goroutines{app_kubernetes_io_name=~".*query-service"}
)
| app_kubernetes_io_name | Value |
|---|---|
| trace-query-service | 12 |
| query-service | 13 |
| rum-query-service | 9 |
| events-query-service | 12 |
| logs-query-service | 10 |
Expected output
Without by or without, all labels are dropped and a single series is returned. |
quantile
Computes the given quantile (0 to 1) across the values of the input series, per group. This is a cross-series statistic at one instant — for a quantile of one series over time, use quantile_over_time; for histogram data, use histogram_quantile.
Syntax
quantile(<q>, <expr>) (also: quantile by (<labels>) (<q>, ...))
Parameters
| Parameter | Required | Description |
|---|---|---|
<q> |
Required | The quantile, between 0 and 1. |
Example
Find the 90th-percentile per-series goroutine count across all Kloudfuse service pods.
quantile(0.9, go_goroutines{app_kubernetes_io_instance="kfuse"})
| Value |
|---|
| 375 |
Expected output
Three quantile tools, three scopes: quantile across series, quantile_over_time across time, histogram_quantile across histogram buckets. |
stddev
Computes the population standard deviation of the input values per group — a direct measure of imbalance across a fleet.
Syntax
stddev by (<labels>) (<expr>) (also: stddev without (<labels>) (...))
Example
Apply stddev to the goroutine gauges of the Kloudfuse query services, grouped by service name.
stddev by (app_kubernetes_io_name) (
go_goroutines{app_kubernetes_io_name=~".*query-service"}
)
| app_kubernetes_io_name | Value |
|---|---|
| query-service | 754.22 |
| rum-query-service | 0.9981 |
| events-query-service | 1.55 |
| logs-query-service | 240.33 |
| trace-query-service | 1.39 |
Expected output
Without by or without, all labels are dropped and a single series is returned. |
stdvar
Computes the population variance of the input values per group — the square of stddev.
Syntax
stdvar by (<labels>) (<expr>) (also: stdvar without (<labels>) (...))
Example
Apply stdvar to the goroutine gauges of the Kloudfuse query services, grouped by service name.
stdvar by (app_kubernetes_io_name) (
go_goroutines{app_kubernetes_io_name=~".*query-service"}
)
| app_kubernetes_io_name | Value |
|---|---|
| logs-query-service | 57,671.00 |
| trace-query-service | 1.975 |
| query-service | 568,808.12 |
| events-query-service | 2.404 |
| rum-query-service | 1.039 |
Expected output
Without by or without, all labels are dropped and a single series is returned. |
sum
Adds up the values of all input series, per group when by (…) is given. The most common aggregation: totals along the dimension you care about, per-stream detail collapsed.
Syntax
sum by (<labels>) (<expr>) (also: sum without (<labels>) (...))
Example
Apply sum to the goroutine gauges of the Kloudfuse query services, grouped by service name.
sum by (app_kubernetes_io_name) (
go_goroutines{app_kubernetes_io_name=~".*query-service"}
)
| app_kubernetes_io_name | Value |
|---|---|
| rum-query-service | 1,317 |
| query-service | 64,560 |
| trace-query-service | 3,066 |
| logs-query-service | 19,501 |
| events-query-service | 3,022 |
Expected output
Without by or without, all labels are dropped and a single series is returned. |
topk
Returns the k input series with the largest values, keeping their labels — ranking questions answered directly.
Syntax
topk(<k>, <expr>)
Parameters
| Parameter | Required | Description |
|---|---|---|
<k> |
Required | How many series to return. |
Example
Rank the three Kloudfuse services running the most goroutines.
topk(3, sum by (app_kubernetes_io_name) (
go_goroutines{app_kubernetes_io_instance="kfuse"}
))
| app_kubernetes_io_name | Value |
|---|---|
| ingester | 100,406 |
| trace-transformer | 96,123 |
| query-service | 64,244 |
Expected output
| In range queries the top set is re-evaluated at every step, so membership can change over time. |