asp.net-mvc - tools - use application insights




可配置的應用程序見解儀器密鑰 (2)

我如何才能最好地配置Application Inisghts的Instrumentation Key,使Azure Administrator能夠管理MVC5 Web應用程序的App Services部署的設置? 在MVC應用程序初始化中是否有某個事件需要完成,或者可以在幾乎任何點執行? 我正在使用Trace Listener集成。

默認情況下,Instrumentation Key(iKey)在ApplicationInsights.config文件中設置。 此外,如果您包含JavaScript部分,iKey將再次設置在_Layout.cshtml文件中。 這是兩個不同的地方,你需要管理一個iKey。

我希望能夠通過Azure門戶的應用程序服務 - > 應用程序設置選項卡管理此密鑰。 原因是:

  1. 我想部署這個應用程序的多個實例,每個實例都有自己獨特的iKey
  2. 我想定期更換這個iKey(因為原因
  3. 我不希望這個iKey存儲在我們的代碼庫中(可以用“dev”iKey代碼回購),也不希望它被我們的構建自動化管理(同樣,因為原因

你指定的所有方法都很棒。 我們的建議是使用web.config應用程序設置,並在global.asax.cs中使用它進行標準初始化。 當我們掛鉤到OnBeginRequest()時,在initlization之前不會發送遙測。

https://docs.microsoft.com/en-us/azure/application-insights/app-insights-api-custom-events-metrics#a-namedynamic-ikeya-dynamic-instrumentation-key

另一種可能很好的方法是將APPINSIGHTS_INSTRUMENTATIONKEY環境變量設置APPINSIGHTS_INSTRUMENTATIONKEY SDK提取。 當然,這取決於你是否在同一台機器上有多個應用程序。

https://github.com/Microsoft/ApplicationInsights-dotnet/blob/v2.2.0/src/Core/Managed/Net40/Extensibility/Implementation/TelemetryConfigurationFactory.cs#L22


這是我正在使用的實現,它似乎工作。 不過,我有其他的實現似乎設置的iKey太早或太晚,因為它似乎將使用部署到Azure的物理web.config文件中的iKey,而不是從門戶中的應用程序設置選項卡拉。 有沒有更好的選擇,以最好的方式做到這一點?

ApplicationInsights.config

<!-- Find the following node and *remove* it. It will have a GUID in it.
     If you leave this, you may receive some errors even with all of the
     other changes. -->
<InstrumentationKey>{GUID HERE}</InstrumentationKey>

的Global.asax.cs

    protected void Application_Start()
    {
        // Add this first line below
        Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey =
            ConfigurationManager.AppSettings["ai:InstrumentationKey"];

        // Showing the rest of this so you can see the order of operations
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        AutomapperConfig.Init();
    }

web.config中

<!-- Add the following to <appSettings> and put your iKey value in here. -->
<add key="ai:InstrumentationKey" value="*****" />

_Layout.cshtml (在HTML的<head>部分)注意:對於未來的讀者:我建議你不要使用這個完整的代碼片段,而應該使用啟動instrumentationKey:那一行instrumentationKey:並且將這行代碼集成到現代版本中這個JS片段的其餘部分!):

<script type = 'text/javascript' >
    var appInsights=window.appInsights||function(config)
    {
        function r(config){ t[config] = function(){ var i = arguments; t.queue.push(function(){ t[config].apply(t, i)})} }
        var t = { config:config},u=document,e=window,o='script',s=u.createElement(o),i,f;for(s.src=config.url||'//az416426.vo.msecnd.net/scripts/a/ai.0.js',u.getElementsByTagName(o)[0].parentNode.appendChild(s),t.cookie=u.cookie,t.queue=[],i=['Event','Exception','Metric','PageView','Trace','Ajax'];i.length;)r('track'+i.pop());return r('setAuthenticatedUserContext'),r('clearAuthenticatedUserContext'),config.disableExceptionTracking||(i='onerror',r('_'+i),f=e[i],e[i]=function(config, r, u, e, o) { var s = f && f(config, r, u, e, o); return s !== !0 && t['_' + i](config, r, u, e, o),s}),t
    }({
        instrumentationKey:'@(Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey)'
    });

    window.appInsights=appInsights;
    appInsights.trackPageView();
</script>