Condividi tramite


Application Insights per applicazioni ASP.NET e ASP.NET Core

Attenzione

È consigliabile utilizzare la distribuzione Azure Monitor OpenTelemetry per le nuove applicazioni o per i nuovi clienti, in modo da abilitare Azure Monitor Application Insights. La distribuzione OpenTelemetry di Monitoraggio di Azure offre funzionalità ed esperienza simili a quelle di Application Insights SDK. È possibile eseguire la migrazione da Application Insights SDK usando le guide alla migrazione per .NET, Node.js e Python, ma stiamo ancora lavorando per aggiungere altre funzionalità per la compatibilità con le versioni precedenti.

Questo articolo descrive come abilitare e configurare Application Insights per le applicazioni ASP.NET e ASP.NET Core. Questa procedura configura l'applicazione per inviare dati di telemetria ad Application Insights.

Application Insights può raccogliere i dati di telemetria seguenti dalle applicazioni ASP.NET e ASP.NET Core:

  • Requests
  • Dipendenze
  • Eccezioni
  • Contatori delle prestazioni
  • Tracce (registri)
  • Battiti cardiaci
  • Eventi e metriche personalizzati (richiede strumentazione manuale)
  • Visualizzazioni pagina (richiede JavaScript SDK per le pagine Web)
  • Test di disponibilità (richiede la configurazione manuale dei test di disponibilità)

Scenari supportati

Nota

Application Insights SDK per ASP.NET Core può monitorare le applicazioni indipendentemente da dove o come vengono eseguite. Se l'applicazione è in esecuzione e ha connettività di rete ad Azure, è possibile raccogliere i dati di telemetria. Il monitoraggio di Application Insights è supportato ovunque sia supportato .NET Core.

Sostenuto ASP.NET ASP.NET Core
Sistema operativo Windows Windows, Linux o Mac
Metodo di hosting In-process (IIS o IIS Express) Interno o esterno al processo
Metodo di distribuzione Web Deploy, MSI o copia manuale dei file Dipendente dal framework o indipendente
Server Web Internet Information Services (IIS) Internet Information Server (IIS) o Kestrel
Piattaforma di hosting Servizio app di Azure (Windows), Macchine virtuali di Azure o server locali La funzionalità Web Apps di Azure App Service, Macchine Virtuali di Azure, Docker e Azure Kubernetes Service (AKS)
Versione .NET .NET Framework 4.6.1 e versioni successive Tutte le versioni di .NET supportate ufficialmente che non sono in anteprima
IDE Visual Studio Visual Studio, Visual Studio Code o riga di comando

Prerequisiti

Creare un'app Web di base

Viene usata un'applicazione MVC di esempio. Se si utilizza il Servizio Worker, usare le istruzioni in Application Insights per le applicazioni del Servizio Worker.

  1. Apri Visual Studio.
  2. Selezionare Crea un nuovo progetto.
  3. Scegliere ASP.NET'applicazione Web (.NET Framework) con C# e selezionare Avanti.
  4. Immettere un nome di progetto e quindi selezionare Crea.
  5. Scegliere MVC e quindi Crea.

Aggiungere automaticamente Application Insights (Visual Studio)

Questa sezione illustra l'aggiunta automatica di Application Insights a un'app Web basata su modello.

Nota

Se si vuole usare il provider ILogger autonomo per l'applicazione ASP.NET, usare Microsoft.Extensions.Logging.ApplicationInsight.

Dall'interno del progetto di app Web ASP.NET in Visual Studio:

  1. Selezionare Progetto>Aggiungi Application Insights Telemetry>Application Insights SDK (locale)>Avanti>Fine>Chiudi.

  2. Aprire il file ApplicationInsights.config.

  3. Prima del tag di chiusura </ApplicationInsights> aggiungere una riga contenente la stringa di connessione per la risorsa di Application Insights. Trovare la stringa di connessione nel riquadro di panoramica della risorsa di Application Insights appena creata.

    <ConnectionString>Copy connection string from Application Insights Resource Overview</ConnectionString>
    
  4. Selezionare Progetto>Gestisci pacchetti NuGet>Aggiornamenti. Aggiornare quindi ogni pacchetto NuGet Microsoft.ApplicationInsights all'ultima versione stabile.

  5. Eseguire l'applicazione selezionando IIS Express. Viene aperta un'app ASP.NET di base. Mentre si esplorano le pagine del sito, i dati di telemetria vengono inviati ad Application Insights.

Aggiungere Application Insights manualmente (senza Visual Studio)

Questa sezione illustra l'aggiunta manuale di Application Insights a un'app Web basata su modelli.

  1. Aggiungere i pacchetti NuGet seguenti e le relative dipendenze al progetto:

  2. In alcuni casi, il file ApplicationInsights.config viene creato automaticamente. Se il file è già presente, andare al passaggio 4.

    Crearlo manualmente se mancante. Nella directory radice di un'applicazione ASP.NET creare un nuovo file denominato ApplicationInsights.config.

  3. Copiare la configurazione XML seguente nel file appena creato:

    <?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>Azure.Messaging.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 the connection string from your Application Insights resource</ConnectionString>
    </ApplicationInsights>
    
  4. Aggiungere la stringa di connessione, che può essere eseguita in due modi:

    • (Scelta consigliata) Impostare la stringa di connessione nella configurazione.

      Prima del tag di chiusura </ApplicationInsights> in ApplicationInsights.config, aggiungi la stringa di connessione per la risorsa di Application Insights. È possibile trovare la stringa di connessione nel riquadro di panoramica della risorsa di Application Insights appena creata.

      <ConnectionString>Copy the connection string from your Application Insights resource</ConnectionString>
      
    • Imposta la stringa di connessione nel codice.

      Specificare un stringa di connessione nella classe program.cs.

      var configuration = new TelemetryConfiguration
      {
          ConnectionString = "Copy the connection string from your Application Insights resource"
      };
      
  5. Allo stesso livello del progetto del file ApplicationInsights.config, creare una cartella denominata ErrorHandler con un nuovo file C# denominato AiHandleErrorAttribute.cs. Il contenuto del file sarà simile al seguente:

    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);
            }
        }
    }
    
  6. Nella cartella App_Start aprire il file FilterConfig.cs e modificarlo in modo che corrisponda all'esempio:

    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());
            }
        }
    }
    
  7. Se Web.config è già aggiornato, ignorare questo passaggio. In caso contrario, aggiornare il file come segue:

    <?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=\&quot;Web\&quot; /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>
    

A questo punto, è stato configurato correttamente il monitoraggio delle applicazioni lato server. Se si esegue l'app Web, i dati di telemetria iniziano a comparire in Application Insights.

Eseguire l'applicazione

Eseguire l'applicazione ed effettuare richieste. I dati di telemetria dovrebbero ora fluire in Application Insights. Application Insights SDK raccoglie automaticamente le richieste Web in ingresso all'applicazione, insieme ai dati di telemetria seguenti.

Metriche in tempo reale

È possibile usare le metriche attive per verificare rapidamente se il monitoraggio delle applicazioni con Application Insights è configurato correttamente. La visualizzazione dei dati di telemetria nel portale di Azure può richiedere alcuni minuti, ma il riquadro delle metriche attive mostra l'utilizzo della CPU del processo in esecuzione quasi in tempo reale. Può anche visualizzare altri dati di telemetria, ad esempio richieste, dipendenze e tracce.

Nota

Le metriche attive sono abilitate per impostazione predefinita quando si esegue l'onboarding seguendo le istruzioni consigliate per le applicazioni .NET.

Abilitare le metriche attive usando il codice per qualsiasi applicazione .NET

Per configurare manualmente le metriche attive:

  1. Installare il pacchetto NuGet Microsoft.ApplicationInsights.PerfCounterCollector.

  2. Il codice dell'app console di esempio seguente mostra la configurazione delle metriche attive:

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse;
using System;
using System.Threading.Tasks;

namespace LiveMetricsDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create a TelemetryConfiguration instance.
            TelemetryConfiguration config = TelemetryConfiguration.CreateDefault();
            config.InstrumentationKey = "INSTRUMENTATION-KEY-HERE";
            QuickPulseTelemetryProcessor quickPulseProcessor = null;
            config.DefaultTelemetrySink.TelemetryProcessorChainBuilder
                .Use((next) =>
                {
                    quickPulseProcessor = new QuickPulseTelemetryProcessor(next);
                    return quickPulseProcessor;
                })
                .Build();

            var quickPulseModule = new QuickPulseTelemetryModule();

            // Secure the control channel.
            // This is optional, but recommended.
            quickPulseModule.AuthenticationApiKey = "YOUR-API-KEY-HERE";
            quickPulseModule.Initialize(config);
            quickPulseModule.RegisterTelemetryProcessor(quickPulseProcessor);

            // Create a TelemetryClient instance. It is important
            // to use the same TelemetryConfiguration here as the one
            // used to set up live metrics.
            TelemetryClient client = new TelemetryClient(config);

            // This sample runs indefinitely. Replace with actual application logic.
            while (true)
            {
                // Send dependency and request telemetry.
                // These will be shown in live metrics.
                // CPU/Memory Performance counter is also shown
                // automatically without any additional steps.
                client.TrackDependency("My dependency", "target", "http://sample",
                    DateTimeOffset.Now, TimeSpan.FromMilliseconds(300), true);
                client.TrackRequest("My Request", DateTimeOffset.Now,
                    TimeSpan.FromMilliseconds(230), "200", true);
                Task.Delay(1000).Wait();
            }
        }
    }
}

Log ILogger

La configurazione predefinita raccoglie log ILoggerWarning e log di maggiore gravità. Per altre informazioni, vedere Come si personalizza la raccolta dei log ILogger?.

Dipendenze

Dipendenze rilevate automaticamente

Gli SDK di Application Insights per .NET e .NET Core vengono forniti con DependencyTrackingTelemetryModule, ovvero un modulo di telemetria che raccoglie automaticamente le dipendenze. Il modulo DependencyTrackingTelemetryModule viene fornito come pacchetto NuGet Microsoft.ApplicationInsights.DependencyCollector e portato automaticamente quando si usa il Microsoft.ApplicationInsights.Web pacchetto NuGet o il Microsoft.ApplicationInsights.AspNetCore pacchetto NuGet.

Attualmente, DependencyTrackingTelemetryModule tiene traccia delle dipendenze seguenti automaticamente:

Dipendenze Dettagli
HTTP/HTTPS Chiamate HTTP/HTTPS locali o remote.
Chiamate WCF Rilevata automaticamente solo se vengono usate associazioni basate su HTTP.
SQL Chiamate effettuate con SqlClient. Vedere la sezione Rilevamento SQL avanzato per ottenere query SQL complete per l'acquisizione di query SQL.
Archiviazione BLOB di Azure, Archiviazione tabelle o Archiviazione code Chiamate effettuate con il client di Archiviazione di Azure.
SDK del client Hub eventi di Azure Usare il pacchetto più recente: https://nuget.org/packages/Azure.Messaging.EventHubs.
SDK client del bus di servizio di Azure Usare il pacchetto più recente: https://nuget.org/packages/Azure.Messaging.ServiceBus.
Azure Cosmos DB Rilevato automaticamente se viene usato HTTP/HTTPS. Anche la traccia per le operazioni in modalità diretta con TCP viene acquisita automaticamente usando il pacchetto di anteprima >= 3.33.0-preview. Per altri dettagli, vedere la documentazione.

Se la dipendenza non viene selezionata automaticamente, è possibile monitorarla manualmente con una chiamata di dipendenza di rilevamento.

Per altre informazioni sul funzionamento del rilevamento delle dipendenze, vedere Rilevamento delle dipendenze in Application Insights.

Configurare il rilevamento automatico delle dipendenze nelle app console

Per tenere traccia automaticamente delle dipendenze dalle app console .NET, installare il pacchetto NuGet Microsoft.ApplicationInsights.DependencyCollector e inizializzare DependencyTrackingTelemetryModule:

    DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule();
    depModule.Initialize(TelemetryConfiguration.Active);

Rilevamento manuale delle dipendenze

Gli esempi seguenti di dipendenze, che non vengono raccolti automaticamente, richiedono il rilevamento manuale:

  • viene tenuta automaticamente traccia di Azure Cosmos DB solo se è usato HTTP/HTTPS. La modalità TCP non verrà acquisita automaticamente da Application Insights per le versioni dell'SDK precedenti a 2.22.0-Beta1.
  • Redis

Per tali dipendenze non raccolte automaticamente dall'SDK, è possibile tenerne traccia manualmente usando l'API TrackDependency usata dai moduli di raccolta automatica standard.

Esempio

Se si compila il codice con un assembly che non è stato scritto manualmente, è possibile eseguire tutte le chiamate. Questo scenario consente di scoprire quale contributo apporta ai tempi di risposta.

Per visualizzare i dati nei grafici relativi alle dipendenze in Application Insights, inviarli mediante TrackDependency:


    var startTime = DateTime.UtcNow;
    var timer = System.Diagnostics.Stopwatch.StartNew();
    try
    {
        // making dependency call
        success = dependency.Call();
    }
    finally
    {
        timer.Stop();
        telemetryClient.TrackDependency("myDependencyType", "myDependencyCall", "myDependencyData",  startTime, timer.Elapsed, success);
    }

In alternativa, TelemetryClient fornisce i metodi di estensione StartOperation e StopOperation, che possono essere usati per tenere traccia manualmente delle dipendenze, come illustrato in Rilevamento delle dipendenze in uscita.

Disabilitazione del modulo di rilevamento delle dipendenze standard

Per disattivare il modulo standard per il rilevamento delle dipendenze, rimuovere il riferimento a DependencyTrackingTelemetryModule in ApplicationInsights.config per applicazioni ASP.NET.

Rilevamento SQL avanzato per ottenere la query SQL completa

Per le chiamate SQL, il nome del server e del database viene sempre raccolto e archiviato come nome dell'oggetto raccolto DependencyTelemetry. Un altro campo, denominato dati, può contenere il testo completo della query SQL.

Nota

Funzioni di Azure richiede impostazioni separate per abilitare la raccolta di testo SQL. Per altre informazioni, vedere Abilitare la raccolta di query SQL.

Per applicazioni ASP.NET, il testo completo della query SQL viene raccolto con l'aiuto della strumentazione del codice byte, che richiede l'uso del motore di strumentazione o tramite il pacchetto NuGet Microsoft.Data.SqlClient anziché la libreria System.Data.SqlClient. I passaggi specifici della piattaforma per abilitare la raccolta completa di query SQL sono descritti nella tabella seguente.

Piattaforma Passaggi necessari per ottenere la query SQL completa
App Web nel servizio app di Azure Nel pannello di controllo dell'app Web aprire il riquadro Application Insights e abilitare i comandi SQL in .NET.
Server IIS (Macchine virtuali di Azure, locale e così via) Usare il pacchetto NuGet Microsoft.Data.SqlClient oppure usare il modulo PowerShell dell'agente di Application Insights per installare il motore di strumentazione e riavviare IIS.
Servizi cloud di Azure Aggiungere un'attività di avvio per installare StatusMonitor.
L'app deve essere caricati in ApplicationInsights SDK in fase di compilazione installando pacchetti NuGet per le applicazioni ASP.NET o ASP.NET Core.
IIS Express Usare il pacchetto NuGet Microsoft.Data.SqlClient .
Processi Web nel servizio app di Azure Usare il pacchetto NuGet Microsoft.Data.SqlClient .

Oltre ai passaggi precedenti specifici della piattaforma, è anche necessario acconsentire esplicitamente all'abilitazione della raccolta di comandi SQL modificando il file applicationInsights.config con il codice seguente:

<TelemetryModules>
  <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
    <EnableSqlCommandTextInstrumentation>true</EnableSqlCommandTextInstrumentation>
  </Add>

Nei casi precedenti, il modo corretto per convalidare che il motore di strumentazione sia installato correttamente è convalidando che la versione SDK di raccolta DependencyTelemetry è rddp. L'uso di rdddsd o rddf indica che le dipendenze vengono raccolte tramite callback DiagnosticSource o EventSource, quindi la query SQL completa non verrà acquisita.

Contatori delle prestazioni

ASP.NET supporta completamente i contatori delle prestazioni, mentre ASP.NET Core offre supporto limitato a seconda della versione dell'SDK e dell'ambiente di hosting. Per altre informazioni, vedere Contatori per .NET in Application Insights.

Contatori di eventi

Application Insights supporta la raccolta di EventCounters con il relativo EventCounterCollectionModule, che è abilitato per impostazione predefinita per ASP.NET Core. Per informazioni su come configurare l'elenco dei contatori da raccogliere, vedere Contatori per .NET in Application Insights.

Arricchire i dati tramite HTTP

var requestTelemetry = HttpContext.Current?.Items["Microsoft.ApplicationInsights.RequestTelemetry"] as RequestTelemetry;

if (requestTelemetry != null)
{
    requestTelemetry.Properties["myProp"] = "someData";
}

Configurare l'SDK di Application Insights

È possibile personalizzare Application Insights SDK per ASP.NET e ASP.NET Core per modificare la configurazione predefinita.

Per informazioni su come configurare Application Insights SDK per le applicazioni ASP.NET, vedere Configurare Application Insights SDK con ApplicationInsights.config o .xml.

campionamento

Per informazioni su come configurare il campionamento per le applicazioni ASP.NET, vedere Campionamento in Application Insights.

Inizializzatori di telemetria

Per arricchire i dati di telemetria con informazioni aggiuntive o per eseguire l'override delle proprietà di telemetria impostate dai moduli di telemetria standard, usare gli inizializzatori di telemetria.

Per informazioni su come usare gli inizializzatori di telemetria con applicazioni ASP.NET, vedere Filtrare e pre-elaborare i dati di telemetria in Application Insights SDK.

Processori di telemetria

Per informazioni su come usare processori di telemetria con applicazioni ASP.NET, vedere Filtrare e pre-elaborare i dati di telemetria in Application Insights SDK.

Configurare o rimuovere i moduli di telemetria predefiniti

Application Insights raccoglie automaticamente i dati di telemetria relativi a carichi di lavoro specifici senza richiedere il rilevamento manuale da parte dell'utente.

Per impostazione predefinita, sono abilitati i seguenti moduli di raccolta automatica. Questi moduli sono responsabili della raccolta automatica dei dati di telemetria. È possibile disabilitarli o configurarli per modificarne il comportamento predefinito.

  • RequestTrackingTelemetryModule: raccoglie RequestTelemetry dalle richieste Web in ingresso.
  • DependencyTrackingTelemetryModule: raccoglie DependencyTelemetry dalle chiamate HTTP in uscita e dalle chiamate SQL.
  • PerformanceCollectorModule: raccoglie i contatori delle prestazioni di Windows.
  • QuickPulseTelemetryModule: raccoglie i dati di telemetria da visualizzare nel riquadro delle metriche attive.
  • AppServicesHeartbeatTelemetryModule: raccoglie i battiti cardiaci (che vengono inviati come metriche personalizzate) relativi all'ambiente di App Service in cui è ospitata l'applicazione.
  • AzureInstanceMetadataTelemetryModule: Raccoglie i battiti cardiaci (che vengono inviati come metriche personalizzate) sull'ambiente di VM di Azure in cui è ospitata l'applicazione.
  • EventCounterCollectionModule: raccoglie EventCounter. Questo modulo è una nuova funzionalità ed è disponibile nell'SDK versione 2.8.0 e successive.

Per informazioni su come configurare o rimuovere moduli di telemetria per ASP.NET'applicazione, vedere Configurare Application Insights SDK con ApplicationInsights.config o .xml.

Aggiungere il monitoraggio sul lato client

Le sezioni precedenti forniscono indicazioni sui metodi per configurare automaticamente e manualmente il monitoraggio lato server. Per aggiungere il monitoraggio lato client, usare l'SDK JavaScript lato client. È possibile monitorare le transazioni lato client di qualsiasi pagina Web aggiungendo uno script del caricatore SDK JavaScript (Web) prima del tag di chiusura </head> del codice HTML della pagina.

Sebbene sia possibile aggiungere manualmente lo script di caricamento di JavaScript (Web) SDK all'intestazione di ogni pagina HTML, è consigliabile aggiungerlo a una pagina primaria. Questa azione inserisce lo script di caricamento di JavaScript (Web) SDK in tutte le pagine di un sito.

Per l'app MVC ASP.NET basata su modello di questo articolo, il file da modificare è _Layout.cshtml. È possibile trovarlo in Visualizzazioni>Condivise. Per aggiungere il monitoraggio sul lato client, aprire _Layout.cshtml e seguire le istruzioni per l'installazione basata su script di caricamento di JavaScript (Web) SDK riportate nell'articolo sulla configurazione di JavaScript SDK sul lato client.

Risoluzione dei problemi

Vedere l'articolo sulla risoluzione dei problemi dedicato.

C'è un problema noto in Visual Studio 2019: l'archiviazione della chiave di strumentazione o stringa di connessione in un segreto utente viene interrotta per le app basate su .NET Framework. Alla fine la chiave deve essere inserita direttamente nel file applicationinsights.config per risolvere questo bug. Questo articolo è progettato per evitare completamente questo problema, non usando segreti utente.

Testare la connettività tra l'host dell'applicazione e il servizio di inserimento

Gli SDK e gli agenti di Application Insights inviano dati di telemetria per l'inserimento come chiamate REST agli endpoint di inserimento. È possibile testare la connettività dal server Web o dal computer host dell'applicazione agli endpoint del servizio di inserimento usando client REST non elaborati da comandi PowerShell o curl. Vedere Risolvere i problemi di dati di telemetria delle applicazioni mancanti in Application Insights per Monitoraggio di Azure.

SDK open source

Leggere e contribuire al codice.

Per gli aggiornamenti e le correzioni di bug più recenti, vedere le note sulla versione.

Note sulla versione

Per la versione 2.12 e successive: .NET Software Development Kit (SDK) inclusi ASP.NET, ASP.NET Core e adattatori di registrazione

Gli aggiornamenti del servizio riepilogano anche i principali miglioramenti di Application Insights.

Passaggi successivi