我想创建一个天蓝色监视器工作簿,让我搜索特定的消息模板。通常,这些消息模板包含占位符。例如:
logger.LogInformation("Finished executing, took {time}ms", time);
问题是,如果我在工作簿的查询字符串中包含占位符,它将失败,因为它认为占位符是工作簿的参数。下面可以看到一个非常小的例子。
AppTraces
| where Properties.MessageTemplate == 'Finished executing, took {time}ms'
这会给我以下错误消息:
This query could not run because some parameters are not set.
Please set: time
我似乎无法弄清楚如何转义这些字符,因为这实际上与 kusto 语言无关,而更多是工作簿的问题。有人可以建议吗?
不幸的是,我们(还)没有工作簿中参数的转义序列。
作为解决方法,您可以做的是将其拆分,这样工作簿就不会检测它作为参数,例如
strcat('Finished executing, took {', 'time}ms'
就我而言,我必须转义 Azure 函数的例外表中名为“prop__{OriginalFormat}”的自定义维度的引用。感谢 John Gardner,我发现我必须将其引用为 'prop__{''OriginalFormat}' 以避免被识别为参数。
它用于当您转到函数的“调用”选项卡、单击列表中找到的项目,然后单击“在 Application Insights 中运行查询”时获得的预定义查询中。仅供参考,它看起来像这样:
union traces
| union exceptions
| where timestamp > ago(30d)
| where operation_Id == 'f01ff81295679afbe2e04051bf42fe20'
| where customDimensions['InvocationId'] == '3b98ef04-d658-4c19-b1d1-9ad8913483a7'
| order by timestamp asc
| project
timestamp,
message = iff(message != '', message, iff(innermostMessage != '', innermostMessage, customDimensions.['prop__{OriginalFormat}'])),
logLevel = customDimensions.['LogLevel'],
severityLevel
因此,为了使查询在工作簿中正常工作,我必须将消息条件更改为:
message = iff(message != '', message, iff(innermostMessage != '', innermostMessage, customDimensions.['prop__{''OriginalFormat}'])),