Kusto循环数组与子查询

问题描述

我试图定义一个数组并遍历整个数组,以查找消息中数组中包含元素的位置的跟踪。是否有可能做到这一点?例如:

let myIds = datatable (name: string)
[
 "111","222","333",];

forach (id in myIds)
{
  traces
  | where message contains id
}

我知道这不是上面的正确语法,但希望它能解释我要实现的目标。简而言之,遍历数组并在我的日志(特别是跟踪)中执行查找。

解决方法

第一个选项是使用 has_any。这是一个更简单的解决方案,可能适用于您的用例,但前提是您的 ID 在消息中显示为离散的 term

因此,如果消息的格式为“blah blah ID: 111”,它将被接收,但如果它是另一个单词的一部分,则不会(因为 has 的工作方式与 {{ 略有不同) 1}}).

contains

如果您需要 let myIds = datatable (name: string) [ "111","222","333"]; let traces=datatable(message:string) ["aaaaaaaaaaaaaaaa","blah blah 111","blah111 blah","111blah"]; traces | where message has_any (myIds) 的功能(如果您需要找到 111 的每个实例),那么您可以使用 contains。这会循环遍历您的 mv-apply 子表,并分别与每个条目进行比较,然后合并所有结果。请注意,这意味着如果在同一条消息中匹配多个 ID,您可能会得到重复。

myIds
,

您可以使用mv-expandmv-apply