命令参考

SPL 管道命令:语法、参数与示例

命令参考

管道命令写在 | 之后。最左侧为搜索条件(search 可省略)。

搜索与时间

搜索条件

Syntax

[search] <logicalExpression>
index="<name>" AND <field> <op> <value>

在索引中按条件检索事件。值支持精确匹配,或 * / ? 通配。

Operators

操作符含义
= / ==等于
!= / <>不等于
< / <= / > / >=比较
like / not like包含 / 不包含
AND / OR与 / 或(AND 优先;可用括号)

Examples

index="Linux" AND eventType="login"
(index="linux" AND action="closed") OR (index="windows" AND action="登录")

times

Syntax

| times [earliest=<time>] [latest=<time>]

在语句内指定时间范围(覆盖界面时间组件)。

Examples

… | times earliest=-1h@h latest=now
… | times earliest=-24h@h latest=now


字段操作

fields

Syntax

| fields [+|-] field1, field2, …

保留或删除字段。

符号含义
+(默认)仅保留列表中的字段
-删除列表中的字段

Examples

… | fields src_ip, dest_ip, action
… | fields - _raw

table

Syntax

| table field1, field2, …

按声明顺序输出表格列。列顺序与声明一致。

Examples

… | table _time, src_ip, dest_ip, action

rename

Syntax

| rename <old> as <new> [, <old> as <new> …]

重命名字段。

Examples

… | rename src_ip as source_ip, dest_ip as destination_ip

sort

Syntax

| sort [+|-]<field> [, [+|-]<field> …]

排序结果。

项说明
+升序(默认)
-降序

Examples

… | sort - _time, + src_ip

派生与聚合

eval

Syntax

| eval <field>=<expression> [, <field>=<expression> …]

基于表达式新增或覆盖字段。多个表达式从左到右求值。比较运算支持字符串与整数混比。

Examples

… | eval lowuser = lower(username)
… | eval ok = if(status_code == 200, "Y", "N")

where

Syntax

| where <logicalExpression>

在管道内按布尔表达式过滤(亦可用 search 关键字)。

Examples

… | where bytes > 1000 AND like(host, "web%")
… | where cidrmatch(src_ip, "10.0.0.0/8")

stats

Syntax

| stats <agg>([field]) [as <alias>] [, …] [by <field-list | span(…)>]

聚合统计。无 by 时返回一行;有 by 时按唯一键分行。常用聚合:count、sum、avg、min、max、values、earliest、latest、方差与标准差族。

Examples

index="Linux" AND eventType="login"
| stats count() as total by userName

… | stats sum(bytes) as total_bytes, avg(bytes) as avg_bytes by src_ip

earliest / latest(在 stats 中)

对非时间字段取「最早 / 最晚」侧聚合值。请先按时间排序:

… | sort _time
| stats earliest(src_ip) as first_ip, latest(alarm_name) as last_alarm by src_port

截取与频次

Syntax

| head [<n>]

取前 N 行。

Examples

… | head 100

limit

Syntax

| limit <n>
| limit <offset>, <n>

限制返回行数;可带偏移。

Examples

… | limit 50
… | limit 10, 50

top

Syntax

| top [<n>] <field-list> [by <field-list>]

取字段值出现次数最多的前 N 项。

Examples

… | top 10 src_ip
… | top 5 user by host

rare

Syntax

| rare <field-list> [by <field-list>]

取字段值出现次数最少的项。

Examples

… | rare userName by host

eventcount

Syntax

| eventcount

统计当前结果事件数。


去重与填充

dedup

Syntax

| dedup [<n>] <field-list> [keeptype=<bool>] [consecutive=<bool>]

按字段组合去重。可选保留每个键的前 N 条。

Examples

… | sort - _time | dedup src_ip, userName

fillnull

Syntax

| fillnull [value=<literal>] [<field-list>]

将空值替换为指定值。

Examples

… | fillnull value="N/A" owner, dept

filldown

Syntax

| filldown [<field-list>]

用上方非空值向下填充。

fillup

Syntax

| fillup [<field-list>]

用下方非空值向上填充。


查找与合并

lookup

Syntax

| lookup <file.csv> <lookup-field> [as <event-field>]
    OUTPUT|OUTPUTNEW <out-field> [as <alias>] [, …]

按字段关联 CSV 查找表,将匹配列写入结果。左侧结果可流式分批关联;键基数过大时请先 stats / dedup 收敛。

Examples

… | lookup asset.csv ip as src_ip OUTPUT application_name, owner

inputlookup

Syntax

| inputlookup <file.csv> [method=<string>]

直接读取查找表内容。文件默认位于 $ORI_HOME/etc/lookup/(或以现场配置为准)。

Examples

| inputlookup product.csv

outputlookup

Syntax

| outputlookup <file.csv> [append=true|false]

将当前结果写入 CSV 查找表。

参数默认说明
appendfalsetrue 追加;否则覆盖
<file.csv>—必须以 .csv 结尾

Examples

… | outputlookup threat_ips.csv
… | outputlookup threat_ips.csv append=true

join

Syntax

| join [type=left|inner|outer|right] <field> [, <field> …] [ <subsearch> ]

按公共字段合并子查询结果。

Examples

… | join type=inner src_ip [ index="asset" | fields src_ip, owner ]

append / appendcols

Syntax

| append [ <subsearch> ]
| appendcols [ <subsearch> ]

将另一子搜索结果追加到当前结果(行追加或列对齐)。


多值字段

makemv

Syntax

| makemv <field> [delim="<sep>"] [tokenizer="<regex>"] [allowempty=<bool>] [setsv=<bool>]

将单值字段按分隔符拆成多值。

mvexpand

Syntax

| mvexpand <field> [limit=<n>]

将多值字段展开为多行。

mvcombine

Syntax

| mvcombine <field> [delim="<sep>"]

将多行同字段合并为多值。


提取与地理

rex

Syntax

| rex [mode=sed] [field=<field>] "<regex-or-sed>"

用正则命名捕获组提取字段,或 mode=sed 做替换。默认源字段为 _raw。新字段名避免使用 _ 等特殊符号。

Examples

… | rex field=_raw "From: (?<from>.*) To: (?<to>.*)"
… | rex field=savedsearch_id "(?<user>\w+);(?<app>\w+);(?<SavedSearchName>\w+)"

parse

Syntax

| parse <expression> <pattern>

按模式从表达式中解析字段。

spath

Syntax

| spath [input=<field>] path="<json-path>" [output=<field>]

从 JSON 结构化字段提取路径。

参数默认说明
input_raw输入字段
outputpath 名输出字段
path—如 foo.bar 或带数组下标

Examples

… | spath input=_raw output=myfield path=foo.bar

iplocation

Syntax

| iplocation <ip-field> [allfields=true|false] [prefix="<prefix>"] [lang="<lang>"]

使用本地 ipdb 为 IP 字段补充地理位置。

参数默认说明
<ip-field>必填如 src_ip
allfieldsfalsetrue 输出扩展字段
prefix空输出字段名前缀
langCN地理库语言

默认输出字段:city_name、region_name、country_name、country_code、continent_code、latitude、longitude、timezone。

Configuration

项值
库文件mydata4vipday3_cn.ipdb
默认目录/opt/oriData/var/geo/ipdb
覆盖配置 spl.geo.home,或环境变量 VAR_DIR / ORI_HOME

库缺失时查询失败。服务侧提供本地鉴权 HTTP(不访问公网):POST /spl/geo/ip/batch、GET /spl/geo/health、POST /spl/geo/reload。

Examples

index="firewall"
| iplocation src_ip allfields=true prefix="geo_" lang="CN"
| fields src_ip, geo_country_name, geo_city_name