Transform functions :: Kloudfuse Docs
Transform functions
label_join
Writes a new label whose value is the values of several source labels joined with a separator. Use it to build a single display or matching key from multiple dimensions.
Syntax
label_join(<expr>, "<dst>", "<separator>", "<src1>", "<src2>", ...)
Parameters
| Parameter | Required | Description |
|---|---|---|
<expr> |
Required | The expression to transform. |
<dst> |
Required | The label to write. |
<separator> |
Required | String placed between values. |
<srcN> |
Required | One or more source labels to join. |
Example
Build an instance_zone key from the service name and availability zone of Kloudfuse query-service pods.
label_join(
sum by (app_kubernetes_io_name, availability_zone) (go_goroutines{app_kubernetes_io_name="query-service"}),
"instance_zone", "/", "app_kubernetes_io_name", "availability_zone"
)
| instance_zone | Value |
|---|---|
| query-service/canadacentral-1 | 22 |
| query-service/us-central1-a | 2,473 |
| query-service/ap-south-1a | 1,029 |
| query-service/us-gov-west-1a | 22 |
| query-service/us-west1-a | 5,483 |
Expected output
| Missing source labels contribute an empty string. |
label_replace
Adds or overwrites a label on every series by matching a regular expression against an existing label and expanding a replacement template with the capture groups. Series whose source label does not match pass through unchanged.
Syntax
label_replace(<expr>, "<dst>", "<replacement>", "<src>", "<regex>")
Parameters
| Parameter | Required | Description |
|---|---|---|
<expr> |
Required | The expression to transform. |
<dst> |
Required | The label to write. |
<replacement> |
Required | Template for the new value; $1, $2 reference capture groups. |
<src> |
Required | The label to match against. |
<regex> |
Required | An anchored RE2 expression. |
Example
Derive a short service label from app_kubernetes_io_name by stripping the -service suffix.
label_replace(
sum by (app_kubernetes_io_name) (go_goroutines{app_kubernetes_io_name=~".*query-service"}),
"service", "$1", "app_kubernetes_io_name", "(.*)-service"
)
| service | Value |
|---|---|
| rum-query | 1,316 |
| query | 64,523 |
| trace-query | 3,058 |
| logs-query | 19,486 |
| events-query | 3,019 |
Expected output
| The source label is left untouched; drop it from view with a surrounding aggregation if needed. |
sort_desc
Orders the series of an instant query by value, largest first — the natural order for leaderboard-style panels.
Syntax
sort_desc(<expr>)
Example
List Kloudfuse query services from most to fewest goroutines.
sort_desc(sum by (app_kubernetes_io_name) (go_goroutines{app_kubernetes_io_name=~".*query-service"}))
| app_kubernetes_io_name | Value |
|---|---|
| query-service | 64,589 |
| logs-query-service | 19,522 |
| trace-query-service | 3,060 |
| events-query-service | 3,018 |
| rum-query-service | 1,315 |
Expected output
| In range queries, sorting has no effect — each step is evaluated independently. |
sort
Orders the series of an instant query by value, smallest first. Sorting affects presentation only — labels and values are unchanged — and applies to instant queries, where the result is a flat list.
Syntax
sort(<expr>)
Example
List Kloudfuse query services from fewest to most goroutines.
sort(sum by (app_kubernetes_io_name) (go_goroutines{app_kubernetes_io_name=~".*query-service"}))
| app_kubernetes_io_name | Value |
|---|---|
| rum-query-service | 1,319 |
| events-query-service | 3,019 |
| trace-query-service | 3,057 |
| logs-query-service | 19,524 |
| query-service | 64,559 |
Expected output
To limit as well as order, use topk/bottomk. |