Splunk 到 Kusto 备份单
本文旨在帮助熟悉 Splunk 的用户学习 Kusto 查询语言,以便使用 Kusto 编写日志查询。 本文对二者进行了直接比较,以便强调它们的主要差异和相似之处,从而方便你在现有知识的基础上进行积累。
结构和概念
下表比较了 Splunk 和 Kusto 日志的概念与数据结构:
概念 | Splunk | Kusto | 评论 |
---|---|---|---|
部署单元 | cluster | cluster | Kusto 允许跨群集进行任意查询, Splunk 不允许。 |
数据缓存 | 存储桶 | 缓存和保留策略 | 控制数据的保留期和缓存级别。 此设置直接影响查询性能和部署成本。 |
数据的逻辑分区 | 索引 | database | 允许数据的逻辑隔离。 这两个实现都允许跨这些分区的联合与联接。 |
结构化事件元数据 | 空值 | 表 | Splunk 没有将事件元数据的概念公开给搜索语言。 Kusto 日志有表的概念,表包含列。 每个事件实例映射到行。 |
record | event | 行 | 仅限术语变化。 |
record 属性 | field | 列 | 在 Kusto 中,此设置预定义为表结构的一部分。 在 Splunk 中,每个事件有自身的字段集。 |
types | 数据类型 | 数据类型 | Kusto 数据类型更明确,因为它们是在列中设置的。 两者都能动态处理数据类型,并且两者的数据类型集(包括 JSON 支持)大致相同。 |
查询和搜索 | 搜索 | query | 概念在 Kusto 和 Splunk 之间在本质上相同。 |
事件引入时间 | 系统时间 | ingestion_time() |
在 Splunk 中,每个事件都会获取编制事件索引时的系统时间戳。 在 Kusto 中,可以定义名为 ingestion_time 的策略,用于公开可通过 ingestion_time() 函数引用的系统列。 |
函数
下表指定了 Kusto 中等效于 Splunk 函数的函数。
Splunk | Kusto | 评论 |
---|---|---|
strcat |
strcat() |
(1) |
split |
split() |
(1) |
if |
iff() |
(1) |
tonumber |
todouble() tolong() toint() |
(1) |
upper lower |
toupper() tolower() |
(1) |
replace |
replace_string() 、replace_strings() 或 replace_regex() |
(1) 尽管这两个产品中的 replace 函数采用三个参数,但这些参数是不同的。 |
substr |
substring() |
(1) 另请注意,Splunk 使用从 1 开始的索引。 Kusto 记录从 0 开始的索引。 |
tolower |
tolower() |
(1) |
toupper |
toupper() |
(1) |
match |
matches regex |
(2) |
regex |
matches regex |
在 Splunk 中,regex 是运算符。 在 Kusto 中,它是关系运算符。 |
searchmatch |
== | 在 Splunk 中,searchmatch 允许搜索确切的字符串。 |
random |
rand() rand(n) |
Splunk 的函数会返回 0 到 231-1 之间的数字。 Kusto 的函数会返回 0.0 到 1.0 之间的数字;如果提供了参数,则会返回 0 到 n-1 之间的数字。 |
now |
now() |
(1) |
relative_time |
totimespan() |
(1) 在 Kusto 中,Splunk 的 relative_time(datetimeVal, offsetVal) 等效项为 datetimeVal + totimespan(offsetVal) 。例如, search | eval n=relative_time(now(), "-1d@d") 变成了 ... | extend myTime = now() - totimespan("1d") 。 |
(1) 在 Splunk 中,使用 eval
运算符调用该函数。 在 Kusto 中,它用作 extend
或 project
的一部分。
(2) 在 Splunk 中,使用 eval
运算符调用该函数。 在 Kusto 中,该函数可以与 where
运算符配合使用。
运算符
以下部分通过示例演示如何在 Splunk 和 Kusto 中使用不同的运算符。
注意
在以下示例中,Splunk 字段 rule
映射到 Kusto 中的某个表,Splunk 的默认时间戳映射到 Logs Analytics 的 ingestion_time()
列。
搜索
在 Splunk 中,可以省略 search
关键字,并指定不带引号的字符串。 在 Kusto 中,每个查询必须以 find
开头,不带引号的字符串是列名,查找值必须是带引号的字符串。
产品 | 运算符 | 示例 |
---|---|---|
Splunk | search |
search Session.Id="c8894ffd-e684-43c9-9125-42adc25cd3fc" earliest=-24h |
Kusto | find |
find Session.Id=="c8894ffd-e684-43c9-9125-42adc25cd3fc" and ingestion_time()> ago(24h) |
筛选器
Kusto 日志查询从应用了 filter
的表格结果集开始。 在 Splunk 中,筛选是针对当前索引执行的默认操作。 你还可以在 Splunk 中使用 where
运算符,但我们不建议那样做。
产品 | 运算符 | 示例 |
---|---|---|
Splunk | search |
Event.Rule="330009.2" Session.Id="c8894ffd-e684-43c9-9125-42adc25cd3fc" _indextime>-24h |
Kusto | where |
Office_Hub_OHubBGTaskError | where Session_Id == "c8894ffd-e684-43c9-9125-42adc25cd3fc" and ingestion_time() > ago(24h) |
获取要检查的 n 个事件或行
Kusto 日志查询还支持将 take
用作 limit
的别名。 在 Splunk 中,如果结果已排序,则 head
会返回前 n 个结果。 在 Kusto 中,limit
不会排序,而是返回找到的前 n 行。
产品 | 运算符 | 示例 |
---|---|---|
Splunk | head |
Event.Rule=330009.2 | head 100 |
Kusto | limit |
Office_Hub_OHubBGTaskError | limit 100 |
获取按字段或列排序的前 n 个事件或行
对于底部结果,在 Splunk 中可以使用 tail
。 在 Kusto 中,可以使用 asc
指定排序方向。
产品 | 运算符 | 示例 |
---|---|---|
Splunk | head |
Event.Rule="330009.2" | sort Event.Sequence | head 20 |
Kusto | top |
Office_Hub_OHubBGTaskError | top 20 by Event_Sequence |
使用新字段或列扩展结果集
Splunk 有一个 eval
函数,但该函数不可与 Kusto 中的 eval
运算符相比。 Splunk 中的 eval
运算符与 Kusto 中的 extend
运算符均仅支持标量函数和算术运算符。
产品 | 运算符 | 示例 |
---|---|---|
Splunk | eval |
Event.Rule=330009.2 | eval state= if(Data.Exception = "0", "success", "error") |
Kusto | extend |
Office_Hub_OHubBGTaskError | extend state = iff(Data_Exception == 0,"success" ,"error") |
重命名
Kusto 使用 project-rename
运算符来重命名字段。 在 project-rename
运算符中,查询可以利用为字段预先生成的任何索引。 Splunk 提供的 rename
运算符也有相同的作用。
产品 | 运算符 | 示例 |
---|---|---|
Splunk | rename |
Event.Rule=330009.2 | rename Date.Exception as execption |
Kusto | project-rename |
Office_Hub_OHubBGTaskError | project-rename exception = Date_Exception |
设置结果和投影的格式
Splunk 使用 table
命令选择要包含在结果中的列。 Kusto 提供的 project
运算符也有相同的作用,甚至更多。
产品 | 运算符 | 示例 |
---|---|---|
Splunk | table |
Event.Rule=330009.2 | table rule, state |
Kusto | project |
Office_Hub_OHubBGTaskError | project exception, state |
Splunk 使用 fields -
命令选择要从结果中排除的列。 Kusto 提供的 project-away
运算符也有相同的作用。
产品 | 运算符 | 示例 |
---|---|---|
Splunk | fields - |
Event.Rule=330009.2 | fields - quota, hightest_seller |
Kusto | project-away |
Office_Hub_OHubBGTaskError | project-away exception, state |
聚合
请参阅可用的 summarize 聚合函数的列表。
Splunk 运算符 | Splunk 示例 | Kusto 运算符 | Kusto 示例 |
---|---|---|---|
stats |
search (Rule=120502.*) | stats count by OSEnv, Audience |
summarize |
Office_Hub_OHubBGTaskError | summarize count() by App_Platform, Release_Audience |
evenstats |
... | stats count_i by time, category | eventstats sum(count_i) AS count_total by _time_ |
join |
T2 | join kind=inner (T1) on _time | project _time, category, count_i, count_total |
联接
Splunk 中的 join
具有实质性的限制。 子查询限制为 10,000 条结果(在部署配置文件中设置),联接风格数目也有限制。
产品 | 运算符 | 示例 |
---|---|---|
Splunk | join |
Event.Rule=120103* | stats by Client.Id, Data.Alias | join Client.Id max=0 [search earliest=-24h Event.Rule="150310.0" Data.Hresult=-2147221040] |
Kusto | join |
cluster("OAriaPPT").database("Office PowerPoint").Office_PowerPoint_PPT_Exceptions | where Data_Hresult== -2147221040 | join kind = inner (Office_System_SystemHealthMetadata | summarize by Client_Id, Data_Alias)on Client_Id |
Sort
默认排序顺序为升序。 若要指定降序,请在字段名称前添加减号 (-
)。 Kusto 还支持定义 null 值的放置位置:开头或末尾。
产品 | 运算符 | 示例 |
---|---|---|
Splunk | sort |
Event.Rule=120103 | sort -Data.Hresult |
Kusto | order by |
Office_Hub_OHubBGTaskError | order by Data_Hresult, desc |
多值扩展
多值扩展运算符在 Splunk 和 Kusto 中类似。
产品 | 运算符 | 示例 |
---|---|---|
Splunk | mvexpand |
mvexpand solutions |
Kusto | mv-expand |
mv-expand solutions |
结果 facet、相关字段
在 Azure 门户的 Log Analytics 中,仅公开第一列。 可通过 API 查看所有列。
产品 | 运算符 | 示例 |
---|---|---|
Splunk | fields |
Event.Rule=330009.2 | fields App.Version, App.Platform |
Kusto | facets |
Office_Excel_BI_PivotTableCreate | facet by App_Branch, App_Version |
删除重复数据
在 Kusto 中,可以使用 summarize arg_min()
来反转记录的选择顺序。
产品 | 运算符 | 示例 |
---|---|---|
Splunk | dedup |
Event.Rule=330009.2 | dedup device_id sortby -batterylife |
Kusto | summarize arg_max() |
Office_Excel_BI_PivotTableCreate | summarize arg_max(batterylife, *) by device_id |
相关内容
- 演练 Kusto 查询语言教程。