Kusto 查询语言概述

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

Kusto 查询语言(KQL)是一种功能强大的工具,用于浏览数据和发现模式、识别异常和离群值、创建统计建模等。

KQL 是一种简单但功能强大的语言,可用于查询结构化数据、半结构化数据和非结构化数据。 这种语言富有表达力、易于阅读和理解查询意向,并已针对创作体验进行优化。 KQL 最适合用于查询遥测、指标和日志,支持文本搜索和分析、时序运算符和函数、分析和聚合、地理空间、矢量相似性搜索以及许多其他语言构造,这些构造为数据分析提供了最佳语言。 该查询使用以类似于 SQL 的层次结构组织的架构实体:数据库、表和列。

如果在编写脚本或处理数据库方面有背景信息,则本文的内容应该很熟悉。 如果不是,别担心,因为语言的直观性使你能够开始为组织编写自己的查询和推动价值。

本文提供查询语言的说明,并提供可帮助你开始编写查询的实践练习。 若要访问查询环境,请使用 Azure 数据资源管理器 Web UI。 若要了解如何使用 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),每个运算符用竖线进行分隔。 源表的数据行先按 StartTime 列的值进行筛选,然后再按 State 列的值进行筛选。 在上一行中,查询返回包含一列和一行的表,其中包含剩余行的计数。

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

管理命令

与 Kusto 查询形成对比,管理命令是向 Kusto 发出的请求,请求处理或修改数据或元数据。 例如,以下管理命令创建一个新的 Kusto 表,该表包含两个列,即 LevelText

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

管理命令有自己的语法,这不是 KQL 语法的一部分,尽管这两个命令有许多概念。 具体说来,管理命令不同于查询的一点是:命令文本中的第一个字符为句点 (.)(此字符不能启动查询)。 这种区别可以防范许多种类的安全攻击,因为无法在查询中嵌入管理命令。

并非所有管理命令都修改数据或元数据。 以 .show 开头的一大类命令用于显示元数据或数据。 例如,.show tables 命令返回一个列表,其中包含当前数据库中的所有表。

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

其他服务中的 KQL

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