Azure Kusto - 在跟踪的消息字段上使用 extract()

Azure Kusto - Use extract() on message field from traces

我正在使用 Azure Log Analytics 作为 Azure Application Insights 的一部分。我正在尝试编写一些 Kusto 查询来解析使用 Application Insights Javascript SDK 生成的一些日志记录。以下是一些示例消息:

"index.ts: imports: 1556.916ms"
"index.ts: imports: 110.486ms import { } from '@azure/keyvault-secrets'"
"index.ts: imports: 110.396ms import { } from '@azure/event-hubs'"
"index.ts: imports: 110.023ms import { } from 'applicationinsights'"
"index.ts: imports: 0.131ms import { } from '@azure/functions'"

在 Azure Application Insights 内部的 Log Analytics 中,我尝试使用 extract() 从消息列中提取文件名。到目前为止,我的 Kusto 查询如下所示:

traces
| where message contains "imports" 
| extend file = extract("^.+\.ts", 1, message)
| sort by timestamp desc
| limit 100

当我尝试 运行 这个查询时,我收到一条错误消息:

Syntax Error

If issue persists, please open a support ticket.

Request id: 124e777f-136e-4a75-8fa7-a49483a12902

我错过了什么,我的错误在哪里?

您查询中的问题是:

  1. 您的字符串中有一个字符 (\) 需要转义或使用逐字字符串文字。在此处查看更多信息:https://docs.microsoft.com/en-us/azure/kusto/query/scalar-data-types/string

  2. 您的正则表达式中缺少捕获组。

如果你修复了这些,这应该可以工作:| extend file = extract(@"^(.+)\.ts", 1, s)

但是,无论如何,您可以使用更高效的 parse 运算符,如下所示:

datatable(s:string)
[
    "index.ts: imports: 1556.916ms",
    "index.ts: imports: 110.486ms import { } from '@azure/keyvault-secrets'",
    "index.ts: imports: 110.396ms import { } from '@azure/event-hubs'",
    "index.ts: imports: 110.023ms import { } from 'applicationinsights'",
    "index.ts: imports: 0.131ms import { } from '@azure/functions'",
]
| parse s with file ".ts" *