在消息模板中搜索 {time},而不让工作簿将其解析为参数

问题描述 投票:0回答:2

我想创建一个天蓝色监视器工作簿,让我搜索特定的消息模板。通常,这些消息模板包含占位符。例如:

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 语言无关,而更多是工作簿的问题。有人可以建议吗?

azure-monitoring azure-monitor-workbooks
2个回答
2
投票

不幸的是,我们(还)没有工作簿中参数的转义序列。

作为解决方法,您可以做的是将其拆分,这样工作簿就不会检测它作为参数,例如

strcat('Finished executing, took {', 'time}ms'


0
投票

就我而言,我必须转义 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}'])),
© www.soinside.com 2019 - 2024. All rights reserved.