Application Insights 'invalid instrumentation key' 使用来自 Azure Gov Cloud 的密钥用于 javascript SDK

Application Insights 'invalid instrumentation key' when using key from Azure Gov Cloud for javascript SDK

正在将我的网站迁移到政府云,但我遇到的问题之一是来自政府云的应用程序洞察工具密钥似乎不起作用。我得到的 post 回复是:

{"itemsReceived":7,"itemsAccepted":0,"errors":[{"index":0,"statusCode":400,"message":"Invalid instrumentation key"},{"index":1,"statusCode":400,"message":"Invalid instrumentation key"},{"index":2,"statusCode":400,"message":"Invalid instrumentation key"},{"index":3,"statusCode":400,"message":"Invalid instrumentation key"},{"index":4,"statusCode":400,"message":"Invalid instrumentation key"},{"index":5,"statusCode":400,"message":"Invalid instrumentation key"},{"index":6,"statusCode":400,"message":"Invalid instrumentation key"}]}

我仍在跟踪一些数据,从将我的 Web 应用程序链接到应用程序洞察直接给我一些我在我的应用程序中使用的信息(如 https://docs.microsoft.com/en-us/azure/azure-monitor/app/azure-web-apps?tabs=net ), but the javascript SDK ( https://docs.microsoft.com/en-us/azure/azure-monitor/app/javascript)是错误的。如果我从常规 azure 云中给它一个检测密钥,它工作正常,但如果我从 gov 云中给它一个,那么它将无法工作。

我知道密钥是正确的,我知道我的见解是 运行 否则它根本不会记录任何 activity。看起来 azure gov cloud 不喜欢 javascript SDK。

Azure Gov 中的 App Insights 具有与 Azure 常规(商业)不同的端点,如评论中所述,您将需要使用这些端点而不是使用常规端点。

您可以在此处了解有关 Azure Gov 中 App Insights(以及一般的 Azure Monitoring)的更多信息:https://docs.microsoft.com/en-us/azure/azure-government/documentation-government-services-monitoringandmanagement

来自同一个link:

将您的 NodeJS 应用程序配置为以 Azure Gov 区域中的 App Insights 为目标:

var appInsights = require("applicationinsights");
appInsights.setup('INSTRUMENTATION_KEY');
appInsights.defaultClient.config.endpointUrl = "https://dc.applicationinsights.us/v2/track"; // ingestion
appInsights.defaultClient.config.profileQueryEndpoint = "https://dc.applicationinsights.us/api/profiles/{0}/appId"; // appid/profile lookup
appInsights.defaultClient.config.quickPulseHost = "https://quickpulse.applicationinsights.us/QuickPulseService.svc"; //live metrics
appInsights.Configuration.start();

配置您的 JavaScript 应用程序以在 Azure Gov 区域中定位 App Insights:

<script type="text/javascript">
   var sdkInstance="appInsightsSDK";window[sdkInstance]="appInsights";var aiName=window[sdkInstance],aisdk=window[aiName]||function(e){
      function n(e){t[e]=function(){var n=arguments;t.queue.push(function(){t[e].apply(t,n)})}}var t={config:e};t.initialize=!0;var i=document,a=window;setTimeout(function(){var n=i.createElement("script");n.src=e.url||"https://az416426.vo.msecnd.net/next/ai.2.min.js",i.getElementsByTagName("script")[0].parentNode.appendChild(n)});try{t.cookie=i.cookie}catch(e){}t.queue=[],t.version=2;for(var r=["Event","PageView","Exception","Trace","DependencyData","Metric","PageViewPerformance"];r.length;)n("track"+r.pop());n("startTrackPage"),n("stopTrackPage");var s="Track"+r[0];if(n("start"+s),n("stop"+s),n("setAuthenticatedUserContext"),n("clearAuthenticatedUserContext"),n("flush"),!(!0===e.disableExceptionTracking||e.extensionConfig&&e.extensionConfig.ApplicationInsightsAnalytics&&!0===e.extensionConfig.ApplicationInsightsAnalytics.disableExceptionTracking)){n("_"+(r="onerror"));var o=a[r];a[r]=function(e,n,i,a,s){var c=o&&o(e,n,i,a,s);return!0!==c&&t["_"+r]({message:e,url:n,lineNumber:i,columnNumber:a,error:s}),c},e.autoExceptionInstrumented=!0}return t
   }({
      instrumentationKey:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx"
      endpointUrl: "https://dc.applicationinsights.us/v2/track"
   });

   window[aiName]=aisdk,aisdk.queue&&0===aisdk.queue.length&&aisdk.trackPageView({});
</script>

正确的方法是依靠连接字符串(它处理非 public 云 dns 后缀): https://docs.microsoft.com/en-us/azure/azure-monitor/app/sdk-connection-string?tabs=js#how-to-set-a-connection-string

它的支持在 Javascript v2.3.0 中可用。

您可以在 Application Insights 概述中找到它:

然后将其粘贴到您的代码段中:

{
  connectionString:"InstrumentationKey=00000000-0000-0000-0000-000000000000;"
}

(依赖于所有 public 端点的手动覆盖很容易出错,因为 Application Insights 可以引入需要新 public 端点的新功能,这将不起作用)