Konfigurace Application Insights pro web ASP.NET
Tento postup nakonfiguruje webovou aplikaci ASP.NET tak, aby odesílala telemetrii do funkce Application Insights služby Azure Monitor. Funguje pro ASP.NET aplikace, které jsou hostované na vlastních serverech SLUŽBY IIS v místním prostředí nebo v cloudu.
Poznámka
K dispozici je nabídka .NET založená na OpenTelemetry . Další informace.
Poznámka
Podpora příjmu dat založeného na instrumentačním klíči skončí 31. března 2025. Příjem instrumentačního klíče bude dál fungovat, ale pro tuto funkci už nebudeme poskytovat aktualizace ani podporu. Přechod na připojovací řetězce , abyste mohli využívat nové možnosti.
Požadavky
Pro přidání Application Insights na web ASP.NET potřebujete:
Nainstalujte nejnovější verzi sady Visual Studio 2019 pro Windows s následujícími úlohami:
- Vývoj pro ASP.NET a web
- Vývoj pro Azure
Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure.
Vytvořte prostředek založený na pracovním prostoru Application Insights.
Důležité
Doporučujeme připojovací řetězce před instrumentačními klíči. Nové oblasti Azure vyžadují místo instrumentačních klíčů použití připojovacích řetězců.
Připojovací řetězec identifikuje prostředek, který chcete přidružit k telemetrickým datům. Umožňuje také upravit koncové body, které bude prostředek používat jako cíl pro telemetrii. Budete muset zkopírovat připojovací řetězec a přidat ho do kódu aplikace nebo do proměnné prostředí "APPLICATIONINSIGHTS_CONNECTION_STRING".
Vytvoření základní webové aplikace ASP.NET
- Otevřete Visual Studio 2019.
- Vyberte Soubor>nový>projekt.
- Vyberte ASP.NET Web Application(.NET Framework) C#.
- Zadejte název projektu a pak vyberte Vytvořit.
- Vyberte Vytvořit MVC>.
Automatické přidání Application Insights
Tato část vás provede automatickým přidáváním Application Insights do webové aplikace založené na šablonách ASP.NET. V rámci projektu webové aplikace ASP.NET v sadě Visual Studio:
Vyberte Project>Add Application Insights Telemetry>Application Insights Sdk (místní)Next Finish Close (Next>Finish>Close).>
Otevřete souborApplicationInsights.config .
Před uzavírací
</ApplicationInsights>
značku přidejte řádek, který obsahuje připojovací řetězec pro prostředek Application Insights. Připojovací řetězec najdete v podokně přehledu nově vytvořeného prostředku Application Insights.<ConnectionString>Copy connection string from Application Insights Resource Overview</ConnectionString>
VyberteSpráva balíčků> NuGet projektu>Aktualizace. Pak aktualizujte každý
Microsoft.ApplicationInsights
balíček NuGet na nejnovější stabilní verzi.Spusťte aplikaci tak, že vyberete IIS Express. Otevře se základní ASP.NET aplikace. Při procházení stránek na webu se telemetrie odesílá do Application Insights.
Ruční přidání Application Insights
Tato část vás provede ručním přidáním Application Insights do webové aplikace založené na šablonách ASP.NET. V této části se předpokládá, že používáte webovou aplikaci založenou na standardní šabloně webové aplikace MVC pro ASP.NET Framework.
Do projektu přidejte následující balíčky NuGet a jejich závislosti:
V některých případech se souborApplicationInsights.config vytvoří automaticky. Pokud už soubor existuje, přejděte ke kroku 4.
Pokud se automaticky nevytvoří, musíte ho vytvořit sami. V kořenovém adresáři aplikace ASP.NET vytvořte nový soubor s názvemApplicationInsights.config.
Do nově vytvořeného souboru zkopírujte následující konfiguraci XML:
<?xml version="1.0" encoding="utf-8"?> <ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings"> <TelemetryInitializers> <Add Type="Microsoft.ApplicationInsights.DependencyCollector.HttpDependenciesParsingTelemetryInitializer, Microsoft.AI.DependencyCollector" /> <Add Type="Microsoft.ApplicationInsights.WindowsServer.AzureRoleEnvironmentTelemetryInitializer, Microsoft.AI.WindowsServer" /> <Add Type="Microsoft.ApplicationInsights.WindowsServer.BuildInfoConfigComponentVersionTelemetryInitializer, Microsoft.AI.WindowsServer" /> <Add Type="Microsoft.ApplicationInsights.Web.WebTestTelemetryInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.SyntheticUserAgentTelemetryInitializer, Microsoft.AI.Web"> <!-- Extended list of bots: search|spider|crawl|Bot|Monitor|BrowserMob|BingPreview|PagePeeker|WebThumb|URL2PNG|ZooShot|GomezA|Google SketchUp|Read Later|KTXN|KHTE|Keynote|Pingdom|AlwaysOn|zao|borg|oegp|silk|Xenu|zeal|NING|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|Java|JNLP|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|vortex|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|voyager|archiver|Icarus6j|mogimogi|Netvibes|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|wsr-agent|http client|Python-urllib|AppEngine-Google|semanticdiscovery|facebookexternalhit|web/snippet|Google-HTTP-Java-Client--> <Filters>search|spider|crawl|Bot|Monitor|AlwaysOn</Filters> </Add> <Add Type="Microsoft.ApplicationInsights.Web.ClientIpHeaderTelemetryInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.AzureAppServiceRoleNameFromHostNameHeaderInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.OperationNameTelemetryInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.OperationCorrelationTelemetryInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.UserTelemetryInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.AuthenticatedUserIdTelemetryInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.AccountIdTelemetryInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.SessionTelemetryInitializer, Microsoft.AI.Web" /> </TelemetryInitializers> <TelemetryModules> <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector"> <ExcludeComponentCorrelationHttpHeadersOnDomains> <!-- Requests to the following hostnames will not be modified by adding correlation headers. Add entries here to exclude additional hostnames. NOTE: this configuration will be lost upon NuGet upgrade. --> <Add>core.windows.net</Add> <Add>core.chinacloudapi.cn</Add> <Add>core.cloudapi.de</Add> <Add>core.usgovcloudapi.net</Add> </ExcludeComponentCorrelationHttpHeadersOnDomains> <IncludeDiagnosticSourceActivities> <Add>Microsoft.Azure.EventHubs</Add> <Add>Microsoft.Azure.ServiceBus</Add> </IncludeDiagnosticSourceActivities> </Add> <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector"> <!-- Use the following syntax here to collect additional performance counters: <Counters> <Add PerformanceCounter="\Process(??APP_WIN32_PROC??)\Handle Count" ReportAs="Process handle count" /> ... </Counters> PerformanceCounter must be either \CategoryName(InstanceName)\CounterName or \CategoryName\CounterName NOTE: performance counters configuration will be lost upon NuGet upgrade. The following placeholders are supported as InstanceName: ??APP_WIN32_PROC?? - instance name of the application process for Win32 counters. ??APP_W3SVC_PROC?? - instance name of the application IIS worker process for IIS/ASP.NET counters. ??APP_CLR_PROC?? - instance name of the application CLR process for .NET counters. --> </Add> <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryModule, Microsoft.AI.PerfCounterCollector" /> <Add Type="Microsoft.ApplicationInsights.WindowsServer.AppServicesHeartbeatTelemetryModule, Microsoft.AI.WindowsServer" /> <Add Type="Microsoft.ApplicationInsights.WindowsServer.AzureInstanceMetadataTelemetryModule, Microsoft.AI.WindowsServer"> <!-- Remove individual fields collected here by adding them to the ApplicationInsighs.HeartbeatProvider with the following syntax: <Add Type="Microsoft.ApplicationInsights.Extensibility.Implementation.Tracing.DiagnosticsTelemetryModule, Microsoft.ApplicationInsights"> <ExcludedHeartbeatProperties> <Add>osType</Add> <Add>location</Add> <Add>name</Add> <Add>offer</Add> <Add>platformFaultDomain</Add> <Add>platformUpdateDomain</Add> <Add>publisher</Add> <Add>sku</Add> <Add>version</Add> <Add>vmId</Add> <Add>vmSize</Add> <Add>subscriptionId</Add> <Add>resourceGroupName</Add> <Add>placementGroupId</Add> <Add>tags</Add> <Add>vmScaleSetName</Add> </ExcludedHeartbeatProperties> </Add> NOTE: exclusions will be lost upon upgrade. --> </Add> <Add Type="Microsoft.ApplicationInsights.WindowsServer.DeveloperModeWithDebuggerAttachedTelemetryModule, Microsoft.AI.WindowsServer" /> <Add Type="Microsoft.ApplicationInsights.WindowsServer.UnhandledExceptionTelemetryModule, Microsoft.AI.WindowsServer" /> <Add Type="Microsoft.ApplicationInsights.WindowsServer.UnobservedExceptionTelemetryModule, Microsoft.AI.WindowsServer"> <!--</Add> <Add Type="Microsoft.ApplicationInsights.WindowsServer.FirstChanceExceptionStatisticsTelemetryModule, Microsoft.AI.WindowsServer">--> </Add> <Add Type="Microsoft.ApplicationInsights.Web.RequestTrackingTelemetryModule, Microsoft.AI.Web"> <Handlers> <!-- Add entries here to filter out additional handlers: NOTE: handler configuration will be lost upon NuGet upgrade. --> <Add>Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.RequestDataHttpHandler</Add> <Add>System.Web.StaticFileHandler</Add> <Add>System.Web.Handlers.AssemblyResourceLoader</Add> <Add>System.Web.Optimization.BundleHandler</Add> <Add>System.Web.Script.Services.ScriptHandlerFactory</Add> <Add>System.Web.Handlers.TraceHandler</Add> <Add>System.Web.Services.Discovery.DiscoveryRequestHandler</Add> <Add>System.Web.HttpDebugHandler</Add> </Handlers> </Add> <Add Type="Microsoft.ApplicationInsights.Web.ExceptionTrackingTelemetryModule, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.AspNetDiagnosticTelemetryModule, Microsoft.AI.Web" /> </TelemetryModules> <ApplicationIdProvider Type="Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId.ApplicationInsightsApplicationIdProvider, Microsoft.ApplicationInsights" /> <TelemetrySinks> <Add Name="default"> <TelemetryProcessors> <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryProcessor, Microsoft.AI.PerfCounterCollector" /> <Add Type="Microsoft.ApplicationInsights.Extensibility.AutocollectedMetricsExtractor, Microsoft.ApplicationInsights" /> <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel"> <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond> <ExcludedTypes>Event</ExcludedTypes> </Add> <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel"> <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond> <IncludedTypes>Event</IncludedTypes> </Add> <!-- Adjust the include and exclude examples to specify the desired semicolon-delimited types. (Dependency, Event, Exception, PageView, Request, Trace) --> </TelemetryProcessors> <TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel" /> </Add> </TelemetrySinks> <!-- Learn more about Application Insights configuration with ApplicationInsights.config here: http://go.microsoft.com/fwlink/?LinkID=513840 --> <ConnectionString>Copy connection string from Application Insights Resource Overview</ConnectionString> </ApplicationInsights>
Před uzavírací
</ApplicationInsights>
značku přidejte připojovací řetězec pro prostředek Application Insights. Připojovací řetězec najdete v podokně přehledu nově vytvořeného prostředku Application Insights.<ConnectionString>Copy connection string from Application Insights Resource Overview</ConnectionString>
Na stejné úrovni projektu jako souborApplicationInsights.config vytvořte složku s názvem ErrorHandler s novým souborem jazyka C# S názvem AiHandleErrorAttribute.cs. Obsah souboru bude vypadat takto:
using System; using System.Web.Mvc; using Microsoft.ApplicationInsights; namespace WebApplication10.ErrorHandler //namespace will vary based on your project name { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] public class AiHandleErrorAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { if (filterContext != null && filterContext.HttpContext != null && filterContext.Exception != null) { //If customError is Off, then AI HTTPModule will report the exception if (filterContext.HttpContext.IsCustomErrorEnabled) { var ai = new TelemetryClient(); ai.TrackException(filterContext.Exception); } } base.OnException(filterContext); } } }
Ve složce App_Start otevřete soubor FilterConfig.cs a změňte ho tak, aby odpovídal ukázce:
using System.Web; using System.Web.Mvc; namespace WebApplication10 //Namespace will vary based on project name { public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new ErrorHandler.AiHandleErrorAttribute()); } } }
Pokud jeWeb.config už aktualizovaný, tento krok přeskočte. V opačném případě aktualizujte soubor následujícím způsobem:
<?xml version="1.0" encoding="utf-8"?> <!-- For more information on how to configure your ASP.NET application, please visit https://go.microsoft.com/fwlink/?LinkId=301880 --> <configuration> <appSettings> <add key="webpages:Version" value="3.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.7.2" /> <httpRuntime targetFramework="4.7.2" /> <!-- Code added for Application Insights start --> <httpModules> <add name="TelemetryCorrelationHttpModule" type="Microsoft.AspNet.TelemetryCorrelation.TelemetryCorrelationHttpModule, Microsoft.AspNet.TelemetryCorrelation" /> <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" /> </httpModules> <!-- Code added for Application Insights end --> </system.web> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" /> <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" /> <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-5.2.7.0" newVersion="5.2.7.0" /> </dependentAssembly> <!-- Code added for Application Insights start --> <dependentAssembly> <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" /> </dependentAssembly> <!-- Code added for Application Insights end --> </assemblyBinding> </runtime> <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" /> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" /> </compilers> </system.codedom> <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <!-- Code added for Application Insights start --> <modules> <remove name="TelemetryCorrelationHttpModule" /> <add name="TelemetryCorrelationHttpModule" type="Microsoft.AspNet.TelemetryCorrelation.TelemetryCorrelationHttpModule, Microsoft.AspNet.TelemetryCorrelation" preCondition="managedHandler" /> <remove name="ApplicationInsightsWebTracking" /> <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" /> </modules> <!-- Code added for Application Insights end --> </system.webServer> </configuration>
Teď jste úspěšně nakonfigurovali monitorování aplikací na straně serveru. Pokud spustíte webovou aplikaci, začne se v Application Insights zobrazovat telemetrie.
Přidat monitorování na straně klienta
Předchozí části obsahují pokyny k metodám automatické a ruční konfigurace monitorování na straně serveru. Pokud chcete přidat monitorování na straně klienta, použijte sadu JavaScript SDK na straně klienta. Transakce na straně klienta libovolné webové stránky můžete monitorovat přidáním skriptu JavaScript JavaScript (Web) SDK Loader před uzavírací </head>
značku HTML stránky.
I když je možné ručně přidat skript zavaděče sady JavaScript (Web) SDK do záhlaví každé stránky HTML, doporučujeme místo toho přidat skript zavaděče sady JavaScript (Web) SDK na primární stránku. Tato akce vloží skript zavaděče sady JavaScript (Web) SDK na všechny stránky webu.
Pro aplikaci ASP.NET MVC založenou na šablonách z tohoto článku je soubor, který je potřeba upravit , _Layout.cshtml. Najdete ho v části Sdílená zobrazení>. Pokud chcete přidat monitorování na straně klienta, otevřete soubor _Layout.cshtml a postupujte podle pokynů k nastavení javascriptové sady SDK na základě skriptů v článku o konfiguraci sady JavaScript SDK na straně klienta.
Poradce při potížích
Projděte si vyhrazený článek o řešení potíží.
V aktuální verzi sady Visual Studio 2019 je známý problém: ukládání instrumentačního klíče nebo připojovacího řetězce do tajného klíče uživatele není u aplikací založených na rozhraní .NET Framework poškozené. Klíč se nakonec musí pevně zakódovat do souboruapplicationinsights.config , aby se tato chyba vyřešila. Tento článek je navržený tak, aby se tomuto problému zcela vyhnul tím, že nepoužívá tajné kódy uživatelů.
Testování připojení mezi hostitelem aplikace a službou příjmu dat
Sady Application Insights SDK a agenti odesílají telemetrii, aby se ingestovaly jako volání REST do našich koncových bodů příjmu dat. Připojení z webového serveru nebo hostitelského počítače aplikace ke koncovým bodům služby příjmu dat můžete otestovat pomocí nezpracovaných klientů REST z PowerShellu nebo příkazů curl. Viz Řešení potíží s chybějící telemetrií aplikací ve službě Azure Monitor Application Insights.
Opensourcová sada SDK
Přečtěte si kód a přispíváte do kódu.
Nejnovější aktualizace a opravy chyb najdete v poznámkách k verzi.
Zpráva k vydání verze
Pro verzi 2.12 a novější: sady .NET SDK (včetně adaptérů ASP.NET, ASP.NET Core a protokolování)
Naše Aktualizace služeb také shrnuje hlavní vylepšení Application Insights.
Další kroky
- Přidáním syntetických transakcí otestujte, že je váš web dostupný z celého světa pomocí monitorování dostupnosti.
- Nakonfigurujte vzorkování , abyste snížili provoz telemetrie a náklady na úložiště dat.