Kusto 查询语言 (KQL) 是一种功能强大的工具,可用于探索数据、发现模式、识别异常和离群值、创建统计建模等。
KQL 是一种简单而强大的语言,用于查询结构化、半结构化和非结构化数据。 语言具有表达性、易于阅读和理解查询意向,并针对创作体验进行优化。 KQL 最适合用于查询遥测、指标和日志,支持文本搜索和分析、时序运算符和函数、分析和聚合、地理空间、矢量相似性搜索以及许多其他语言构造,这些构造为数据分析提供了最佳语言。 该查询使用在类似于 SQL 的层次结构中组织的架构实体:数据库、表和列。
如果在编写脚本或处理数据库方面有背景信息,本文的大部分内容都应该很熟悉。 如果没有,请不要担心,因为该语言的直观性将很快使你能够开始编写自己的查询,并为组织带来价值。
本文提供查询语言的说明,并提供实际练习来帮助你开始编写查询。 若要访问查询环境,请使用 Azure 数据资源管理器 Web UI。 若要了解如何使用 KQL,请参阅 教程:了解常见运算符。
本文提供查询语言的说明,并提供实际练习来帮助你开始编写查询。 若要访问查询环境,请使用 KQL 查询集。 若要了解如何使用 KQL,请参阅 教程:了解常见运算符。
KQL 也是在 Microsoft Sentinel 中处理和作数据的语言。 如果无法分析馈送到工作区中的日志,并且无法获取隐藏在所有这些数据中的重要信息,那么这些日志便没有多大的价值。 KQL 不仅具有获取该信息的强大功能和灵活性,而且具有帮助快速入门的简单性。
本文介绍 KQL 的基础知识,涵盖了一些最常用的函数和运算符,这些函数和运算符应解决用户每天写入的 75% 到 80% 的查询。 如果需要更深入的查询或运行更高级的查询,可以利用 Advanced KQL for Microsoft Sentinel 工作簿。
为什么为 Microsoft Sentinel 使用 KQL?
Microsoft Sentinel 基于 Azure Monitor 服务构建,它使用 Azure Monitor 的 Log Analytics 工作区来存储其所有数据。 该数据包括以下任意一项:
- 使用 Microsoft Sentinel 数据连接器从外部源引入到预定义表中的数据。
- 使用自定义创建的数据连接器以及某些类型的现成连接器,从外部源引入到用户定义的自定义表中的数据。
- 由 Microsoft Sentinel 本身创建的数据,这些数据来源于它创建和执行的分析(例如警报、事件和 UEBA 相关信息)。
- 上传到 Microsoft Sentinel 以帮助进行检测和分析的数据,例如威胁情报源和监视列表。
KQL 是 Azure 数据资源管理器 服务的一部分开发的,因此它已针对在云环境中搜索大数据存储进行优化。 它旨在帮助你深入了解数据并探索其隐藏的宝藏。
KQL 还用于 Azure Monitor,并支持额外的 Azure Monitor 功能,使你可以在 Log Analytics 数据存储中检索、可视化、分析和分析数据。 在 Microsoft Sentinel 中,无论在现有规则和工作簿中,还是在构建自己的规则和工作簿中,你都会使用基于 KQL 的工具进行可视化和分析,并搜寻威胁。
由于 KQL 是你在 Microsoft Sentinel 中执行的所有作的一部分,因此清楚地了解它的工作原理有助于你充分利用 SIEM。
什么是 Kusto 查询?
Kusto 查询是处理数据和返回结果的只读请求。 该请求使用易于读取、创作和自动化的数据流模型以纯文本形式声明。 Kusto 查询由一个或多个查询语句组成。
Kusto 查询不写入任何数据。 查询对组织为数据库、表和列层次结构的数据进行操作,类似于 SQL。
什么是查询语句?
有三种类型的用户 查询语句:
所有查询语句都用 ;
(分号)分隔,并且只影响手头的查询。
注意
有关应用程序查询语句的信息,请参阅 应用程序查询语句。
最常见的查询语句类型是表格表达式 语句,这意味着其输入和输出都包含表或表格数据集。 表格语句包含零个或多个 运算符,每个运算符以表格输入开头,并返回表格输出。 运算符按 |
(管道)排序。 数据流,或通过管道从一个运算符到下一个运算符。 在每个步骤中筛选或操作数据,然后馈送到以下步骤中。
这就像漏斗图,从整个数据表开始。 每次数据通过另一个运算符时,都会对其进行筛选、重新排列或汇总。 由于从一个运算符到另一个运算符的信息的管道是连续的,因此查询运算符顺序非常重要,并且可能会影响结果和性能。 漏斗图结束时,会留下一个优化输出。
让我们看看一个示例查询。
StormEvents
| where StartTime between (datetime(2007-11-01) .. datetime(2007-12-01))
| where State == "FLORIDA"
| count
计数 |
---|
28 |
注意
KQL 对于所有内容都区分大小写 - 表名、表列名、运算符、函数等。
关键字可以通过将关键字括在括号和引号(['
和 ']
或 ["
和 "]
)中来用作标识符。 例如,['where']
。 有关详细信息,请参阅 标识符命名规则
此查询具有单个表格表达式语句。 该语句以对名为 stormEvents 的表的引用开头,并包含多个运算符,where
和 count
,每个运算符由管道分隔。 源表的数据行按 StartTime 列的值进行筛选,然后按 State 列的值进行筛选。 在最后一行中,查询返回一个表,其中包含一列和一行,其中包含剩余行的计数。
若要尝试更多 Kusto 查询,请参阅 教程:编写 Kusto 查询。
管理命令
与 Kusto 查询不同,管理命令 是向 Kusto 请求处理或修改数据或元数据。 例如,下面的管理命令创建一个新的 Kusto 表,其中包含两列,Level
和 Text
:
.create table Logs (Level:string, Text:string)
管理命令有自己的语法,这不是 KQL 语法的一部分,尽管这两个命令有许多概念。 具体而言,管理命令通过命令文本中的第一个字符是点(.
)字符(无法启动查询)来区分查询。
这种区别可以防止多种安全攻击,只是因为它阻止在查询中嵌入管理命令。
并非所有管理命令都修改数据或元数据。 从 .show
开始的大型命令类用于显示元数据或数据。 例如,.show tables
命令返回当前数据库中所有表的列表。
有关管理命令的详细信息,请参阅 管理命令概述。
其他服务中的 KQL
KQL 由许多其他Microsoft服务使用。 有关在这些环境中使用 KQL 的具体信息,请参阅以下链接:
- 在 Azure Monitor 中
日志查询 - 了解 Azure Resource Graph 查询语言
- 主动搜寻Microsoft 365 Defender 中的高级搜寻威胁
- CMPivot 查询