Forum Discussion
How to programmatically generate a link to open an App Insights KQL query?
- Nov 24, 2019
joruales Maybe a bit late, but as you probably noticed, a URL generated from "Copy Link to Query" has the following format:
https://portal.azure.com/#@TENANT_ID/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2FSUBSCRIPTION_ID%2FresourceGroups%2FRESOURCEGROUP%2Fproviders%2Fmicrosoft.insights%2Fcomponents%2FAPPINSIGHTSINSTANCENAME/source/LogsBlade.AnalyticsShareLinkToQuery/q/ENCODEDSTRING/timespan/TIMESPAN
The ENCODEDSTRING is your query zipped and URL encoded/escaped. You must use this approach when the query has more than 1600 characters. Otherwise, if your query has less than 1600 characters, you can replace the q parameter by a query parameter and the encoded string will simply be your query URL escaped. For instance:
https://portal.azure.com/#@TENANT_ID/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2FSUBSCRIPTION_ID%2FresourceGroups%2FRESOURCEGROUP%2Fproviders%2Fmicrosoft.insights%2Fcomponents%2FAPPINSIGHTSINSTANCENAME/source/LogsBlade.AnalyticsShareLinkToQuery/query/availabilityResults%20%7C%20where%20duration%20%3E%20500%20%7C%20take%201/timespan/TIMESPAN
would open your App Insights instance with the following query:
availabilityResults| where duration > 500| take 1
krishnachandar Did you ever figure out how to encode and zip the query in javascript? None of the methods below worked for me.
Just incase anyone else comes here looking for a complete implementation, I figured it out using hspinto :
import pako from 'pako'
const query = 'some query'
const compressed = pako.gzip(query, {to: "string"}) // gzip the query and set options to output as a string
const base64 = btoa(compressed) // base64 encode
const encodedQuery = encodeURIComponent(base64) // URI encode
console.log(encodedQuery)
Reference:
Can you reverse engineer Saved Query link to Application Insights? - Stack Overflow
How can you encode a string to Base64 in JavaScript? - Stack Overflow