Splunk SPL 命令覆盖清单

Osmanthe 开发预览版 · 2026-10-11 · 返回文档目录 · SPL 使用说明

一句话回答:没有全部支持,也不打算全部照搬。 Splunk 搜索语言有一百多个命令,其中三分之一左右是 Splunk 自己的数据模型、集群、指标库、摘要索引用的,搬到别的产品上没有意义。这一页把 Splunk 官方命令表逐个过了一遍,每个命令标明现在的状态,以后不用一个个问。
15已支持
21部分支持
19计划·优先
25计划·之后
10不打算做

共 90 个条目(意思相近的命令合在一行,例如 append / appendcols / appendpipe)。

状态是什么意思

输入不支持的命令时,报错信息会说明是“还没做”还是“不打算做”,以及能用什么代替。

逐个命令

搜索与过滤

命令状态说明
search已支持关键词、短语、field=value、比较、通配符、AND/OR/NOT、IN;字段名有空格等特殊字符时写成 'my field'=value 或 "my field"=value(单引号里的 ' 写成 \';名字里的 |、[ ]、全角符号原样保留);中文引号 “” 在引号外等同英文双引号,在引号里的会原样保留;earliest/latest 支持 -7d、-1d@d、@w1、-1mon@mon 等取整写法;| search 对多值字段逐个值匹配:a=x、通配符和 IN 是任一值匹配,NOT a=x 是没有值匹配,a!=x 是至少一个值不是 x;多值字段的大小比较会报错,需先 mvexpand
where部分支持比较和 AND/OR/NOT;函数支持 isnull、isnotnull、like、match、searchmatch、cidrmatch;where、eval 和 stats/chart/timechart 的 count(eval(...)) 里的 searchmatch 对多值字段和 | search 一样逐个值匹配;多值字段的 = 只要有一个值相等就成立,!= 只要有一个值不同就成立(区分大小写),大小比较以及和另一个字段比较(如 where tags=wanted)会报错,需先 mvexpand
regex已支持regex 字段="正则"、字段!="正则";和 Splunk 一样区分大小写
dedup部分支持每个值保留最新 N 条;不支持 sortby,不能用在 stats 之后
head部分支持head N / limit=N;不支持 head (条件)
tail部分支持原始事件可用;stats 之后不支持
reverse部分支持原始事件可用(改成从旧到新);stats 之后不支持
sort已支持多字段、+/-、num()/str()、sort N;和 Splunk 一样,不写数量时只保留前 10000 行,sort 0 或 limit=0 保留全部
uniq计划·之后

统计

命令状态说明
stats部分支持count、count(eval(条件))、dc、sum、avg、min、max、median、stdev、percN/pN、values(按文字逐字节排序,a1、a10、a2,和 Splunk 一致)、list(按当前行顺序取前 100 个值,原始事件从新到旧)、earliest/latest(_time)、first/last(_time)(按当前顺序,不按 _time 排时报错);还没有 range、var、mode、earliest(任意字段)、sum(eval(...))
tstats部分支持写法和 Splunk 相同,任何字段都能用;不支持 from datamodel=
eventstats部分支持把统计结果加到每一行;只支持 count、sum、avg、min、max 和 earliest/latest/first/last(_time),其他统计函数会报错;allnum 等选项忽略
streamstats部分支持累计统计,按当前顺序算(原始事件默认从新到旧,sort 之后按排好的顺序),和 Splunk 一致;统计函数和 eventstats 一样;不支持 window=、reset_*
timechart已支持span、by、usenull;limit(默认 10,0 为不限)、useother、otherstr:按各系列数值总和保留前 N 个,其余按时间合成 OTHER(count、sum 相加,min、max 取最小最大,avg 按事件重新平均;dc、median、values 等无法合并,需加 useother=f 或 limit=0,否则报错);不写 span 自动选;cont=false 时图表不补空的时间段;partial=f、bins、fixedrange、limit=top5 写法会报错
chart已支持over ... by ...;limit、useother、otherstr 同 timechart;span 对 over 字段分桶(数字分成 0-5、5-10 这样的区间,_time 按时间分桶)
top已支持limit、countfield、by;多值字段按每个值分别计数,百分比按事件数计算;图表按 by 字段分系列,分组列超过两个时默认显示表格
rare已支持同 top
eventcount部分支持| eventcount index=x 返回总条数;不支持 summarize=false
metadata部分支持type=hosts / sources / sourcetypes;firstTime、lastTime、recentTime 是 epoch 秒(recentTime 取最新事件时间,不是写入时间)
addtotals部分支持按行求和,需写出字段名;不支持 col=t 和通配符
accum部分支持累计求和,按当前顺序
addcoltotals计划·优先
delta计划·优先
autoregress计划·之后
trendline计划·之后
concurrency计划·之后
contingency计划·之后
timewrap计划·优先

字段与转换

命令状态说明
bin / bucket部分支持只支持 _time span=
eval部分支持if、case、coalesce、len、lower、upper、round、abs、floor、ceil、exp、ln、min、max、tostring、tonumber、replace、substr、trim/ltrim/rtrim、split、now、time、四则运算、字符串拼接;还没有 strftime/strptime、mv* 系列、json_* 系列、md5 等
rex已支持命名分组提取,field=;mode=sed 支持 s/正则/替换/g;每条事件只取第一处匹配,写 max_match(除 1 外)或 offset_field 会报错;提取到多值字段时存成单个值,没匹配上的事件保留原来的多值(普通字段没匹配上时会被清空,和 Splunk 不同)
extract (kv)部分支持默认 key=value 自动提取;不支持自定义分隔符
spath部分支持展开整个 JSON(spath、spath input=字段);不支持 path=;覆盖多值字段时,JSON 数组仍是多值,其他值按单个值处理;JSON 里内容像数组的字符串按单个值处理(显示为 ["[1,2]"] 这样的单值数组);JSON 没有覆盖的 eval 等得到的单个值保持不变,只有内容像 JSON 数组时会改存成单值数组;嵌套键(如 x.a)里像数组的字符串仍会被当成数组
fillnull部分支持需要写出字段名;对多值字段填入的值按单个值处理(不会把 "[z]" 这样的文字当成数组)
replace已支持整值替换,支持 * 通配和多个 WITH
rename部分支持不支持通配符
table已支持
fields已支持fields - 去掉字段
makemv部分支持delim=、allowempty(默认去掉空值);makemv、split() 和 stats 的 values()/list() 得到的多值字段,stats / chart / timechart 统计时逐个值计算(dc、values、count(字段) 等),其他统计每条事件仍只算一次;by 后面的多值字段按每个值各分一组;stats / chart / timechart 支持 dedup_splitvals=true 去掉同一事件内重复的分组值(默认 false,重复值仍重复计数),eval 复制多值字段(eval b=a)或 if / case / coalesce 返回多值字段时结果仍是多值,分支有的多值有的不是时,非多值的值按单个值的多值处理;lookup OUTPUTNEW 填入已经是多值的字段时同样按单个值的多值处理;lookup 多行匹配得到的多值也支持逐值统计、分组和 eval 复制;eventstats / streamstats 统计或 by 多值字段会报错;不支持 tokenizer=、setsv=true
mvexpand已支持limit=;eval、rex、strcat 得到的单个值整体保留一行("[z]"、看起来像 JSON 数组的文字都不会被拆开);来源不明的字段(如日志原有字段)只有值是合法 JSON 数组时才拆开
strcat已支持allrequired=t 时只有所有源字段都存在才写入目标字段;目标字段原来是多值时,没写入的事件保留原多值,写入的值存成单值数组,字段仍按多值处理
rangemap已支持区间有重叠时,range 是多值字段,包含所有匹配的标签(只匹配一个或用 default 时也是单元素数组);区间不重叠时仍是单值
convert计划·优先
fieldformat计划·优先
filldown计划·优先
mvcombine计划·优先
nomv计划·优先
foreach计划·优先
fromjson / tojson计划·优先
xmlkv / xpath计划·之后
multikv计划·之后
erex计划·之后
kvform不打算做依赖 Splunk 的表单模板文件
xmlunescape计划·之后
scrub计划·之后
setfields计划·之后
localize计划·之后
reltime计划·之后
makecontinuous计划·之后
addinfo计划·之后

多搜索与关联

命令状态说明
transaction计划·优先会话拼接;底层没有对应能力,计划在网关里实现,先用 stats min(_time) max(_time) values(...) by 会话字段 代替
join计划·优先计划做(含 type=left/inner)
append / appendcols / appendpipe计划·优先
union / multisearch计划·优先
子搜索 [ ... ]、return、format计划·优先
map计划·之后
selfjoin / set / diff计划·之后

查找表与生成数据

命令状态说明
lookup已支持CSV 查找表:多个匹配列、AS、OUTPUT / OUTPUTNEW,多行匹配得到多值(这样的列里只匹配到一个值的行也显示成单元素数组,如 ["z"],和 makemv 一致);查找表在「上传数据 → 查找表」里管理。Splunk 在 transforms.conf 里配的通配符 / CIDR 匹配、按时间查找、KV Store 和外部脚本查找没有
inputlookup / outputlookup部分支持inputlookup 支持 where、start=、max=、append=t(接到前面结果的后面);outputlookup 支持 append=t、override_if_empty=、create_empty=、max=,和 Splunk 一样后面可以接其它命令(结果原样往下传,后面的命令照常处理;一个查询里可以有多个 outputlookup,各自保存到它那一步的结果),每张表最多 50 万行。后面接了命令时,网关会先把到 outputlookup 为止的部分跑一遍保存,再跑整个查询返回结果,事件在两次之间有新增时两边可能略有出入。为防止分享链接改写查找表,含 outputlookup 的查询只在点「搜索」或按回车时执行(API 须用 POST /api/v1/search,GET 返回 405);从链接打开不会自动执行
inputcsv / outputcsv计划·之后
makeresults计划·优先底层不能凭空生成行,需在网关里实现
gentimes计划·之后

结果表变形

命令状态说明
xyseries / untable / transpose计划·优先需要在网关里对结果表做二次计算
fieldsummary计划·优先

地理

命令状态说明
iplocation计划·优先需要 IP 地理库
geostats / geom / geomfilter计划·之后

机器学习与高级统计

命令状态说明
predict / anomalydetection / outlier计划·之后可以做成我们自己的异常检测,不一定照搬
cluster / kmeans计划·之后
anomalies / anomalousvalue / analyzefields计划·之后
arules / associate / cofilter / correlate / x11计划·之后

界面显示

命令状态说明
highlight / abstract / iconify / gauge计划·之后只影响 Splunk 界面显示

Splunk 专有体系

命令状态说明
datamodel / pivot / from不打算做Splunk 数据模型体系,Osmanthe 没有对应概念
tags / typer / typelearner / findtypes不打算做依赖 Splunk 知识对象(标签、事件类型)
loadjob / savedsearch不打算做依赖 Splunk 的作业和保存搜索;以后做我们自己的保存搜索
collect / tscollect / summary indexing(sistats、sitop、sichart、sitimechart、sirare)不打算做Splunk 摘要索引机制
mstats / mcatalog / mpreview / msearch / mcollect / meventcollect不打算做Splunk 指标库,不在日志产品范围
rest / dbinspect / audit / history / metasearch / walklog不打算做读 Splunk 服务器自身的内部信息
sendalert / sendemail / script (run)不打算做以后用我们自己的告警功能代替
delete不打算做删除数据走管理功能,不放在搜索语言里
localop / redistribute / require / rtorder / typeahead / overlap / inputintelligence不打算做Splunk 集群和内部调度用

这一批新增了什么(2026-10-11)

和 Splunk 结果不同的地方