教程:了解常用运算符

Kusto 查询语言 (KQL) 用于在 Azure 数据资源管理器Azure Monitor Log AnalyticsAzure Sentinel 等应用程序中编写查询。 本教程介绍用于访问和分析数据的基本 KQL 运算符。

有关如何在 Azure Monitor 中查询日志的更为具体的指导,请参阅日志查询入门

注意

找不到要查找的内容? 本文最近已拆分,如下所示:

本教程介绍以下操作:

本教程中的示例使用 StormEvents 表,该表已在帮助群集中公开提供。

先决条件

  • 用于登录到帮助群集的 Microsoft 帐户或 Microsoft Entra 用户标识

统计行数

首先使用 count 运算符查找 StormEvents 表中的风暴记录数。

StormEvents 
| count

输出

计数
59066

查看数据样本

若要大致了解数据,请使用 take 运算符查看记录样本。 此运算符返回表中指定数量的任意行,这些行可用于预览一般数据结构和内容。

StormEvents 
| take 5

下表仅显示了 22 个返回列中的 6 个。 若要查看完整输出,请运行查询。

StartTime EndTime EpisodeId EventId 状态 EventType ...
2007-09-20T21:57:00Z 2007-09-20T22:05:00Z 11078 60913 佛罗里达州 龙卷风 ...
2007-12-20T07:50:00Z 2007-12-20T07:53:00Z 12554 68796 密西西比州 雷雨大风 ...
2007-12-30T16:00:00Z 2007-12-30T16:05:00Z 11749 64588 佐治亚州 雷雨大风 ...
2007-09-29T08:11:00Z 2007-09-29T08:11:00Z 11091 61032 大西洋南部 Waterspout ...
2007-09-18T20:00:00Z 2007-09-19T18:00:00Z 11074 60904 佛罗里达州 暴雨 ...

选择列的子集

使用 project 运算符来简化视图并选择特定的列子集。 使用 project 通常比查看所有列更高效且更易于阅读。

StormEvents
| take 5
| project State, EventType, DamageProperty

输出

状态 EventType DamageProperty
大西洋南部 Waterspout 0
佛罗里达州 暴雨 0
佛罗里达州 龙卷风 6200000
佐治亚州 雷雨大风 2000
密西西比州 雷雨大风 20000

列出唯一值

根据以上查询的结果,似乎有多种类型的风暴。 使用 distinct 运算符列出所有唯一的风暴类型。

StormEvents 
| distinct EventType

表中有 46 种类型的风暴。 下面是其中 10 种类型的示例。

EventType
雷雨大风
冰雹
山洪
Drought
冬季天气
冬季风暴
大雪
疾风
霜冻/冰冻
洪水
...

按条件筛选

where 运算符根据特定的条件筛选数据行。

以下查询在特定 EventType 的特定 State 中查找风暴事件。

StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| project StartTime, EndTime, State, EventType, DamageProperty

有 146 个事件与这些条件匹配。 下面是其中 5 个事件的示例。

StartTime EndTime 状态 EventType DamageProperty
2007-01-13T08:45:00Z 2007-01-13T10:30:00Z 德克萨斯 洪水 0
2007-01-13T09:30:00Z 2007-01-13T21:00:00Z 德克萨斯 洪水 0
2007-01-13T09:30:00Z 2007-01-13T21:00:00Z 德克萨斯 洪水 0
2007-01-15T22:00:00Z 2007-01-16T22:00:00Z 德克萨斯 洪水 20000
2007-03-12T02:30:00Z 2007-03-12T06:45:00Z 德克萨斯 洪水 0
... ... ... ... ...

对结果进行排序

若要查看德克萨斯州造成最严重损害的严重洪灾,请使用 sort 运算符根据 DamageProperty 列按降序排列行。 默认的排序顺序为降序。 若要按升序排序,请指定 asc

StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| sort by DamageProperty
| project StartTime, EndTime, State, EventType, DamageProperty

输出

StartTime EndTime 状态 EventType DamageProperty
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z 德克萨斯 洪水 5000000
2007-06-27T00:00:00Z 2007-06-27T12:00:00Z 德克萨斯 洪水 1200000
2007-06-28T18:00:00Z 2007-06-28T23:00:00Z 德克萨斯 洪水 1000000
2007-06-27T00:00:00Z 2007-06-27T08:00:00Z 德克萨斯 洪水 750000
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z 德克萨斯 洪水 750000
... ... ... ... ...

获取前 n 行

top 运算符返回按指定列排序的前 n 行。

以下查询返回在德克萨斯州造成最严重财产损失的五次洪灾。

StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| top 5 by DamageProperty
| project StartTime, EndTime, State, EventType, DamageProperty

输出

StartTime EndTime 状态 EventType DamageProperty
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z 德克萨斯 洪水 5000000
2007-06-27T00:00:00Z 2007-06-27T12:00:00Z 德克萨斯 洪水 1200000
2007-06-28T18:00:00Z 2007-06-28T23:00:00Z 德克萨斯 洪水 1000000
2007-06-27T00:00:00Z 2007-06-27T08:00:00Z 德克萨斯 洪水 750000
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z 德克萨斯 洪水 750000

注意

运算符的顺序非常重要。 如果此处你将 top 放在 where 之前,则会得到不同的结果。 这是因为,数据将按顺序由每个运算符转换。 若要了解详细信息,请参阅表格表达式语句

创建计算列

projectextend 运算符都可以创建计算列。

使用 project 可以仅指定要查看的列,而使用 extend 可将计算列追加到表的末尾。

以下查询创建 Duration 计算列,其中包含 StartTimeEndTime 之差。 由于我们只想查看少数几个选定列,因此在这种情况下最好使用 project

StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| top 5 by DamageProperty desc
| project StartTime, EndTime, Duration = EndTime - StartTime, DamageProperty

输出

StartTime EndTime 持续时间 DamageProperty
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z 1.01:30:00 5000000
2007-06-27T00:00:00Z 2007-06-27T12:00:00Z 12:00:00 1200000
2007-06-28T18:00:00Z 2007-06-28T23:00:00Z 05:00:00 1000000
2007-06-27T00:00:00Z 2007-06-27T08:00:00Z 08:00:00 750000
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z 03:00:00 750000

如果查看 Duration 计算列的话,你可能会注意到,造成最大损害的洪灾也是持续时间最长的洪灾。

使用 extend 查看 Duration 计算列以及所有其他列。 Duration 列添加为最后一列。

StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| top 5 by DamageProperty desc
| extend Duration = EndTime - StartTime

输出

StartTime EndTime ... 持续时间
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z ... 1.01:30:00
2007-06-27T00:00:00Z 2007-06-27T12:00:00Z ... 12:00:00
2007-06-28T18:00:00Z 2007-06-28T23:00:00Z ... 05:00:00
2007-06-27T00:00:00Z 2007-06-27T08:00:00Z ... 08:00:00
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z ... 03:00:00

将值从一个集映射到另一个集

静态映射是一种用于更改结果表示形式的有用方法。 在 KQL 中,执行静态映射的一种方法是使用动态字典和访问器将值从一个集映射到另一个集。

let sourceMapping = dynamic(
  {
    "Emergency Manager" : "Public",
    "Utility Company" : "Private"
  });
StormEvents
| where Source == "Emergency Manager" or Source == "Utility Company"
| project EventId, Source, FriendlyName = sourceMapping[Source]

输出

EventId Source FriendlyName
68796 灾害管理 公共
... ... ...
72609 公用事业公司 私有
... ... ...

下一步

熟悉有关编写 Kusto 查询的基本知识后,请继续学习下一篇教程,了解如何使用聚合函数来获取数据的更深入见解。