Kusto 查询语言概述

适用于:✅Azure 数据资源管理器Azure Monitor✅ Sentinel

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 的表的引用开头,并包含多个运算符,wherecount,每个运算符由管道分隔。 源表的数据行按 StartTime 列的值进行筛选,然后按 State 列的值进行筛选。 在最后一行中,查询返回一个表,其中包含一列和一行,其中包含剩余行的计数。

若要尝试更多 Kusto 查询,请参阅 教程:编写 Kusto 查询。

管理命令

与 Kusto 查询不同,管理命令 是向 Kusto 请求处理或修改数据或元数据。 例如,下面的管理命令创建一个新的 Kusto 表,其中包含两列,LevelText

.create table Logs (Level:string, Text:string)

管理命令有自己的语法,这不是 KQL 语法的一部分,尽管这两个命令有许多概念。 具体而言,管理命令通过命令文本中的第一个字符是点(.)字符(无法启动查询)来区分查询。 这种区别可以防止多种安全攻击,只是因为它阻止在查询中嵌入管理命令。

并非所有管理命令都修改数据或元数据。 从 .show开始的大型命令类用于显示元数据或数据。 例如,.show tables 命令返回当前数据库中所有表的列表。

有关管理命令的详细信息,请参阅 管理命令概述

其他服务中的 KQL

KQL 由许多其他Microsoft服务使用。 有关在这些环境中使用 KQL 的具体信息,请参阅以下链接: