Az Application Insights konfigurálása ASP.NET webhelyhez
Ez az eljárás úgy konfigurálja a ASP.NET-webalkalmazást, hogy telemetriát küldjön az Azure Monitor szolgáltatás Application Insights szolgáltatásának. Olyan ASP.NET alkalmazásokhoz használható, amelyek a helyszínen vagy a felhőben üzemeltetett saját IIS-kiszolgálókon futnak.
Megjegyzés
Elérhető egy előzetes verziójú OpenTelemetry-alapú .NET-ajánlat . További információ.
Megjegyzés
2025. március 31-én megszűnik az eszközkulcsalapú betöltés támogatása. A rendszerállapotkulcs-betöltés továbbra is működni fog, de a továbbiakban nem biztosítunk frissítéseket vagy támogatást a funkcióhoz. Váltsa át a kapcsolati sztringeket az új képességek kihasználásához.
Előfeltételek
Ha hozzá kívánja adni az Application Insights megoldást ASP.NET-webhelyéhez, tegye a következőket:
Telepítse a WindowsHoz készült Visual Studio 2019 legújabb verzióját a következő számítási feladatokkal:
- ASP.NET és webfejlesztés
- Azure-fejlesztés
Hozzon létre egy ingyenes Azure-fiókot , ha még nem rendelkezik Azure-előfizetéssel.
Hozzon létre egy Application Insights-munkaterület-alapú erőforrást.
Fontos
A kapcsolati sztringeket a rendszerállapotkulcsokon keresztül javasoljuk. Az új Azure-régiókhoz kapcsolati sztringeket kell használni a rendszerállapotkulcsok helyett.
A kapcsolati sztring azonosítja a telemetriai adatokhoz társítani kívánt erőforrást. Emellett lehetővé teszi azon végpontok módosítását is, amelyeket az erőforrás a telemetria célhelyeként fog használni. Ki kell másolnia a kapcsolati sztring, és hozzá kell adnia az alkalmazás kódjához vagy a "APPLICATIONINSIGHTS_CONNECTION_STRING" környezeti változóhoz.
Alapszintű ASP.NET-webalkalmazás létrehozása
- Nyissa meg a Visual Studio 2019-et.
- Válassza azÚj> projekt fájlja>lehetőséget.
- Válassza ASP.NET webalkalmazás(.NET-keretrendszer) C# lehetőséget.
- Adja meg a projekt nevét, majd válassza a Létrehozás lehetőséget.
- Válassza az MVC>Létrehozás lehetőséget.
Application Insights automatikus hozzáadása
Ez a szakasz végigvezeti az Application Insights sablonalapú ASP.NET-webalkalmazáshoz való automatikus hozzáadásán. A Visual Studio ASP.NET webalkalmazás-projektjéből:
Válassza a Project Add Application Insights Telemetry Application Insights Sdk (local)Next Finish Close (Project> Add Application Insights Telemetry Application Insights Sdk (local)Next Finish Close (ProjectAdd Application Insights Telemetry>Application Insights Sdk (helyi)>NextFinish>Close (Project> Add Application
Nyissa meg a ApplicationInsights.config fájlt.
A záró
</ApplicationInsights>
címke előtt adjon hozzá egy sort, amely tartalmazza az Application Insights-erőforrás kapcsolati sztring. Keresse meg a kapcsolati sztring az újonnan létrehozott Application Insights-erőforrás áttekintési paneljén.<ConnectionString>Copy connection string from Application Insights Resource Overview</ConnectionString>
Válassza a ProjectManage NuGet Packages (NuGet-csomagok>> kezelése) lehetőséget Frissítések. Ezután frissítse az egyes
Microsoft.ApplicationInsights
NuGet-csomagokat a legújabb stabil kiadásra.Futtassa az alkalmazást a IIS Express kiválasztásával. Megnyílik egy alapszintű ASP.NET alkalmazás. A webhely lapjainak böngészése során a rendszer telemetriát küld az Application Insightsnak.
Application Insights manuális hozzáadása
Ez a szakasz végigvezeti az Application Insights sablonalapú ASP.NET-webalkalmazáshoz való manuális hozzáadásán. Ez a szakasz feltételezi, hogy a ASP.NET Framework standard MVC-webalkalmazás-sablonján alapuló webalkalmazást használ.
Adja hozzá a következő NuGet-csomagokat és azok függőségeit a projekthez:
Bizonyos esetekben a ApplicationInsights.config fájl automatikusan létrejön. Ha a fájl már jelen van, ugorjon a 4. lépésre.
Ha nem jön létre automatikusan, saját magának kell létrehoznia. Egy ASP.NET-alkalmazás gyökérkönyvtárában hozzon létre egy új fájlt ApplicationInsights.confignéven.
Másolja a következő XML-konfigurációt az újonnan létrehozott fájlba:
<?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>Trace</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>
A záró
</ApplicationInsights>
címke előtt adja hozzá az Application Insights-erőforráshoz tartozó kapcsolati sztring. A kapcsolati sztring az újonnan létrehozott Application Insights-erőforrás áttekintési paneljén találja.<ConnectionString>Copy connection string from Application Insights Resource Overview</ConnectionString>
A projekt ApplicationInsights.config fájljával megegyező szinten hozzon létre egy ErrorHandler nevű mappát az AiHandleErrorAttribute.cs nevű új C#-fájllal. A fájl tartalma a következőképpen fog kinézni:
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); } } }
A App_Start mappában nyissa meg a FilterConfig.cs fájlt, és módosítsa úgy, hogy megfeleljen a mintának:
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()); } } }
Ha Web.config már frissítve van, hagyja ki ezt a lépést. Ellenkező esetben frissítse a fájlt az alábbiak szerint:
<?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>
Sikeresen konfigurálta a kiszolgálóoldali alkalmazásfigyelést. A webalkalmazás futtatásakor a telemetriai adatok megjelennek az Application Insightsban.
Ügyféloldali megfigyelés hozzáadása
Az előző szakaszok útmutatást adtak a kiszolgálóoldali monitorozás automatikus és manuális konfigurálásának módszereihez. Ügyféloldali monitorozás hozzáadásához használja az ügyféloldali JavaScript SDK-t. Bármely weblap ügyféloldali tranzakcióit figyelheti úgy, hogy hozzáad egy JavaScript-kódrészletet a lap HTML-kódjának záró </head>
címkéje elé.
Bár manuálisan is hozzáadhatja a kódrészletet az egyes HTML-lapok fejlécéhez, javasoljuk, hogy inkább adja hozzá a kódrészletet egy elsődleges laphoz. Ez a művelet beszúrja a kódrészletet a webhely összes oldalára.
A cikk sablonalapú ASP.NET MVC-alkalmazásához a szerkeszteni kívánt fájl a _Layout.cshtml. Ezt a Megosztott nézetek> területen találja. Ügyféloldali monitorozás hozzáadásához nyissa meg a _Layout.cshtml fájlt, és kövesse az ügyféloldali JavaScript SDK-konfigurációról szóló cikk kódrészlet-alapú beállítási utasításait .
Hibaelhárítás
Tekintse meg a dedikált hibaelhárítási cikket.
Van egy ismert probléma a Visual Studio 2019 jelenlegi verziójában: a rendszerállapotkulcs vagy kapcsolati sztring egy felhasználói titkos kódban való tárolása megszakad .NET-keretrendszer-alapú alkalmazások esetében. A hiba elhárításához a kulcsot végül a applicationinsights.config fájlba kell kódolni. Ez a cikk úgy lett kialakítva, hogy teljes egészében elkerülje ezt a problémát, mert nem használ felhasználói titkos kódokat.
Az alkalmazás gazdagépe és a betöltési szolgáltatás közötti kapcsolat tesztelése
Az Application Insights SDK-k és -ügynökök telemetriát küldenek, hogy REST-hívásként töltsenek be a betöltési végpontokra. A webkiszolgálóról vagy az alkalmazásgazdagépről a betöltési szolgáltatás végpontjaihoz való kapcsolódást a PowerShellből származó nyers REST-ügyfelek vagy curl-parancsok használatával tesztelheti. Lásd: Hiányzó alkalmazástelemetria hibaelhárítása az Azure Monitor Application Insightsban.
Nyílt forráskódú SDK
Olvassa el és járuljon hozzá a kódhoz.
A legújabb frissítésekért és hibajavításokért tekintse meg a kibocsátási megjegyzéseket.
Következő lépések
- Szintetikus tranzakciók hozzáadásával tesztelheti, hogy webhelye a világ minden tájáról elérhető-e a rendelkezésre állás monitorozásával.
- Konfigurálja a mintavételezést a telemetriai adatforgalom és az adattárolás költségeinek csökkentéséhez.