如何为新的 AppInsights 查询生成 url?

How can I generate a url to a new AppInsights query?

我有一个生成 AppInsights 遥测数据的进程。我想向 AppInsights 中的查询证明 link。但是,每次都不是相同的查询 - 参数会发生变化。我知道我可以将 link 共享给现有查询,但是如何为新查询生成这样的 link?

在您的Application Insights 查询编辑器 中,我们有一个名为复制link 到查询 的选项。在这个 link 中,我们有以下详细信息: 此操作生成的 URL 具有以下格式:

https://portal.azure.com/#@ TENANT_ID/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F SUBSCRIPTION_ID %2FresourceGroups%2F< RESOURCEGROUP%2Fproviders%2Fmicrosoft.insights%2Fcomponents%2F APPLICATION INSIGHTS_INSTANCE_NAME /source/LogsBlade.AnalyticsShareLinkToQuery/q/ ENCODED BASE 64_KQL_QUERY /timespan/TIMESPAN

我在这里用粗体强调了 URL 的参数。这些参数具有以下值:

TENANT_ID: 您的租户 ID

SUBSCRIPTION_ID:包含 Application Insights 实例的 Azure 订阅 ID。

RESOURCE_GROUP: 部署 Application Insights 实例的资源组。

APPINSIGHTS_INSTANCE_NAME: 您的 Application Insights 实例名称。

ENCODED_KQL_QUERY: 查询文本的 Base64 编码压缩和 URL 编码

TIMESPAN: 查询的时间过滤器(可选)。

如果你的查询少于1600个字符,你也可以替换上面q参数90=] 带有 query 参数,编码的字符串将只是您的查询纯文本转义(没有压缩和编码)。

动态 URL重要的是:

  • 获取您的 KQL 查询的文本

  • 压缩

  • 用 Base64 编码

KQL 查询 进行编码的 C# 代码如下:

根据需要生成查询并将其传递到下面的函数中以获得编码的 base 64 URL,您可以将其添加到应用程序洞察的基础 URL 中。

    static string Encodedbase64KQLQuery(string query)
    {
        var bytes = System.Text.Encoding.UTF8.GetBytes(query);
        using (MemoryStream memoryStream = new MemoryStream())
        {
            using (GZipStream compressedStream = new GZipStream(memoryStream, CompressionMode.Compress, leaveOpen: true))
            {
                compressedStream.Write(bytes, 0, bytes.Length);
            }
        memoryStream.Seek(0, SeekOrigin.Begin);
        Byte[] bytedata = memoryStream.ToArray();
        string encodedBase64Query = Convert.ToBase64String(bytedata);
        return HttpUtility.UrlEncode(encodedBase64Query);
        }
    }

请访问这个blog 对我帮助很大