本文主要介绍聚合指令的用法和示例。
stats
用于统计分析日志的指令,类似 SQL 中的聚合函数(如 COUNT
, SUM
, AVG
等)。对日志数据中的特定字段进行统计、分组和聚合操作。
该指令专用于Logstore的查询分析,不适用于新版数据加工、SPL规则消费、写入处理器和Logtail配置等场景。
默认情况stats返回前100条聚合结果,如果需要返回更多可以结合limit指令使用
语法
stats <output>=<aggOperator> by <group>,[<group>...]
参数说明
参数 | 类型 | 必填 | 说明 |
output | String | 是 | 为统计结果字段指定别名。 |
aggOperator | SQLExp | 是 | 支持以下聚合函数:
|
group | String | 否 | 指定聚合的维度,类似sql中group by的字段。 |
示例
示例1:对于accesslog按
ip
统计pv
。SPL语句
* | stats pv=count(*) by ip
输入数据
ip: 192.168.1.1 latencyMs: 10 ip: 192.168.1.1 latencyMs: 20 ip: 192.168.1.2 latencyMs: 10
输出数据
ip: 192.168.1.2 pv: 1 ip: 192.168.1.1 pv: 2
示例2:对于
accesslog
统计所有ip
的延迟min/max
。SPL语句
* | extend latencyMs=cast(latencyMs as bigint) | stats minLatencyMs=min(latencyMs), maxLatencyMs=max(latencyMs) by ip
输入数据
ip: 192.168.1.1 latencyMs: 10 ip: 192.168.1.1 latencyMs: 20 ip: 192.168.1.2 latencyMs: 10
输出数据
ip: 192.168.1.2 minLatencyMs: 10 maxLatencyMs: 20 ip: 192.168.1.1 minLatencyMs: 10 maxLatencyMs: 10
示例3:对于accesslog统计所有
pv
。SPL语句
* | stats pv=count(*)
输入数据
ip: 192.168.1.1 latencyMs: 10 ip: 192.168.1.1 latencyMs: 20 ip: 192.168.1.2 latencyMs: 10
输出数据
pv: 3
sort
对查询结果进行排序,支持对字段值或统计结果进行升序(asc
)或降序(desc
)排序。它是日志分析中快速定位关键数据、生成有序报表的重要工具。
该指令专用于Logstore的查询分析,不适用于新版数据加工、SPL规则消费、写入处理器和Logtail配置等场景。
语法
sort <field> [asc/desc] ,(<field> [asc/desc])
参数说明
参数 | 类型 | 必填 | 说明 |
field | String | 是 | 指定排序的字段。支持以下类型字段:
|
asc/desc | String | 否 |
|
示例
对于accesslog
按latencyMs
排序。
SPL语句
* | extend latencyMs=cast(latencyMs as bigint) | sort latencyMs desc
输入数据
ip: 192.168.1.1 latencyMs: 10 ip: 192.168.1.1 latencyMs: 20 ip: 192.168.1.2 latencyMs: 15
输出数据
ip: 192.168.1.1 latencyMs: 20 ip: 192.168.1.2 latencyMs: 15 ip: 192.168.1.1 latencyMs: 10
limit
用于限制查询结果返回的日志行数,是控制数据量的核心指令之一。通过 limit
可有效防止查询结果过大导致的性能问题或资源浪费,适用于日志分析、实时监控等多种场景。
该指令专用于Logstore的查询分析,不适用于新版数据加工、SPL规则消费、写入处理器和Logtail配置等场景。
若不配合sort指令明确排序规则,limit指令的输出结果的 顺序是随机的(因日志存储时未保证自然顺序)。
语法
limit (<offset>,) <size>
参数说明
参数 | 类型 | 必填 | 说明 |
offset | Interger | 否 | 跳过前 |
size | Interger | 是 | 行数限制。 |
示例
对于accesslog按latencyMs排序后取第一条。
SPL语句
* | extend latencyMs=cast(latencyMs as bigint) | sort latencyMs | limit 1
输入数据
ip: 192.168.1.1 latencyMs: 10 ip: 192.168.1.1 latencyMs: 20 ip: 192.168.1.2 latencyMs: 15
输出数据
ip: 192.168.1.1 latencyMs: 20