Pipeline Operations
Overview
Pipeline operations transform query results using the pipe operator |. Chain multiple operations together to filter, sort, limit, rename fields, and more. Operations are executed sequentially from left to right.
Syntax
<query> | <operation1> | <operation2> | <operation3>Each operation processes the output of the previous step.
sort
Order results by one or more fields.
Syntax:
| sort by (field1 [asc|desc], field2 [asc|desc], ...)Single field:
* | stats by (workload) count() as total | sort by (total desc)Multiple fields:
* | stats by (workload) count() | sort by (workload asc, count desc)limit
Limit the number of results returned.
Syntax:
| limit N* | limit 100offset
Skip a number of results (for pagination).
Syntax:
| offset N* | sort by (timestamp desc) | offset 20 | limit 10Records 21-30 (page 3)
fields
Select specific fields to include in results (similar to SQL SELECT).
Note: The
fieldspipe does not work with time-series visualizations. For time-series queries, all fields from the aggregation are included automatically.
Syntax:
| fields field1, field2, field3, ...* | fields timestamp, level, messagerename
Rename fields for clarity or compatibility.
Syntax:
| rename old_name1 as new_name1, old_name2 as new_name2, ...* | rename aa as service_name, bb as regionformat
Format output strings using a template with field values.
Syntax:
| format "template with <field1> and <field2>"* | format "request from <ip>:<port> is sent"uniq
Get unique combinations of specified fields (similar to SQL DISTINCT + GROUP BY).
Syntax:
| uniq (field1, field2, ...) [limit N]* | uniq (workload)Unique workloads
filter
Apply additional filters after aggregations or transformations.
Syntax:
| filter <filter_expression>Aliases: | <filter_expression> (implicit)
* | stats by (workload) count() as total | filter total:>1000Workloads with more than 1000 logs
math
Perform mathematical calculations on fields and create new calculated fields.
Syntax:
| math <expression> <result_field>Arithmetic Operators:
+- Addition-- Subtraction*- Multiplication/- Division%- Modulo^- Power
Functions:
max(a, b)- Maximum of two valuesmin(a, b)- Minimum of two valuesabs(x)- Absolute valueexp(x)- Exponential (e^x)ln(x)- Natural logarithmround(x)- Round to nearest integerceil(x)- Ceiling (round up)floor(x)- Floor (round down)rand()- Random numbernow()- Current timestamp
Basic Arithmetic
* | stats by (resource) count() requests, sum(errors) errors | math errors / requests error_rateCalculate error rate
Complex Expressions
Operator precedence follows standard math rules (multiplication/division before addition/subtraction).
* | count() a, count_uniq(workload) b | math a / b - 3 resultExpression with precedence: (a / b) - 3
* | stats by (node) avg(cpu) cpu, avg(memory) mem | math cpu * 0.7 + mem * 0.3 health_scoreWeighted health score
With Functions
* | stats by (workload) avg(value) avg_val | math round(avg_val) rounded_valueRound to integer
Chaining Math Operations
* | count() a, count_uniq(workload) b | math a / b ratio | math ratio * 100 percentageChain multiple math operations
With Join
level:info | stats by (workload) count() info_count
| join by (workload) (level:error | stats by (workload) count() error_count)
| math error_count / info_count error_ratioCalculate ratio from joined data
Last updated
