有没有办法检查 Log Analytics 字段中的子字符串是否存在?

Is there a way to check if substring in field for Log Analytics?

我在 Log Analytics 中有一列计算机。例如,“window432,linus909,windows322,linux432”。我正在过滤我的磁盘利用率,但我还想按特定单词“window”或“lin”进行过滤。那可能吗?我正在使用 Kusto 进行查询,下面是我的思考过程的示例:

Perf
| where Name == "Utilization Percentage"
and "win" in Computer

像这样。那可能吗? 谢谢。

如果我对描述的理解正确,这可能有效。

它:

  1. 使用 split()
  2. 拆分原始逗号分隔字符串
  3. 扩展那些使用 mv-apply
  4. 过滤掉不包含win
  5. 的值
  6. 将剩余的值聚合成一个新的(过滤后的)逗号分隔字符串
datatable(Computers:string, id:int)
[
    "window432, linus909, windows322, linux432", 1,
    "window451, linux459, windows444, linux234", 2,
    "android222, ios222, linux333"             , 3
]
| mv-apply Computer = split(Computers, ", ") on (
    where Computer contains "win"
    | summarize Computers = strcat_array(make_list(Computer), ", ")
)
| where isnotempty(Computers)

输入:

| Computers                                 | id |
|-------------------------------------------|----|
| window432, linus909, windows322, linux432 | 1  |
| window451, linux459, windows444, linux234 | 2  |
| android222, ios222, linux333              | 3  |

输出:

| id | Computers             |
|----|-----------------------|
| 1  | window432, windows322 |
| 2  | window451, windows444 |

根据问题中的给定信息和我的理解,要求是根据以“window”或“lin”开头的计算机名称进行过滤。

如果是这种情况,那么您可以使用 startswith string operator 来完成要求。

查询类似于:

Perf
| where CounterName == @"% Processor Time" and InstanceName == "_Total"
| where Computer startswith "window" or Computer startswith "lin"

InsightsMetrics
| where Name == "UtilizationPercentage"
| where Computer startswith "window" or Computer startswith "lin"

同样,根据需要,您可以根据需要利用其他字符串运算符,如“in”、“has”、“endswith”等字符串运算符或任何其他运算符或函数。关于w.r.t的更多信息,请参考Kusto Query Language (KQL)文档。