重要
注意:所有 Microsoft Sentinel 功能将根据 世纪互联发布的公告 于 2026年8月18日 在中国地区的 Azure 正式停用。
Splunk 检测规则是与Microsoft Sentinel中的分析规则进行比较的安全信息和事件管理(SIEM)组件。 本文描述了识别、比较并迁移到 Microsoft Sentinel 的主要概念。 最好的方法是从 SIEM 迁移过程开始,该过程可以识别自动翻译的现成(OOTB)分析规则。
审核规则
Microsoft Sentinel使用机器学习分析来创建高保真和可操作的事件。 某些现有的 Splunk 检测可能在 Microsoft Sentinel 中是冗余的,因此不要盲目迁移所有的检测。 在识别现有检测规则时请查看这些注意事项。
- 确保选择能够证明规则迁移合理的用例,同时考虑业务优先级和效率。
- 检查你是否理解Microsoft Sentinel规则类型。
- 确认你是否理解规则术语。
- 查看过去 6-12 个月内没有警报的过时规则,并确定这些规则是否仍然相关。
- 消除你在日常中会忽略的低级别威胁或警报。
- 确认连接的数据源并查看数据连接方法。 Microsoft Sentinel Analytics 要求在启用规则之前,Log Analytics 工作区中必须存在该数据类型。 重新评估数据收集对话,以确保所打算检测的用例在数据深度和广度方面都得到充分覆盖。
迁移规则
确定要迁移的 Splunk 检测后,请查看迁移过程的以下注意事项:
- 将 Microsoft Sentinel OOTB 分析规则的现有功能与当前用例进行比较。 使用 SIEM 迁移体验查看哪些 Splunk 检测会自动转换为 OOTB 模板。
- 转换与 OOTB 分析规则不一致的检测。 使用SIEM 迁移体验 是自动翻译 Splunk 检测的最佳方式。
- 通过探索社区资源(例如 SOC Prime Threat Detection Marketplace),发现更多适合用例的算法。
- 如果内置规则不可用或未自动翻译,则手动翻译检测。 创建新的 KQL 查询并查看规则映射。
有关详细信息,请参阅迁移检测规则的最佳做法。
规则迁移步骤
验证是否为要迁移的每个规则准备好了一个测试系统。
为迁移的规则准备验证过程,包括完整测试方案和脚本。
确保团队具有有用的资源可用于测试迁移的规则。
确认已连接所需的数据源,并检查数据连接方法。
验证您的检测是否可用作 Microsoft Sentinel 中的开箱即用模板。
使用 SIEM 迁移体验自动转换和安装 OOTB 模板。
有关详细信息,请参阅使用 SIEM 迁移体验。
如果你的用例未反映在检测中,请使用 OOTB 规则模板为你自己的工作区创建规则。
在 Microsoft Sentinel 中,转到 Content hub。
筛选内容类型用于分析规则模板。
找到并安装/更新每个相应的内容中心解决方案或独立分析规则模板。
有关详细信息,请参阅开箱即用检测威胁。
在 Microsoft Sentinel 的 OOTB 规则未能涵盖的检测情况下,首先尝试使用 SIEM 迁移体验来进行自动转换。
如果无论是 OOTB 规则还是 SIEM 迁移都不能完全翻译检测规则,请手动创建该规则。 在这种情况下,请执行以下步骤创建规则:
确定要在规则中使用的数据源。 通过创建数据源和数据表之间的映射表,确定要查询的Microsoft Sentinel表。
确定数据中的要在规则中使用的任何属性、字段或实体。
确定规则条件和逻辑。 在此阶段,请考虑查找规则模板作为示例来了解如何构造 KQL 查询。
考虑筛选器、关联规则、活动列表、参考集、监视列表、检测异常情况、聚合等。 可以使用旧式 SIEM 提供的参考来了解如何以最佳方式映射查询语法。
确定触发条件和规则操作,然后构建并检查 KQL 查询。 审核查询时,请考虑 KQL 优化指导资源。
使用每个相关用例来测试规则。 如果它未提供预期的结果,请检查和编辑 KQL 并再次测试它。
如果您对结果满意,可以认为该规则已完成迁移。 根据需要为规则操作创建一个剧本。 有关详细信息,请参阅 使用 Playbook 在 Microsoft Sentinel 中自动化威胁响应。
详细了解分析规则:
- 创建自定义分析规则以检测威胁。 使用警报分组,通过将给定时间范围内发生的警报分组到一起来减轻警报疲劳。
- 将数据字段映射到 Microsoft Sentinel 中的实体,使 SOC 工程师能够在调查期间将实体定义为要跟踪的证据的一部分。 实体映射还可让 SOC 分析师利用直观的调查图来帮助减少时间和工作量。
- 使用 UEBA 数据调查事件,例如,使用证据来显示与事件预览窗格中特定事件关联的事件、警报和任何书签。
- Kusto 查询语言(KQL),可用于向 Log Analytics 数据库发送只读请求来处理数据和返回结果。 KQL 还用于其他Microsoft services,例如 Microsoft Defender for Endpoint 和 Application Insights。
比较规则术语
此表帮助你阐明基于 Microsoft Sentinel 的 Kusto 查询语言 (KQL) 的规则概念,并将其与基于搜索处理语言 (SPL) 的 Splunk 检测进行比较。
| Splunk(斯普朗克) | Microsoft Sentinel | |
|---|---|---|
| 规则类型 | • 已安排 • 实时 |
• 计划的查询 • 融合 • Microsoft 安全 • Machine Learning (ML) 行为分析 |
| 条件 | 在 SPL 中定义 | 在 KQL 中定义 |
| 触发器条件 | • 结果数 • 主机数 • 源数 • 自定义 |
阈值:查询结果数 |
| 操作 | • 添加到触发的警报 • 记录事件 • 输出结果以供查找 • 等等 |
• 创建警报或事件 • 与逻辑应用集成 |
映射和比较规则示例
使用这些示例来比较和映射 Splunk 中的规则,以便在各种方案中使用 Microsoft Sentinel。
常见搜索命令
| SPL 命令 | 说明 | KQL 运算符 | KQL 示例 |
|---|---|---|---|
chart/ timechart |
返回时间序列制图的结果为表格格式。 | 渲染运算符 | … | render timechart |
dedup |
删除与指定条件匹配的后续结果。 | • 不同 • 汇总 |
… | summarize by Computer, EventID |
eval |
计算表达式。 了解 常见 eval 命令。 |
扩展 | T | extend duration = endTime - startTime |
fields |
从搜索结果中删除字段。 | • 项目 • 项目离开 |
T | project cost=price*quantity, price |
head/tail |
返回前 N 个或最后 N 个结果。 | 返回页首 | T | top 5 by Name desc nulls last |
lookup |
从外部源添加字段值。 | • 外部数据 • 查找 |
KQL 示例 |
rename |
重命名字段。 使用通配符指定多个字段。 | project-rename | T | project-rename new_column_name = column_name |
rex |
使用正则表达式指定组名来提取字段。 | 匹配正则表达式 | … | where field matches regex "^addr.*" |
search |
将结果筛选为与搜索表达式匹配的结果。 | 搜索 | search "X" |
sort |
按指定字段对搜索结果进行排序。 | 排序 | T | sort by strlen(country) asc, price desc |
stats |
提供按字段(可选)分组的统计信息。 详细了解 常见统计命令。 | 总结 | KQL 示例 |
mstats |
与统计信息类似,用于指标而不是事件。 | 总结 | KQL 示例 |
table |
指定要保留在结果集中的字段,并采用表格格式保留数据。 | 项目 | T | project columnA, columnB |
top/rare |
显示字段的最常见值或最不常见值。 | 返回页首 | T | top 5 by Name desc nulls last |
transaction |
将搜索结果分组为事务。 SPL 示例 |
示例:row_window_session | KQL 示例 |
eventstats |
从事件的字段生成摘要统计信息,并将这些统计信息保存在新字段中。 SPL 示例 |
示例: • 加入 • make_list • mv-expand |
KQL 示例 |
streamstats |
计算数据字段的累积总和。 SPL 示例: ... | streamstats sum(bytes) as bytes _ total \| timechart |
row_cumsum | ...\| serialize cs=row_cumsum(bytes) |
anomalydetection |
查找指定字段中的异常。 SPL 示例 |
series_decompose_anomalies() | KQL 示例 |
where |
使用 eval 表达式筛选搜索结果。 用于比较两个不同的字段。 |
哪里 | T | where fruit=="apple" |
lookup 命令:KQL 示例
Users
| where UserID in ((externaldata (UserID:string) [
@"https://storageaccount.blob.core.chinacloudapi.cn/storagecontainer/users.txt"
h@"?...SAS..." // Secret token to access the blob
])) | ...
stats 命令:KQL 示例
Sales
| summarize NumTransactions=count(),
Total=sum(UnitPrice * NumUnits) by Fruit,
StartOfMonth=startofmonth(SellDateTime)
mstats 命令:KQL 示例
T | summarize count() by price_range=bin(price, 10.0)
transaction 命令:SPL 示例
sourcetype=MyLogTable type=Event
| transaction ActivityId startswith="Start" endswith="Stop"
| Rename timestamp as StartTime
| Table City, ActivityId, StartTime, Duration
transaction 命令:KQL 示例
let Events = MyLogTable | where type=="Event";
Events
| where Name == "Start"
| project Name, City, ActivityId, StartTime=timestamp
| join (Events
| where Name == "Stop"
| project StopTime=timestamp, ActivityId)
on ActivityId
| project City, ActivityId, StartTime,
Duration = StopTime – StartTime
使用 row_window_session() 来计算序列化行集中某列的会话启动值。
...| extend SessionStarted = row_window_session(
Timestamp, 1h, 5m, ID != prev(ID))
eventstats 命令:SPL 示例
… | bin span=1m _time
|stats count AS count_i by _time, category
| eventstats sum(count_i) as count_total by _time
eventstats 命令:KQL 示例
下面是 join 语句的示例:
let binSize = 1h;
let detail = SecurityEvent
| summarize detail_count = count() by EventID,
tbin = bin(TimeGenerated, binSize);
let summary = SecurityEvent
| summarize sum_count = count() by
tbin = bin(TimeGenerated, binSize);
detail
| join kind=leftouter (summary) on tbin
| project-away tbin1
下面是 make_list 语句的示例:
let binSize = 1m;
SecurityEvent
| where TimeGenerated >= ago(24h)
| summarize TotalEvents = count() by EventID,
groupBin =bin(TimeGenerated, binSize)
|summarize make_list(EventID), make_list(TotalEvents),
sum(TotalEvents) by groupBin
| mvexpand list_EventID, list_TotalEvents
anomalydetection 命令:SPL 示例
sourcetype=nasdaq earliest=-10y
| anomalydetection Close _ Price
anomalydetection 命令:KQL 示例
let LookBackPeriod= 7d;
let disableAccountLogon=SignIn
| where ResultType == "50057"
| where ResultDescription has "account is disabled";
disableAccountLogon
| make-series Trend=count() default=0 on TimeGenerated
in range(startofday(ago(LookBackPeriod)), now(), 1d)
| extend (RSquare,Slope,Variance,RVariance,Interception,
LineFit)=series_fit_line(Trend)
| extend (anomalies,score) =
series_decompose_anomalies(Trend)
常用 eval 命令
|SPL 命令 |说明 |SPL 示例 |KQL 命令 |KQL 示例 | |---------|---------|---------|---------|---------| |abs(X) |返回 X 的绝对值 。|abs(number) |abs() |abs(X) | | |case(X,"Y",…) |采用一对 X 和 Y 参数,其中 X 参数是布尔表达式。 计算结果为 TRUE 时,参数返回相应的 Y 参数。
|
SPL 示例 |case |KQL 示例 | |ceil(X) |数字 X 的上限。 |ceil(1.9) |ceiling() |ceiling(1.9) | |cidrmatch("X",Y) |标识属于特定子网的 IP 地址。 |cidrmatch
("123.132.32.0/25",ip) |• ipv4_is_match()
• ipv6_is_match() |ipv4_is_match('192.168.1.1', '192.168.1.255')
== false | |coalesce(X,…) |返回不为 null 的第一个值。 |coalesce(null(), "Returned val", null()) |coalesce() |coalesce(tolong("not a number"),
tolong("42"), 33) == 42 | |cos(X) |计算 X 的余弦。 |n=cos(0) |cos() |cos(X) | |exact(X) |使用双精度浮点算法计算表达式 X。
|
exact(3.14*num)
|
todecimal()
|
todecimal(3.14*2) | |exp(X) |返回 eX。
|
exp(3)
|
exp() |exp(3) | |if(X,Y,Z) |如果 X 计算结果为 TRUE,则结果为第二个参数 Y。 如果 X 计算结果为 FALSE,则结果为第三个参数 Z。 |if(error==200,
"OK", "Error")
|
iff()](/data-explorer/kusto/query/iff-function) |[KQL example](#ifxyz-kql-example) | |isbool(X) |ReturnsTRUEifX is boolean. |isbool(field) |• [iff()](/data-explorer/kusto/query/iff-function)<br>• [gettype](/data-explorer/kusto/query/gettype-function) |iff(gettype(X) =="bool","TRUE","FALSE") | |isint(X) |ReturnsTRUEifX is an integer. |isint(field) |• [iff()](/data-explorer/kusto/query/iff-function)<br>• [gettype](/data-explorer/kusto/query/gettype-function) |[KQL example](#isintx-kql-example) | |isnull(X) |ReturnsTRUEifX is null. |isnull(field) |[isnull()](/data-explorer/kusto/query/isnull-function) |isnull(field) | |isstr(X) |ReturnsTRUEifX is a string. |isstr(field) |• [iff()](/data-explorer/kusto/query/iif-function)<br>• [gettype](/data-explorer/kusto/query/gettype-function) |[KQL example](#isstrx-kql-example) | |len(X) |This function returns the character length of a stringX. |len(field) |[strlen()](/data-explorer/kusto/query/strlen-function) |strlen(field) | |like(X,"y") |ReturnsTRUEif and only ifXis like the SQLite pattern inY. |like(field, "addr%") |• [has](/data-explorer/kusto/query/has-any-operator)<br>• [contains](/data-explorer/kusto/query/datatypes-string-operators)<br>• [startswith](/data-explorer/kusto/query/datatypes-string-operators)<br>• [matches regex](/data-explorer/kusto/query/regex) |[KQL example](#likexy-example) | |log(X,Y) |Returns the log of the first argumentXusing the second argumentYas the base. The default value ofYis10. |log(number,2) |• [log](/data-explorer/kusto/query/log-function)<br>• [log2](/data-explorer/kusto/query/log2-function)<br>• [log10](/data-explorer/kusto/query/log10-function) |log(X)<br><br>log2(X)<br><br>log10(X) | |lower(X) |Returns the lowercase value ofX. |lower(username) |[tolower](/data-explorer/kusto/query/tolower-function) |tolower(username) | |ltrim(X,Y) |ReturnsXwith the characters in parameterYtrimmed from the left side. The default output ofY is spaces and tabs. |ltrim(" ZZZabcZZ ", " Z") |[trim_start()](/data-explorer/kusto/query/trim-start-function) |trim_start(" ZZZabcZZ"," ZZZ") | |match(X,Y) |Returns if X matches the regex pattern Y. |match(field, "^\d{1,3}.\d$") |[matches regex](/data-explorer/kusto/query/regex) |… | where field matches regex @"^\d{1,3}.\d$") | |max(X,…) |Returns the maximum value in a column. |max(delay, mydelay) |• [max()](/data-explorer/kusto/query/max-aggregation-function)<br>• [arg_max()](/data-explorer/kusto/query/arg-max-aggregation-function) |… | summarize max(field) | |md5(X) |Returns the MD5 hash of a string valueX. |md5(field) |[hash_md5](/data-explorer/kusto/query/hash-md5-function) |hash_md5("X") | |min(X,…) |Returns the minimum value in a column. |min(delay, mydelay) |• [min_of()](/data-explorer/kusto/query/min-of-function)<br>• [min()](/data-explorer/kusto/query/min-aggregation-function)<br>• [arg_min](/data-explorer/kusto/query/arg-min-aggregation-function) |[KQL example](#minx-kql-example) | |mvcount(X) |Returns the number (total) ofX values. |mvcount(multifield) |[dcount](/data-explorer/kusto/query/dcount-aggregation-function) |…| summarize dcount(X) by Y | |mvfilter(X) |Filters a multi-valued field based on the booleanX expression. |mvfilter(match(email, "net$")) |[mv-apply](/data-explorer/kusto/query/mv-apply-operator) |[KQL example](#mvfilterx-kql-example) | |mvindex(X,Y,Z) |Returns a subset of the multi-valuedXargument from a start position (zero-based)YtoZ (optional). |mvindex( multifield, 2) |[array_slice](/data-explorer/kusto/query/array-slice-function) |array_slice(arr, 1, 2) | |mvjoin(X,Y) |Given a multi-valued fieldXand string delimiterY, and joins the individual values of XusingY. |mvjoin(address, ";") |[strcat_array](/data-explorer/kusto/query/strcat-array-function) |[KQL example](#mvjoinxy-kql-example) | |now() |Returns the current time, represented in Unix time. |now() |[now()](/data-explorer/kusto/query/now-function) |now()<br><br>now(-2d) | |null() |Doesn't accept arguments and returnsNULL. |null() |[null](/data-explorer/kusto/query/scalar-data-types/null-values?pivots=azuredataexplorer) |null |nullif(X,Y) |Includes two arguments,XandY, and returns Xif the arguments are different. Otherwise, returnsNULL. |nullif(fieldA, fieldB) |[iff](/data-explorer/kusto/query/iff-function) |iff(fieldA==fieldB, null, fieldA) | |random() |Returns a pseudo-random number between0to2147483647. |random() |[rand()](/data-explorer/kusto/query/rand-function) |rand() | |relative_ time(X,Y) |Given an epoch timeXand relative time specifierY, returns the epoch time value of Yapplied toX. |relative_time(now(),"-1d@d") |[unix time](/data-explorer/kusto/query/datetime-timespan-arithmetic#example-unix-time) |[KQL example](#relative-timexy-kql-example) | |replace(X,Y,Z)|Returns a string formed by substituting stringZfor every occurrence of regular expression stringYin stringX. |Returns date with the month and day numbers switched.<br>For example, for the 4/30/2015input, the output is30/4/2009:<br><br>replace(date, "^(\d{1,2})/ (\d{1,2})/", "\2/\1/") |[replace()](/data-explorer/kusto/query/replace-string-function)|[KQL example](#replacexyz-kql-example) | |round(X,Y)|ReturnsXrounded to the number of decimal places specified byY. The default is to round to an integer. |round(3.5) |[round](/data-explorer/kusto/query/round-function) |round(3.5) | |rtrim(X,Y)|ReturnsXwith the characters ofYtrimmed from the right side. IfY isn't specified, spaces and tabs are trimmed. |rtrim(" ZZZZabcZZ ", " Z") |[trim_end()](/data-explorer/kusto/query/trim-end-function) |trim_end(@"[ Z]+",A) | |searchmatch(X)|ReturnsTRUEif the event matches the search stringX. |searchmatch("foo AND bar") |[iff()](/data-explorer/kusto/query/iff-function) |iff(field has "X","Yes","No")| |split(X,"Y")|ReturnsXas a multi-valued field, split by delimiterY. |split(address, ";") |[split()](/data-explorer/kusto/query/split-function) |split(address, ";") | |sqrt(X)|Returns the square root ofX. |sqrt(9) |[sqrt()](/data-explorer/kusto/query/sqrt-function) |sqrt(9) | |strftime(X,Y)|Returns the epoch time valueXrendered using the format specified byY. |strftime(_time, "%H:%M") |[format_datetime()](/data-explorer/kusto/query/format-datetime-function) |format_datetime(time,'HH:mm')| |strptime(X,Y)|Given a time represented by a stringX, returns value parsed from format Y. |strptime(timeStr, "%H:%M") |[format_datetime()](/data-explorer/kusto/query/format-datetime-function) |[KQL example](#strptimexy-kql-example) | |substr(X,Y,Z)|Returns a substring fieldXfrom start position (one-based)YforZ (optional) characters. |substr("string", 1, 3) |[substring()](/data-explorer/kusto/query/substring-function) |substring("string", 0, 3) | |time() |Returns the wall-clock time with microsecond resolution. |time() |[format_datetime()](/data-explorer/kusto/query/format-datetime-function) |[KQL example](#time-kql-example) | |tonumber(X,Y)|Converts input stringXto a number, whereY(optional, default value is10) defines the base of the number to convert to. |tonumber("0A4",16) |[toint()](/data-explorer/kusto/query/toint-function) |toint("123") | |tostring(X,Y) |[Description](#tostringxy) |[SPL example](#tostringxy-spl-example) |[tostring()](/data-explorer/kusto/query/tostring-function) |tostring(123) | |typeof(X) |Returns a string representation of the field type. |typeof(12) |[gettype()](/data-explorer/kusto/query/gettype-function) |gettype(12) | |urldecode(X)|Returns the URLX decoded. |[SPL example](#urldecodex-spl-example) |[url_decode`
|
KQL 示例 |
case(X,"Y",…) SPL 示例
case(error == 404, "Not found",
error == 500,"Internal Server Error",
error == 200, "OK")
case(X,"Y",…) KQL 示例
T
| extend Message = case(error == 404, "Not found",
error == 500,"Internal Server Error", "OK")
if(X,Y,Z) KQL 示例
iif(floor(Timestamp, 1d)==floor(now(), 1d),
"today", "anotherday")
isint(X) KQL 示例
iif(gettype(X) =="long","TRUE","FALSE")
isstr(X) KQL 示例
iif(gettype(X) =="string","TRUE","FALSE")
like(X,"y") 实例
… | where field has "addr"
… | where field contains "addr"
… | where field startswith "addr"
… | where field matches regex "^addr.*"
min(X,…) KQL 示例
min_of (expr_1, expr_2 ...)
…|summarize min(expr)
…| summarize arg_min(Price,*) by Product
mvfilter(X) KQL 示例
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
mvjoin(X,Y) KQL 示例
strcat_array(dynamic([1, 2, 3]), "->")
relative time(X,Y) KQL 示例
let toUnixTime = (dt:datetime)
{
(dt - datetime(1970-01-01))/1s
};
replace(X,Y,Z) KQL 示例
replace( @'^(\d{1,2})/(\d{1,2})/', @'\2/\1/',date)
strptime(X,Y) KQL 示例
format_datetime(datetime('2017-08-16 11:25:10'),
'HH:mm')
time() KQL 示例
format_datetime(datetime(2015-12-14 02:03:04),
'h:m:s')
tostring(X,Y)
以字符串形式返回 X 的字段值。
- 如果
X的值为数字,则将X的格式重设为字符串值。 - 如果
X为布尔值,则将X的格式重设为TRUE或FALSE。 - 如果
X为数字,则第二个参数Y是可选的,可以是hex(将X转换为十六进制)、commas(采用逗号设置X的格式,有两个小数位)或者duration(将X从以秒为单位的时间格式转换为可读时间格式:HH:MM:SS)。
tostring(X,Y) SPL 示例
此示例返回:
foo=615 and foo2=00:10:15:
… | eval foo=615 | eval foo2 = tostring(
foo, "duration")
urldecode(X) SPL 示例
urldecode("http%3A%2F%2Fwww.splunk.com%2Fdownload%3Fr%3Dheader")
常用 stats 命令 KQL 示例
| SPL 命令 | 说明 | KQL 命令 | KQL 示例 |
|---|---|---|---|
avg(X) |
返回字段 X 的平均值。 |
avg() | avg(X) |
count(X) |
返回字段 X 出现的次数。 若要指示要匹配的特定字段值,将 X 的格式设为 eval(field="value")。 |
count() | summarize count() |
dc(X) |
返回字段 X 的非重复值的计数。 |
dcount() | …\| summarize countries=dcount(country) by continent |
earliest(X) |
返回 X 按时间顺序最早出现的值。 |
arg_min() | … \| summarize arg_min(TimeGenerated, *) by X |
latest(X) |
返回 X 按时间顺序最晚出现的值。 |
arg_max() | … \| summarize arg_max(TimeGenerated, *) by X |
max(X) |
返回字段 X 的最大值。 如果 X 的值非数值,则按字母顺序排序找到最大值。 |
max() | …\| summarize max(X) |
median(X) |
返回字段 X 的最中间的值。 |
percentile() | …\| summarize percentile(X, 50) |
min(X) |
返回字段 X 的最小值。 如果 X 的值非数值,则按字母顺序排序找到最小值。 |
min() | …\| summarize min(X) |
mode(X) |
返回字段 X 最常出现的值。 |
top-hitters() | …\| top-hitters 1 of Y by X |
perc(Y) |
返回字段 X 的 Y 百分位值。 例如,perc5(total) 返回字段 total 的第五百分位值。 |
percentile() | …\| summarize percentile(Y, 5) |
range(X) |
返回字段 X 的最大值和最小值之间的差。 |
range() | range(1, 3) |
stdev(X) |
返回字段 X 的样本标准偏差。 |
stdev | stdev() |
stdevp(X) |
返回字段 X 的总体标准偏差。 |
stdevp() | stdevp() |
sum(X) |
返回字段 X 的值的总和。 |
sum() | sum(X) |
sumsq(X) |
返回字段 X 的值的平方和。 |
||
values(X) |
以多值条目的形式返回字段 X 的所有非重复值的列表。 值的顺序按字母顺序排列。 |
make_set() | …\| summarize r = make_set(X) |
var(X) |
返回字段 X 的样本方差。 |
方差 | variance(X) |
后续步骤
本文介绍了如何将迁移规则从 Splunk 映射到Microsoft Sentinel。