Konfigurowanie usługi Application Insights dla witryny internetowej ASP.NET
Ta procedura umożliwia skonfigurowanie ASP.NET aplikacji internetowej w celu wysyłania danych telemetrycznych do funkcji Application Insights usługi Azure Monitor. Działa w przypadku aplikacji ASP.NET hostowanych lokalnie lub w chmurze na własnych serwerach usług IIS.
Uwaga
Dostępna jest wersja zapoznawcza oferty platformy .NET opartej na technologii OpenTelemetry . Dowiedz się więcej.
Uwaga
31 marca 2025 r. zostanie zakończone świadczenie pomocy technicznej dla pozyskiwania klucza instrumentacji. Pozyskiwanie klucza instrumentacji będzie nadal działać, ale nie będziemy już zapewniać aktualizacji ani obsługi funkcji. Przejście do parametrów połączenia w celu skorzystania z nowych możliwości.
Wymagania wstępne
Aby dodać usługę Application Insights do witryny internetowej:
Zainstaluj najnowszą wersję programu Visual Studio 2019 dla systemu Windows przy użyciu następujących obciążeń:
- Tworzenie aplikacji na platformie ASP.NET i aplikacji internetowych
- Tworzenie aplikacji na platformie Azure
Utwórz bezpłatne konto platformy Azure , jeśli nie masz jeszcze subskrypcji platformy Azure.
Utwórz zasób oparty na obszarze roboczym usługi Application Insights.
Ważne
Zalecamy użycie parametrów połączenia za pośrednictwem kluczy instrumentacji. Nowe regiony platformy Azure wymagają użycia parametrów połączenia zamiast kluczy instrumentacji.
Parametry połączenia identyfikują zasób, który chcesz skojarzyć z danymi telemetrycznymi. Umożliwia również modyfikowanie punktów końcowych, których zasób będzie używać jako miejsca docelowego dla telemetrii. Należy skopiować parametry połączenia i dodać je do kodu aplikacji lub do zmiennej środowiskowej "APPLICATIONINSIGHTS_CONNECTION_STRING".
Tworzenie podstawowej aplikacji internetowej ASP.NET
- Otwórz program Visual Studio 2019.
- Wybierz pozycję Plik>nowy>projekt.
- Wybierz pozycję ASP.NET Aplikacja internetowa (.NET Framework) C#.
- Wprowadź nazwę projektu, a następnie wybierz pozycję Utwórz.
- Wybierz pozycję MVC>Utwórz.
Automatyczne dodawanie usługi Application Insights
Ta sekcja przeprowadzi Cię przez proces automatycznego dodawania usługi Application Insights do aplikacji internetowej opartej na szablonach ASP.NET. Z poziomu projektu aplikacji internetowej ASP.NET w programie Visual Studio:
Wybierzpozycję Project Add Application Insights Telemetry Application InsightsSdk (local)NextFinish>Close (Dodaj projekt> Telemetrii >usługi Application Insights Sdk (lokalnie)>Zamknij>.
Otwórz plik ApplicationInsights.config .
Przed tagiem zamykającym
</ApplicationInsights>
dodaj wiersz zawierający parametry połączenia dla zasobu usługi Application Insights. Znajdź parametry połączenia w okienku przeglądu nowo utworzonego zasobu usługi Application Insights.<ConnectionString>Copy connection string from Application Insights Resource Overview</ConnectionString>
Wybierz pozycję Projekt>Zarządzaj pakietami> NuGet Aktualizacje. Następnie zaktualizuj każdy
Microsoft.ApplicationInsights
pakiet NuGet do najnowszej stabilnej wersji.Uruchom aplikację, wybierając pozycję IIS Express. Zostanie otwarta podstawowa aplikacja ASP.NET. Podczas przeglądania stron w witrynie dane telemetryczne są wysyłane do usługi Application Insights.
Ręczne dodawanie usługi Application Insights
Ta sekcja zawiera instrukcje ręcznego dodawania usługi Application Insights do aplikacji internetowej opartej na szablonach ASP.NET. W tej sekcji założono, że używasz aplikacji internetowej opartej na standardowym szablonie aplikacji internetowej MVC dla platformy ASP.NET Framework.
Dodaj następujące pakiety NuGet i ich zależności do projektu:
W niektórych przypadkach plik ApplicationInsights.config jest tworzony automatycznie. Jeśli plik jest już obecny, przejdź do kroku 4.
Jeśli nie zostanie on utworzony automatycznie, musisz go utworzyć samodzielnie. W katalogu głównym aplikacji ASP.NET utwórz nowy plik o nazwie ApplicationInsights.config.
Skopiuj następującą konfigurację XML do nowo utworzonego pliku:
<?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>
Przed tagiem zamykającym
</ApplicationInsights>
dodaj parametry połączenia dla zasobu usługi Application Insights. Parametry połączenia można znaleźć w okienku przeglądu nowo utworzonego zasobu usługi Application Insights.<ConnectionString>Copy connection string from Application Insights Resource Overview</ConnectionString>
Na tym samym poziomie projektu co plik ApplicationInsights.config utwórz folder o nazwie ErrorHandler z nowym plikiem C# o nazwie AiHandleErrorAttribute.cs. Zawartość pliku będzie wyglądać następująco:
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); } } }
W folderze App_Start otwórz plik FilterConfig.cs i zmień go tak, aby był zgodny z przykładem:
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()); } } }
Jeśli Web.config została już zaktualizowana, pomiń ten krok. W przeciwnym razie zaktualizuj plik w następujący sposób:
<?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>
Teraz pomyślnie skonfigurowano monitorowanie aplikacji po stronie serwera. Jeśli uruchomisz aplikację internetową, zobaczysz, że dane telemetryczne zaczynają pojawiać się w usłudze Application Insights.
Dodawanie monitorowania po stronie klienta
W poprzednich sekcjach przedstawiono wskazówki dotyczące metod automatycznego i ręcznego konfigurowania monitorowania po stronie serwera. Aby dodać monitorowanie po stronie klienta, użyj zestawu SDK języka JavaScript po stronie klienta. Możesz monitorować transakcje po stronie klienta dowolnej strony internetowej, dodając skrypt modułu ładującego zestawu SDK języka JavaScript przed tagiem zamykającym </head>
kodu HTML strony.
Mimo że istnieje możliwość ręcznego dodania skryptu modułu ładującego zestawu SDK do nagłówka każdej strony HTML, zalecamy dodanie skryptu modułu ładującego ZESTAWU SDK do strony głównej. Ta akcja powoduje wstrzyknięcie skryptu modułu ładującego zestawu SDK do wszystkich stron witryny.
W przypadku aplikacji MVC opartej ASP.NET na szablonach z tego artykułu plik, który należy edytować, to _Layout.cshtml. Można go znaleźć w obszarze Widoki>udostępnione. Aby dodać monitorowanie po stronie klienta, otwórz plik _Layout.cshtml i postępuj zgodnie z instrukcjami konfiguracji opartymi na skryptach zestawu SDK modułu ładującego zestawu SDK po stronie klienta.
Rozwiązywanie problemów
Zobacz dedykowany artykuł dotyczący rozwiązywania problemów.
W bieżącej wersji programu Visual Studio 2019 występuje znany problem: przechowywanie klucza instrumentacji lub parametrów połączenia w kluczu tajnym użytkownika jest uszkodzone dla aplikacji opartych na .NET Framework. Klucz ostatecznie musi być zakodowany na stałe w pliku applicationinsights.config , aby obejść tę usterkę. Ten artykuł jest przeznaczony do całkowitego uniknięcia tego problemu, nie używając wpisów tajnych użytkownika.
Testowanie łączności między hostem aplikacji a usługą pozyskiwania
Zestawy SDK usługi Application Insights i agenci wysyłają dane telemetryczne w celu pozyskania ich jako wywołań REST do naszych punktów końcowych pozyskiwania. Możesz przetestować łączność z serwera internetowego lub maszyny hosta aplikacji do punktów końcowych usługi pozyskiwania przy użyciu pierwotnych klientów REST z poziomu programu PowerShell lub poleceń curl. Zobacz Rozwiązywanie problemów z brakującą telemetrią aplikacji w usłudze Azure Monitor Application Insights.
Zestaw SDK typu open source
Odczytywanie i współtworzenie kodu.
Najnowsze aktualizacje i poprawki błędów można znaleźć w informacjach o wersji.
Uwagi do wersji
W przypadku wersji 2.12 i nowszych: zestawy SDK platformy .NET (w tym ASP.NET, ASP.NET Core i karty rejestrowania)
Nasza usługa Aktualizacje również podsumować główne ulepszenia usługi Application Insights.
Następne kroki
- Dodaj syntetyczne transakcje, aby przetestować, czy witryna internetowa jest dostępna na całym świecie z monitorowaniem dostępności.
- Konfigurowanie próbkowania w celu zmniejszenia kosztów magazynowania danych i ruchu telemetrycznego.