如何将 url 中的工作簿参数传递给 Azure Monitor 工作簿?
Posted
技术标签:
【中文标题】如何将 url 中的工作簿参数传递给 Azure Monitor 工作簿?【英文标题】:How to pass workbook parameters in the url to an Azure Monitor Workbook? 【发布时间】:2021-11-26 01:39:43 【问题描述】:我想使用在 url 中传递的参数打开一个 Azure Monitor 工作簿。例如,要打开名为WorkBook1
的工作簿并通过Value1
和Parameter2
和Value2
传递Parameter1
,我希望能够执行以下操作:
https://portal.azure.com/.../workbook/WorkbookTemplateName/WorkBook1?Parameter1=Value1&Parameter2=Value2
此功能似乎没有在任何地方记录,但它似乎应该存在。是否可以将 url 中的工作簿参数传递给 Azure Monitor Notebook?
【问题讨论】:
【参考方案1】:没有记录,因为它真的依赖于 Azure 门户的 URL 实现,简单地说,这很复杂。 (我不想在这里隐藏组织结构图,但是在 azure 门户中深度链接的工作历史是一个漫长而复杂的故事,就像任何大型软件项目一样?)
话虽如此,这很复杂,我会着眼于获得关于公开发布的更好的文档(可能在我们的 GitHub Docs 中最快,最终到达我们的 Azure Docs),我会让它变得简单可以在这里...
开始最简单的方法是打开你想要的东西,然后使用工具栏中的“分享”项打开可以生成起始链接的工具(“分享刀片” )。该生成的链接应该包含您需要的所有内容除了下面的NotebookParams
参数。
它应该如下所示:
https://portal.azure.com/#blade/[name of extension]/[Name of view]/[inputName]/[inputValue]
扩展名始终为AppInsightsExtension
,如果您希望项目可编辑,则视图为UsageNotebookBlade
,如果您希望项目不可编辑,则视图为WorkbookViewerBlade
。 (这些都是历史名称,因为它们在创建时就被命名了,所以就是这样。我们正在努力清理其中的很多内容)
/inputname/input value
部分针对视图的每个输入重复,其中输入值是百分比编码的。您将可能看到的参数已设置,但可能还有更多:
ComponentId/[a url encoded resource/other id]
(组件 id 就像工作簿所在的“文件夹”,它可能位于“Azure Monitor”内,也可能位于特定虚拟机内,此值可能是完整的 Azure 资源 ID 等)
ConfigurationId/[a url encoded workbook resource id, or community template id]
配置 ID 也可以是模板 ID,例如“Community-[id]”,而不是特定工作簿的资源 ID。如果是保存的工作簿,您将看到一个完整的 azure 资源 ID,例如 /subscriptions/blah/resourcegroups/blah/providers/microsoft.insights/workbooks/id
,它也需要进行编码,因此您最终会得到类似 %2Fsubscriptions%2Fblah%2Fresourcegroups%2Fblah%2Fresourceprovider.resource%2Ftype%2Fid
的内容
您特别要求为工作簿设置一些特定参数的输入称为NotebookParams
NotebookParams/[encoded params]
url 中的编码参数是键/值参数的 JSON 序列化字典的百分比编码字符串。 (对于时间范围参数,它是一个带有 durationMs
字段的对象,如果设置了自定义时间范围,可能更多,您可以在设置参数后查看工作簿高级模式 JSON 以查看您需要的确切内容)。在此示例中,我将名为“timeRange”的时间范围参数设置为 5 分钟,并将名为“paramB”的文本参数设置为“香蕉”
“timeRange”:“durationMs”:300000
哪个得到百分比编码(包括空格=%20而不是空格=+)到:
%7B%22timeRange%22%3A%20%7B%20%22durationMs%22%3A%20300000%20%7D%2C%20%22paramB%22%3A%20%22banana%22%20%7D%0D%0A
参数的名称必须与内容中的名称完全匹配才能被连接,并且它们还需要位于工作簿的“顶层”。 (这通常不适用于嵌套在其他组中的参数)
完整的 url 看起来像这样:
https://portal.azure.com/#blade/AppInsightsExtension/UsageNotebookBlade/ComponentId/%2Fsubscriptions%2Fblah%2Fresourcegroups%2Fblah%2Fresourceprovider.resource%2Ftype%2Fnameofresource/ConfigurationId/%2Fsubscriptions%2Fblah%2Fresourcegroups%2Fblah%2Fproviders%2Fmicrosoft.insights%2Fworkbooks%0000000000-0000-0000-0000-000000000000/NotebookParams/%7B%22timeRange%22%3A%20%7B%20%22durationMs%22%3A%20300000%20%7D%2C%20%22paramB%22%3A%20%22banana%22%20%7D%0D%0A
但是:请,请,请不要这样做是为了在浏览器中设置“自动刷新”脚本以重复重新加载从头开始的工作簿。请改用工具栏中的自动刷新功能。工作簿内的自动刷新会按计划重新运行查询,这比加载整个门户、其所有依赖项、我们的扩展程序、所有依赖项等要轻得多。
如果自动刷新对您不起作用,请在 Azure 门户中的工作簿内填写反馈,或将首字母缩写 j、姓氏 gardner @ microsoft 发送给我,并附上您的场景详细信息。
【讨论】:
感谢您提供如此详细而有用的回复!使用你的解释,我得到了一个简单的文本参数。我会投票支持作为答案的响应,但我没有足够的声誉。 奇怪,你不能接受没有代表的自己问题的答案吗?这很奇怪,可能为什么有这么多有答案但没有被接受的问题? 这么有见地,我只是有同样的要求。我能够做到这一点。 但是,是否可以在 Log Analytics UI 中执行相同的操作?我可以将 KQL 查询作为 URL 参数传递给 Log Analytics 吗? 不完全一样,因为它的视图不同,但是有一个query
字段,如果足够短,您可以以类似的方式传递给日志分析。如果它是一个长查询,则需要对其进行 gzip 和 base64 编码并作为 q
参数传递?以上是关于如何将 url 中的工作簿参数传递给 Azure Monitor 工作簿?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 URL 中的数组作为参数传递给 Promise.all
如何将变量作为 cURL 数组中的 url 参数传递给 CURLOPT_URL
如何将 POST 参数传递给 Durable Function,然后将此参数传递给 Timer Triggered 函数