Bagikan melalui


Memantau aplikasi .NET dan Node.js dengan Application Insights (API Klasik 2.x)

Perhatian

Penting

Untuk aplikasi baru, gunakan Distro OpenTelemetry Azure Monitor.

Artikel ini menjelaskan cara mengaktifkan dan mengonfigurasi Application Insights untuk aplikasi .NET (ASP.NET, ASP.NET Core, dan Worker Service) dan Node.js. Application Insights dapat mengumpulkan telemetri berikut dari aplikasi Anda:

  • Permintaan
  • Ketergantungan
  • Pengecualian
  • Penghitung kinerja
  • Jejak (Log)
  • Heartbeat
  • Peristiwa khusus & metrik (memerlukan instrumentasi manual)
  • Tampilan halaman (memerlukan JavaScript SDK untuk halaman web)
  • Pengujian ketersediaan (memerlukan pengaturan pengujian ketersediaan secara manual)

Skenario yang didukung

Dukungan ASP.NET ASP.NET Core Layanan Pekerja
Sistem operasi Windows Windows, Linux, atau macOS Windows, Linux, atau macOS
Metode hosting Dalam proses (IIS atau IIS Express) Dalam proses atau di luar proses Layanan konsol atau latar belakang (berjalan sebagai proses, biasanya melalui dotnet CLI atau sebagai daemon Windows Service/Linux)
Metode penyebaran Web Deploy, MSI, atau salinan file manual Dependen kerangka kerja atau mandiri Dependen kerangka kerja atau mandiri
Server Web Layanan Informasi Internet (IIS) Internet Information Server (IIS) atau Kestrel Tidak berlaku (tidak ada server web; dirancang untuk beban kerja non-HTTP seperti olahpesan, tugas latar belakang, dan aplikasi konsol)
Platform penyimpanan Azure App Service (Windows), Azure Virtual Machines, atau server lokal Fitur Web Apps dari Azure App Service, Azure Virtual Machines, Docker, dan Azure Kubernetes Service (AKS) Azure Virtual Machines, Azure Kubernetes Service (AKS), kontainer, atau lingkungan apa pun di mana .NET Core didukung
Versi .NET .NET Framework 4.6.1 dan yang lebih baru Semua versi .NET yang didukung secara resmi yang tidak sedang dalam pratinjau Semua versi .NET yang didukung secara resmi yang tidak sedang dalam pratinjau

SDK Worker Service tidak melakukan pengumpulan telemetri secara mandiri. Sebaliknya, ini menghadirkan kolektor otomatis terkenal lainnya dari Application Insights seperti DependencyCollector, PerfCounterCollector, dan ApplicationInsightsLoggingProvider. SDK ini menyediakan metode ekstensi pada IServiceCollection untuk mengaktifkan dan mengonfigurasi pengumpulan telemetri.

Nota

"Worker service" adalah aplikasi yang berjalan di belakang untuk waktu yang lama, menjalankan tugas di luar saluran permintaan/respons HTTP. Application Insights SDK for Worker Service dapat digunakan dalam .NET Core Worker Service yang baru diperkenalkan, tugas latar belakang di ASP.NET Core, dan aplikasi konsol seperti .NET Core dan .NET Framework.

Tambahkan Application Insights

Di bagian ini

Prasyarat

Integrasikan aplikasi Anda dengan SDK Application Insights

Bagian ini memandu Anda menambahkan Application Insights ke aplikasi web berbasis templat.

ASP.NET

  1. Tambahkan paket NuGet berikut dan dependensinya ke proyek Anda:

  2. Dalam beberapa kasus, file ApplicationInsights.config dibuat untuk Anda secara otomatis. Jika file sudah ada, lewati ke langkah 4.

    Buatlah sendiri jika belum ada. Di direktori akar aplikasi ASP.NET, buat file baru yang disebut ApplicationInsights.config.

  3. Salin konfigurasi XML berikut ke file yang baru Anda buat:


    Perluas untuk melihat konfigurasi
    <?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. Tambahkan string koneksi, yang dapat dilakukan dengan dua cara:

    • (Disarankan) Atur string koneksi dalam konfigurasi.

      Sebelum tag penutup </ApplicationInsights> di ApplicationInsights.config, tambahkan string koneksi untuk sumber daya Application Insights Anda. Anda dapat menemukan string koneksi Anda di panel ringkasan dari sumber daya Application Insights yang baru dibuat.

      <ConnectionString>Copy the connection string from your Application Insights resource</ConnectionString>
      
    • Atur string koneksi dalam kode.

      Berikan connection string di kelas program.cs Anda.

      var configuration = new TelemetryConfiguration
      {
          ConnectionString = "Copy the connection string from your Application Insights resource"
      };
      
  5. Pada tingkat proyek yang sama dengan file ApplicationInsights.config, buat folder bernama ErrorHandler dengan file C# baru bernama AiHandleErrorAttribute.cs. Isi file terlihat seperti ini:

    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. Di folder App_Start, buka file FilterConfig.cs dan ubah agar sesuai dengan contoh:

    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. Jika Web.config sudah diperbarui, lewati langkah ini. Jika tidak, perbarui file sebagai berikut:


    Perluas untuk melihat konfigurasi
    <?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>
    

Pada titik ini, Anda berhasil mengonfigurasi pemantauan aplikasi sisi server. Jika Anda menjalankan aplikasi web, Anda akan melihat telemetri mulai muncul di Application Insights.

ASP.NET Core

  1. Instal paket Application Insights SDK NuGet untuk ASP.NET Core.

    Sebaiknya Anda selalu menggunakan versi stabil terbaru. Temukan catatan rilis lengkap untuk SDK di repositori GitHub sumber terbuka.

    Sampel kode berikut menunjukkan perubahan yang akan ditambahkan ke file .csproj proyek Anda:

    <ItemGroup>
        <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.21.0" />
    </ItemGroup>
    
  2. Tambahkan AddApplicationInsightsTelemetry() ke kelas program.cs Anda.

    Tambahkan builder.Services.AddApplicationInsightsTelemetry(); setelah WebApplication.CreateBuilder() metode , seperti dalam contoh ini:

    // This method gets called by the runtime. Use this method to add services to the container.
    var builder = WebApplication.CreateBuilder(args);
    
    // The following line enables Application Insights telemetry collection.
    builder.Services.AddApplicationInsightsTelemetry();
    
    // This code adds other services for your application.
    builder.Services.AddMvc();
    
    var app = builder.Build();
    
  3. Tambahkan string koneksi, yang dapat dilakukan dengan tiga cara:

    • (Disarankan) Atur string koneksi dalam konfigurasi.

      Atur string koneksi di appsettings.json dan pastikan file konfigurasi disalin ke folder akar aplikasi selama penerbitan.

      {
          "Logging": {
              "LogLevel": {
                  "Default": "Information",
                  "Microsoft.AspNetCore": "Warning"
              }
          },
          "AllowedHosts": "*",
          "ApplicationInsights": {
              "ConnectionString": "<YOUR-CONNECTION-STRING>"
          }
      }
      
    • Atur connection string dalam variabel lingkungan APPLICATIONINSIGHTS_CONNECTION_STRING atau ApplicationInsights:ConnectionString dalam file konfigurasi JSON.

      Contohnya:

      • SET ApplicationInsights:ConnectionString = <Copy connection string from Application Insights Resource Overview>
      • SET APPLICATIONINSIGHTS_CONNECTION_STRING = <Copy connection string from Application Insights Resource Overview>
      • Biasanya, APPLICATIONINSIGHTS_CONNECTION_STRING digunakan dalam aplikasi web. Ini juga dapat digunakan di semua tempat di mana SDK ini didukung.

      Nota

      String koneksi yang ditentukan dalam kode lebih diutamakan dibandingkan variabel lingkungan APPLICATIONINSIGHTS_CONNECTION_STRING, yang lebih diutamakan dibandingkan opsi lain.

    • Atur string koneksi dalam kode.

      Berikan string koneksi sebagai bagian dari argumen ApplicationInsightsServiceOptions ke AddApplicationInsightsTelemetry di kelas program.cs Anda.

Rahasia pengguna dan penyedia konfigurasi lainnya

Jika Anda ingin menyimpan string koneksi di rahasia pengguna ASP.NET Core atau mengambilnya dari penyedia konfigurasi lain, Anda dapat menggunakan kelebihan beban dengan parameter Microsoft.Extensions.Configuration.IConfiguration. Contoh parameter adalah services.AddApplicationInsightsTelemetry(Configuration);.

Dalam versi Microsoft.ApplicationInsights.AspNetCore2.15.0 dan yang lebih baru, pemanggilan services.AddApplicationInsightsTelemetry() akan secara otomatis membaca string koneksi dari aplikasi Microsoft.Extensions.Configuration.IConfiguration. Tidak perlu menyediakan IConfigurationsecara eksplisit .

Jika IConfiguration memuat konfigurasi dari beberapa penyedia, maka services.AddApplicationInsightsTelemetry akan memprioritaskan konfigurasi dari appsettings.json, terlepas dari urutan penambahan penyedia. Gunakan metode services.AddApplicationInsightsTelemetry(IConfiguration) untuk membaca konfigurasi dari IConfiguration tanpa perlakuan khusus untuk appsettings.json.

Layanan Pekerja

Di bagian ini
Menggunakan Application Insights SDK untuk Layanan Pekerja
  1. Instal paket Microsoft.ApplicationInsights.WorkerService ke aplikasi.

    Cuplikan berikut menunjukkan perubahan yang harus ditambahkan ke file proyek .csproj Anda:

        <ItemGroup>
            <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
        </ItemGroup>
    
  2. Konfigurasikan connection string dalam variabel lingkungan APPLICATIONINSIGHTS_CONNECTION_STRING atau dalam konfigurasi (appsettings.json).

    Cuplikan layar yang menampilkan gambaran umum Application Insights dan string koneksi.

  3. Dapatkan instans ILogger atau TelemetryClient dari kontainer Injeksi Dependensi (DI) dengan memanggil serviceProvider.GetRequiredService<TelemetryClient>(); atau dengan menggunakan Injeksi Konstruktor. Langkah ini memicu proses konfigurasi modul TelemetryConfiguration dan autocollection.

Instruksi khusus untuk setiap jenis aplikasi dijelaskan di bagian berikut.

Aplikasi .NET Core Worker Service

Contoh lengkap dibagikan di situs web NuGet.

  1. Unduh dan instal .NET SDK.

  2. Buat proyek Layanan Pekerja baru dengan menggunakan templat proyek baru Visual Studio atau melalui baris perintah dotnet new worker.

  3. Tambahkan paket Microsoft.ApplicationInsights.WorkerService ke aplikasi.

  4. Tambahkan services.AddApplicationInsightsTelemetryWorkerService(); ke metode CreateHostBuilder() dalam kelas Program.cs Anda, seperti dalam contoh ini:

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<Worker>();
                    services.AddApplicationInsightsTelemetryWorkerService();
                });
    
  5. Ubah Worker.cs Anda sesuai dengan contoh berikut:

        using Microsoft.ApplicationInsights;
        using Microsoft.ApplicationInsights.DataContracts;
    
        public class Worker : BackgroundService
        {
            private readonly ILogger<Worker> _logger;
            private TelemetryClient _telemetryClient;
            private static HttpClient _httpClient = new HttpClient();
    
            public Worker(ILogger<Worker> logger, TelemetryClient tc)
            {
                _logger = logger;
                _telemetryClient = tc;
            }
    
            protected override async Task ExecuteAsync(CancellationToken stoppingToken)
            {
                while (!stoppingToken.IsCancellationRequested)
                {
                    _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
    
                    using (_telemetryClient.StartOperation<RequestTelemetry>("operation"))
                    {
                        _logger.LogWarning("A sample warning message. By default, logs with severity Warning or higher is captured by Application Insights");
                        _logger.LogInformation("Calling bing.com");
                        var res = await _httpClient.GetAsync("https://bing.com");
                        _logger.LogInformation("Calling bing completed with status:" + res.StatusCode);
                        _telemetryClient.TrackEvent("Bing call event completed");
                    }
    
                    await Task.Delay(1000, stoppingToken);
                }
            }
        }
    
  6. Siapkan string koneksi.

    Cuplikan layar yang memperlihatkan gambaran umum Application Insights dan string koneksi.

    Nota

    Kami menyarankan agar Anda menentukan string koneksi dalam konfigurasi. Sampel kode berikut menunjukkan cara menentukan string koneksi di appsettings.json. Pastikan appsettings.json disalin ke folder akar aplikasi selama penerbitan.

        {
            "ApplicationInsights":
            {
                "ConnectionString" : "<YOUR-CONNECTION-STRING>"
            },
            "Logging":
            {
                "LogLevel":
                {
                    "Default": "Warning"
                }
            }
        }
    

Atau, tentukan connection string dalam variabel lingkungan APPLICATIONINSIGHTS_CONNECTION_STRING.

Biasanya, APPLICATIONINSIGHTS_CONNECTION_STRING menentukan string koneksi untuk aplikasi yang disebarkan ke aplikasi web sebagai "web jobs".

Nota

String koneksi yang ditentukan dalam kode memiliki prioritas lebih tinggi daripada variabel lingkungan APPLICATIONINSIGHTS_CONNECTION_STRING, yang prioritasnya lebih tinggi daripada opsi lainnya.

Tugas latar belakang ASP.NET Core dengan layanan yang dihosting

Dokumen ini menjelaskan cara membuat tugas latar belakang dalam aplikasi ASP.NET Core.

Contoh lengkap dibagikan di halaman GitHub ini.

  1. Instal paket Microsoft.ApplicationInsights.WorkerService ke aplikasi.

  2. Tambahkan services.AddApplicationInsightsTelemetryWorkerService(); ke ConfigureServices() metode , seperti dalam contoh ini:

        public static async Task Main(string[] args)
        {
            var host = new HostBuilder()
                .ConfigureAppConfiguration((hostContext, config) =>
                {
                    config.AddJsonFile("appsettings.json", optional: true);
                })
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddLogging();
                    services.AddHostedService<TimedHostedService>();
    
                    // connection string is read automatically from appsettings.json
                    services.AddApplicationInsightsTelemetryWorkerService();
                })
                .UseConsoleLifetime()
                .Build();
    
            using (host)
            {
                // Start the host
                await host.StartAsync();
    
                // Wait for the host to shutdown
                await host.WaitForShutdownAsync();
            }
        }
    

    Kode berikut adalah untuk TimedHostedService, di mana logika tugas latar belakang berada:

        using Microsoft.ApplicationInsights;
        using Microsoft.ApplicationInsights.DataContracts;
    
        public class TimedHostedService : IHostedService, IDisposable
        {
            private readonly ILogger _logger;
            private Timer _timer;
            private TelemetryClient _telemetryClient;
            private static HttpClient httpClient = new HttpClient();
    
            public TimedHostedService(ILogger<TimedHostedService> logger, TelemetryClient tc)
            {
                _logger = logger;
                this._telemetryClient = tc;
            }
    
            public Task StartAsync(CancellationToken cancellationToken)
            {
                _logger.LogInformation("Timed Background Service is starting.");
    
                _timer = new Timer(DoWork, null, TimeSpan.Zero,
                    TimeSpan.FromSeconds(1));
    
                return Task.CompletedTask;
            }
    
            private void DoWork(object state)
            {
                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
    
                using (_telemetryClient.StartOperation<RequestTelemetry>("operation"))
                {
                    _logger.LogWarning("A sample warning message. By default, logs with severity Warning or higher is captured by Application Insights");
                    _logger.LogInformation("Calling bing.com");
                    var res = httpClient.GetAsync("https://bing.com").GetAwaiter().GetResult();
                    _logger.LogInformation("Calling bing completed with status:" + res.StatusCode);
                    _telemetryClient.TrackEvent("Bing call event completed");
                }
            }
        }
    
  3. Siapkan string koneksi. Gunakan appsettings.json yang sama dari contoh Layanan Pekerja .NET sebelumnya.

Aplikasi konsol .NET Core/.NET Framework

Seperti disebutkan di awal artikel ini, paket baru dapat digunakan untuk mengaktifkan telemetri Application Insights bahkan dari aplikasi konsol biasa. Paket ini menargetkan netstandard2.0, sehingga dapat digunakan untuk aplikasi konsol di .NET Core atau yang lebih tinggi, dan .NET Framework atau yang lebih tinggi.

Contoh lengkap dibagikan di halaman GitHub ini.

  1. Instal paket Microsoft.ApplicationInsights.WorkerService ke aplikasi.

  2. Ubah Program.cs seperti yang ditunjukkan dalam contoh berikut:

        using Microsoft.ApplicationInsights;
        using Microsoft.ApplicationInsights.DataContracts;
        using Microsoft.ApplicationInsights.WorkerService;
        using Microsoft.Extensions.DependencyInjection;
        using Microsoft.Extensions.Logging;
        using System;
        using System.Net.Http;
        using System.Threading.Tasks;
    
        namespace WorkerSDKOnConsole
        {
            class Program
            {
                static async Task Main(string[] args)
                {
                    // Create the DI container.
                    IServiceCollection services = new ServiceCollection();
    
                    // Being a regular console app, there is no appsettings.json or configuration providers enabled by default.
                    // Hence connection string and any changes to default logging level must be specified here.
                    services.AddLogging(loggingBuilder => loggingBuilder.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>("Category", LogLevel.Information));
                    services.AddApplicationInsightsTelemetryWorkerService((ApplicationInsightsServiceOptions options) => options.ConnectionString = "<YOUR-CONNECTION-STRING>");
    
                    // To pass a connection string
                    // - aiserviceoptions must be created
                    // - set connectionstring on it
                    // - pass it to AddApplicationInsightsTelemetryWorkerService()
    
                    // Build ServiceProvider.
                    IServiceProvider serviceProvider = services.BuildServiceProvider();
    
                    // Obtain logger instance from DI.
                    ILogger<Program> logger = serviceProvider.GetRequiredService<ILogger<Program>>();
    
                    // Obtain TelemetryClient instance from DI, for additional manual tracking or to flush.
                    var telemetryClient = serviceProvider.GetRequiredService<TelemetryClient>();
    
                    var httpClient = new HttpClient();
    
                    while (true) // This app runs indefinitely. Replace with actual application termination logic.
                    {
                        logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
    
                        // Replace with a name which makes sense for this operation.
                        using (telemetryClient.StartOperation<RequestTelemetry>("operation"))
                        {
                            logger.LogWarning("A sample warning message. By default, logs with severity Warning or higher is captured by Application Insights");
                            logger.LogInformation("Calling bing.com");                    
                            var res = await httpClient.GetAsync("https://bing.com");
                            logger.LogInformation("Calling bing completed with status:" + res.StatusCode);
                            telemetryClient.TrackEvent("Bing call event completed");
                        }
    
                        await Task.Delay(1000);
                    }
    
                    // Explicitly call Flush() followed by sleep is required in console apps.
                    // This is to ensure that even if application terminates, telemetry is sent to the back-end.
                    telemetryClient.Flush();
                    Task.Delay(5000).Wait();
                }
            }
        }
    

Aplikasi konsol ini juga menggunakan default TelemetryConfigurationyang sama. Ini dapat disesuaikan dengan cara yang sama seperti contoh di bagian sebelumnya.

Menyebarkan Agen Application Insights untuk server lokal

Di bagian ini

Application Insights Agent adalah modul PowerShell yang diterbitkan ke PowerShell Gallery. Ini menggantikan Status Monitor. Telemetri dikirim ke portal Azure, tempat Anda dapat monitor aplikasi Anda.

Untuk daftar lengkap skenario autoinstrumentasi yang didukung, lihat Lingkungan, bahasa, dan penyedia sumber daya yang didukung.

Nota

Modul saat ini mendukung instrumentasi tanpa kode aplikasi web ASP.NET dan ASP.NET Core yang dihosting dengan Internet Information Server (IIS). Gunakan SDK untuk melengkapi aplikasi Java dan Node.js.

Nota

Pemantauan sisi klien diaktifkan secara default untuk aplikasi ASP.NET Core. Jika Anda ingin menonaktifkan pemantauan sisi klien, tentukan variabel lingkungan di server dengan informasi berikut:

  • Nama: APPINSIGHTS_JAVASCRIPT_ENABLED
  • Nilai: false

Memulai Langkah Pertama

Bagian ini berisi perintah mulai cepat yang diharapkan berfungsi untuk sebagian besar lingkungan. Instruksi bergantung pada PowerShell Gallery untuk mendistribusikan pembaruan. Perintah ini mendukung parameter -Proxy PowerShell.

Untuk penjelasan tentang perintah ini, instruksi kustomisasi, dan informasi tentang pemecahan masalah, lihat instruksi detail.

Jika Anda tidak memiliki langganan Azure, buatlah akun gratis sebelum Anda memulai.

Nota

Untuk prasyarat yang mungkin Anda butuhkan, lihat Dukungan PowerShell Gallery Transport Layer Security (TLS).

  1. Instal modul (jalankan sebagai admin):

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
    Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
    Set-PSRepository -Name "PSGallery" -InstallationPolicy Trusted
    Install-Module -Name PowerShellGet -Force
    
  2. Instal Application Insights Agent (jalankan sebagai admin):

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
    Install-Module -Name Az.ApplicationMonitor -AllowPrerelease -AcceptLicense
    

    Nota

    Sakelar AllowPrerelease dalam Install-Module cmdlet memungkinkan penginstalan rilis beta.

    Untuk informasi selengkapnya, lihat Install-Module.

  3. Aktifkan pemantauan:

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
    Enable-ApplicationInsightsMonitoring -ConnectionString 'InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/'
    
Opsi 2: Unduh dan instal agen Application Insights secara manual (opsi offline)
  1. Unduh modul versi terbaru secara manual dari PowerShell Gallery.

  2. Unzip dan instal Application Insights Agent:

    $pathToNupkg = "C:\Users\t\Desktop\Az.ApplicationMonitor.0.3.0-alpha.nupkg"
    $pathToZip = ([io.path]::ChangeExtension($pathToNupkg, "zip"))
    $pathToNupkg | rename-item -newname $pathToZip
    $pathInstalledModule = "$Env:ProgramFiles\WindowsPowerShell\Modules\Az.ApplicationMonitor"
    Expand-Archive -LiteralPath $pathToZip -DestinationPath $pathInstalledModule
    
  3. Aktifkan pemantauan:

    Enable-ApplicationInsightsMonitoring -ConnectionString 'InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/'
    

Instruksi terperinci

Bagian ini menjelaskan cara onboarding ke PowerShell Gallery dan mengunduh modul ApplicationMonitor. Parameter yang disertakan adalah yang paling umum Anda butuhkan untuk memulai. Kami juga menyediakan instruksi pengunduhan manual jika Anda tidak memiliki akses internet.

Jalankan PowerShell sebagai Admin dengan kebijakan eksekusi yang lebih tinggi

Penting

PowerShell memerlukan izin tingkat Admin untuk membuat perubahan pada komputer Anda.

Kebijakan eksekusi

  • Deskripsi: Secara default, menjalankan skrip PowerShell dinonaktifkan. Sebaiknya izinkan skrip RemoteSigned hanya untuk lingkup Saat Ini.
  • Referensi: Tentang Kebijakan Eksekusi dan Set-ExecutionPolicy.
  • Perintah: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process.
  • Parameter opsional:
    • -Force. Melewati permintaan konfirmasi.

Contoh kesalahan

Install-Module : The 'Install-Module' command was found in the module 'PowerShellGet', but the module could not be
loaded. For more information, run 'Import-Module PowerShellGet'.

Import-Module : File C:\Program Files\WindowsPowerShell\Modules\PackageManagement\1.3.1\PackageManagement.psm1 cannot
be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.
Prasyarat untuk PowerShell

Audit instans PowerShell Anda dengan menjalankan perintah $PSVersionTable. Perintah ini menghasilkan output berikut:

Name                           Value
----                           -----
PSVersion                      5.1.17763.316
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17763.316
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Instruksi ini ditulis dan diuji pada komputer yang menjalankan Windows 10 dan versi berikut.

Langkah-langkah ini menyiapkan server Anda untuk mengunduh modul dari PowerShell Gallery.

Nota

PowerShell Gallery didukung pada Windows 10, Windows Server 2016, dan PowerShell 6+. Untuk informasi tentang versi sebelumnya, lihat Memasang PowerShellGet.

  1. Jalankan PowerShell sebagai Admin dengan kebijakan eksekusi yang lebih tinggi.

  2. Pasang penyedia paket NuGet.

    • Deskripsi: Anda memerlukan penyedia ini untuk berinteraksi dengan repositori berbasis NuGet seperti PowerShell Gallery.
    • Referensi: Install-PackageProvider.
    • Perintah: Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201.
    • Parameter opsional:
      • -Proxy. Menentukan server proksi untuk permintaan.
      • -Force. Melewati permintaan konfirmasi.

    Anda menerima notifikasi ini jika NuGet belum dikonfigurasi.

    NuGet provider is required to continue
    PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories.
    The NuGet provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or
    'C:\Users\t\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider by running
    'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install and import
    the NuGet provider now?
    [Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):
    
  3. Konfigurasikan PowerShell Gallery sebagai repositori tepercaya.

    • Deskripsi: Secara default, PowerShell Gallery adalah repositori yang tidak tepercaya.
    • Referensi: Set-PSRepository.
    • Perintah: Set-PSRepository -Name "PSGallery" -InstallationPolicy Trusted.
    • Parameter opsional:
      • -Proxy. Menentukan server proksi untuk permintaan.

    Anda menerima pesan ini jika PowerShell Gallery tidak dipercaya:

    Untrusted repository
    You are installing the modules from an untrusted repository.
    If you trust this repository, change its InstallationPolicy value
    by running the Set-PSRepository cmdlet. Are you sure you want to
    install the modules from 'PSGallery'?
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"):
    

    Anda dapat mengonfirmasi perubahan ini dan mengaudit semua PSRepositories dengan menjalankan Get-PSRepository perintah .

  4. Pasang PowerShellGet versi terbaru.

    • Deskripsi: Modul ini berisi alat yang digunakan untuk mendapatkan modul lain dari PowerShell Gallery. Versi 1.0.0.1 dikirim dengan Windows 10 dan Windows Server. Diperlukan versi 1.6.0 atau yang lebih tinggi. Untuk menentukan versi yang pasang, jalankan perintah Get-Command -Module PowerShellGet.
    • Referensi: Memasang PowerShellGet.
    • Perintah: Install-Module -Name PowerShellGet.
    • Parameter opsional:
      • -Proxy. Menentukan server proksi untuk permintaan.
      • -Force. Melewati peringatan "sudah dipasang" dan memasang versi terbaru.

    Anda menerima kesalahan ini jika Anda tidak menggunakan versi terbaru PowerShellGet:

    Install-Module : A parameter cannot be found that matches parameter name 'AllowPrerelease'.
    At line:1 char:20
    Install-Module abc -AllowPrerelease
                   ~~~~~~~~~~~~~~~~
    CategoryInfo          : InvalidArgument: (:) [Install-Module], ParameterBindingException
    FullyQualifiedErrorId : NamedParameterNotFound,Install-Module
    
  5. Mulai ulang PowerShell. Anda tidak dapat memuat versi baru di sesi saat ini. Sesi PowerShell baru memuat versi terbaru PowerShellGet.

Langkah-langkah ini mengunduh modul Az.ApplicationMonitor dari PowerShell Gallery.

  1. Pastikan bahwa semua prasyarat untuk PowerShell Gallery terpenuhi.
  2. Jalankan PowerShell sebagai Admin dengan kebijakan eksekusi yang lebih tinggi.
  3. Instal modul Az.ApplicationMonitor.
    • Referensi: Modul-Pemasangan.
    • Perintah: Install-Module -Name Az.ApplicationMonitor.
    • Parameter opsional:
      • -Proxy. Menentukan server proksi untuk permintaan.
      • -AllowPrerelease. Memungkinkan pemasangan rilis alfa dan beta.
      • -AcceptLicense. Melewati perintah "Setujui Lisensi"
      • -Force. Melewati peringatan "Repositori Tidak Tepercaya".
Opsi 2: Unduh dan instal modul secara manual (opsi offline)

Jika karena alasan apa pun Anda tidak dapat tersambung ke modul PowerShell, Anda dapat mengunduh dan memasang modul Az.ApplicationMonitor secara manual.

Mengunduh file nupkg terbaru secara manual
  1. Pergi ke https://www.powershellgallery.com/packages/Az.ApplicationMonitor.
  2. Pilih file versi terbaru dalam tabel Riwayat Versi.
  3. Di bagian Opsi Pemasangan, pilih Unduh Secara Manual.
Opsi 2.1: Menginstal ke direktori modul PowerShell

Instal modul PowerShell yang diunduh secara manual ke direktori PowerShell sehingga dapat ditemukan oleh sesi PowerShell. Untuk informasi selengkapnya, lihat Memasang Modul PowerShell.

Unzip nupkg sebagai file zip dengan menggunakan Expand-Archive (v1.0.1.0)

  • Deskripsi: Microsoft.PowerShell.Archive (v1.0.1.0) versi dasar tidak dapat meng-unzip file nupkg. Ganti nama file dengan ekstensi .zip.

  • Referensi: Expand-Archive.

  • Perintah:

    $pathToNupkg = "C:\az.applicationmonitor.0.3.0-alpha.nupkg"
    $pathToZip = ([io.path]::ChangeExtension($pathToNupkg, "zip"))
    $pathToNupkg | rename-item -newname $pathToZip
    $pathInstalledModule = "$Env:ProgramFiles\WindowsPowerShell\Modules\az.applicationmonitor"
    Expand-Archive -LiteralPath $pathToZip -DestinationPath $pathInstalledModule
    

Unzip nupkg dengan menggunakan Expand-Archive (v1.1.0.0)

  • Deskripsi: Gunakan Expand-Archive versi terbaru untuk meng-unzip file nupkg tanpa mengubah ekstensi.

  • Referensi: Expand-Archive dan Microsoft.PowerShell.Archive.

  • Perintah:

    $pathToNupkg = "C:\az.applicationmonitor.0.2.1-alpha.nupkg"
    $pathInstalledModule = "$Env:ProgramFiles\WindowsPowerShell\Modules\az.applicationmonitor"
    Expand-Archive -LiteralPath $pathToNupkg -DestinationPath $pathInstalledModule
    
Opsi 2.2: Unzip dan impor nupkg secara manual

Instal modul PowerShell yang diunduh secara manual ke direktori PowerShell sehingga dapat ditemukan oleh sesi PowerShell. Untuk informasi selengkapnya, lihat Memasang Modul PowerShell.

Jika Anda memasang modul ke direktori lain, impor modul secara manual menggunakan Modul-Impor.

Penting

Pustaka tautan dinamis (DLL) diinstal melalui jalur relatif. Simpan konten paket di direktori runtime yang diinginkan dan konfirmasi bahwa izin akses memperbolehkan baca tetapi tidak tulis.

  1. Ubah ekstensi menjadi ".zip" dan ekstrak isi paket ke direktori pemasangan yang diinginkan.
  2. Cari jalur file Az.ApplicationMonitor.psd1.
  3. Jalankan PowerShell sebagai Admin dengan kebijakan eksekusi yang lebih tinggi.
  4. Muat modul menggunakan perintah Import-Module Az.ApplicationMonitor.psd1.
Merutekan lalu lintas melalui proksi

Saat memantau komputer di intranet privat, Anda perlu merutekan lalu lintas HTTP melalui proksi.

Perintah PowerShell untuk mengunduh dan menginstal Az.ApplicationMonitor dari PowerShell Gallery mendukung parameter -Proxy. Tinjau petunjuk sebelumnya saat Anda menulis skrip pemasangan.

Application Insights SDK perlu mengirim telemetri aplikasi Anda ke Microsoft. Sebaiknya konfigurasikan pengaturan proksi untuk aplikasi di file web.config Anda. Untuk informasi selengkapnya, lihat Bagaimana cara melakukan pengalihan proksi?.

Mengaktifkan pemantauan

Gunakan perintah Enable-ApplicationInsightsMonitoring untuk mengaktifkan pemantauan.

Lihat referensi API untuk deskripsi terperinci tentang cara menggunakan cmdlet ini.

Referensi API

Penting

Bagian ini menjelaskan cmdlet berikut, yang merupakan anggota modul Az.ApplicationMonitor PowerShell:

Nota

Perluas salah satu bagian di bawah ini untuk informasi selengkapnya, termasuk contoh, parameter, dan output.

Enable-InstrumentationEngine

Mengaktifkan mesin instrumentasi dengan mengatur beberapa kunci registri. Menghidupkan ulang IIS agar perubahan diterapkan.

Mesin instrumentasi dapat melengkapi data yang dikumpulkan oleh .NET Software Development Kits (SDK). Mesin ini mengumpulkan peristiwa dan pesan yang menggambarkan eksekusi proses terkelola. Peristiwa dan pesan ini termasuk kode hasil dependensi, kata kerja HTTP, dan teks perintah SQL.

Mengaktifkan mesin instrumentasi jika:

  • Anda sudah mengaktifkan pemantauan dengan Enable cmdlet tetapi tidak mengaktifkan mesin instrumentasi.
  • Anda menginstrumentasi aplikasi secara manual dengan .NET SDKs dan ingin mengumpulkan telemetri tambahan.
Examples
Enable-InstrumentationEngine
Parameter-parameternya
Parameter Deskripsi
-TerimaLisensi Optional. Gunakan switch ini untuk menerima lisensi dan pernyataan privasi dalam instalasi tanpa kepala.
-Penyedehanaan kata Parameter umum. Gunakan saklar ini untuk mengeluarkan log terperinci.
Hasil

Contoh output dari berhasil mengaktifkan mesin instrumentasi:

Configuring IIS Environment for instrumentation engine...
Configuring registry for instrumentation engine...
Enable-ApplicationInsightsMonitoring

Mengaktifkan pemantauan pelampiran tanpa memerlukan pengkodean aplikasi IIS di komputer target.

Cmdlet ini memodifikasi applicationHost.config IIS dan mengatur beberapa kunci registri. Ini membuat file applicationinsights.ikey.config, yang menentukan kunci instrumentasi yang digunakan oleh setiap aplikasi. IIS memuat RedfieldModule saat startup, yang menyuntikkan Application Insights SDK ke dalam aplikasi saat aplikasi dimulai. Menghidupkan ulang IIS agar perubahan diterapkan.

Setelah mengaktifkan pemantauan, sebaiknya gunakan Live Metrics untuk memeriksa apakah aplikasi Anda mengirimkan telemetri kepada kami dengan cepat.

Examples
Contoh dengan satu string koneksi

Dalam contoh ini, semua aplikasi di komputer saat ini disediakan dengan satu string koneksi.

Enable-ApplicationInsightsMonitoring -ConnectionString 'InstrumentationKey=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/'
Contoh dengan kunci instrumentasi tunggal

Dalam contoh ini, semua aplikasi di komputer saat ini disediakan dengan satu kunci instrumentasi.

Enable-ApplicationInsightsMonitoring -InstrumentationKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Contoh dengan peta kunci instrumentasi

Dalam contoh ini:

  • MachineFilter mencocokkan komputer saat ini dengan menggunakan '.*' wildcard.
  • AppFilter='WebAppExclude' menyediakan null kunci instrumentasi. Aplikasi yang ditentukan tidak diinstrumentasikan.
  • AppFilter='WebAppOne' memberikan kunci instrumentasi unik kepada aplikasi yang ditentukan.
  • AppFilter='WebAppTwo' memberikan kunci instrumentasi unik kepada aplikasi yang ditentukan.
  • AppFilter menggunakan wildcard '.*' untuk mencocokkan aplikasi web apa pun yang belum dicocokkan, dan menetapkan kunci instrumentasi default.
  • Spasi ditambahkan untuk keterbacaan.
Enable-ApplicationInsightsMonitoring -InstrumentationKeyMap `
    ` @(@{MachineFilter='.*';AppFilter='WebAppExclude'},
        ` @{MachineFilter='.*';AppFilter='WebAppOne';InstrumentationSettings=@{InstrumentationKey='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx1'}},
        ` @{MachineFilter='.*';AppFilter='WebAppTwo';InstrumentationSettings=@{InstrumentationKey='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx2'}},
        ` @{MachineFilter='.*';AppFilter='.*';InstrumentationSettings=@{InstrumentationKey='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxdefault'}})
  • MachineFilter adalah regex C# yang diperlukan dari nama komputer atau komputer virtual (VM).
    • '.*' cocok dengan semua
    • 'ComputerName' hanya cocok dengan komputer dengan nama yang ditentukan dengan tepat.
  • AppFilter adalah regex C# yang diperlukan dari Nama Situs IIS. Anda bisa mendapatkan daftar situs di server Anda dengan menjalankan perintah get-iissite.
    • '.*' cocok dengan semua
    • 'SitusName' hanya cocok dengan Situs IIS yang memiliki nama persis seperti yang ditentukan.
  • InstrumentationKey diperlukan untuk mengaktifkan pemantauan aplikasi yang cocok dengan dua filter sebelumnya.
    • Biarkan nilai ini null jika Anda ingin menentukan aturan untuk mengecualikan pemantauan.
Parameter-parameternya
Parameter Deskripsi
-Aktifkan Mesin Instrumentasi Optional. Gunakan switch ini untuk mengaktifkan mesin instrumentasi untuk mengumpulkan peristiwa dan pesan tentang apa yang terjadi selama pelaksanaan eksekusi proses terkelola. Peristiwa dan pesan ini termasuk kode hasil dependensi, kata kerja HTTP, dan teks perintah SQL.

Mesin instrumentasi menambahkan beban dan dalam keadaan mati secara default.
-TerimaLisensi Optional. Gunakan switch ini untuk menerima lisensi dan pernyataan privasi dalam instalasi tanpa kepala.
-IgnoreSharedConfig Jika Anda memiliki kluster server web, Anda mungkin menggunakan konfigurasi bersama. HttpModule tidak dapat dimasukkan ke dalam konfigurasi bersama ini. Skrip ini gagal dengan pesan bahwa langkah-langkah penginstalan tambahan diperlukan. Gunakan switch ini untuk mengabaikan pemeriksaan ini dan lanjutkan pemasangan prasyarat.

Untuk informasi selengkapnya, lihat konfigurasi bersama konflik-dengan-iis-yang diketahui
-Penyedehanaan kata Parameter umum. Gunakan switch ini untuk menampilkan log terperinci.
-WhatIf Parameter umum. Gunakan switch ini untuk menguji dan memvalidasi parameter input Anda tanpa benar-benar mengaktifkan pemantauan.
Hasil
Contoh output pemanfaatan yang berhasil
Initiating Disable Process
Applying transformation to 'C:\Windows\System32\inetsrv\config\applicationHost.config'
'C:\Windows\System32\inetsrv\config\applicationHost.config' backed up to 'C:\Windows\System32\inetsrv\config\applicationHost.config.backup-2019-03-26_08-59-52z'
in :1,237
No element in the source document matches '/configuration/location[@path='']/system.webServer/modules/add[@name='ManagedHttpModuleHelper']'
Not executing RemoveAll (transform line 1, 546)
Transformation to 'C:\Windows\System32\inetsrv\config\applicationHost.config' was successfully applied. Operation: 'disable'
GAC Module will not be removed, since this operation might cause IIS instabilities
Configuring IIS Environment for codeless attach...
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IISADMIN[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WAS[Environment]
Configuring IIS Environment for instrumentation engine...
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IISADMIN[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WAS[Environment]
Configuring registry for instrumentation engine...
Successfully disabled Application Insights Agent
Installing GAC module 'C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\0.2.0\content\Runtime\Microsoft.AppInsights.IIS.ManagedHttpModuleHelper.dll'
Applying transformation to 'C:\Windows\System32\inetsrv\config\applicationHost.config'
Found GAC module Microsoft.AppInsights.IIS.ManagedHttpModuleHelper.ManagedHttpModuleHelper, Microsoft.AppInsights.IIS.ManagedHttpModuleHelper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
'C:\Windows\System32\inetsrv\config\applicationHost.config' backed up to 'C:\Windows\System32\inetsrv\config\applicationHost.config.backup-2019-03-26_08-59-52z_1'
Transformation to 'C:\Windows\System32\inetsrv\config\applicationHost.config' was successfully applied. Operation: 'enable'
Configuring IIS Environment for codeless attach...
Configuring IIS Environment for instrumentation engine...
Configuring registry for instrumentation engine...
Updating app pool permissions...
Successfully enabled Application Insights Agent
Disable-InstrumentationEngine

Menonaktifkan mesin instrumentasi dengan menghapus beberapa kunci registri. Menghidupkan ulang IIS agar perubahan diterapkan.

Examples
Disable-InstrumentationEngine
Parameter-parameternya
Parameter Deskripsi
-Penyedehanaan kata Parameter umum. Gunakan saklar ini untuk mengeluarkan log terperinci.
Hasil
Contoh output berhasil menonaktifkan mesin instrumentasi
Configuring IIS Environment for instrumentation engine...
Registry: removing 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IISADMIN[Environment]'
Registry: removing 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC[Environment]'
Registry: removing 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WAS[Environment]'
Configuring registry for instrumentation engine...
Nonaktifkan-PemantauanApplicationInsights

Menonaktifkan pemantauan pada komputer target. Cmdlet ini menghapus pengeditan ke applicationHost.config IIS dan menghapus kunci registri.

Examples
Disable-ApplicationInsightsMonitoring
Parameter-parameternya
Parameter Deskripsi
-Penyedehanaan kata Parameter umum. Gunakan switch ini untuk menampilkan log terperinci.
Hasil
Contoh keluaran dari keberhasilan menonaktifkan pemantauan
Initiating Disable Process
Applying transformation to 'C:\Windows\System32\inetsrv\config\applicationHost.config'
'C:\Windows\System32\inetsrv\config\applicationHost.config' backed up to 'C:\Windows\System32\inetsrv\config\applicationHost.config.backup-2019-03-26_08-59-00z'
in :1,237
No element in the source document matches '/configuration/location[@path='']/system.webServer/modules/add[@name='ManagedHttpModuleHelper']'
Not executing RemoveAll (transform line 1, 546)
Transformation to 'C:\Windows\System32\inetsrv\config\applicationHost.config' was successfully applied. Operation: 'disable'
GAC Module will not be removed, since this operation might cause IIS instabilities
Configuring IIS Environment for codeless attach...
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IISADMIN[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WAS[Environment]
Configuring IIS Environment for instrumentation engine...
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IISADMIN[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WAS[Environment]
Configuring registry for instrumentation engine...
Successfully disabled Application Insights Agent
Get-ApplicationInsightsMonitoringConfig

Mendapatkan file konfigurasi dan mencetak nilai ke konsol.

Examples
Get-ApplicationInsightsMonitoringConfig
Parameter-parameternya

Tidak diperlukan parameter.

Hasil
Contoh output dari membaca file konfigurasi
RedfieldConfiguration:
Filters:
0)InstrumentationKey: AppFilter: WebAppExclude MachineFilter: .*
1)InstrumentationKey: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx2 AppFilter: WebAppTwo MachineFilter: .*
2)InstrumentationKey: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxdefault AppFilter: .* MachineFilter: .*
Get-ApplicationInsightsMonitoringStatus

Cmdlet ini menyediakan informasi pemecahan masalah tentang Agen Application Insights. Gunakan cmdlet ini untuk menyelidiki status pemantauan, versi Modul PowerShell, dan untuk memeriksa proses yang sedang berjalan. Cmdlet ini melaporkan informasi versi dan informasi tentang file kunci yang diperlukan untuk pemantauan.

Examples
Contoh: Status aplikasi

Jalankan perintah Get-ApplicationInsightsMonitoringStatus untuk menampilkan status pemantauan situs web.

Get-ApplicationInsightsMonitoringStatus

IIS Websites:

SiteName               : Default Web Site
ApplicationPoolName    : DefaultAppPool
SiteId                 : 1
SiteState              : Stopped

SiteName               : DemoWebApp111
ApplicationPoolName    : DemoWebApp111
SiteId                 : 2
SiteState              : Started
ProcessId              : not found

SiteName               : DemoWebApp222
ApplicationPoolName    : DemoWebApp222
SiteId                 : 3
SiteState              : Started
ProcessId              : 2024
Instrumented           : true
InstrumentationKey     : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx123

SiteName               : DemoWebApp333
ApplicationPoolName    : DemoWebApp333
SiteId                 : 4
SiteState              : Started
ProcessId              : 5184
AppAlreadyInstrumented : true

Dalam contoh ini:

  • Pengidentifikasi Mesin adalah ID anonim yang digunakan untuk mengidentifikasi server Anda secara unik. Jika Anda membuat permintaan dukungan, kami memerlukan ID ini untuk menemukan log untuk server Anda.

  • Situs Web Default Dihentikan di IIS

  • IIS menunjukkan DemoWebApp111 seperti yang dimulai, tetapi aplikasi tidak menerima permintaan apa pun. Laporan tidak menunjukkan proses yang sedang berjalan (ProcessId: tidak ditemukan).

  • DemoWebApp222 sedang berjalan dan sedang dimonitor (Instrumented: benar). Berdasarkan konfigurasi pengguna, Kunci Instrumentasi xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxx123 dicocokkan untuk situs ini.

  • DemoWebApp333 diinstrumentasikan secara manual menggunakan Application Insights SDK. Agen Application Insights mendeteksi SDK dan tidak memantau situs ini.

  • Kehadiran AppAlreadyInstrumented : true menandakan bahwa agen Application Insights mengidentifikasi sebuah dll yang bertentangan dimuat dalam aplikasi web, mengasumsikan bahwa aplikasi web tersebut diinstrumenkan secara manual, dan agen telah berhenti serta tidak menginstrumenkan proses ini.

  • Instrumented : true menunjukkan bahwa agen Application Insights berhasil menginstrumenkan aplikasi web yang berjalan dalam proses w3wp.exe yang ditentukan.

Contoh: Informasi modul PowerShell

Jalankan perintah Get-ApplicationInsightsMonitoringStatus -PowerShellModule untuk menampilkan informasi tentang modul saat ini:

Get-ApplicationInsightsMonitoringStatus -PowerShellModule

PowerShell Module version:
0.4.0-alpha

Application Insights SDK version:
2.9.0.3872

Executing PowerShell Module Assembly:
Microsoft.ApplicationInsights.Redfield.Configurator.PowerShell, Version=2.8.14.11432, Culture=neutral, PublicKeyToken=31bf3856ad364e35

PowerShell Module Directory:
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\0.2.2\content\PowerShell

Runtime Paths:
ParentDirectory (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content

ConfigurationPath (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\applicationInsights.ikey.config

ManagedHttpModuleHelperPath (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AppInsights.IIS.ManagedHttpModuleHelper.dll

RedfieldIISModulePath (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.ApplicationInsights.RedfieldIISModule.dll

InstrumentationEngine86Path (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation32\MicrosoftInstrumentationEngine_x86.dll

InstrumentationEngine64Path (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation64\MicrosoftInstrumentationEngine_x64.dll

InstrumentationEngineExtensionHost86Path (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation32\Microsoft.ApplicationInsights.ExtensionsHost_x86.dll

InstrumentationEngineExtensionHost64Path (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation64\Microsoft.ApplicationInsights.ExtensionsHost_x64.dll

InstrumentationEngineExtensionConfig86Path (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation32\Microsoft.InstrumentationEngine.Extensions.config

InstrumentationEngineExtensionConfig64Path (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation64\Microsoft.InstrumentationEngine.Extensions.config

ApplicationInsightsSdkPath (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.ApplicationInsights.dll
Contoh: Status runtime

Anda dapat memeriksa proses pada komputer terinstrumentasi untuk melihat apakah semua DLL termuat. Jika pemantauan berfungsi, setidaknya 12 DLL harus dimuat.

Jalankan Get-ApplicationInsightsMonitoringStatus -InspectProcess perintah:

Get-ApplicationInsightsMonitoringStatus -InspectProcess

iisreset.exe /status
Status for IIS Admin Service ( IISADMIN ) : Running
Status for Windows Process Activation Service ( WAS ) : Running
Status for Net.Msmq Listener Adapter ( NetMsmqActivator ) : Running
Status for Net.Pipe Listener Adapter ( NetPipeActivator ) : Running
Status for Net.Tcp Listener Adapter ( NetTcpActivator ) : Running
Status for World Wide Web Publishing Service ( W3SVC ) : Running

handle64.exe -accepteula -p w3wp
BF0: File  (R-D)   C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AI.ServerTelemetryChannel.dll
C58: File  (R-D)   C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AI.AzureAppServices.dll
C68: File  (R-D)   C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AI.DependencyCollector.dll
C78: File  (R-D)   C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AI.WindowsServer.dll
C98: File  (R-D)   C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AI.Web.dll
CBC: File  (R-D)   C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AI.PerfCounterCollector.dll
DB0: File  (R-D)   C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AI.Agent.Intercept.dll
B98: File  (R-D)   C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.ApplicationInsights.RedfieldIISModule.dll
BB4: File  (R-D)   C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.ApplicationInsights.RedfieldIISModule.Contracts.dll
BCC: File  (R-D)   C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.ApplicationInsights.Redfield.Lightup.dll
BE0: File  (R-D)   C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.ApplicationInsights.dll

listdlls64.exe -accepteula w3wp
0x0000000019ac0000  0x127000  C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation64\MicrosoftInstrumentationEngine_x64.dll
0x00000000198b0000  0x4f000   C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation64\Microsoft.ApplicationInsights.ExtensionsHost_x64.dll
0x000000000c460000  0xb2000   C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation64\Microsoft.ApplicationInsights.Extensions.Base_x64.dll
0x000000000ad60000  0x108000  C:\Windows\TEMP\2.4.0.0.Microsoft.ApplicationInsights.Extensions.Intercept_x64.dll
Parameter-parameternya

Secara default, cmdlet ini melaporkan status pemantauan aplikasi web. Gunakan opsi ini untuk meninjau apakah aplikasi Anda berhasil terinstrumentasi. Anda juga dapat meninjau Kunci Instrumentasi mana yang cocok dengan situs Anda.

Parameter Deskripsi
-PowerShellModule Opsional. Gunakan switch ini untuk melaporkan nomor versi dan jalur DL yang diperlukan untuk pemantauan. Gunakan opsi ini jika Anda perlu mengidentifikasi versi DLL apa pun, termasuk SDK Application Insights.
-InspectProcess Opsional. Gunakan switch ini untuk melaporkan apakah IIS sedang berjalan. Ini mengunduh alat eksternal untuk menentukan apakah DLL yang diperlukan dimuat ke dalam runtime IIS. Jika proses ini gagal karena alasan apa pun, Anda dapat menjalankan perintah ini secara manual:

* iisreset.exe /status
* \[handle64.exe\](/sysinternals/downloads/handle) -p w3wp \| findstr /I "InstrumentationEngine AI. ApplicationInsights"
* \[listdlls64.exe\](/sysinternals/downloads/listdlls) w3wp \| findstr /I "InstrumentationEngine AI ApplicationInsights"
-Force Opsional. Hanya digunakan dengan InspectProcess. Gunakan sakelar ini untuk melewati perintah pengguna yang muncul sebelum lebih banyak alat diunduh.
Set-ApplicationInsightsMonitoringConfig

Menyetel file konfigurasi tanpa melakukan penginstalan ulang penuh. Menghidupkan ulang IIS agar perubahan diterapkan.

Penting

Cmdlet ini memerlukan sesi PowerShell dengan izin Admin.

Examples
Contoh dengan kunci instrumentasi tunggal

Dalam contoh ini, semua aplikasi di komputer saat ini disediakan dengan satu kunci instrumentasi.

Enable-ApplicationInsightsMonitoring -InstrumentationKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Contoh dengan peta kunci instrumentasi

Dalam contoh ini:

  • MachineFilter mencocokkan komputer saat ini dengan menggunakan '.*' wildcard.
  • AppFilter='WebAppExclude' menyediakan null kunci instrumentasi. Aplikasi yang ditentukan tidak diinstrumentasikan.
  • AppFilter='WebAppOne' memberikan kunci instrumentasi unik kepada aplikasi yang ditentukan.
  • AppFilter='WebAppTwo' memberikan kunci instrumentasi unik kepada aplikasi yang ditentukan.
  • AppFilter '.*' menggunakan wildcard untuk mencocokkan aplikasi web yang belum cocok dan menetapkan kunci instrumentasi default.
  • Spasi ditambahkan untuk keterbacaan.
Enable-ApplicationInsightsMonitoring -InstrumentationKeyMap `
    ` @(@{MachineFilter='.*';AppFilter='WebAppExclude'},
      ` @{MachineFilter='.*';AppFilter='WebAppOne';InstrumentationSettings=@{InstrumentationKey='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx1'}},
      ` @{MachineFilter='.*';AppFilter='WebAppTwo';InstrumentationSettings=@{InstrumentationKey='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx2'}},
      ` @{MachineFilter='.*';AppFilter='.*';InstrumentationSettings=@{InstrumentationKey='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxdefault'}})
Parameter-parameternya
Parameter Deskripsi
-KunciInstrumentasi Dibutuhkan. Gunakan parameter ini untuk menyediakan kunci instrumentasi tunggal untuk digunakan oleh semua aplikasi di komputer target.
-InstrumentationKeyMap Dibutuhkan. Gunakan parameter ini untuk menyediakan beberapa kunci instrumentasi dan pemetaan kunci instrumentasi yang digunakan oleh setiap aplikasi.

Anda dapat membuat skrip instalasi tunggal untuk beberapa komputer dengan mengatur MachineFilter.

Penting

Aplikasi mencocokkan aturan sesuai urutan yang Anda berikan. Tentukan aturan yang paling spesifik terlebih dahulu dan aturan paling umum terakhir.

Penting

InstrumentationKeyMap adalah fitur perutean tingkat lanjut yang memetakan aplikasi Internet Information Services (IIS) pada komputer yang sama ke sumber daya Application Insights. Fitur ini berlaku untuk aplikasi ASP.NET dan ASP.NET Core yang dihosting oleh IIS dan diinstrumen otomatis oleh Agen Application Insights.

Cara kerja pencocokan

  • Peta menentukan daftar aturan yang diurutkan bernama filters. Aturan pencocokan pertama berlaku. Tempatkan aturan spesifik terlebih dahulu dan selesaikan dengan aturan menyeluruh.
  • Setiap aturan dapat menetapkan sumber daya Application Insights yang berbeda untuk mencocokkan aplikasi. Lebih baik menggunakan string koneksi dalam skenario yang didukung karena kunci instrumentasi sudah usang.

Filter yang tersedia

  • MachineFilter atau machineFilter: Ekspresi reguler C# yang cocok dengan nama komputer atau komputer virtual (VM). .* cocok dengan semua nama.
  • AppFilter atau appFilter: Ekspresi reguler C# yang cocok dengan nama situs IIS (HostingEnvironment.SiteName). Filter ini diperlukan saat VirtualPathFilter atau virtualPathFilter tidak disediakan.
  • VirtualPathFilter atau virtualPathFilter: Ekspresi reguler C# yang cocok dengan jalur virtual IIS (HostingEnvironment.ApplicationVirtualPath). Gunakan filter ini untuk menargetkan satu aplikasi di bawah situs.

Pemetaan terminologi

  • Cmdlet PowerShell menggunakan MachineFilter, , AppFilterdan VirtualPathFilter.
  • Azure VM dan ekstensi Virtual Machine Scale Sets JSON menggunakan machineFilter, appFilter, dan virtualPathFilter, dan mengatur sumber daya dengan instrumentationSettings.

Petunjuk / Saran

Sertakan aturan akhir yang cocok dengan semua aplikasi, seperti .*, dan terapkan sumber daya default untuk membuat perilaku menjadi eksplisit.

Bentuk peta cmdlet ini

  • Sediakan -InstrumentationKeyMap sebagai array hashtable PowerShell.
  • Untuk cmdlet ini, atur sumber daya target per aturan dengan InstrumentationSettings=@{ InstrumentationKey = '<ikey>' }.
  • Jika Anda menginginkan satu sumber daya untuk semua aplikasi di komputer, gunakan -ConnectionString atau -InstrumentationKey sebagai gantinya.
Start-ApplicationInsightsMonitoringTrace

Mengumpulkan peristiwa dari Pelacakan Peristiwa untuk Windows (ETW) yang dipancarkan oleh runtime tanpa lampiran kode. Gunakan cmdlet ini sebagai alternatif yang lebih sederhana untuk menjalankan PerfView.

Peristiwa dicetak ke konsol secara real time dan juga ditulis ke .etl file. Anda dapat membuka .etl file dengan PerfView untuk analisis yang lebih mendalam.

Cmdlet ini berjalan sampai mencapai batas waktu, defaultnya adalah 5 menit, atau sampai Anda menghentikannya secara manual dengan Ctrl + C.

Examples
Cara mengumpulkan peristiwa

Gunakan alur ini saat Anda perlu menyelidiki mengapa aplikasi IIS tidak diinstrumentasikan.

Runtime lampiran tanpa kode menghasilkan peristiwa ETW saat IIS dimulai dan saat aplikasi Anda dimulai.

  1. Dalam perintah administratif, jalankan iisreset /stop untuk menghentikan IIS dan semua aplikasi web.
  2. Mulai lacak dengan menjalankan cmdlet ini.
  3. Dalam perintah administratif, jalankan iisreset /start untuk memulai IIS.
  4. Aktifkan startup dengan mengakses aplikasi Anda.
  5. Setelah aplikasi selesai dimuat, tekan Ctrl + C untuk berhenti, atau izinkan batas waktu untuk mengakhiri sesi.
Peristiwa apa yang akan dikumpulkan

Anda dapat memilih sumber peristiwa mana yang akan disertakan:

  1. -CollectSdkEvents mengumpulkan peristiwa dari Application Insights SDK.
  2. -CollectRedfieldEvents mengumpulkan peristiwa dari Application Insights Agent dan lingkungan eksekusi Redfield, yang berguna untuk IIS dan diagnostik startup aplikasi.
  3. Kumpulkan kedua set dengan menentukan kedua sakelar.
  4. Jika Anda tidak menentukan pengalih, kedua set dikumpulkan secara bawaan.
Parameter-parameternya
Parameter Deskripsi
-DurasiMaksimalDalamMenit Optional. Mengatur berapa lama untuk mengumpulkan sebelum waktu habis. Defaultnya adalah 5 menit.
-LogDirectory Optional. Direktori tempat .etl file harus ditulis. Secara default, file dibuat di bawah direktori PowerShell modul. Jalur lengkap ditampilkan saat sesi dimulai.
-KumpulkanAcaraSdk Optional. Sertakan peristiwa Application Insights SDK.
-KumpulkanPeristiwaRedfield Optional. Sertakan peristiwa dari Agen Application Insights dan runtime Redfield.
-Penyedehanaan kata Parameter umum. Menghasilkan log terperinci.

Hasil

Contoh log aplikasi pengaktifan
Start-ApplicationInsightsMonitoringTrace -CollectRedfieldEvents
Starting...
Log File: C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\logs\20190627_144217_ApplicationInsights_ETW_Trace.etl
Tracing enabled, waiting for events.
Tracing will timeout in 5 minutes. Press CTRL+C to cancel.
2:42:31 PM EVENT: Microsoft-ApplicationInsights-IIS-ManagedHttpModuleHelper Trace Resolved variables to: MicrosoftAppInsights_ManagedHttpModulePath='C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.ApplicationInsights.RedfieldIISModule.dll', MicrosoftAppInsights_ManagedHttpModuleType='Microsoft.ApplicationInsights.RedfieldIISModule.RedfieldIISModule'
2:42:31 PM EVENT: Microsoft-ApplicationInsights-IIS-ManagedHttpModuleHelper Trace Resolved variables to: MicrosoftDiagnosticServices_ManagedHttpModulePath2='', MicrosoftDiagnosticServices_ManagedHttpModuleType2=''
2:42:31 PM EVENT: Microsoft-ApplicationInsights-IIS-ManagedHttpModuleHelper Trace Environment variable 'MicrosoftDiagnosticServices_ManagedHttpModulePath2' or 'MicrosoftDiagnosticServices_ManagedHttpModuleType2' is null, skipping managed dll loading

Menyebarkan Application Insights Agent untuk mesin virtual (VM) dan skala set mesin virtual

Di bagian ini

Aktifkan pemantauan Application InsightsAzure Monitor melalui autoinstrumentation untuk aplikasi ASP.NET yang dihosting Internet Information Server (IIS) dan ASP.NET Core di Azure Virtual Machines dan Azure Virtual Machine Scale Sets.

Sebarkan Agen Application Insights dengan ekstensi komputer virtual. Agen mengumpulkan otomatis sinyal dependensi yang sama seperti SDK. Gunakan PowerShell untuk mengotomatiskan penyebaran skala besar.

Nota

Untuk daftar lengkap skenario autoinstrumentasi yang didukung, lihat Lingkungan, bahasa, dan penyedia sumber daya yang didukung.

Mengaktifkan pemantauan untuk komputer virtual

Anda dapat menggunakan portal Azure atau PowerShell untuk mengaktifkan pemantauan untuk VM.

Opsi 1: portal Azure
  1. Di portal Azure, buka sumber daya Application Insights Anda. Salin string koneksi Anda ke clipboard.

    Cuplikan layar yang memperlihatkan string koneksi.

  2. Buka komputer virtual Anda. Di bawah bagian Pengaturan di menu di sisi kiri, pilih .

    Cuplikan layar yang memperlihatkan panel Ekstensi + aplikasi dengan tombol Tambahkan.

  3. Pilih Agen>Application Insights Berikutnya.

    Cuplikan layar yang memperlihatkan panel Instal Ekstensi dengan tombol Berikutnya.

  4. Tempelkan connection string yang Anda salin di langkah 1 dan pilih Review + create.

    Cuplikan layar yang memperlihatkan tab Buat dengan tombol Tinjau + buat.

Opsi 2: PowerShell

Nota

Baru menggunakan PowerShell? Lihat panduan Memulai.

Instal atau perbarui Agen Application Insights sebagai ekstensi untuk komputer virtual Azure:

# define variables to match your environment before running
$ResourceGroup = "<myVmResourceGroup>"
$VMName = "<myVmName>"
$Location = "<myVmLocation>"
$ConnectionString = "<myAppInsightsResourceConnectionString>"

$publicCfgJsonString = @"
{
    "redfieldConfiguration": {
        "instrumentationKeyMap": {
        "filters": [
            {
            "appFilter": ".*",
            "machineFilter": ".*",
            "virtualPathFilter": ".*",
            "instrumentationSettings" : {
                "connectionString": "$ConnectionString"
            }
            }
        ]
        }
    }
    }
"@

$privateCfgJsonString = '{}'
    
Set-AzVMExtension -ResourceGroupName $ResourceGroup -VMName $VMName -Location $Location -Name "ApplicationMonitoringWindows" -Publisher "Microsoft.Azure.Diagnostics" -Type "ApplicationMonitoringWindows" -Version "2.8" -SettingString $publicCfgJsonString -ProtectedSettingString $privateCfgJsonString

Nota

Untuk penyebaran dalam skala besar yang lebih rumit, Anda dapat menggunakan perulangan PowerShell untuk menginstal atau memperbarui ekstensi Agen Application Insights di beberapa VM.

Kueri status ekstensi Application Insights Agent untuk komputer virtual Azure:

Get-AzVMExtension -ResourceGroupName "<myVmResourceGroup>" -VMName "<myVmName>" -Name ApplicationMonitoringWindows -Status

Dapatkan daftar ekstensi yang diinstal untuk komputer virtual Azure:

Get-AzResource -ResourceId "/subscriptions/<mySubscriptionId>/resourceGroups/<myVmResourceGroup>/providers/Microsoft.Compute/virtualMachines/<myVmName>/extensions"

Hapus instalan ekstensi Application Insights Agent dari komputer virtual Azure:

Remove-AzVMExtension -ResourceGroupName "<myVmResourceGroup>" -VMName "<myVmName>" -Name "ApplicationMonitoring"

Nota

Verifikasi penginstalan dengan memilih Live Metrics Stream dalam resource Application Insights yang terkait dengan connection string yang Anda gunakan untuk menyebarkan ekstensi Agen Application Insights. Jika Anda mengirim data dari beberapa mesin virtual, pilih target mesin virtual Azure di bawah Nama Server. Mungkin perlu waktu hingga satu menit agar data mulai mengalir.

instrumentationKeyMap (pengaturan ekstensi)

Penting

InstrumentationKeyMap adalah fitur perutean tingkat lanjut yang memetakan aplikasi Internet Information Services (IIS) pada komputer yang sama ke sumber daya Application Insights. Fitur ini berlaku untuk aplikasi ASP.NET dan ASP.NET Core yang dihosting oleh IIS dan diinstrumen otomatis oleh Agen Application Insights.

Cara kerja pencocokan

  • Peta menentukan daftar aturan yang diurutkan bernama filters. Aturan pencocokan pertama berlaku. Tempatkan aturan spesifik terlebih dahulu dan selesaikan dengan aturan menyeluruh.
  • Setiap aturan dapat menetapkan sumber daya Application Insights yang berbeda untuk mencocokkan aplikasi. Lebih baik menggunakan string koneksi dalam skenario yang didukung karena kunci instrumentasi sudah usang.

Filter yang tersedia

  • MachineFilter atau machineFilter: Ekspresi reguler C# yang cocok dengan nama komputer atau komputer virtual (VM). .* cocok dengan semua nama.
  • AppFilter atau appFilter: Ekspresi reguler C# yang cocok dengan nama situs IIS (HostingEnvironment.SiteName). Filter ini diperlukan saat VirtualPathFilter atau virtualPathFilter tidak disediakan.
  • VirtualPathFilter atau virtualPathFilter: Ekspresi reguler C# yang cocok dengan jalur virtual IIS (HostingEnvironment.ApplicationVirtualPath). Gunakan filter ini untuk menargetkan satu aplikasi di bawah situs.

Pemetaan terminologi

  • Cmdlet PowerShell menggunakan MachineFilter, , AppFilterdan VirtualPathFilter.
  • Azure VM dan ekstensi Virtual Machine Scale Sets JSON menggunakan machineFilter, appFilter, dan virtualPathFilter, dan mengatur sumber daya dengan instrumentationSettings.

Petunjuk / Saran

Sertakan aturan akhir yang cocok dengan semua aplikasi, seperti .*, dan terapkan sumber daya default untuk membuat perilaku menjadi eksplisit.

Di mana digunakan ekstensi untuk VM dan Virtual Machine Scale Sets

Tempatkan peta di bawah redfieldConfiguration.instrumentationKeyMap.filters di pengaturan publik ekstensi (-SettingString untuk VM, -Setting untuk Virtual Machine Scale Sets). Nama properti adalah huruf unta yang lebih rendah. Atur sumber daya target per aturan dengan instrumentationSettings.connectionString.

{
  "redfieldConfiguration": {
    "instrumentationKeyMap": {
      "filters": [
        {
          "machineFilter": ".*",
          "appFilter": ".*",
          "instrumentationSettings": {
            "connectionString": "<your-APPLICATIONINSIGHTS_CONNECTION_STRING>"
          }
        }
      ]
    }
  }
}

Mengaktifkan pemantauan untuk set skala komputer virtual

Anda dapat menggunakan portal Azure atau PowerShell untuk mengaktifkan pemantauan untuk set skala komputer virtual.

Opsi 1: portal Azure

Ikuti langkah-langkah sebelumnya untuk VM, tetapi buka set skala komputer virtual Anda alih-alih VM Anda.

Opsi 2: PowerShell

Instal atau perbarui Application Insights Agent sebagai ekstensi untuk set skala komputer virtual:

# Set resource group, vmss name, and connection string to reflect your environment
$ResourceGroup = "<myVmResourceGroup>"
$VMSSName = "<myVmName>"
$ConnectionString = "<myAppInsightsResourceConnectionString>"
$publicCfgHashtable =
@{
  "redfieldConfiguration"= @{
    "instrumentationKeyMap"= @{
      "filters"= @(
        @{
          "appFilter"= ".*";
          "machineFilter"= ".*";
          "virtualPathFilter"= ".*";
          "instrumentationSettings" = @{
            "connectionString"= "$ConnectionString"
          }
        }
      )
    }
  }
};
$privateCfgHashtable = @{};
$vmss = Get-AzVmss -ResourceGroupName $ResourceGroup -VMScaleSetName $VMSSName
Add-AzVmssExtension -VirtualMachineScaleSet $vmss -Name "ApplicationMonitoringWindows" -Publisher "Microsoft.Azure.Diagnostics" -Type "ApplicationMonitoringWindows" -TypeHandlerVersion "2.8" -Setting $publicCfgHashtable -ProtectedSetting $privateCfgHashtable
Update-AzVmss -ResourceGroupName $vmss.ResourceGroupName -Name $vmss
# Note: Depending on your update policy, you might need to run Update-AzVmssInstance for each instance

Dapatkan daftar ekstensi yang diinstal untuk set skala komputer virtual:

Get-AzResource -ResourceId "/subscriptions/<mySubscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/<myVmssName>/extensions"

Hapus instalan ekstensi pemantauan aplikasi dari set skala komputer virtual:

# set resource group and vmss name to reflect your environment
$vmss = Get-AzVmss -ResourceGroupName "<myResourceGroup>" -VMScaleSetName "<myVmssName>"
Remove-AzVmssExtension -VirtualMachineScaleSet $vmss -Name "ApplicationMonitoringWindows"
Update-AzVmss -ResourceGroupName $vmss.ResourceGroupName -Name $vmss.Name -VirtualMachineScaleSet $vmss
# Note: Depending on your update policy, you might need to run Update-AzVmssInstance for each instance

Troubleshooting

Untuk langkah-langkah pemecahan masalah khusus, lihat Masalah saat menyebarkan ekstensi Application Insights Monitoring Agent untuk VM dan set skala komputer virtual.

Verifikasi bahwa Application Insights menerima telemetri

ASP.NET & ASP.NET Core

Jalankan aplikasi Anda dan buat permintaan untuknya. Telemetri sekarang akan mengalir ke Application Insights. Application Insights SDK secara otomatis mengumpulkan permintaan web yang masuk ke aplikasi Anda, bersama dengan telemetri berikut.

Layanan Pekerja

Jalankan aplikasi Anda. Pekerja dari semua contoh sebelumnya melakukan panggilan HTTP setiap detik untuk bing.com dan juga memancarkan beberapa log dengan menggunakan ILogger. Baris-baris ini dibungkus dalam panggilan StartOperation dari TelemetryClient, yang digunakan untuk membuat operasi. Dalam contoh ini, RequestTelemetry diberi nama "operasi."

Application Insights mengumpulkan log ILogger ini, dengan tingkat keparahan mulai dari peringatan atau lebih tinggi, secara default, serta dependensi. Ini berkorelasi RequestTelemetry dengan hubungan induk-anak. Korelasi juga berfungsi di seluruh batas proses/jaringan. Misalnya, jika panggilan dilakukan ke komponen lain yang dipantau, panggilan tersebut juga dikaitkan dengan komponen induk ini.

Operasi RequestTelemetry kustom ini dapat dianggap setara dengan permintaan web masuk dalam aplikasi web biasa. Tidak perlu menggunakan operasi, tetapi paling cocok dengan model data korelasi Application Insights. RequestTelemetry bertindak sebagai operasi induk dan setiap telemetri yang dihasilkan di dalam iterasi pekerja diperlakukan sebagai milik operasi yang sama secara logis.

Pendekatan ini juga memastikan bahwa telemetri yang dihasilkan, baik otomatis maupun manual, memiliki operation_id yang sama. Karena pengambilan sampel didasarkan pada operation_id, algoritma pengambilan sampel menyimpan atau menghilangkan semua telemetri dari satu iterasi.

Mengumpulkan data telemetri

Di bagian ini

Metrik waktu nyata

Metrik langsung dapat digunakan untuk memverifikasi dengan cepat apakah pemantauan aplikasi dengan Application Insights dikonfigurasi dengan benar. Telemetri dapat memakan waktu beberapa menit untuk muncul di portal Azure, tetapi panel metrik langsung memperlihatkan penggunaan CPU dari proses yang sedang berjalan hampir secara real time. Ini juga dapat menunjukkan telemetri lain seperti permintaan, dependensi, dan jejak.

Nota

Metrik aktif secara default saat Anda mengaktifkannya dengan menggunakan instruksi yang direkomendasikan untuk aplikasi .NET.

Get started

  1. Aktifkan metrik langsung dengan Application Insights SDK dengan mengikuti panduan khusus bahasa:

    • ASP.NET: Diaktifkan secara default tetapi juga dapat diaktifkan secara manual menggunakan kode.
    • ASP.NET Core: Diaktifkan secara default tetapi juga dapat diaktifkan secara manual menggunakan kode.
    • .NET/.NET Core Console/Worker: Diaktifkan secara default.
  2. Buka sumber daya Application Insights untuk aplikasi Anda di portal Azure. Pilih Metrik Langsung, yang tercantum di bawah Selidiki di menu tangan kiri.

  3. Siapkan saluran kontrol dengan mengaktifkan autentikasi Microsoft Entra jika Anda menggunakan filter kustom.

Fitur yang didukung
Bahasa Metrik dasar Indikator kinerja Pemfilteran kustom Sampel telemetri CPU dibagi menurut proses
.NET Framework Didukung (LTS) Didukung (LTS) Didukung (LTS) Didukung (LTS) Didukung (LTS)
.NET Core (sasaran=.NET Framework) Didukung (LTS) Didukung (LTS) Didukung (LTS) Didukung (LTS) Didukung (LTS)
.NET Core (target=.NET Core) Didukung (LTS) Supported* Didukung (LTS) Didukung (LTS) Tidak didukung

Metrik dasar mencakup tingkat permintaan, dependensi, dan pengecualian. Metrik performa (penghitung kinerja) termasuk memori dan CPU. Contoh telemetri menunjukkan aliran informasi terperinci untuk permintaan dan dependensi yang gagal, pengecualian, peristiwa, dan jejak.

Dukungan PerfCounters sedikit bervariasi di seluruh versi .NET Core yang tidak menargetkan .NET Framework:

  • Metrik PerfCounters didukung saat berjalan di Azure App Service untuk Windows (ASP.NET Core SDK versi 2.4.1 atau yang lebih tinggi).
  • PerfCounters didukung saat aplikasi berjalan di komputer Windows apa pun untuk aplikasi yang menargetkan .NET Core LTS atau yang lebih tinggi.
  • PerfCounters didukung ketika aplikasi berjalan di mana saja (seperti Linux, Windows, layanan aplikasi untuk Linux, atau kontainer) dalam versi terbaru, tetapi hanya untuk aplikasi yang menargetkan .NET Core LTS atau yang lebih tinggi.

Aktifkan metrik langsung dengan menggunakan kode untuk aplikasi .NET apa pun

ASP.NET

Untuk mengonfigurasi metrik langsung secara manual:

  1. Instal paket NuGet Microsoft.ApplicationInsights.PerfCounterCollector.

  2. Contoh kode aplikasi konsol berikut menunjukkan penyiapan metrik langsung:

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.ConnectionString = "<YOUR-CONNECTION-STRING>";
            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>";
            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();
            }
        }
    }
}
ASP.NET Core

Untuk mengonfigurasi metrik langsung secara manual:

  1. Instal paket NuGet Microsoft.ApplicationInsights.PerfCounterCollector.

  2. Contoh kode aplikasi konsol berikut menunjukkan penyiapan metrik langsung:

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse;

// Create a TelemetryConfiguration instance.
TelemetryConfiguration config = TelemetryConfiguration.CreateDefault();
config.ConnectionString = "<YOUR-CONNECTION-STRING>";
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>";
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();
}

Sampel sebelumnya adalah untuk aplikasi konsol, tetapi kode yang sama dapat digunakan dalam aplikasi .NET apa pun.

Penting

Jika ada modul telemetri lain yang diaktifkan untuk mengotomatiskan telemetri, pastikan bahwa konfigurasi yang sama yang digunakan untuk menginisialisasi modul tersebut digunakan untuk modul metrik langsung.

Nota

Konfigurasi default mengumpulkan ILoggerWarning log dan log yang lebih parah. Untuk informasi selengkapnya, lihat Bagaimana cara menyesuaikan koleksi log ILogger?.

Layanan Pekerja

Log yang dipancarkan melalui ILogger dengan Peringatan tingkat keparahan atau yang lebih besar secara otomatis ditangkap. Untuk mengubah perilaku ini, secara eksplisit mengambil alih konfigurasi pengelogan untuk penyedia ApplicationInsights, seperti yang ditunjukkan dalam kode berikut. Konfigurasi berikut memungkinkan Application Insights untuk menangkap semua log Information dan log yang lebih kritis.

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    },
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Information"
      }
    }
  }
}

Penting untuk dicatat bahwa contoh berikut tidak menyebabkan penyedia Application Insights merekam Information log. Itu tidak merekamnya karena SDK menambahkan filter logging default yang memerintahkan ApplicationInsights untuk merekam hanya log Warning dan log yang lebih parah. Application Insights memerlukan penimpaan eksplisit.

{
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  }
}

Nota

Application Insights menghormati tingkat log yang dikonfigurasi melalui ConfigureLogging(...) dalam kode. Jika hanya appsettings.json digunakan tanpa ada penyesuaian secara eksplisit pada ConfigureLogging, tingkat log default adalah Peringatan.

Untuk informasi selengkapnya, ikuti dokumen ILogger untuk menyesuaikan tingkat log mana yang diambil oleh Application Insights.

Jejak (log)

Bagian ini menjelaskan cara mengirim log pelacakan diagnostik dari aplikasi ASP.NET atau ASP.NET Core ke Application Insights, lalu menjelajahi/mencari log tersebut di portal.

Anda dapat menggunakan log pelacakan untuk mengidentifikasi jejak yang terkait dengan setiap permintaan pengguna dan menghubungkannya dengan peristiwa lain dan laporan pengecualian.

Application Insights mengambil log dari ASP.NET Core dan aplikasi .NET lainnya melalui ILogger, dan dari ASP.NET klasik (.NET Framework) melalui SDK dan adaptor klasik.

Nota

  • Secara default, penyedia Application Insights hanya mengirim log dengan tingkat keparahan Warning atau lebih tinggi. Untuk menyertakan Information atau log tingkat bawah, perbarui pengaturan tingkat log di appsettings.json.

  • Paket Microsoft.ApplicationInsights.WorkerService NuGet, yang digunakan untuk mengaktifkan Application Insights untuk layanan latar belakang, berada di luar cakupan.

  • Untuk meninjau tanya jawab umum (FAQ), lihat Loggging dengan FAQ .NET.

Menginstal pengelogan di aplikasi Anda

ASP.NET

Pilih pendekatan pengelogan untuk memancarkan log diagnostik yang dapat dikumpulkan Application Insights.

Untuk aplikasi ASP.NET klasik yang menggunakan pelacakan System.Diagnostics, konfigurasikan Application Insights TraceListener pada konfigurasi.

Tambahkan pendengar ke web.config atau app.config:

<configuration>
  <system.diagnostics>
    <trace>
      <listeners>
        <add name="myAppInsightsListener"
             type="Microsoft.ApplicationInsights.TraceListener.ApplicationInsightsTraceListener, Microsoft.ApplicationInsights.TraceListener" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

Nota

Modul penangkapan log adalah adaptor yang berguna untuk pencatat pihak ketiga. Namun, jika Anda belum menggunakan NLog, log4Net, atau System.Diagnostics.Trace, pertimbangkan untuk memanggil Application Insights TrackTrace() secara langsung.

Mengonfigurasi Application Insights untuk mengumpulkan log

Opsi 1: Tambahkan Application Insights ke proyek Anda jika Anda belum melakukannya. Saat menambahkan Application Insights di Visual Studio, ada opsi untuk menyertakan pengumpul log.

Opsi 2: Klik kanan proyek Anda di Penjelajah Solusi untuk Mengonfigurasi Application Insights. Pilih opsi Konfigurasikan koleksi jejak .

Nota

Jika Anda kehilangan menu Application Insights atau opsi pengumpul log, lihat artikel pemecahan masalah khusus.

ASP.NET Core

Application Insights SDK untuk ASP.NET Core sudah mengumpulkan log ILogger secara default. Jika Anda menggunakan SDK, Anda biasanya tidak perlu juga memanggil builder.Logging.AddApplicationInsights() dan dapat mengacuhkan instruksi penginstalan ILogger berikut.

Jika Anda hanya memerlukan penerusan log dan bukan tumpukan telemetri lengkap, Anda dapat menggunakan paket dari penyedia Microsoft.Extensions.Logging.ApplicationInsights untuk merekam log.

Penginstalan manual

Gunakan metode ini jika jenis proyek Anda tidak didukung oleh penginstal Application Insights (misalnya, beberapa skenario desktop/konsol) atau jika Anda lebih suka kontrol tingkat paket eksplisit.

  1. Di Solution Explorer, klik kanan proyek Anda, dan pilih Kelola Paket NuGet.

  2. Cari Application Insights.

  3. Pilih salah satu paket berikut:

Paket NuGet menginstal rakitan yang diperlukan dan memodifikasi web.config atau app.config, jika berlaku.

Instruksi Penginstalan:

Nota

Perluas salah satu bagian di bawah ini untuk instruksi penginstalan khusus paket.


ILogger
  1. Microsoft.Extensions.Logging.ApplicationInsightsInstal .

  2. Tambahkan ApplicationInsightsLoggerProvider:

using Microsoft.Extensions.Logging.ApplicationInsights;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Logging.AddApplicationInsights(
        configureTelemetryConfiguration: (config) => 
            config.ConnectionString = builder.Configuration.GetConnectionString("APPLICATIONINSIGHTS_CONNECTION_STRING"),
            configureApplicationInsightsLoggerOptions: (options) => { }
    );

builder.Logging.AddFilter<ApplicationInsightsLoggerProvider>("your-category", LogLevel.Trace);

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

Dengan paket NuGet yang terinstal dan penyedia terdaftar dengan injeksi dependensi, aplikasi siap untuk merekam log. Dengan injeksi konstruktor, salah satu ILogger atau alternatif ILogger<TCategoryName> jenis generik diperlukan. Ketika implementasi ini diselesaikan, ApplicationInsightsLoggerProvider menyediakannya. Pesan atau pengecualian yang dicatat dikirim ke Application Insights.

Pertimbangkan contoh pengontrol berikut:

public class ValuesController : ControllerBase
{
    private readonly ILogger _logger;

    public ValuesController(ILogger<ValuesController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        _logger.LogWarning("An example of a Warning trace..");
        _logger.LogError("An example of an Error level message");

        return new string[] { "value1", "value2" };
    }
}

Untuk informasi selengkapnya, lihat Pengelogan di ASP.NET Core dan Jenis telemetri Application Insights apa yang dihasilkan dari log ILogger? Di mana saya dapat melihat log ILogger di Application Insights?.

Sisipkan panggilan log diagnostik (System.Diagnostics.Trace / log4net / NLog)

Jika Anda menggunakan System.Diagnostics.Trace, panggilan umumnya adalah:

System.Diagnostics.Trace.TraceWarning("Slow response - database01");

Jika Anda lebih suka log4net atau NLog, gunakan:

    logger.Warn("Slow response - database01");
Gunakan peristiwa EventSource

Anda dapat mengonfigurasi peristiwa System.Diagnostics.Tracing.EventSource untuk dikirim ke Application Insights sebagai jejak.

  1. Microsoft.ApplicationInsights.EventSourceListener Instal paket NuGet.

  2. Mengedit bagian TelemetryModules dari file ApplicationInsights.config:

        <Add Type="Microsoft.ApplicationInsights.EventSourceListener.EventSourceTelemetryModule, Microsoft.ApplicationInsights.EventSourceListener">
          <Sources>
            <Add Name="MyCompany" Level="Verbose" />
          </Sources>
        </Add>
    

Untuk setiap sumber, Anda dapat mengatur parameter berikut:

  • Nama menentukan nama EventSource yang akan dikumpulkan.
  • Tingkat menentukan tingkat pengelogan yang akan dikumpulkan: Kritis, Kesalahan, Informasi, LogAlways, Verbose, atau Peringatan.
  • Kata kunci (opsional) menentukan nilai bilangan bulat kombinasi kata kunci yang akan digunakan.
Menggunakan peristiwa DiagnosticSource

Anda dapat mengonfigurasi peristiwa System.Diagnostics.DiagnosticSource untuk dikirim ke Application Insights sebagai jejak.

  1. Microsoft.ApplicationInsights.DiagnosticSourceListener Instal paket NuGet.

  2. Mengedit bagian TelemetryModules dari file ApplicationInsights.config:

        <Add Type="Microsoft.ApplicationInsights.DiagnosticSourceListener.DiagnosticSourceTelemetryModule, Microsoft.ApplicationInsights.DiagnosticSourceListener">
          <Sources>
            <Add Name="MyDiagnosticSourceName" />
          </Sources>
        </Add>
    

Untuk setiap sumber diagnostik yang ingin Anda lacak, tambahkan entri dengan atribut Name yang disetel ke nama sumber diagnostik Anda.

Menggunakan peristiwa ETW

Anda dapat mengonfigurasi peristiwa Pelacakan Peristiwa untuk Windows (ETW) untuk dikirim ke Application Insights sebagai jejak.

  1. Microsoft.ApplicationInsights.EtwCollector Instal paket NuGet.

  2. Edit bagian "TelemetryModules" dari file ApplicationInsights.config :

Nota

Peristiwa ETW hanya dapat dikumpulkan jika proses yang menghosting SDK berjalan di bawah identitas yang merupakan anggota Pengguna Log Kinerja atau Administrator.

    <Add Type="Microsoft.ApplicationInsights.EtwCollector.EtwCollectorTelemetryModule, Microsoft.ApplicationInsights.EtwCollector">
      <Sources>
        <Add ProviderName="MyCompanyEventSourceName" Level="Verbose" />
      </Sources>
    </Add>

Untuk setiap sumber, Anda dapat mengatur parameter berikut:

  • ProviderName adalah nama penyedia ETW yang akan dikumpulkan.
  • ProviderGuid menentukan GUID penyedia ETW untuk dikumpulkan. Ini dapat digunakan alih-alih ProviderName.
  • Tingkat mengatur tingkat pengelogan yang akan dikumpulkan. Ini bisa Kritis, Kesalahan, Informasi, LogAlways, Verbose, atau Peringatan.
  • Kata kunci (opsional) mengatur nilai bilangan bulat kombinasi kata kunci yang akan digunakan.
Menggunakan TRACE API secara langsung

Anda dapat memanggil API pelacakan Application Insights secara langsung. Adaptor pengelogan menggunakan API ini. Contohnya:

TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
var telemetryClient = new TelemetryClient(configuration);
telemetryClient.TrackTrace("Slow response - database01");

Keuntungannya TrackTrace adalah Anda dapat memasukkan data yang relatif panjang dalam pesan. Misalnya, Anda dapat mengodekan data POST di sana.

Anda juga dapat menambahkan tingkat keparahan ke pesan Anda. Dan, seperti telemetri lainnya, Anda dapat menambahkan nilai properti untuk membantu memfilter atau mencari set jejak yang berbeda. Contohnya:

TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
var telemetryClient = new TelemetryClient(configuration);
telemetryClient.TrackTrace("Slow database response",
                            SeverityLevel.Warning,
                            new Dictionary<string, string> { { "database", "db.ID" } });

Sekarang Anda dapat dengan mudah memfilter di Mencari semua pesan tingkat keparahan tertentu yang terkait dengan database tertentu.

Aplikasi konsol

Untuk menambahkan pengelogan Application Insights ke aplikasi konsol, pertama-tama instal paket NuGet berikut:

Contoh berikut menggunakan Microsoft.Extensions.Logging.ApplicationInsights paket dan menunjukkan perilaku default untuk aplikasi konsol. Paket Microsoft.Extensions.Logging.ApplicationInsights harus digunakan dalam aplikasi konsol atau kapan pun Anda menginginkan implementasi minimum Application Insights tanpa set fitur lengkap seperti metrik, pelacakan terdistribusi, pengambilan sampel, dan penginisialisasi telemetri.

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

using var channel = new InMemoryChannel();

try
{
    IServiceCollection services = new ServiceCollection();
    services.Configure<TelemetryConfiguration>(config => config.TelemetryChannel = channel);
    services.AddLogging(builder =>
    {
        // Only Application Insights is registered as a logger provider
        builder.AddApplicationInsights(
            configureTelemetryConfiguration: (config) => config.ConnectionString = "<YourConnectionString>",
            configureApplicationInsightsLoggerOptions: (options) => { }
        );
    });

    IServiceProvider serviceProvider = services.BuildServiceProvider();
    ILogger<Program> logger = serviceProvider.GetRequiredService<ILogger<Program>>();

    logger.LogInformation("Logger is working...");
}
finally
{
    // Explicitly call Flush() followed by Delay, as required in console apps.
    // This ensures that even if the application terminates, telemetry is sent to the back end.
    channel.Flush();

    await Task.Delay(TimeSpan.FromMilliseconds(1000));
}

Untuk informasi selengkapnya, lihat Jenis telemetri Application Insights apa yang dihasilkan dari log ILogger? Di mana saya dapat melihat log ILogger di Application Insights?.

Cakupan pencatatan

Nota

Panduan berikut berlaku untuk skenario ILogger (hanya ASP.NET Core dan konsol). Ini tidak berlaku untuk ASP.NET klasik.

ApplicationInsightsLoggingProvider mendukung cakupan log, yang diaktifkan secara bawaan.

Jika cakupan berjenis IReadOnlyCollection<KeyValuePair<string,object>>, maka setiap pasangan kunci/nilai dalam koleksi ditambahkan ke telemetri Application Insights sebagai properti kustom. Dalam contoh berikut, log diambil sebagai TraceTelemetry dan memiliki ("MyKey", "MyValue") dalam properti.

using (_logger.BeginScope(new Dictionary<string, object> { ["MyKey"] = "MyValue" }))
{
    _logger.LogError("An example of an Error level message");
}

Jika ada jenis lain yang digunakan sebagai cakupan, jenis tersebut akan disimpan di bawah properti Scope dalam telemetri Application Insights. Dalam contoh berikut, TraceTelemetry memiliki properti yang disebut Scope yang berisi cakupan.

using (_logger.BeginScope("hello scope"))
{
    _logger.LogError("An example of an Error level message");
}

Menemukan log Anda

Jalankan aplikasi Anda dalam mode debug atau sebarkan secara langsung.

Di panel gambaran umum aplikasi Anda di portal Application Insights, pilih Cari di mana Anda dapat:

  • Filter pada jejak log atau pada item dengan properti tertentu.
  • Periksa item tertentu secara rinci.
  • Temukan data log sistem lain yang berkaitan dengan permintaan pengguna yang sama (memiliki ID operasi yang sama).
  • Simpan konfigurasi halaman sebagai favorit.

Nota

Jika aplikasi Anda mengirim data dalam jumlah besar dan Anda menggunakan Application Insights SDK untuk ASP.NET versi 2.0.0-beta3 atau yang lebih baru, fitur pengambilan sampel adaptif mungkin beroperasi dan hanya mengirim sebagian telemetri Anda. Pelajari selengkapnya tentang pengambilan sampel.

Menjelajahi Log di Azure Monitor

Log ILogger muncul sebagai telemetri pelacakan (tabel traces di Application Insights dan AppTraces di Log Analytics).

Example

Di portal Microsoft Azure, buka Application Insights dan jalankan:

traces
| where severityLevel >= 2 // 2=Warning, 1=Information, 0=Verbose
| take 50

Pelacakan terdistribusi

Arsitektur cloud dan layanan mikro modern telah mengaktifkan layanan sederhana dan dapat disebarkan secara independen yang mengurangi biaya sekaligus meningkatkan ketersediaan dan throughput. Namun, itu telah membuat keseluruhan sistem lebih sulit untuk dipahami dan di-debug. Pelacakan terdistribusi memecahkan masalah ini dengan menyediakan profiler performa yang berfungsi seperti tumpukan panggilan untuk arsitektur cloud dan layanan mikro.

Azure Monitor menyediakan dua pengalaman untuk menggunakan data pelacakan terdistribusi: tampilan diagnostik transaksi untuk satu transaksi/permintaan dan tampilan peta aplikasi untuk menunjukkan cara sistem berinteraksi.

Application Insights dapat memantau setiap komponen secara terpisah dan mendeteksi komponen mana yang bertanggung jawab atas kegagalan atau penurunan performa dengan menggunakan korelasi telemetri terdistribusi. Artikel ini menjelaskan model data, teknik penyebaran konteks, protokol, dan implementasi taktik korelasi pada berbagai bahasa dan platform yang digunakan oleh Application Insights.

Mengaktifkan pelacakan terdistribusi melalui Application Insights dengan menggunakan autoinstrumentasi atau SDK

Agen Application Insights dan SDK untuk .NET, .NET Core, Java, Node.js, dan JavaScript semuanya mendukung pelacakan terdistribusi secara asli.

Dengan SDK Application Insights yang tepat sudah diinstal dan dikonfigurasi, pengumpul otomatis untuk dependensi SDK akan mengumpulkan informasi pelacakan secara otomatis untuk kerangka kerja, pustaka, dan teknologi populer. Daftar lengkap teknologi yang didukung tersedia dalam dokumentasi pengumpulan otomatis Dependensi.

Teknologi apa pun juga dapat dilacak secara manual dengan panggilan ke TrackDependency pada TelemetryClient.

Model data untuk korelasi telemetri

Application Insights mendefinisikan model data untuk korelasi telemetri terdistribusi. Untuk mengaitkan telemetri dengan operasi logis, setiap item telemetri memiliki bidang konteks yang disebut operation_Id. Setiap item telemetri dalam pelacakan terdistribusi berbagi pengidentifikasi ini. Jadi, bahkan jika Anda kehilangan telemetri dari satu lapisan, Anda masih dapat mengaitkan telemetri yang dilaporkan oleh komponen lain.

Operasi logis terdistribusi biasanya terdiri dari serangkaian operasi yang lebih kecil yang merupakan permintaan yang diproses oleh salah satu komponen. Telemetri permintaan mendefinisikan operasi ini. Setiap item telemetri permintaan memiliki id sendiri yang mengidentifikasinya secara unik dan global. Dan semua item telemetri (seperti jejak dan pengecualian) yang terkait dengan permintaan harus mengatur operation_parentId ke nilai permintaan id.

Telemetri dependensi mewakili setiap operasi keluar, seperti panggilan HTTP ke komponen lain. Ini juga mendefinisikan id miliknya sendiri yang unik secara global. Telemetri permintaan, yang dimulai oleh panggilan dependensi ini, menggunakan id sebagai operation_parentId.

Anda dapat membangun tampilan operasi logis terdistribusi dengan menggunakan operation_Id, operation_parentId, dan request.id dengan dependency.id. Bidang-bidang ini juga menentukan urutan kausalitas panggilan telemetri.

Di lingkungan layanan mikro, jejak dari komponen dapat masuk ke item penyimpanan yang berbeda. Setiap komponen dapat memiliki string koneksinya sendiri di Application Insights. Untuk mendapatkan telemetri untuk operasi logis, Application Insights meminta data dari setiap item penyimpanan.

Ketika jumlah item penyimpanan banyak, Anda memerlukan petunjuk tentang tempat yang harus dilihat berikutnya. Model data Application Insights mendefinisikan dua bidang untuk menyelesaikan masalah ini: request.source dan dependency.target. Bidang pertama mengidentifikasi komponen yang memulai permintaan dependensi. Bidang kedua mengidentifikasi komponen mana yang mengembalikan respons panggilan dependensi.

Untuk informasi tentang melakukan kueri dari beberapa instans yang berbeda, silakan lihat Kueri data di seluruh ruang kerja Log Analytics, aplikasi, dan sumber daya di Azure Monitor.

Example

Mari kita lihat contohnya. Aplikasi bernama Harga Saham menunjukkan harga pasar saham saat ini dengan menggunakan API eksternal yang disebut Saham. Aplikasi Harga Saham memiliki halaman yang disebut halaman Stok yang dibuka browser web klien dengan menggunakan GET /Home/Stock. Aplikasi ini mengkueri STOCK API dengan menggunakan panggilan GET /api/stock/valueHTTP .

Anda dapat menganalisis telemetri yang dihasilkan dengan menjalankan kueri:

(requests | union dependencies | union pageViews)
| where operation_Id == "STYz"
| project timestamp, itemType, name, id, operation_ParentId, operation_Id

Dalam hasilnya, semua item telemetri berbagi akar operation_Id. Ketika panggilan Ajax dilakukan dari halaman, ID unik baru (qJSXU) ditetapkan ke telemetri dependensi, dan ID pageView digunakan sebagai operation_ParentId. Permintaan server kemudian menggunakan ID Ajax sebagai operation_ParentId.

JenisItem Nama ID operation_ParentId ID Operasi
tampilan halaman Halaman Inventaris STYz STYz
dependensi Permintaan GET /Home/Stock qJSXU STYz STYz
permintaan GET Beranda/Stok KqKwlrSt9PA= qJSXU STYz
dependensi GET /api/stock/value bBrf2L7mm2g= KqKwlrSt9PA= STYz

Ketika panggilan GET /api/stock/value dilakukan ke layanan eksternal, Anda perlu mengetahui identitas server tersebut dependency.target sehingga Anda dapat mengatur bidang dengan tepat. Ketika layanan eksternal tidak mendukung pemantauan, target diatur ke nama host layanan. Contohnya adalah stock-prices-api.com. Tetapi jika layanan mengidentifikasi dirinya dengan mengembalikan header HTTP yang telah ditentukan sebelumnya, target berisi identitas layanan yang memungkinkan Application Insights untuk membangun jejak terdistribusi dengan mengkueri telemetri dari layanan tersebut.

Header korelasi menggunakan W3C TraceContext

Application Insights beralih ke W3C Trace-Context, yang mendefinisikan:

  • traceparent: Membawa ID operasi unik global dan pengidentifikasi unik panggilan.
  • tracestate: Membawa konteks pelacakan khusus sistem.

Versi terbaru Application Insights SDK mendukung protokol Trace-Context, tetapi Anda mungkin perlu ikut serta dalamnya. (Kompatibilitas mundur dengan protokol korelasi sebelumnya yang didukung oleh SDK Application Insights dipertahankan.)

Protokol HTTP korelasi, juga disebut Request-Id, tidak digunakan lagi. Protokol ini mendefinisikan dua header:

  • Request-Id: Membawa ID panggilan yang unik secara global.
  • Correlation-Context: Membawa kumpulan pasangan nama-nilai dari properti pelacakan terdistribusi.

Application Insights juga menentukan ekstensi untuk protokol HTTP korelasi. Ini menggunakan Request-Context pasangan nama-nilai untuk menyebarluaskan kumpulan properti yang digunakan oleh penelepon atau penerima panggilan langsung. Application Insights SDK menggunakan header ini untuk mengatur dependency.target dan request.source bidang.

Model data W3C Trace-Context dan Application Insights dipetakan dengan cara berikut:

Application Insights W3C TraceContext
Id dari Request dan Dependency parent-id
Operation_Id trace-id
Operation_ParentId id induk dari rentang induk rentang ini. Bidang ini harus kosong jika merupakan rentang akar.

Untuk informasi selengkapnya, lihat Model data telemetri Application Insights.

Mengaktifkan dukungan pelacakan terdistribusi W3C

Pelacakan terdistribusi berbasis W3C TraceContext diaktifkan secara bawaan di semua SDK .NET Framework/.NET Core terbaru, bersama dengan kompatibilitas ke belakang dengan protokol warisan Request-Id.

Korelasi telemetri

Korelasi ditangani secara default saat onboarding aplikasi. Tidak ada tindakan khusus yang diperlukan.

.NET runtime mendukung distribusi dengan bantuan Activity dan DiagnosticSource

Application Insights .NET SDK menggunakan DiagnosticSource dan Activity untuk mengumpulkan dan menghubungkan telemetri.

Ketergantungan

Dependensi yang dilacak secara otomatis

Application Insights SDK untuk .NET dan .NET Core dilengkapi dengan DependencyTrackingTelemetryModule, yang merupakan modul telemetri yang secara otomatis mengumpulkan berbagai dependensi. Modul DependencyTrackingTelemetryModule dikirim sebagai paket NuGet Microsoft.ApplicationInsights.DependencyCollector dan dibawa secara otomatis saat Anda menggunakan Microsoft.ApplicationInsights.Web paket NuGet atau Microsoft.ApplicationInsights.AspNetCore paket NuGet.

Saat ini, DependencyTrackingTelemetryModule melacak dependensi berikut secara otomatis:

Ketergantungan Rincian
HTTP/HTTPS Panggilan HTTP/HTTPS lokal atau jarak jauh.
Panggilan WCF Hanya dilacak secara otomatis jika pengikatan berbasis HTTP digunakan.
SQL Panggilan dilakukan dengan SqlClient. Lihat bagian Pelacakan SQL Tingkat Lanjut untuk mendapatkan kueri SQL lengkap untuk menangkap kueri SQL.
Azure Blob Storage, Penyimpanan Tabel, atau Penyimpanan Antrean Panggilan yang dilakukan dengan klien Azure Storage.
Azure Event Hubs Client SDK Gunakan paket terbaru: https://nuget.org/packages/Azure.Messaging.EventHubs.
Azure Service Bus client SDK Gunakan paket terbaru: https://nuget.org/packages/Azure.Messaging.ServiceBus.
Azure Cosmos DB Dilacak secara otomatis jika HTTP/HTTPS digunakan. Pelacakan untuk operasi dalam mode langsung dengan TCP diambil secara otomatis menggunakan paket pratinjau >= 3.33.0-preview. Untuk detail selengkapnya, kunjungi dokumentasi.

Jika dependensi tidak dikoleksi otomatis, Anda dapat melacak dependensi secara manual dengan pemanggilan pelacakan dependensi.

Untuk informasi selengkapnya tentang cara kerja pelacakan dependensi, lihat Pelacakan dependensi di Application Insights.

Bagaimana cara kerja pemantauan dependensi otomatis?

  • Instrumentasi bytecode diterapkan di sekitar metode yang dipilih menggunakan InstrumentationEngine, diaktifkan melalui StatusMonitor atau ekstensi Application Insights untuk Azure App Service.

  • panggilan balik EventSource digunakan untuk mengambil telemetri dari pustaka .NET yang memancarkan peristiwa terstruktur.

  • panggilan balik DiagnosticSource digunakan dalam .NET yang lebih baru dan .NET Core SDK untuk mengumpulkan telemetri dari pustaka yang mendukung pelacakan terdistribusi.

Menyiapkan pelacakan dependensi otomatis di aplikasi konsol

Untuk melacak dependensi secara otomatis dari aplikasi konsol .NET, instal paket NuGet Microsoft.ApplicationInsights.DependencyCollector dan inisialisasi DependencyTrackingTelemetryModule:

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

Nota

Untuk aplikasi konsol .NET Core, TelemetryConfiguration.Active kadaluwarsa.

Melacak dependensi secara manual

Contoh dependensi berikut, yang tidak dikumpulkan secara otomatis, memerlukan pelacakan manual:

  • Azure Cosmos DB dilacak secara otomatis hanya jika HTTP/HTTPS digunakan. Mode TCP tidak secara otomatis diambil oleh Application Insights untuk versi SDK yang lebih lama dari 2.22.0-Beta1.
  • Redis

Untuk dependensi yang tidak dikumpulkan secara otomatis oleh SDK, Anda dapat melacaknya secara manual dengan menggunakan API TrackDependency yang digunakan oleh modul autocollection standar.

Example

Jika Anda membuat kode dengan assembly yang tidak Anda tulis sendiri, Anda dapat mengukur waktu semua panggilan ke sana. Skenario ini akan memungkinkan Anda untuk mengetahui kontribusi apa yang dilakukannya pada waktu respons Anda.

Agar data ini ditampilkan dalam bagan dependensi di Application Insights, kirimkan dengan menggunakan 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);
    }

Atau, TelemetryClient menyediakan metode ekstensi StartOperation dan StopOperation, yang dapat digunakan untuk melacak dependensi secara manual seperti yang digambarkan dalam Pelacakan dependensi keluar.

Menonaktifkan modul pelacakan dependensi standar

Untuk informasi selengkapnya, lihat modul telemetri.

Pelacakan SQL Tingkat Lanjut untuk mendapatkan kueri SQL penuh

Untuk panggilan SQL, nama server dan database selalu dikumpulkan dan disimpan sebagai nama DependencyTelemetry yang dikumpulkan. Bidang lain, yang disebut data, dapat berisi teks kueri SQL penuh.

Nota

Azure Functions memerlukan pengaturan terpisah untuk mengaktifkan pengumpulan teks SQL. Untuk informasi selengkapnya, lihat Mengaktifkan kumpulan kueri SQL.

ASP.NET

Untuk aplikasi ASP.NET, teks kueri SQL lengkap dikumpulkan dengan bantuan instrumentasi kode byte, yang memerlukan penggunaan mesin instrumentasi atau paket NuGet Microsoft.Data.SqlClient sebagai pengganti pustaka System.Data.SqlClient. Langkah-langkah khusus platform untuk mengaktifkan kumpulan kueri SQL penuh dijelaskan dalam tabel berikut.

Platform Langkah-langkah yang diperlukan untuk mendapatkan kueri SQL penuh
Web Apps di Azure App Service Di panel kontrol aplikasi web Anda, buka panel Application Insights dan aktifkan Perintah SQL di bawah .NET.
Server IIS (Azure Virtual Machines, lokal, dan sebagainya) Gunakan paket NuGet Microsoft.Data.SqlClient atau gunakan Modul PowerShell Agen Application Insights untuk menginstal mesin instrumentasi dan memulai ulang IIS.
Azure Cloud Services Tambahkan tugas startup untuk menginstal StatusMonitor.
Aplikasi Anda harus di-onboard ke ApplicationInsights SDK pada waktu build dengan menginstal paket NuGet untuk aplikasi ASP.NET atau ASP.NET Core.
IIS Express Gunakan paket NuGet Microsoft.Data.SqlClient .
WebJobs di Azure App Service Gunakan paket NuGet Microsoft.Data.SqlClient .

Selain langkah-langkah khusus platform sebelumnya, Anda juga harus secara eksplisit memilih untuk mengaktifkan pengumpulanApplicationInsights.config perintah SQL dengan memodifikasi file dengan kode berikut:

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

Untuk aplikasi ASP.NET Core, Anda harus memilih untuk mengaktifkan pengumpulan Teks SQL dengan menggunakan:

services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) => { module. EnableSqlCommandTextInstrumentation = true; });

Dalam kasus sebelumnya, cara yang tepat untuk memvalidasi bahwa mesin instrumentasi telah diinstal dengan benar adalah dengan memvalidasi bahwa versi SDK dari DependencyTelemetry yang dikumpulkan adalah rddp. Penggunaan rdddsd atau rddf menunjukkan dependensi dikumpulkan melalui DiagnosticSource atau EventSource panggilan balik, sehingga kueri SQL lengkap tidak diambil.

Pengecualian

Pengecualian dalam aplikasi web dapat dilaporkan dengan Application Insights. Anda dapat menghubungkan permintaan yang gagal dengan pengecualian dan peristiwa lain di klien dan server sehingga Anda dapat dengan cepat mendiagnosis penyebabnya. Di bagian ini, Anda mempelajari cara menyiapkan pelaporan pengecualian, melaporkan pengecualian secara eksplisit, mendiagnosis kegagalan, dan banyak lagi.

Menyiapkan pelaporan pengecualian

Anda dapat menyiapkan Application Insights untuk melaporkan pengecualian yang terjadi di server atau klien. Bergantung pada platform yang bergantung pada aplikasi Anda, Anda memerlukan ekstensi atau SDK yang sesuai.

Server-side

Agar pengecualian dilaporkan dari aplikasi sisi server Anda, pertimbangkan skenario berikut:

Client-side

JavaScript SDK menyediakan kemampuan untuk pelaporan pengecualian sisi klien yang terjadi di browser web. Untuk menyiapkan pelaporan pengecualian pada klien, lihat Application Insights untuk halaman web.

Kerangka kerja aplikasi

Dengan beberapa kerangka kerja aplikasi, diperlukan lebih banyak konfigurasi. Pertimbangkan teknologi berikut:

Penting

Bagian ini difokuskan pada aplikasi .NET Framework dari perspektif contoh kode. Beberapa metode yang berfungsi untuk .NET Framework sudah usang di .NET Core SDK.

Mendiagnosis kegagalan dan pengecualian

portal Azure

Application Insights hadir dengan pengalaman Manajemen Performa Aplikasi yang dikumpulkan untuk membantu Anda mendiagnosis kegagalan dalam aplikasi yang dipantau.

Untuk petunjuk terperinci, lihat Menyelidiki kegagalan, performa, dan transaksi dengan Application Insights.

Visual Studio
  1. Buka solusi aplikasi di Visual Studio. Jalankan aplikasi, baik di server Anda atau di komputer pengembangan Anda dengan menggunakan F5. Buat ulang pengecualian.

  2. Buka jendela telemetri Application Insights Search di Visual Studio. Saat men-debug, pilih kotak dropdown Application Insights .

  3. Pilih laporan pengecualian untuk menampilkan jejak tumpukannya. Untuk membuka file kode yang relevan, pilih referensi baris di stack trace.

    Jika CodeLens diaktifkan, Anda akan melihat data tentang pengecualian:

    Cuplikan layar yang memperlihatkan pemberitahuan CodeLens tentang pengecualian.

Pelacakan kustom dan data log

Untuk mendapatkan data diagnostik khusus untuk aplikasi, Anda dapat menyisipkan kode untuk mengirim data telemetri Anda sendiri. Data telemetri atau log kustom Anda ditampilkan dalam pencarian diagnostik bersama permintaan, tampilan halaman, dan data lain yang dikumpulkan secara otomatis.

Dengan menggunakan Microsoft.VisualStudio.ApplicationInsights.TelemetryClient, Anda memiliki beberapa API yang tersedia.

Untuk melihat peristiwa ini, di menu sebelah kiri, buka Pencarian. Pilih menu dropdown Jenis peristiwa, lalu pilih Peristiwa Kustom, Jejak, atau Pengecualian.

Cuplikan layar yang memperlihatkan layar Pencarian.

Nota

Jika aplikasi Anda menghasilkan telemetri dalam jumlah besar, modul pengambilan sampel adaptif secara otomatis mengurangi volume yang dikirim ke portal dengan hanya mengirim sebagian kecil dari peristiwa yang representatif. Peristiwa yang merupakan bagian dari operasi yang sama dipilih atau tidak dipilih sebagai grup sehingga Anda dapat menavigasi antara peristiwa terkait. Untuk informasi selengkapnya, lihat Pengambilan sampel di Application Insights.

Lihat permintaan data POST

Detail permintaan tidak menyertakan data yang dikirim ke aplikasi Anda dalam panggilan POST. Agar data ini dilaporkan:

Secara default, tidak semua pengecualian yang menyebabkan kegagalan di aplikasi Anda muncul di portal. Jika Anda menggunakan JavaScript SDK di halaman web, Anda akan melihat pengecualian browser. Namun, sebagian besar pengecualian sisi server dicegat oleh IIS, jadi Anda perlu menambahkan beberapa kode untuk menangkap dan melaporkannya.

Kamu bisa:

  • Catat pengecualian secara eksplisit dengan menyisipkan kode dalam penangan pengecualian untuk melaporkan pengecualian.
  • Ambil pengecualian secara otomatis dengan mengonfigurasi kerangka kerja ASP.NET Anda. Penambahan yang diperlukan berbeda untuk berbagai jenis kerangka kerja.
Melaporkan pengecualian secara eksplisit

Cara paling sederhana untuk melaporkan adalah dengan menyisipkan panggilan ke trackException() dalam handler pengecualian.

C#
var telemetry = new TelemetryClient();

try
{
    // ...
}
catch (Exception ex)
{
    var properties = new Dictionary<string, string>
    {
        ["Game"] = currentGame.Name
    };

    var measurements = new Dictionary<string, double>
    {
        ["Users"] = currentGame.Users.Count
    };

    // Send the exception telemetry:
    telemetry.TrackException(ex, properties, measurements);
}
JavaScript
try
{
    // ...
}
catch (ex)
{
    appInsights.trackException(ex, "handler loc",
    {
        Game: currentGame.Name,
        State: currentGame.State.ToString()
    });
}

Parameter properti dan pengukuran bersifat opsional, tetapi berguna untuk memfilter dan menambahkan informasi tambahan. Misalnya, jika Anda memiliki aplikasi yang dapat menjalankan beberapa game, Anda dapat menemukan laporan pengecualian yang terkait dengan game tertentu. Anda dapat menambahkan item sebanyak yang Anda inginkan ke setiap kamus.

Pengecualian browser

Sebagian besar pengecualian pada browser dilaporkan.

Jika halaman web Anda menyertakan file skrip dari jaringan pengiriman konten atau domain lain, pastikan tag skrip Anda memiliki atribut crossorigin="anonymous" dan server mengirim header CORS. Perilaku ini memungkinkan Anda untuk mendapatkan jejak tumpukan dan detail untuk pengecualian JavaScript yang tidak tertangani dari sumber daya ini.

Menggunakan kembali klien telemetri Anda

Nota

Kami menyarankan agar Anda membuat instans TelemetryClient sekali dan menggunakannya kembali sepanjang masa pakai aplikasi.

Dengan Injeksi Dependensi (DI) di .NET, .NET SDK yang sesuai, dan mengonfigurasi Application Insights untuk DI dengan benar, Anda dapat memerlukan TelemetryClient sebagai parameter konstruktor.

public class ExampleController : ApiController
{
    private readonly TelemetryClient _telemetryClient;

    public ExampleController(TelemetryClient telemetryClient)
    {
        _telemetryClient = telemetryClient;
    }
}

Dalam contoh sebelumnya, TelemetryClient disuntikkan ke kelas ExampleController.

Formulir web

Untuk formulir web, Modul HTTP dapat mengumpulkan pengecualian ketika tidak ada pengalihan yang dikonfigurasi dengan CustomErrors. Namun, ketika Anda memiliki pengalihan aktif, tambahkan baris berikut ke dalam fungsi di Application_ErrorGlobal.asax.cs.

void Application_Error(object sender, EventArgs e)
{
    if (HttpContext.Current.IsCustomErrorEnabled &&
        Server.GetLastError () != null)
    {
        _telemetryClient.TrackException(Server.GetLastError());
    }
}

Dalam contoh sebelumnya, _telemetryClient adalah variabel cakupan kelas dari tipe TelemetryClient.

MVC

Dimulai dengan Application Insights Web SDK versi 2.6 (beta 3 dan yang lebih baru), Application Insights mengumpulkan pengecualian yang tidak tertangani yang dilemparkan dalam metode pengontrol MVC 5+ secara otomatis. Jika sebelumnya Anda menambahkan handler kustom untuk melacak pengecualian tersebut, Anda dapat menghapusnya untuk mencegah pelacakan pengecualian ganda.

Ada beberapa skenario ketika filter pengecualian tidak dapat menangani kesalahan dengan benar saat pengecualian dilemparkan:

  • Dari konstruktor pengontrol
  • Dari penangan pesan
  • Selama perutean
  • Selama serialisasi konten tanggapan
  • Selama start-up aplikasi
  • Dalam tugas latar belakang

Semua pengecualian yang ditangani oleh aplikasi masih perlu dilacak secara manual. Pengecualian yang tidak tertangani yang berasal dari pengontrol biasanya menghasilkan respons 500 "Kesalahan Server Internal". Jika respons tersebut dibuat secara manual sebagai akibat dari pengecualian yang ditangani, atau tanpa pengecualian sama sekali, respons tersebut dilacak dalam telemetri permintaan yang sesuai dengan ResultCode 500. Namun, Application Insights SDK tidak dapat melacak pengecualian yang sesuai.

Dukungan versi sebelumnya

Jika Anda menggunakan MVC 4 (dan sebelumnya) dari Application Insights Web SDK 2.5 (dan sebelumnya), lihat contoh berikut untuk melacak pengecualian.


Perluas untuk melihat instruksi untuk versi sebelumnya

Jika konfigurasi CustomErrors adalah Off, pengecualian tersedia untuk dikumpulkan oleh Modul HTTP . Namun, jika diatur ke RemoteOnly (default) atau On, pengecualian dibersihkan dan tidak tersedia bagi Application Insights untuk dikumpulkan secara otomatis. Anda dapat memperbaiki perilaku tersebut dengan mengambil alih kelas System.Web.Mvc.HandleErrorAttribute dan menerapkan kelas penggantian seperti yang ditunjukkan untuk versi MVC yang berbeda di sini (lihat sumber GitHub):

using System;
using System.Web.Mvc;
using Microsoft.ApplicationInsights;

namespace MVC2App.Controllers
{
    [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)
            {
                //The attribute should track exceptions only when CustomErrors setting is On
                //if CustomErrors is Off, exceptions will be caught by AI HTTP Module
                if (filterContext.HttpContext.IsCustomErrorEnabled)
                {   //Or reuse instance (recommended!). See note above.
                    var ai = new TelemetryClient();
                    ai.TrackException(filterContext.Exception);
                }
            }
            base.OnException(filterContext);
        }
    }
}

MVC 2

Ganti atribut HandleError dengan atribut baru Anda di pengontrol Anda:

    namespace MVC2App.Controllers
    {
        [AiHandleError]
        public class HomeController : Controller
        {
            // Omitted for brevity
        }
    }

Sample

MVC 3

Daftar AiHandleErrorAttribute sebagai filter global di Global.asax.cs:

public class MyMvcApplication : System.Web.HttpApplication
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new AiHandleErrorAttribute());
    }
}

Sample

MVC 4, MVC 5

Daftar AiHandleErrorAttribute sebagai filter global di FilterConfig.cs:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        // Default replaced with the override to track unhandled exceptions
        filters.Add(new AiHandleErrorAttribute());
    }
}

Sample

API Web

Dimulai dengan Application Insights Web SDK versi 2.6 (beta 3 dan yang lebih baru), Application Insights mengumpulkan pengecualian yang tidak tertangani yang dilemparkan dalam metode pengontrol secara otomatis untuk Web API 2+. Jika sebelumnya Anda menambahkan handler kustom untuk melacak pengecualian tersebut, seperti yang dijelaskan dalam contoh berikut, Anda dapat menghapusnya untuk mencegah pelacakan ganda pengecualian.

Ada beberapa kasus yang tidak dapat ditangani oleh filter pengecualian. Contohnya:

  • Pengecualian yang dilemparkan dari konstruktor pengontrol.
  • Pengecualian yang dilemparkan dari penangan pesan.
  • Pengecualian yang dilemparkan selama perutean.
  • Pengecualian yang dilemparkan selama serialisasi konten respons.
  • Pengecualian dilemparkan selama pengaktifan aplikasi.
  • Pengecualian dilemparkan dalam tugas latar belakang.

Semua pengecualian yang ditangani oleh aplikasi masih perlu dilacak secara manual. Pengecualian yang tidak tertangani yang berasal dari pengontrol biasanya menghasilkan respons 500 "Kesalahan Server Internal". Jika respons tersebut dibuat secara manual sebagai akibat dari pengecualian yang ditangani, atau tidak ada pengecualian sama sekali, respons tersebut dicatat dalam telemetri permintaan yang sesuai dengan ResultCode 500. Namun, Application Insights SDK tidak dapat melacak pengecualian yang sesuai.

Dukungan versi sebelumnya

Jika Anda menggunakan Web API 1 (dan yang lebih lama) dari Application Insights Web SDK 2.5 (dan yang lebih lama), lihat contoh berikut untuk melacak pengecualian.


Perluas untuk melihat instruksi untuk versi sebelumnya

API Web 1.x

Timpakan System.Web.Http.Filters.ExceptionFilterAttribute:

using System.Web.Http.Filters;
using Microsoft.ApplicationInsights;

namespace WebAPI.App_Start
{
    public class AiExceptionFilterAttribute : ExceptionFilterAttribute
    {
    public override void OnException(HttpActionExecutedContext actionExecutedContext)
    {
        if (actionExecutedContext != null && actionExecutedContext.Exception != null)
        {  //Or reuse instance (recommended!). See note above.
            var ai = new TelemetryClient();
            ai.TrackException(actionExecutedContext.Exception);
        }
        base.OnException(actionExecutedContext);
    }
    }
}

Anda dapat menambahkan atribut yang di-overwrite ini ke pengontrol tertentu, atau menambahkannya ke konfigurasi filter global di kelas WebApiConfig.

using System.Web.Http;
using WebApi1.x.App_Start;

namespace WebApi1.x
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional });
    
            // ...
            config.EnableSystemDiagnosticsTracing();
    
            // Capture exceptions for Application Insights:
            config.Filters.Add(new AiExceptionFilterAttribute());
        }
    }
}

Sample

WEB API 2.x

Tambahkan implementasi dari IExceptionLogger:

using System.Web.Http.ExceptionHandling;
using Microsoft.ApplicationInsights;

namespace ProductsAppPureWebAPI.App_Start
{
    public class AiExceptionLogger : ExceptionLogger
    {
        public override void Log(ExceptionLoggerContext context)
        {
            if (context != null && context.Exception != null)
            {
                //or reuse instance (recommended!). see note above
                var ai = new TelemetryClient();
                ai.TrackException(context.Exception);
            }
            base.Log(context);
        }
    }
}

Tambahkan cuplikan ini ke layanan di WebApiConfig:

using System.Web.Http;
using System.Web.Http.ExceptionHandling;
using ProductsAppPureWebAPI.App_Start;

namespace WebApi2WithMVC
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
    
            // Web API routes
            config.MapHttpAttributeRoutes();
    
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional });

            config.Services.Add(typeof(IExceptionLogger), new AiExceptionLogger());
        }
    }
}

Sample

Sebagai alternatif, Anda dapat:

  • Ganti satu-satunya instans ExceptionHandler dengan implementasi kustom IExceptionHandler. Handler pengecualian ini hanya dipanggil ketika kerangka kerja masih dapat memilih pesan respons mana yang akan dikirim, bukan ketika koneksi dibatalkan, misalnya.
  • Gunakan filter pengecualian, seperti yang dijelaskan di bagian sebelumnya pada pengontrol Web API 1.x, yang tidak dipanggil dalam semua kasus.

WCF

Tambahkan kelas yang memperluas Attribute dan mengimplementasikan IErrorHandler dan IServiceBehavior.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.ServiceModel.Description;
    using System.ServiceModel.Dispatcher;
    using System.Web;
    using Microsoft.ApplicationInsights;

    namespace WcfService4.ErrorHandling
    {
      public class AiLogExceptionAttribute : Attribute, IErrorHandler, IServiceBehavior
      {
        public void AddBindingParameters(ServiceDescription serviceDescription,
            System.ServiceModel.ServiceHostBase serviceHostBase,
            System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints,
            System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
        {
        }

        public void ApplyDispatchBehavior(ServiceDescription serviceDescription,
            System.ServiceModel.ServiceHostBase serviceHostBase)
        {
            foreach (ChannelDispatcher disp in serviceHostBase.ChannelDispatchers)
            {
                disp.ErrorHandlers.Add(this);
            }
        }

        public void Validate(ServiceDescription serviceDescription,
            System.ServiceModel.ServiceHostBase serviceHostBase)
        {
        }

        bool IErrorHandler.HandleError(Exception error)
        {//or reuse instance (recommended!). see note above
            var ai = new TelemetryClient();

            ai.TrackException(error);
            return false;
        }

        void IErrorHandler.ProvideFault(Exception error,
            System.ServiceModel.Channels.MessageVersion version,
            ref System.ServiceModel.Channels.Message fault)
        {
        }
      }
    }

Tambahkan atribut ke implementasi layanan:

namespace WcfService4
{
    [AiLogException]
    public class Service1 : IService1
    {
        // Omitted for brevity
    }
}

Sample

Penghitung kinerja pengecualian

Jika Anda menginstal Azure Monitor Application Insights Agent di server, Anda bisa mendapatkan bagan tingkat pengecualian yang diukur dengan .NET. Pengecualian .NET, baik yang telah ditangani maupun yang belum ditangani, disertakan.

Buka tab penjelajah metrik dan tambahkan bagan baru. Di penghitung kinerja, pilih Tingkat pengecualian.

Kerangka kerja .NET menghitung laju dengan menghitung jumlah pengecualian dalam suatu interval dan membagi dengan panjang interval tersebut.

Jumlah ini berbeda dari jumlah Pengecualian yang dihitung oleh laporan penghitungan TrackException portal Application Insights. Interval pengambilan sampel berbeda, dan SDK tidak mengirim TrackException laporan untuk semua pengecualian yang ditangani dan tidak tertangani.

Pengumpulan metrik khusus

Azure Monitor Application Insights .NET dan .NET Core SDK memiliki dua metode berbeda untuk mengumpulkan metrik kustom:

  • Metode TrackMetric(), yang tidak memiliki prapenggabungan.
  • Metode GetMetric() , yang memiliki preaggregasi .

Sebaiknya gunakan agregasi, jadi TrackMetric()bukan lagi metode yang disukai untuk mengumpulkan metrik kustom. Artikel ini memandu Anda menggunakan GetMetric() dan menjelaskan beberapa alasan di balik cara kerjanya.


Perluas untuk mempelajari lebih lanjut tentang API pra-agregasi vs. tanpa pra-agregasi

Metode TrackMetric() mengirimkan telemetri mentah yang menyatakan sebuah metrik. Tidak efisien untuk mengirim satu item telemetri untuk setiap nilai. Metode TrackMetric() ini juga tidak efisien dalam hal performa karena setiap TrackMetric(item) melalui alur SDK lengkap penginisialisasi telemetri dan prosesor.

Tidak seperti TrackMetric(), GetMetric() menangani preaggregasi lokal untuk Anda dan kemudian hanya mengirimkan metrik ringkasan agregat pada interval tetap satu menit. Jika Anda perlu memantau beberapa metrik kustom dengan cermat pada tingkat detik atau bahkan milidetik, Anda dapat melakukannya sambil hanya menanggung biaya penyimpanan dan lalu lintas jaringan untuk pemantauan setiap menit. Perilaku ini juga sangat mengurangi risiko pembatasan yang terjadi karena jumlah total item telemetri yang perlu dikirim untuk metrik agregat sangat berkurang.

Di Application Insights, metrik kustom yang dikumpulkan melalui TrackMetric() dan GetMetric() tidak tunduk pada pengambilan sampel. Pengambilan sampel metrik penting dapat menyebabkan skenario di mana pemberitahuan yang dibangun di sekitar metrik tersebut menjadi tidak dapat diandalkan. Dengan tidak pernah mengambil sampel metrik kustom Anda, Anda umumnya dapat yakin bahwa ketika ambang batas peringatan Anda dilanggar, peringatan akan dikirim. Karena metrik kustom tidak diambil sampelnya, ada beberapa potensi kekhawatiran.

Pelacakan tren dalam metrik setiap detik, atau pada interval yang lebih terperinci, dapat mengakibatkan:

  • Peningkatan biaya penyimpanan data. Ada biaya yang terkait dengan berapa banyak data yang Anda kirim ke Azure Monitor. Semakin banyak data yang Anda kirim, semakin besar biaya pemantauan secara keseluruhan.
  • Peningkatan lalu lintas jaringan atau beban performa. Dalam beberapa skenario, overhead ini dapat memiliki biaya performa moneter dan aplikasi.
  • Risiko pembatasan penyerapan. Azure Monitor menjatuhkan ("membatasi") titik data saat aplikasi Anda mengirim tingkat telemetri yang tinggi dalam interval waktu yang singkat.

Pembatasan bandwidth menjadi perhatian karena dapat menyebabkan notifikasi yang terlewat. Kondisi untuk memicu pemberitahuan dapat terjadi secara lokal dan kemudian dihilangkan di titik akhir penyerapan karena terlalu banyak data yang dikirim. Kami tidak menyarankan penggunaan TrackMetric() untuk .NET dan .NET Core kecuali Anda menerapkan logika agregasi lokal Anda sendiri. Jika Anda mencoba melacak setiap instans peristiwa yang terjadi selama periode waktu tertentu, Anda mungkin menemukan bahwa TrackEvent() lebih cocok. Perlu diingat bahwa tidak seperti metrik kustom, peristiwa kustom tunduk pada pengambilan sampel. Anda masih dapat menggunakan TrackMetric() bahkan tanpa menulis preaggregasi lokal Anda sendiri. Tetapi jika Anda melakukannya, waspadalah terhadap jebakan.

Singkatnya, kami sarankan GetMetric() karena melakukan preaggregasi, ia mengumpulkan nilai dari semua Track() panggilan, dan mengirim ringkasan/agregat sekali setiap menit. Metode ini GetMetric() dapat secara signifikan mengurangi biaya dan overhead performa dengan mengirim lebih sedikit titik data sambil tetap mengumpulkan semua informasi yang relevan.

Mulai menggunakan GetMetric

Untuk contoh kami, kami akan menggunakan aplikasi layanan pekerja dasar .NET Core 3.1. Jika Anda ingin mereplikasi lingkungan pengujian yang digunakan dengan contoh ini, ikuti langkah 1-6 di bawah aplikasi .NET Core Worker Service. Langkah-langkah ini menambahkan Application Insights ke templat proyek layanan pekerja dasar. Konsep berlaku untuk aplikasi umum apa pun di mana SDK dapat digunakan, termasuk aplikasi web dan aplikasi konsol.

Mengirim metrik

Ganti konten file Anda worker.cs dengan kode berikut:

using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.ApplicationInsights;

namespace WorkerService3
{
    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;
        private TelemetryClient _telemetryClient;

        public Worker(ILogger<Worker> logger, TelemetryClient tc)
        {
            _logger = logger;
            _telemetryClient = tc;
        }

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {   // The following line demonstrates usages of GetMetric API.
            // Here "computersSold", a custom metric name, is being tracked with a value of 42 every second.
            while (!stoppingToken.IsCancellationRequested)
            {
                _telemetryClient.GetMetric("ComputersSold").TrackValue(42);

                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                await Task.Delay(1000, stoppingToken);
            }
        }
    }
}

Saat menjalankan kode sampel, Anda melihat perulangan while berulang kali dijalankan, tanpa telemetri yang dikirim di jendela output Visual Studio. Satu item telemetri dikirim setelah 60 detik, yang dalam pengujian kami terlihat seperti:

Application Insights Telemetry: {"name":"Microsoft.ApplicationInsights.Dev.00000000-0000-0000-0000-000000000000.Metric", "time":"2019-12-28T00:54:19.0000000Z",
"ikey":"00000000-0000-0000-0000-000000000000",
"tags":{"ai.application.ver":"1.0.0.0",
"ai.cloud.roleInstance":"Test-Computer-Name",
"ai.internal.sdkVersion":"m-agg2c:2.12.0-21496",
"ai.internal.nodeName":"Test-Computer-Name"},
"data":{"baseType":"MetricData",
"baseData":{"ver":2,"metrics":[{"name":"ComputersSold",
"kind":"Aggregation",
"value":1722,
"count":41,
"min":42,
"max":42,
"stdDev":0}],
"properties":{"_MS.AggregationIntervalMs":"42000",
"DeveloperMode":"true"}}}}

Item telemetri tunggal ini mewakili agregat 41 pengukuran metrik yang berbeda. Karena kami mengirim nilai yang sama berulang kali, kami memiliki simpangan baku (stDev) dengan nilai maksimum (0) dan minimum (max) yang identik min. Properti value mewakili jumlah semua nilai individual yang dikumpulkan.

Nota

Metode GetMetric ini tidak mendukung pelacakan nilai terakhir (misalnya, gauge) atau melacak histogram atau distribusi.

Jika kita memeriksa sumber daya Application Insights dalam pengalaman Log (Analytics), item telemetri individual akan terlihat seperti cuplikan layar berikut.

Cuplikan layar yang memperlihatkan tampilan kueri Analitik Log.

Nota

Meskipun item telemetri mentah tidak berisi properti/bidang jumlah eksplisit ketika diproses, kami membuatnya untuk Anda. Dalam hal ini, properti value dan valueSum mewakili hal yang sama.

Anda juga dapat mengakses telemetri metrik kustom di bagian Metrik portal sebagai metrik berbasis log dan kustom. Cuplikan layar berikut adalah contoh metrik berbasis log.

Cuplikan layar yang memperlihatkan tampilan Penjelajah metrik.

Referensi metrik cache untuk pemrosesan berkapasitas tinggi

Nilai metrik mungkin sering diamati dalam beberapa kasus. Misalnya, layanan throughput tinggi yang memproses 500 permintaan per detik mungkin ingin memancarkan 20 metrik telemetri untuk setiap permintaan. Hasilnya berarti melacak 10.000 nilai per detik. Dalam skenario throughput tinggi seperti itu, pengguna mungkin perlu membantu SDK dengan menghindari beberapa pencarian.

Misalnya, contoh sebelumnya melakukan pencarian pegangan untuk metrik ComputersSold lalu melacak nilai yang diamati dari 42. Sebaliknya, handle mungkin di-cache untuk beberapa kali pemanggilan trek.

//...

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            // This is where the cache is stored to handle faster lookup
            Metric computersSold = _telemetryClient.GetMetric("ComputersSold");
            while (!stoppingToken.IsCancellationRequested)
            {

                computersSold.TrackValue(42);

                computersSold.TrackValue(142);

                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                await Task.Delay(50, stoppingToken);
            }
        }

Selain penembolokan handel metrik, contoh sebelumnya juga mengurangi Task.Delay menjadi 50 milidetik sehingga perulangan akan dieksekusi lebih sering. Hasilnya adalah 772 TrackValue() pemanggilan.

Metrik multidireksional

Contoh di bagian sebelumnya menunjukkan metrik nol dimensi. Metrik juga bisa multidimensional. Saat ini kami mendukung hingga 10 dimensi.

Berikut adalah contoh cara membuat metrik satu dimensi:

//...

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            // This is an example of a metric with a single dimension.
            // FormFactor is the name of the dimension.
            Metric computersSold= _telemetryClient.GetMetric("ComputersSold", "FormFactor");

            while (!stoppingToken.IsCancellationRequested)
            {
                // The number of arguments (dimension values)
                // must match the number of dimensions specified while GetMetric.
                // Laptop, Tablet, etc are values for the dimension "FormFactor"
                computersSold.TrackValue(42, "Laptop");
                computersSold.TrackValue(20, "Tablet");
                computersSold.TrackValue(126, "Desktop");


                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                await Task.Delay(50, stoppingToken);
            }
        }

Menjalankan kode sampel setidaknya selama 60 detik menghasilkan tiga item telemetri berbeda yang dikirim ke Azure. Setiap item mewakili agregasi salah satu dari tiga faktor bentuk. Seperti sebelumnya, Anda dapat memeriksa lebih lanjut dalam tampilan Log (Analitik).

Cuplikan layar yang memperlihatkan tampilan Analitik Log metrik multidimensi.

Dalam penjelajah metrik:

Cuplikan layar yang memperlihatkan Metrik kustom.

Perhatikan bahwa Anda tidak dapat membagi metrik berdasarkan dimensi kustom baru Anda atau melihat dimensi kustom Anda dengan tampilan metrik.

Cuplikan layar yang memperlihatkan dukungan pemisahan.

Secara bawaan, metrik multidimensi dalam penjelajah metrik tidak diaktifkan di sumber daya Application Insights.

Mengaktifkan metrik multidireksional

Untuk mengaktifkan metrik multidimensi untuk sumber daya Application Insights, pilih Penggunaan dan perkiraan biaya>Metrik> KustomAktifkan pemberitahuan pada dimensi> metrik kustomOK. Untuk informasi selengkapnya, lihat Dimensi metrik kustom dan preaggregasi.

Setelah Anda membuat perubahan itu dan mengirim telemetri multidimensi baru, Anda dapat memilih Terapkan pemisahan.

Nota

Hanya metrik yang baru dikirim setelah fitur diaktifkan di portal yang dimensinya disimpan.

Cuplikan layar yang memperlihatkan penerapan pemisahan.

Lihat agregasi metrik Anda untuk setiap FormFactor dimensi.

Cuplikan layar yang memperlihatkan bentuk fisik.

Gunakan MetricIdentifier saat ada lebih dari tiga dimensi

Saat ini, 10 dimensi didukung. Menggunakan lebih dari tiga dimensi memerlukan penggunaan MetricIdentifier:

// Add "using Microsoft.ApplicationInsights.Metrics;" to use MetricIdentifier
// MetricIdentifier id = new MetricIdentifier("[metricNamespace]","[metricId],"[dim1]","[dim2]","[dim3]","[dim4]","[dim5]");
MetricIdentifier id = new MetricIdentifier("CustomMetricNamespace","ComputerSold", "FormFactor", "GraphicsCard", "MemorySpeed", "BatteryCapacity", "StorageCapacity");
Metric computersSold = _telemetryClient.GetMetric(id);
computersSold.TrackValue(110,"Laptop", "Nvidia", "DDR4", "39Wh", "1TB");

Konfigurasi metrik khusus

Jika Anda ingin mengubah konfigurasi metrik, Anda harus membuat perubahan di tempat metrik diinisialisasi.

Nama dimensi khusus

Metrik tidak menggunakan konteks telemetri dari TelemetryClient yang digunakan untuk mengaksesnya. Menggunakan nama dimensi khusus yang tersedia sebagai konstanta di MetricDimensionNames kelas adalah solusi terbaik untuk batasan ini.

Agregat metrik yang dikirim oleh metrik berikut Special Operation Request Sizetidak diatur Context.Operation.Name ke Special Operation. Metode TrackMetric() atau metode TrackXXX() yang lain sudah diatur OperationName dengan benar ke Special Operation.

        //...
        TelemetryClient specialClient;
        private static int GetCurrentRequestSize()
        {
            // Do stuff
            return 1100;
        }
        int requestSize = GetCurrentRequestSize()

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                //...
                specialClient.Context.Operation.Name = "Special Operation";
                specialClient.GetMetric("Special Operation Request Size").TrackValue(requestSize);
                //...
            }
                   
        }

Dalam keadaan ini, gunakan nama dimensi khusus yang tercantum di MetricDimensionNames kelas untuk menentukan TelemetryContext nilai.

Misalnya, ketika agregat metrik yang dihasilkan dari pernyataan berikutnya dikirim ke titik akhir cloud Application Insights, bidang datanya Context.Operation.Name diatur ke Special Operation:

_telemetryClient.GetMetric("Request Size", MetricDimensionNames.TelemetryContext.Operation.Name).TrackValue(requestSize, "Special Operation");

Nilai dimensi khusus ini disalin ke dalam TelemetryContext dan tidak digunakan sebagai dimensi normal . Jika Anda ingin juga menyimpan dimensi operasi untuk eksplorasi metrik normal, Anda perlu membuat dimensi terpisah untuk tujuan tersebut:

_telemetryClient.GetMetric("Request Size", "Operation Name", MetricDimensionNames.TelemetryContext.Operation.Name).TrackValue(requestSize, "Special Operation", "Special Operation");
Pembatasan dimensi dan rangkaian waktu

Untuk mencegah subsistem telemetri tidak sengaja menggunakan sumber daya, Anda dapat mengontrol jumlah maksimum seri data per metrik. Batas default tidak lebih dari 1.000 total seri data per metrik, dan tidak lebih dari 100 nilai yang berbeda per dimensi.

Penting

Gunakan nilai kardinal rendah untuk dimensi untuk menghindari pembatasan.

Dalam konteks pembatasan dimensi dan rangkaian waktu, kami menggunakan Metric.TrackValue(..) untuk memastikan bahwa batas diamati. Jika batas sudah tercapai, Metric.TrackValue(..) mengembalikan False dan nilainya tidak dilacak. Jika tidak, itu mengembalikan True. Perilaku ini berguna jika data untuk metrik berasal dari input pengguna.

MetricConfiguration Konstruktor memperoleh beberapa opsi mengenai cara mengelola seri yang berbeda dalam masing-masing metrik dan sebuah objek dari kelas yang menerapkan IMetricSeriesConfiguration yang menentukan perilaku agregasi untuk setiap seri dari metrik tersebut:

var metConfig = new MetricConfiguration(seriesCountLimit: 100, valuesPerDimensionLimit:2,
                new MetricSeriesConfigurationForMeasurement(restrictToUInt32Values: false));

Metric computersSold = _telemetryClient.GetMetric("ComputersSold", "Dimension1", "Dimension2", metConfig);

// Start tracking.
computersSold.TrackValue(100, "Dim1Value1", "Dim2Value1");
computersSold.TrackValue(100, "Dim1Value1", "Dim2Value2");

// The following call gives 3rd unique value for dimension2, which is above the limit of 2.
computersSold.TrackValue(100, "Dim1Value1", "Dim2Value3");
// The above call doesn't track the metric, and returns false.
  • seriesCountLimit adalah jumlah maksimum rangkaian waktu data yang dapat dimuat metrik. Ketika batas ini tercapai, panggilan ke TrackValue() yang biasanya akan menghasilkan seri baru, mengembalikan false.
  • valuesPerDimensionLimit membatasi jumlah nilai yang berbeda per dimensi dengan cara yang sama.
  • restrictToUInt32Values menentukan apakah hanya nilai bilangan bulat non-negatif yang harus dilacak atau tidak.

Berikut adalah contoh cara mengirim pesan untuk mengetahui apakah batas batas batas terlampaui:

if (! computersSold.TrackValue(100, "Dim1Value1", "Dim2Value3"))
{
// Add "using Microsoft.ApplicationInsights.DataContract;" to use SeverityLevel.Error
_telemetryClient.TrackTrace("Metric value not tracked as value of one of the dimension exceeded the cap. Revisit the dimensions to ensure they are within the limits",
SeverityLevel.Error);
}

Pelacakan operasi khusus

Application Insights SDK secara otomatis melacak permintaan HTTP masuk dan panggilan ke layanan dependen, seperti permintaan HTTP dan kueri SQL. Pelacakan dan korelasi permintaan dan dependensi memberi Anda visibilitas ke seluruh responsivitas dan keandalan aplikasi di semua layanan mikro yang menggabungkan aplikasi ini.

Ada kelas pola aplikasi yang tidak dapat didukung secara generis. Pemantauan yang tepat dari pola tersebut memerlukan instrumentasi kode manual. Bagian ini mencakup beberapa pola yang mungkin memerlukan instrumentasi manual, seperti pemrosesan antrean kustom dan menjalankan tugas latar belakang yang berjalan lama.

Bagian ini menyediakan panduan tentang cara melacak operasi kustom dengan Application Insights SDK.

Ikhtisar

Operasi adalah bagian logis dari pekerjaan yang dijalankan oleh aplikasi. Ini memiliki nama, waktu mulai, durasi, hasil, dan konteks eksekusi seperti nama pengguna, properti, dan hasil. Jika operasi A dimulai oleh operasi B, maka operasi B dianggap sebagai induk operasi untuk A. Operasi hanya dapat memiliki satu induk operasi, tetapi dapat memiliki banyak operasi turunan. Untuk informasi selengkapnya tentang operasi dan korelasi telemetri, lihat Korelasi telemetri Application Insights.

Dalam Application Insights .NET SDK, operasi ini dijelaskan oleh kelas abstrak OperationTelemetry dan turunannya RequestTelemetry dan DependencyTelemetry.

Pelacakan operasi masuk

SDK web Application Insights secara otomatis mengumpulkan permintaan HTTP untuk aplikasi ASP.NET yang berjalan dalam alur IIS dan semua aplikasi ASP.NET Core. Ada solusi yang didukung komunitas untuk platform dan kerangka kerja lain. Jika aplikasi tidak didukung oleh salah satu solusi standar atau yang didukung komunitas, Anda dapat menginstrumentasinya secara manual.

Contoh lain yang memerlukan pelacakan kustom adalah pekerja yang menerima item dari antrean. Untuk beberapa antrean, panggilan untuk menambahkan pesan ke antrean ini dilacak sebagai dependensi. Operasi tingkat tinggi yang menjelaskan pemrosesan pesan tidak dikumpulkan secara otomatis.

Mari kita lihat bagaimana operasi tersebut dapat dilacak.

Pada tingkat tinggi, tugasnya adalah membuat RequestTelemetry dan mengatur properti yang diketahui. Setelah operasi selesai, Anda melacak telemetri. Contoh berikut menunjukkan tugas ini.

Permintaan HTTP di aplikasi yang dihost sendiri Owin

Dalam contoh ini, konteks pelacakan disebarluaskan sesuai dengan Protokol HTTP untuk Korelasi. Anda harus mengharapkan menerima header yang dijelaskan di sana.


Perluas untuk menampilkan kode
public class ApplicationInsightsMiddleware : OwinMiddleware
{
    // You may create a new TelemetryConfiguration instance, reuse one you already have,
    // or fetch the instance created by Application Insights SDK.
    private readonly TelemetryConfiguration telemetryConfiguration = TelemetryConfiguration.CreateDefault();
    private readonly TelemetryClient telemetryClient = new TelemetryClient(telemetryConfiguration);
    
    public ApplicationInsightsMiddleware(OwinMiddleware next) : base(next) {}

    public override async Task Invoke(IOwinContext context)
    {
        // Let's create and start RequestTelemetry.
        var requestTelemetry = new RequestTelemetry
        {
            Name = $"{context.Request.Method} {context.Request.Uri.GetLeftPart(UriPartial.Path)}"
        };

        // If there is a Request-Id received from the upstream service, set the telemetry context accordingly.
        if (context.Request.Headers.ContainsKey("Request-Id"))
        {
            var requestId = context.Request.Headers.Get("Request-Id");
            // Get the operation ID from the Request-Id (if you follow the HTTP Protocol for Correlation).
            requestTelemetry.Context.Operation.Id = GetOperationId(requestId);
            requestTelemetry.Context.Operation.ParentId = requestId;
        }

        // StartOperation is a helper method that allows correlation of 
        // current operations with nested operations/telemetry
        // and initializes start time and duration on telemetry items.
        var operation = telemetryClient.StartOperation(requestTelemetry);

        // Process the request.
        try
        {
            await Next.Invoke(context);
        }
        catch (Exception e)
        {
            requestTelemetry.Success = false;
            requestTelemetry.ResponseCode;
            telemetryClient.TrackException(e);
            throw;
        }
        finally
        {
            // Update status code and success as appropriate.
            if (context.Response != null)
            {
                requestTelemetry.ResponseCode = context.Response.StatusCode.ToString();
                requestTelemetry.Success = context.Response.StatusCode >= 200 && context.Response.StatusCode <= 299;
            }
            else
            {
                requestTelemetry.Success = false;
            }

            // Now it's time to stop the operation (and track telemetry).
            telemetryClient.StopOperation(operation);
        }
    }
    
    public static string GetOperationId(string id)
    {
        // Returns the root ID from the '|' to the first '.' if any.
        int rootEnd = id.IndexOf('.');
        if (rootEnd < 0)
            rootEnd = id.Length;

        int rootStart = id[0] == '|' ? 1 : 0;
        return id.Substring(rootStart, rootEnd - rootStart);
    }
}

Protokol HTTP untuk Korelasi juga mendeklarasikan Correlation-Context header. Ini dihilangkan di sini untuk kesederhanaan.

Instrumentasi antrean

Konteks Pelacakan W3C dan Protokol HTTP untuk Korelasi meneruskan detail korelasi dengan permintaan-permintaan HTTP, tetapi setiap protokol antrean harus mendefinisikan bagaimana detail yang sama diteruskan melalui pesan antrean. Beberapa protokol antrean, seperti AMQP, memungkinkan melewati lebih banyak metadata. Protokol lain, seperti Azure Storage Queue, memerlukan agar konteks dikodekan ke dalam payload pesan.

Nota

Pelacakan lintas komponen saat ini belum didukung untuk antrean.

Dengan HTTP, jika produsen dan konsumen Anda mengirim telemetri ke sumber daya Application Insights yang berbeda, pengalaman diagnostik transaksi dan Peta Aplikasi menampilkan transaksi dan memetakan secara menyeluruh. Untuk antrean, kemampuan ini belum didukung.

Antrian Bus Layanan

Untuk informasi pelacakan, lihat pelacakan terdistribusi dan korelasi melalui pengiriman pesan Azure Service Bus.

Azure Storage Queue

Contoh berikut menunjukkan cara melacak operasi antrean Azure Storage dan menghubungkan telemetri antara produsen, konsumen, dan Azure Storage.

Antrean penyimpanan memiliki API HTTP. Semua panggilan ke antrean dilacak oleh Dependency Collector dari Application Insights untuk permintaan HTTP. Ini dikonfigurasi secara default pada aplikasi ASP.NET dan ASP.NET Core. Dengan jenis aplikasi lain, lihat dokumentasi aplikasi Konsol.

Anda mungkin juga ingin menghubungkan ID operasi Application Insights dengan ID permintaan Penyimpanan. Untuk informasi tentang cara mengatur dan mendapatkan klien permintaan Penyimpanan dan ID permintaan server, lihat Memantau, mendiagnosis, dan memecahkan masalah Azure Storage.

Antrean

Karena antrean Storage mendukung API HTTP, semua operasi dengan antrean secara otomatis dilacak oleh Application Insights. Dalam banyak kasus, instrumentasi ini harus cukup. Untuk menghubungkan jejak di sisi konsumen dengan jejak produsen, Anda harus melewati beberapa konteks korelasi yang mirip dengan cara kami melakukannya dalam Protokol HTTP untuk Korelasi.

Contoh ini menunjukkan cara melacak operasi Enqueue. Kamu bisa:

  • Menghubungkan retry (jika ada): Semuanya memiliki satu induk bersama yaitu operasi Enqueue. Jika tidak, mereka dilacak sebagai anak dari permintaan masuk. Jika ada beberapa permintaan logis ke antrean, mungkin sulit untuk menemukan panggilan mana yang mengakibatkan percobaan ulang.
  • Menghubungkan log Penyimpanan (jika dan jika diperlukan): Log tersebut berkorelasi dengan telemetri Application Insights.

Operasi Enqueue ini adalah turunan dari operasi induk. Contohnya adalah permintaan HTTP masuk. Panggilan dependensi HTTP merupakan bagian dari operasi Enqueue dan cucu dari permintaan masuk.

public async Task Enqueue(CloudQueue queue, string message)
{
    var operation = telemetryClient.StartOperation<DependencyTelemetry>("enqueue " + queue.Name);
    operation.Telemetry.Type = "Azure queue";
    operation.Telemetry.Data = "Enqueue " + queue.Name;

    // MessagePayload represents your custom message and also serializes correlation identifiers into payload.
    // For example, if you choose to pass payload serialized to JSON, it might look like
    // {'RootId' : 'some-id', 'ParentId' : '|some-id.1.2.3.', 'message' : 'your message to process'}
    var jsonPayload = JsonConvert.SerializeObject(new MessagePayload
    {
        RootId = operation.Telemetry.Context.Operation.Id,
        ParentId = operation.Telemetry.Id,
        Payload = message
    });
    
    CloudQueueMessage queueMessage = new CloudQueueMessage(jsonPayload);

    // Add operation.Telemetry.Id to the OperationContext to correlate Storage logs and Application Insights telemetry.
    OperationContext context = new OperationContext { ClientRequestID = operation.Telemetry.Id};

    try
    {
        await queue.AddMessageAsync(queueMessage, null, null, new QueueRequestOptions(), context);
    }
    catch (StorageException e)
    {
        operation.Telemetry.Properties.Add("AzureServiceRequestID", e.RequestInformation.ServiceRequestID);
        operation.Telemetry.Success = false;
        operation.Telemetry.ResultCode = e.RequestInformation.HttpStatusCode.ToString();
        telemetryClient.TrackException(e);
    }
    finally
    {
        // Update status code and success as appropriate.
        telemetryClient.StopOperation(operation);
    }
}  

Untuk mengurangi jumlah telemetri yang dilaporkan aplikasi Anda atau jika Anda tidak ingin melacak operasi karena Enqueue alasan lain, gunakan Activity API secara langsung:

  • Buat (dan mulai) sebuah Activity baru alih-alih memulai operasi Application Insights. Anda tidak perlu menetapkan properti apa pun di dalamnya kecuali nama operasi.
  • Serialisasi yourActivity.Id ke dalam payload pesan alih-alih operation.Telemetry.Id. Anda juga dapat menggunakan Activity.Current.Id.
Keluarkan dari antrean

Demikian pula dengan Enqueue, permintaan HTTP sebenarnya ke antrean Storage secara otomatis dilacak oleh Application Insights. Enqueue Operasi ini mungkin terjadi dalam konteks induk, seperti konteks permintaan masuk. Application Insights SDK secara otomatis menghubungkan operasi seperti itu, dan bagian HTTP-nya, dengan permintaan induk dan telemetri lain yang dilaporkan dalam cakupan yang sama.

Operasi Dequeue ini sulit. Application Insights SDK secara otomatis melacak permintaan HTTP. Tetapi tidak tahu konteks korelasi sampai pesan diurai. Tidak dimungkinkan untuk menghubungkan permintaan HTTP untuk mendapatkan pesan dengan telemetri lainnya, terutama ketika lebih dari satu pesan diterima.

public async Task<MessagePayload> Dequeue(CloudQueue queue)
{
    var operation = telemetryClient.StartOperation<DependencyTelemetry>("dequeue " + queue.Name);
    operation.Telemetry.Type = "Azure queue";
    operation.Telemetry.Data = "Dequeue " + queue.Name;

    try
    {
        var message = await queue.GetMessageAsync();
    }
    catch (StorageException e)
    {
        operation.telemetry.Properties.Add("AzureServiceRequestID", e.RequestInformation.ServiceRequestID);
        operation.telemetry.Success = false;
        operation.telemetry.ResultCode = e.RequestInformation.HttpStatusCode.ToString();
        telemetryClient.TrackException(e);
    }
    finally
    {
        // Update status code and success as appropriate.
        telemetryClient.StopOperation(operation);
    }

    return null;
}
Proses

Dalam contoh berikut, pesan masuk dilacak dengan cara yang mirip dengan permintaan HTTP masuk:

public async Task Process(MessagePayload message)
{
    // After the message is dequeued from the queue, create RequestTelemetry to track its processing.
    RequestTelemetry requestTelemetry = new RequestTelemetry { Name = "process " + queueName };
    
    // It might also make sense to get the name from the message.
    requestTelemetry.Context.Operation.Id = message.RootId;
    requestTelemetry.Context.Operation.ParentId = message.ParentId;

    var operation = telemetryClient.StartOperation(requestTelemetry);

    try
    {
        await ProcessMessage();
    }
    catch (Exception e)
    {
        telemetryClient.TrackException(e);
        throw;
    }
    finally
    {
        // Update status code and success as appropriate.
        telemetryClient.StopOperation(operation);
    }
}

Demikian pula, operasi antrean lainnya dapat diinstrumentasikan. Operasi intip harus diinstrumentasikan dengan cara yang sama seperti operasi penghapusan antrean. Operasi manajemen antrean instrumenting tidak diperlukan. Application Insights melacak operasi seperti HTTP, dan dalam banyak kasus, itu sudah cukup.

Saat Anda melakukan instrumentasi untuk penghapusan pesan, pastikan Anda mengatur pengidentifikasi operasi (korelasi). Atau, Anda dapat menggunakan Activity API. Kemudian Anda tidak perlu mengatur pengidentifikasi operasi pada item telemetri karena Application Insights SDK melakukannya untuk Anda:

  • Buat elemen baru Activity setelah Anda mendapatkan item dari antrean.
  • Gunakan Activity.SetParentId(message.ParentId) untuk menghubungkan log konsumen dan produsen.
  • Mulai Activity.
  • Lacak operasi pelepasan dari antrean, pemrosesan, dan penghapusan dengan menggunakan pembantu Start/StopOperation. Lakukan dari alur kontrol asinkron yang sama (konteks eksekusi). Dengan cara ini, mereka berkorelasi dengan benar.
  • Hentikan Activity.
  • Gunakan Start/StopOperation atau panggil Track telemetri secara manual.
Jenis dependensi

Application Insights menggunakan jenis dependensi untuk menyesuaikan pengalaman UI. Untuk antrian, ia mengenali jenis berikut yang DependencyTelemetry meningkatkan pengalaman diagnostik transaksi:

  • Azure queue untuk antrean Azure Storage
  • Azure Event Hubs untuk Azure Event Hubs
  • Azure Service Bus untuk Azure Service Bus
Pemrosesan kelompok

Dengan beberapa antrean, Anda dapat menghapus antrean beberapa pesan dengan satu permintaan. Pemrosesan pesan tersebut mungkin independen dan termasuk dalam berbagai operasi logis. Tidak dimungkinkan untuk menghubungkan operasi dengan Dequeue pesan tertentu yang sedang diproses.

Setiap pesan harus diproses dalam alur kontrol asinkronnya sendiri. Untuk informasi selengkapnya, lihat bagian Pelacakan dependensi eksternal.

Tugas latar belakang yang berjalan lama

Beberapa aplikasi memulai operasi jangka panjang yang mungkin disebabkan oleh permintaan pengguna. Dari perspektif pelacakan/instrumentasi, tidak berbeda dari instrumentasi permintaan atau dependensi:

async Task BackgroundTask()
{
    var operation = telemetryClient.StartOperation<DependencyTelemetry>(taskName);
    operation.Telemetry.Type = "Background";
    try
    {
        int progress = 0;
        while (progress < 100)
        {
            // Process the task.
            telemetryClient.TrackTrace($"done {progress++}%");
        }
        // Update status code and success as appropriate.
    }
    catch (Exception e)
    {
        telemetryClient.TrackException(e);
        // Update status code and success as appropriate.
        throw;
    }
    finally
    {
        telemetryClient.StopOperation(operation);
    }
}

Dalam contoh ini, telemetryClient.StartOperation membuat DependencyTelemetry dan mengisi konteks korelasi. Katakanlah Anda memiliki operasi induk yang dibuat oleh permintaan masuk yang memicu penjadwalan operasi tersebut. BackgroundTask Asalkan dimulai dalam alur kontrol asinkron yang sama dengan permintaan masuk, itu akan berkorelasi dengan operasi induk tersebut. BackgroundTask dan semua item telemetri berlapis secara otomatis berkorelasi dengan permintaan yang menyebabkannya, bahkan setelah permintaan berakhir.

Ketika tugas dimulai dari utas latar belakang yang tidak memiliki operasi apa pun (Activity) yang terkait dengannya, BackgroundTask tidak memiliki induk apa pun. Namun, itu dapat memiliki operasi berlapis. Semua item telemetri yang dilaporkan dari tugas berkorelasi dengan DependencyTelemetry yang dibuat di BackgroundTask.

Pelacakan dependensi yang keluar

Anda dapat melacak jenis dependensi Anda sendiri atau operasi yang tidak didukung oleh Application Insights.

Metode Enqueue dalam antrean Azure Service Bus atau antrean Azure Storage dapat berfungsi sebagai contoh untuk pelacakan kustom tersebut.

Pendekatan umum untuk pelacakan dependensi kustom adalah untuk:

  • TelemetryClient.StartOperation Panggil metode (ekstensi) yang mengisi DependencyTelemetry properti yang diperlukan untuk korelasi dan beberapa properti lainnya, seperti mulai, stempel waktu, dan durasi.
  • Atur properti kustom lainnya pada DependencyTelemetry, seperti nama dan konteks lain yang Anda butuhkan.
  • Lakukan panggilan dependensi dan tunggu hasilnya.
  • Hentikan operasi dengan StopOperation ketika selesai.
  • Menangani pengecualian.
public async Task RunMyTaskAsync()
{
    using (var operation = telemetryClient.StartOperation<DependencyTelemetry>("task 1"))
    {
        try 
        {
            var myTask = await StartMyTaskAsync();
            // Update status code and success as appropriate.
        }
        catch(...) 
        {
            // Update status code and success as appropriate.
        }
    }
}

Membuang operasi menyebabkan operasi berhenti, sehingga Anda mungkin melakukannya alih-alih memanggil StopOperation.

Peringatan

Dalam beberapa kasus, pengecualian yang tidak tertangani mungkin mencegah dipanggilfinally, sehingga operasi mungkin tidak dilacak.

Pemrosesan dan pelacakan operasi paralel

Pemanggilan StopOperation hanya menghentikan operasi yang telah dimulai. Jika operasi yang sedang berjalan saat ini tidak cocok dengan operasi yang ingin Anda hentikan, StopOperation tidak melakukan apa pun. Situasi ini mungkin terjadi jika Anda memulai beberapa operasi secara paralel dalam konteks eksekusi yang sama.

var firstOperation = telemetryClient.StartOperation<DependencyTelemetry>("task 1");
var firstTask = RunMyTaskAsync();

var secondOperation = telemetryClient.StartOperation<DependencyTelemetry>("task 2");
var secondTask = RunMyTaskAsync();

await firstTask;

// FAILURE!!! This will do nothing and will not report telemetry for the first operation
// as currently secondOperation is active.
telemetryClient.StopOperation(firstOperation); 

await secondTask;

Pastikan Anda selalu memanggil StartOperation dan memproses operasi dalam metode asinkron yang sama untuk mengisolasi operasi yang berjalan secara paralel. Jika operasi bersifat sinkron (atau bukan asinkron), bungkus proses dan lacak dengan Task.Run.

public void RunMyTask(string name)
{
    using (var operation = telemetryClient.StartOperation<DependencyTelemetry>(name))
    {
        Process();
        // Update status code and success as appropriate.
    }
}

public async Task RunAllTasks()
{
    var task1 = Task.Run(() => RunMyTask("task 1"));
    var task2 = Task.Run(() => RunMyTask("task 2"));
    
    await Task.WhenAll(task1, task2);
}

Operasi pada ApplicationInsights vs. System.Diagnostics.Activity

System.Diagnostics.Activity mewakili konteks pelacakan terdistribusi dan digunakan oleh kerangka kerja dan pustaka untuk membuat dan menyebarkan konteks di dalam dan di luar proses dan menghubungkan item telemetri. Activity bekerja sama dengan System.Diagnostics.DiagnosticSource sebagai mekanisme pemberitahuan antara kerangka kerja/pustaka untuk memberi tahu tentang peristiwa menarik seperti permintaan masuk atau keluar dan pengecualian.

Aktivitas adalah fitur tingkat atas di Application Insights. Dependensi otomatis dan pengumpulan permintaan sangat bergantung pada mereka bersama dengan DiagnosticSource peristiwa. Jika Anda membuat Activity di aplikasi Anda, itu tidak akan menghasilkan telemetri Application Insights. Application Insights perlu menerima peristiwa DiagnosticSource, dan mengetahui nama peristiwa serta muatan untuk menerjemahkan Activity ke dalam telemetri.

Setiap operasi Application Insights (permintaan atau dependensi) melibatkan Activity. Ketika StartOperation dipanggil, itu menciptakan Activity di bawahnya. StartOperation adalah cara yang disarankan untuk melacak telemetri permintaan atau dependensi secara manual dan memastikan semuanya berkorelasi.

Counter

Application Insights mendukung penghitung kinerja dan penghitung peristiwa. Panduan ini memberikan gambaran umum tentang keduanya, termasuk tujuan, konfigurasi, dan penggunaannya dalam aplikasi .NET.

  • Penghitung kinerja dibangun ke dalam sistem operasi Windows dan menawarkan metrik yang telah ditentukan sebelumnya seperti penggunaan CPU, konsumsi memori, dan aktivitas disk. Penghitung ini sangat ideal untuk memantau metrik performa standar dengan pengaturan minimal. Mereka membantu melacak pemanfaatan sumber daya atau memecahkan masalah hambatan tingkat sistem di aplikasi berbasis Windows tetapi tidak mendukung metrik khusus aplikasi kustom.

  • Penghitung peristiwa berfungsi di beberapa platform, termasuk Windows, Linux, dan macOS. Mereka memungkinkan pengembang untuk menentukan dan memantau metrik khusus aplikasi yang ringan dan dapat disesuaikan, memberikan lebih banyak fleksibilitas daripada penghitung kinerja. Penghitung peristiwa berguna ketika metrik sistem tidak mencukup atau ketika telemetri terperinci diperlukan dalam aplikasi lintas platform. Mereka memerlukan implementasi dan konfigurasi eksplisit, yang membuat penyiapan lebih intensif.

Penghitung kinerja

Windows menyediakan berbagai penghitung kinerja, seperti yang digunakan untuk mengumpulkan statistik penggunaan prosesor, memori, dan disk. Anda juga dapat menentukan penghitung kinerja Anda sendiri.

Aplikasi Anda mendukung pengumpulan penghitung kinerja jika berjalan di bawah Internet Information Server (IIS) pada host lokal atau komputer virtual dengan akses administratif. Aplikasi yang berjalan sebagai Azure Web Apps tidak bisa langsung mengakses penghitung kinerja, tetapi Application Insights mengumpulkan sebagian dari penghitung yang tersedia.

Petunjuk / Saran

Seperti metrik lain, Anda dapat mengatur pemberitahuan untuk memperingatkan jika penghitung berada di luar batas yang ditentukan. Untuk mengatur pemberitahuan, buka panel Pemberitahuan dan pilih Tambahkan Pemberitahuan.

Prasyarat

Berikan izin akun layanan kumpulan aplikasi untuk memantau penghitung kinerja dengan menambahkannya ke grup Pengguna Monitor Performa .

net localgroup "Performance Monitor Users" /add "IIS APPPOOL\NameOfYourPool"
Lihat penghitung

Panel Metrik memperlihatkan kumpulan penghitung kinerja default.

ASP.NET

Penghitung default untuk aplikasi web ASP.NET:

  • % Waktu Proses\Prosesor
  • % Waktu Proses\Prosesor Dinormalisasi
  • Memori\Byte yang Tersedia
  • Permintaan ASP.NET/Detik
  • Pengecualian .NET Common Language Runtime (CLR) Terjadi / detik
  • Waktu Eksekusi Permintaan Aplikasi ASP.NET
  • Proses\Bytes Privat
  • Proses\IO Data Byte/detik
  • Aplikasi ASP.NET\Permintaan Dalam Antrian Aplikasi
  • Prosesor(_Total)\% Waktu Prosesor
ASP.NET Core

Penghitung default untuk aplikasi web ASP.NET Core:

  • % Waktu Proses\Prosesor
  • % Waktu Proses\Prosesor Dinormalisasi
  • Memori\Byte yang Tersedia
  • Proses\Bytes Privat
  • Proses\IO Data Byte/detik
  • Prosesor(_Total)\% Waktu Prosesor

Nota

Dukungan untuk penghitung kinerja di ASP.NET Core terbatas:

  • SDK versi 2.4.1 dan yang lebih baru mengumpulkan penghitung kinerja jika aplikasi berjalan di Azure Web Apps (Windows).
  • SDK versi 2.7.1 dan yang lebih baru mengumpulkan penghitung kinerja jika aplikasi berjalan di Windows dan menargetkan NETSTANDARD2.0 atau yang lebih baru.
  • Untuk aplikasi yang menargetkan .NET Framework, semua versi SDK mendukung penghitung kinerja.
  • SDK versi 2.8.0 dan yang lebih baru mendukung penghitung CPU/Memori di Linux. Tidak ada penghitung lain yang didukung di Linux. Untuk mendapatkan penghitung sistem di Linux (dan lingkungan non-Windows lainnya), gunakan penghitung peristiwa.
Menambahkan penghitung

Jika penghitung kinerja yang Anda inginkan tidak disertakan dalam daftar metrik, Anda dapat menambahkannya.

ASP.NET

Opsi 1: Konfigurasi di ApplicationInsights.config

  1. Cari tahu penghitung apa yang tersedia di server Anda dengan menggunakan perintah PowerShell ini di server lokal:

    Get-Counter -ListSet *
    

    Untuk informasi selengkapnya, lihat Get-Counter .

  2. Buka ApplicationInsights.config.

    Jika Anda menambahkan Application Insights ke aplikasi Anda selama pengembangan:

    1. Edit ApplicationInsights.config di proyek Anda.
    2. Sebarkan ulang ke server Anda.
  3. Sunting instruksi pengumpul kinerja:

    
        <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
          <Counters>
            <Add PerformanceCounter="\Objects\Processes"/>
            <Add PerformanceCounter="\Sales(photo)\# Items Sold" ReportAs="Photo sales"/>
          </Counters>
        </Add>
    

Anda mengumpulkan penghitung standar dan penghitung yang Anda terapkan sendiri. \Objects\Processes adalah contoh penghitung standar yang tersedia di semua sistem Windows. \Sales(photo)\# Items Sold adalah contoh penghitung kustom yang mungkin diterapkan dalam layanan web.

Formatnya adalah \Category(instance)\Counter, atau untuk kategori yang tidak memiliki instans, hanya \Category\Counter.

Parameter ReportAs diperlukan untuk nama penghitung yang tidak cocok [a-zA-Z()/-_ \.]+.

Jika Anda menentukan instans, instans tersebut menjadi dimensi CounterInstanceName metrik yang dilaporkan.

Opsi 2: Konfigurasi dalam kode

Lihat bagian berikut.

ASP.NET Core

Konfigurasikan PerformanceCollectorModule setelah metode WebApplication.CreateBuilder() di Program.cs:

using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// The following configures PerformanceCollectorModule.

builder.Services.ConfigureTelemetryModule<PerformanceCollectorModule>((module, o) =>
    {
        // The application process name could be "dotnet" for ASP.NET Core self-hosted applications.
        module.Counters.Add(new PerformanceCounterCollectionRequest(@"\Process([replace-with-application-process-name])\Page Faults/sec", "DotnetPageFaultsPerfSec"));
    });

var app = builder.Build();
Mengumpulkan penghitung kinerja dalam kode untuk aplikasi web ASP.NET atau aplikasi konsol .NET/.NET Core

Untuk mengumpulkan penghitung kinerja sistem dan mengirimkannya ke Application Insights, Anda dapat menyesuaikan cuplikan berikut:

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Process([replace-with-application-process-name])\Page Faults/sec", "PageFaultsPerfSec"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

Atau Anda dapat melakukan hal yang sama dengan metrik kustom yang Anda buat:

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Sales(photo)\# Items Sold", "Photo sales"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);
Penghitung kinerja untuk aplikasi yang berjalan di Azure Web Apps dan kontainer Windows di Azure App Service

Aplikasi ASP.NET dan ASP.NET Core yang disebarkan ke Azure Web Apps berjalan di lingkungan kotak pasir khusus. Aplikasi yang disebarkan ke Azure App Service dapat menggunakan kontainer Windows atau dihosting di lingkungan kotak pasir. Jika aplikasi disebarkan dalam kontainer Windows, semua penghitung kinerja standar tersedia dalam gambar kontainer.

Lingkungan kotak pasir tidak mengizinkan akses langsung ke penghitung kinerja sistem. Namun, subkumpulan penghitung yang terbatas diekspos sebagai variabel lingkungan seperti yang dijelaskan dalam Penghitung Kinerja yang diekspos sebagai variabel lingkungan. Hanya subset penghitung yang tersedia di lingkungan ini.

Application Insights SDK untuk ASP.NET dan ASP.NET Core mendeteksi apakah kode disebarkan ke aplikasi web atau kontainer non-Windows. Deteksi menentukan apakah ia mengumpulkan penghitung kinerja di lingkungan kotak pasir atau menggunakan mekanisme pengumpulan standar saat dihosting pada kontainer Windows atau komputer virtual.

Kueri Log Analytics untuk penghitung kinerja

Anda dapat mencari dan menampilkan laporan penghitung kinerja di Log Analytics.

Skema performanceCounters mengekspos nama category, nama counter, dan nama instance dari setiap penghitung kinerja. Dalam telemetri untuk setiap aplikasi, Anda hanya melihat penghitung untuk aplikasi tersebut. Misalnya, untuk melihat penghitung apa yang tersedia:

performanceCounters | summarize count(), avg(value) by category, instance, counter

Di sini, Instance mengacu pada instans penghitung kinerja, bukan peran, atau instans komputer server. Nama instans penghitung kinerja biasanya membagi penghitung, seperti waktu prosesor, berdasarkan nama proses atau aplikasi.

Untuk mendapatkan bagan memori yang tersedia selama periode terbaru:

performanceCounters | where counter == "Available Bytes" | summarize avg(value), min(value) by bin(timestamp, 1h) | render timechart

Seperti telemetri lainnya, performanceCounters juga memiliki kolom cloud_RoleInstance yang menunjukkan identitas instans server host tempat aplikasi Anda berjalan. Misalnya, untuk membandingkan performa aplikasi Anda di komputer yang berbeda:

performanceCounters | where counter == "% Processor Time" and instance == "SendMetrics" | summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1d)
Tanya Jawab Umum penghitung kinerja

Untuk meninjau tanya jawab umum (FAQ), lihat Tanya Jawab Umum penghitung kinerja.

Penghitung peristiwa

EventCounter adalah mekanisme .NET/.NET Core untuk menerbitkan dan menggunakan penghitung atau statistik. EventCounters didukung di semua platform OS - Windows, Linux, dan macOS. Ini dapat dianggap sebagai setara lintas platform untuk PerformanceCounters yang hanya didukung dalam sistem Windows.

Meskipun pengguna dapat menerbitkan penghitung peristiwa kustom apa pun untuk memenuhi kebutuhan mereka, .NET menerbitkan sekumpulan penghitung ini secara default. Dokumen ini menjelaskan langkah-langkah yang diperlukan untuk mengumpulkan dan melihat penghitung peristiwa (ditentukan sistem atau ditentukan pengguna) di Azure Application Insights.

Petunjuk / Saran

Seperti metrik lain, Anda dapat mengatur pemberitahuan untuk memperingatkan jika penghitung berada di luar batas yang ditentukan. Untuk mengatur pemberitahuan, buka panel Pemberitahuan dan pilih Tambahkan Pemberitahuan.

Menggunakan Application Insights untuk mengumpulkan EventCounters

Application Insights mendukung pengumpulan EventCounters dengan menggunakan EventCounterCollectionModule, yang merupakan bagian dari paket NuGet yang baru-baru ini dirilis Microsoft.ApplicationInsights.EventCounterCollector. EventCounterCollectionModule diaktifkan secara otomatis saat menggunakan AspNetCore atau WorkerService. EventCounterCollectionModule mengumpulkan penghitung dengan frekuensi pengumpulan yang tidak dapat dikonfigurasi sebesar 60 detik. Tidak ada izin khusus yang diperlukan untuk mengumpulkan EventCounters. Untuk aplikasi ASP.NET Core, Anda juga ingin menambahkan paket Microsoft.ApplicationInsights.AspNetCore.

dotnet add package Microsoft.ApplicationInsights.EventCounterCollector
dotnet add package Microsoft.ApplicationInsights.AspNetCore
Penghitung default dikumpulkan

Dimulai dengan versi 2.15.0 dari AspNetCore SDK atau WorkerService SDK, tidak ada penghitung yang dikumpulkan secara default. Modul itu sendiri diaktifkan, sehingga pengguna dapat menambahkan penghitung yang diinginkan untuk mengumpulkannya.

Untuk mendapatkan daftar penghitung terkenal yang diterbitkan oleh .NET Runtime, lihat dokumen Penghitung yang Tersedia .

Menyesuaikan penghitung yang akan dikumpulkan

Contoh berikut menunjukkan cara menambahkan/menghapus penghitung. Penyesuaian ini akan dilakukan sebagai bagian dari konfigurasi layanan aplikasi Anda setelah pengumpulan telemetri Application Insights diaktifkan menggunakan AddApplicationInsightsTelemetry() atau AddApplicationInsightsWorkerService(). Berikut ini adalah contoh kode dari aplikasi ASP.NET Core. Untuk jenis aplikasi lain, lihat mengonfigurasi modul telemetri.

using Microsoft.ApplicationInsights.Extensibility.EventCounterCollector;
using Microsoft.Extensions.DependencyInjection;

builder.Services.ConfigureTelemetryModule<EventCounterCollectionModule>(
        (module, o) =>
        {
            // Removes all default counters, if any.
            module.Counters.Clear();

            // Adds a user defined counter "MyCounter" from EventSource named "MyEventSource"
            module.Counters.Add(
                new EventCounterCollectionRequest("MyEventSource", "MyCounter"));

            // Adds the system counter "gen-0-size" from "System.Runtime"
            module.Counters.Add(
                new EventCounterCollectionRequest("System.Runtime", "gen-0-size"));
        }
    );
Menonaktifkan modul pengumpulan EventCounter

EventCounterCollectionModule dapat dinonaktifkan dengan menggunakan ApplicationInsightsServiceOptions.

Contoh berikut menggunakan ASP.NET Core SDK.

using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.Extensions.DependencyInjection;

var applicationInsightsServiceOptions = new ApplicationInsightsServiceOptions();
applicationInsightsServiceOptions.EnableEventCounterCollectionModule = false;
builder.Services.AddApplicationInsightsTelemetry(applicationInsightsServiceOptions);

Pendekatan serupa juga dapat digunakan untuk SDK Layanan Pekerja, tetapi namespace harus diubah seperti yang ditunjukkan dalam contoh berikut.

using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.Extensions.DependencyInjection;

var applicationInsightsServiceOptions = new ApplicationInsightsServiceOptions();
applicationInsightsServiceOptions.EnableEventCounterCollectionModule = false;
builder.Services.AddApplicationInsightsTelemetry(applicationInsightsServiceOptions);
Kueri Analitik Log untuk penghitung peristiwa

Anda dapat mencari dan menampilkan laporan penghitung peristiwa di Log Analytics, dalam tabel customMetrics.

Misalnya, jalankan kueri berikut untuk melihat penghitung mana yang dikumpulkan dan tersedia untuk dikuiri:

customMetrics | summarize avg(value) by name

Untuk mendapatkan bagan penghitung tertentu (misalnya: ThreadPool Completed Work Item Count) selama periode terbaru, jalankan kueri berikut.

customMetrics 
| where name contains "System.Runtime|ThreadPool Completed Work Item Count"
| where timestamp >= ago(1h)
| summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1m)
| render timechart

Seperti telemetri lainnya, customMetrics juga memiliki kolom cloud_RoleInstance yang menunjukkan identitas instans server host tempat aplikasi Anda berjalan. Kueri sebelumnya menunjukkan nilai penghitung per instans, dan dapat digunakan untuk membandingkan performa instans server yang berbeda.

Tanya Jawab Umum penghitung acara

Untuk meninjau pertanyaan yang sering diajukan (FAQ), lihat FAQ Penghitung Event.

Koleksi Cuplikan

Untuk mempelajari cara mengonfigurasi pengumpulan rekam jepret untuk aplikasi ASP.NET dan ASP.NET Core, lihat Mengaktifkan Snapshot Debugger untuk aplikasi .NET di Azure Service Fabric, Cloud Services, dan Virtual Machines.

Memproses dan memfilter telemetri

Di bagian ini

Memfilter dan pra-proses telemetri

Anda dapat menulis kode untuk memfilter, memodifikasi, atau memperkaya telemetri Anda sebelum dikirim dari SDK. Pemrosesan mencakup data yang dikirim dari modul telemetri standar, seperti pengumpulan permintaan HTTP dan pengumpulan dependensi.

  • Pemfilteran dapat memodifikasi atau membuang telemetri sebelum dikirim dari SDK dengan menerapkan ITelemetryProcessor. Misalnya, Anda dapat mengurangi volume telemetri dengan mengecualikan permintaan dari robot. Tidak seperti pengambilan sampel, Anda memiliki kontrol penuh atas apa yang dikirim atau dibuang, tetapi memengaruhi metrik apa pun berdasarkan log agregat. Bergantung pada cara Anda membuang item, Anda mungkin juga kehilangan kemampuan untuk menavigasi di antara item terkait.

  • Tambahkan atau ubah properti telemetri apa pun yang dikirimkan dari aplikasi Anda dengan mengimplementasikan ITelemetryInitializer. Misalnya, Anda dapat menambahkan nilai terhitung atau nomor versi untuk memfilter data di portal.

  • Pengambilan sampel mengurangi volume telemetri tanpa memengaruhi statistik Anda. Ini terus menyatukan titik data terkait sehingga Anda dapat menavigasi di antara titik data tersebut saat Anda mendiagnosis masalah. Di portal, jumlah total dikalikan untuk mengimbangi pengambilan sampel.

Nota

API SDK digunakan untuk mengirim peristiwa dan metrik kustom.

Penyaringan

Teknik ini memberi Anda kontrol langsung atas apa yang disertakan atau dikecualikan dari aliran telemetri. Pemfilteran dapat digunakan untuk menghilangkan item telemetri agar tidak dikirim ke Application Insights. Anda dapat menggunakan pemfilteran dengan pengambilan sampel, atau secara terpisah.

Untuk memfilter telemetri, Anda menulis prosesor telemetri dan mendaftarkannya dengan TelemetryConfiguration. Semua telemetri melewati prosesor Anda. Anda dapat memilih untuk menjatuhkannya dari aliran atau memberikannya ke prosesor berikutnya dalam rantai. Telemetri dari modul standar, seperti pengumpul permintaan HTTP dan pengumpul dependensi, dan telemetri yang Anda lacak sendiri disertakan. Misalnya, Anda dapat memfilter telemetri tentang permintaan dari robot atau panggilan dependensi yang berhasil.

Peringatan

Menyaring telemetri yang dikirim dari SDK dengan menggunakan prosesor dapat memengaruhi statistik yang Anda lihat di portal dan menyulitkan pelacakan item terkait.

Sebagai gantinya, pertimbangkan untuk menggunakan pengambilan sampel.

ITelemetryProcessor dan ITelemetryInitializer

Apa perbedaan antara prosesor telemetri dan penginisialisasi telemetri?

  • Ada beberapa tumpang tindih dalam apa yang dapat Anda lakukan dengan mereka. Keduanya dapat digunakan untuk menambahkan atau memodifikasi properti telemetri, meskipun kami sarankan Anda menggunakan penginisialisasi untuk tujuan tersebut.
  • Penginisialisasi telemetri selalu berjalan sebelum prosesor telemetri.
  • Penginisialisasi telemetri dapat dipanggil lebih dari sekali. Menurut konvensi, mereka tidak mengatur properti apa pun yang sudah ditetapkan.
  • Prosesor telemetri memungkinkan Anda untuk sepenuhnya mengganti atau membuang item telemetri.
  • Semua penginisialisasi telemetri terdaftar dipanggil untuk setiap item telemetri. Untuk prosesor telemetri, SDK menjamin panggilan prosesor telemetri pertama. Apakah prosesor lainnya dipanggil atau tidak diputuskan oleh prosesor telemetri sebelumnya.
  • Gunakan penginisialisasi telemetri untuk memperkaya telemetri dengan lebih banyak properti atau mengambil alih yang sudah ada. Gunakan prosesor telemetri untuk memfilter telemetri.

Menambahkan/mengubah properti

Gunakan penginisialisasi telemetri untuk memperkaya telemetri dengan informasi tambahan atau untuk mengambil alih properti telemetri yang ditetapkan oleh modul telemetri standar.

Misalnya, Application Insights untuk paket aplikasi web mengumpulkan telemetri tentang permintaan HTTP. Secara default, ini menandai permintaan apa pun dengan kode >respons =400 sebagai gagal. Jika Anda ingin memperlakukan 400 sebagai keberhasilan, Anda dapat menyediakan inisialisator telemetri yang menetapkan properti keberhasilan.

Jika Anda menyediakan penginisialisasi telemetri, ini dipanggil setiap kali salah satu metode Track*() dipanggil. Penginisialisasi ini mencakup Track() metode yang dipanggil oleh modul telemetri standar. Menurut konvensi, modul ini tidak mengatur properti apa pun yang sudah ditetapkan oleh penginisialisasi. Penginisialisasi telemetri dipanggil sebelum memanggil prosesor telemetri, sehingga pengayaan apa pun yang dilakukan oleh penginisialisasi terlihat oleh prosesor.

Penginisialisasi telemetri

Untuk memperkaya telemetri dengan informasi tambahan atau untuk mengambil alih properti telemetri yang ditetapkan oleh modul telemetri standar, gunakan penginisialisasi telemetri.

Penginisialisasi telemetri mengatur properti konteks yang dikirim bersama dengan setiap item telemetri. Anda dapat menulis inisialisasi Anda sendiri untuk mengatur properti konteks.

Inisialisasi standar semuanya diatur baik oleh paket Web atau WindowsServer NuGet:

Penginisialisasi Deskripsi
AccountIdTelemetryInitializer Mengatur properti AccountId.
AuthenticatedUserIdTelemetryInitializer AuthenticatedUserId Mengatur properti sebagaimana diatur oleh JavaScript SDK.
AzureRoleEnvironmentTelemetryInitializer Memperbarui properti RoleName dan RoleInstance dalam konteks Device untuk semua item telemetri dengan informasi yang diekstrak dari lingkungan runtime Azure.
BuildInfoConfigComponentVersionTelemetryInitializer Memperbarui properti konteks Version untuk semua item telemetri dengan nilai yang diekstrak dari berkas Component yang dihasilkan oleh MS Build.
ClientIpHeaderTelemetryInitializer Memperbarui properti Ip dari konteks Location semua item telemetri berdasarkan header HTTP X-Forwarded-For permintaan.
DeviceTelemetryInitializer Memperbarui properti Device konteks berikut untuk semua item telemetri:

• Type diatur ke PC.
• Id diatur ke nama domain komputer tempat aplikasi web berjalan.
• OemName diatur ke nilai yang diekstrak dari bidang Win32_ComputerSystem.Manufacturer dengan menggunakan WMI.
• Model diatur ke nilai yang diekstrak dari bidang Win32_ComputerSystem.Model dengan menggunakan WMI.
• NetworkType diatur ke nilai yang diekstrak dari properti NetworkInterface.
• Language diatur ke nama CurrentCulture properti.
DomainNameRoleInstanceTelemetryInitializer Memperbarui properti RoleInstance dari konteks Device untuk semua item telemetri dengan nama domain komputer di mana aplikasi web berjalan.
OperationNameTelemetryInitializer Memperbarui properti Name dari RequestTelemetry dan properti Name dalam konteks Operation dari semua item telemetri berdasarkan metode HTTP, serta nama pengontrol dan tindakan ASP.NET MVC yang dipanggil untuk memproses permintaan.
OperationIdTelemetryInitializer atau OperationCorrelationTelemetryInitializer Memperbarui properti konteks semua item telemetri yang dilacak dalam menangani permintaan dengan Operation.Id yang dihasilkan secara otomatis.
SessionTelemetryInitializer Memperbarui properti Id dalam konteks Session untuk semua item telemetri dengan nilai yang diekstrak dari cookie ai_session, yang dihasilkan oleh kode instrumentasi JavaScript ApplicationInsights yang berjalan di browser pengguna.
SyntheticTelemetryInitializer atau SyntheticUserAgentTelemetryInitializer UserMemperbarui properti konteks , Session, dan Operation dari semua item telemetri yang dilacak saat menangani permintaan dari sumber sintetis, seperti uji ketersediaan atau bot mesin pencari. Secara default, penjelajah metrik tidak menampilkan telemetri sintetis.

Set <Filters> yang mengidentifikasi properti dari permintaan.
UserTelemetryInitializer Memperbarui konteks Id dan properti AcquisitionDate untuk semua item telemetri dengan nilai yang diekstrak dari cookie User yang dihasilkan oleh kode instrumentasi JavaScript dari Application Insights yang berjalan di browser pengguna.
WebTestTelemetryInitializer Mengatur ID pengguna, ID sesi, dan properti sumber sintetis untuk permintaan HTTP yang berasal dari pengujian ketersediaan.

Set <Filters> yang mengidentifikasi properti dari permintaan.

Nota

Untuk aplikasi .NET yang berjalan di Azure Service Fabric, Anda dapat menyertakan paket NuGet Microsoft.ApplicationInsights.ServiceFabric. Paket ini mencakup FabricTelemetryInitializer properti, yang menambahkan properti Service Fabric ke item telemetri. Untuk informasi selengkapnya, lihat halaman GitHub tentang properti yang ditambahkan oleh paket NuGet ini.

Menambahkan ITelemetryInitializer

Blog ini menjelaskan proyek untuk mendiagnosis masalah dependensi dengan secara otomatis mengirim ping reguler ke dependensi.

  1. Tentukan penginisialisasi Anda

    using System;
    using Microsoft.ApplicationInsights.Channel;
    using Microsoft.ApplicationInsights.DataContracts;
    using Microsoft.ApplicationInsights.Extensibility;
    
    namespace MvcWebRole.Telemetry
    {
      /*
       * Custom TelemetryInitializer that overrides the default SDK
       * behavior of treating response codes >= 400 as failed requests
       *
       */
        public class MyTelemetryInitializer : ITelemetryInitializer
        {
            public void Initialize(ITelemetry telemetry)
            {
                var requestTelemetry = telemetry as RequestTelemetry;
                // Is this a TrackRequest() ?
                if (requestTelemetry == null) return;
                int code;
                bool parsed = Int32.TryParse(requestTelemetry.ResponseCode, out code);
                if (!parsed) return;
                if (code >= 400 && code < 500)
                {
                    // If we set the Success property, the SDK won't change it:
                    requestTelemetry.Success = true;
    
                    // Allow us to filter these requests in the portal:
                    requestTelemetry.Properties["Overridden400s"] = "true";
                }
                // else leave the SDK to set the Success property
            }
        }
    }
    
  2. Muat penginisialisasi Anda

ASP.NET

Opsi 1: Konfigurasi dalam kode

protected void Application_Start()
{
    // ...
    TelemetryConfiguration.Active.TelemetryInitializers.Add(new MyTelemetryInitializer());
}

Opsi 2: Konfigurasi di ApplicationInsights.config

<ApplicationInsights>
    <TelemetryInitializers>
    <!-- Fully qualified type name, assembly name: -->
    <Add Type="MvcWebRole.Telemetry.MyTelemetryInitializer, MvcWebRole"/>
    ...
    </TelemetryInitializers>
</ApplicationInsights>

Lihat lebih lanjut sampel ini.

Nota

Pastikan file applicationinsights.config ada di direktori output Anda dan berisi perubahan terbaru.

ASP.NET Core

Menambahkan penginisialisasi dengan menggunakan ApplicationInsights.config atau TelemetryConfiguration.Active tidak valid untuk aplikasi ASP.NET Core.

Untuk aplikasi yang ditulis menggunakan ASP.NET Core, menambahkan penginisialisasi telemetri baru dilakukan dengan menambahkannya ke kontainer DependencyInjection, seperti yang ditunjukkan. Selesaikan langkah ini dalam metode Startup.ConfigureServices.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();

var app = builder.Build();

Nota

builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>(); berfungsi untuk inisialisasi sederhana. Untuk yang lain, builder.Services.AddSingleton(new MyCustomTelemetryInitializer() { fieldName = "myfieldName" }); diperlukan.

Menghapus penginisialisasi telemetri

Secara bawaan, inisialisasi telemetri sudah ada. Untuk menghapus semua atau penginisialisasi telemetri tertentu, gunakan kode contoh berikut setelah memanggil AddApplicationInsightsTelemetry().

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// Remove a specific built-in telemetry initializer
var tiToRemove = builder.Services.FirstOrDefault<ServiceDescriptor>
                    (t => t.ImplementationType == typeof(AspNetCoreEnvironmentTelemetryInitializer));
if (tiToRemove != null)
{
    builder.Services.Remove(tiToRemove);
}

// Remove all initializers
// This requires importing namespace by using Microsoft.Extensions.DependencyInjection.Extensions;
builder.Services.RemoveAll(typeof(ITelemetryInitializer));

var app = builder.Build();
Layanan Pekerja

Penggunaan ApplicationInsights.config atau TelemetryConfiguration.Active untuk menambahkan penginisialisasi tidak valid bagi Worker Service SDK.

Untuk aplikasi yang ditulis menggunakan Worker Service, menambahkan penginisialisasi telemetri baru dilakukan dengan menambahkannya ke dalam kontainer, seperti yang ditunjukkan DependencyInjection . Selesaikan langkah ini dalam metode Startup.ConfigureServices.

    using Microsoft.ApplicationInsights.Extensibility;

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
        services.AddApplicationInsightsTelemetryWorkerService();
    }
Menghapus penginisialisasi telemetri

Penginisialisasi telemetri ada secara default. Untuk menghapus semua atau penginisialisasi telemetri tertentu, gunakan kode contoh berikut setelah memanggil AddApplicationInsightsTelemetryWorkerService().

   public void ConfigureServices(IServiceCollection services)
   {
        services.AddApplicationInsightsTelemetryWorkerService();
        // Remove a specific built-in telemetry initializer.
        var tiToRemove = services.FirstOrDefault<ServiceDescriptor>
                            (t => t.ImplementationType == typeof(AspNetCoreEnvironmentTelemetryInitializer));
        if (tiToRemove != null)
        {
            services.Remove(tiToRemove);
        }

        // Remove all initializers.
        // This requires importing namespace by using Microsoft.Extensions.DependencyInjection.Extensions;
        services.RemoveAll(typeof(ITelemetryInitializer));
   }

Contoh ITelemetryInitializers

Menambahkan properti kustom

Contoh penginisialisasi berikut menambahkan properti kustom ke setiap telemetri yang dilacak.

public void Initialize(ITelemetry item)
{
    var itemProperties = item as ISupportProperties;
    if(itemProperties != null && !itemProperties.Properties.ContainsKey("customProp"))
    {
        itemProperties.Properties["customProp"] = "customValue";
    }
}
Tambahkan nama peran cloud dan instans peran cloud

Langkah 1: Tulis TelemetryInitializer kustom

Contoh penginisialisasi berikut menetapkan nama peran cloud untuk setiap telemetri yang dilacak.

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;

namespace CustomInitializer.Telemetry
{
    public class MyTelemetryInitializer : ITelemetryInitializer
    {
        public void Initialize(ITelemetry telemetry)
        {
            if (string.IsNullOrEmpty(telemetry.Context.Cloud.RoleName))
            {
                //set custom role name here
                telemetry.Context.Cloud.RoleName = "Custom RoleName";
                telemetry.Context.Cloud.RoleInstance = "Custom RoleInstance";
            }
        }
    }
}

Langkah 2: Muat penginisialisasi ke TelemetryConfiguration

ASP.NET

Dalam file ApplicationInsights.config :

    <ApplicationInsights>
      <TelemetryInitializers>
        <!-- Fully qualified type name, assembly name: -->
        <Add Type="CustomInitializer.Telemetry.MyTelemetryInitializer, CustomInitializer"/>
        ...
      </TelemetryInitializers>
    </ApplicationInsights>

Metode alternatif untuk aplikasi web ASP.NET adalah membuat instans penginisialisasi dalam kode. Contoh berikut menunjukkan kode dalam file Global.aspx.cs :

 using Microsoft.ApplicationInsights.Extensibility;
 using CustomInitializer.Telemetry;

    protected void Application_Start()
    {
        // ...
        TelemetryConfiguration.Active.TelemetryInitializers.Add(new MyTelemetryInitializer());
    }
ASP.NET Core

Untuk menambahkan instans TelemetryInitializer yang baru, Anda memasukkannya ke dalam kontainer Injeksi Dependensi. Contoh berikut menunjukkan pendekatan ini. Tambahkan kode ini dalam ConfigureServices metode kelas Anda Startup.cs .

 using Microsoft.ApplicationInsights.Extensibility;
 using CustomInitializer.Telemetry;
 public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();
}
Mengontrol alamat IP klien yang digunakan untuk pemetaan geolokasi

Contoh penginisialisasi berikut mengatur IP klien, yang digunakan untuk pemetaan geolokasi, alih-alih alamat IP soket klien, selama penyerapan telemetri.

public void Initialize(ITelemetry telemetry)
{
    var request = telemetry as RequestTelemetry;
    if (request == null) return true;
    request.Context.Location.Ip = "{client ip address}"; // Could utilize System.Web.HttpContext.Current.Request.UserHostAddress;   
    return true;
}

Prosesor telemetri

Prosesor telemetri dapat memfilter dan memodifikasi setiap item telemetri sebelum dikirim dari SDK ke portal.

Terapkan ITelemetryProcessor

Prosesor telemetri membangun rantai pemrosesan. Saat Anda menginstansiasi prosesor telemetri, Anda mendapatkan referensi ke prosesor selanjutnya dalam rantai. Ketika titik data telemetri diteruskan ke metode proses, titik data melakukan pekerjaannya dan kemudian memanggil (atau tidak memanggil) prosesor telemetri berikutnya dalam rantai.

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.DataContracts;

public class SuccessfulDependencyFilter : ITelemetryProcessor
{
    private ITelemetryProcessor Next { get; set; }

    // next will point to the next TelemetryProcessor in the chain.
    public SuccessfulDependencyFilter(ITelemetryProcessor next)
    {
        this.Next = next;
    }

    public void Process(ITelemetry item)
    {
        // To filter out an item, return without calling the next processor.
        if (!OKtoSend(item)) { return; }

        this.Next.Process(item);
    }

    // Example: replace with your own criteria.
    private bool OKtoSend (ITelemetry item)
    {
        var dependency = item as DependencyTelemetry;
        if (dependency == null) return true;

        return dependency.Success != true;
    }
}

Menambahkan prosesor Anda

ASP.NET

Sisipkan cuplikan ini di ApplicationInsights.config:

<TelemetryProcessors>
    <Add Type="WebApplication9.SuccessfulDependencyFilter, WebApplication9">
    <!-- Set public property -->
    <MyParamFromConfigFile>2-beta</MyParamFromConfigFile>
    </Add>
</TelemetryProcessors>

Anda dapat meneruskan nilai string dari file .config dengan menyediakan properti bernama publik di kelas Anda.

Peringatan

Berhati-hatilah untuk mencocokkan nama jenis dan nama properti apa pun dalam file .config dengan nama kelas dan properti dalam kode. Jika file .config mereferensikan jenis atau properti yang tidak ada, SDK mungkin gagal mengirim telemetri apa pun secara diam-diam.

Atau, Anda dapat menginisialisasi filter dalam kode. Di kelas inisialisasi yang sesuai, misalnya, AppStart di Global.asax.cs, sisipkan prosesor Anda ke dalam rantai:

Nota

Sampel kode berikut usang, tetapi tersedia di sini untuk anak cucu. Pertimbangkan untuk mulai menggunakan OpenTelemetry atau bermigrasi ke OpenTelemetry.

var builder = TelemetryConfiguration.Active.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
builder.Use((next) => new SuccessfulDependencyFilter(next));

// If you have more processors:
builder.Use((next) => new AnotherProcessor(next));

builder.Build();

Klien telemetri yang dibuat setelah titik ini menggunakan prosesor Anda.

Prosesor telemetri pengambilan sampel adaptif (dari 2.0.0-beta3)

Fungsionalitas ini diaktifkan secara default. Jika aplikasi Anda mengirim telemetri yang cukup besar, prosesor ini akan menghapus beberapa darinya.


    <TelemetryProcessors>
        <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
        <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
        </Add>
    </TelemetryProcessors>

Parameter menyediakan target yang coba dicapai algoritma. Setiap instans SDK berfungsi secara independen. Jadi, jika server Anda adalah kluster beberapa mesin, volume telemetri aktual dikalikan secara proporsional.

Pelajari selengkapnya tentang pengambilan sampel.

Prosesor telemetri pengambilan sampel laju tetap (dari 2.0.0-beta1)

Ada juga prosesor telemetri pengambilan sampel standar (dari 2.0.1):

    <TelemetryProcessors>
        <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.SamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">

        <!-- Set a percentage close to 100/N where N is an integer. -->
        <!-- E.g. 50 (=100/2), 33.33 (=100/3), 25 (=100/4), 20, 1 (=100/100), 0.1 (=100/1000) -->
        <SamplingPercentage>10</SamplingPercentage>
        </Add>
    </TelemetryProcessors>
ASP.NET Core

Nota

Menambahkan prosesor dengan menggunakan ApplicationInsights.config atau TelemetryConfiguration.Active tidak valid untuk aplikasi ASP.NET Core atau jika Anda menggunakan Microsoft.ApplicationInsights.WorkerService SDK.

Untuk ASP.NET Core, menambahkan prosesor telemetri baru dilakukan dengan menggunakan metode ekstensi AddApplicationInsightsTelemetryProcessor pada IServiceCollection, seperti yang ditunjukkan. Metode ini dipanggil dalam metode ConfigureServices kelas Startup.cs Anda.

var builder = WebApplication.CreateBuilder(args);

// ...
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.AddApplicationInsightsTelemetryProcessor<MyFirstCustomTelemetryProcessor>();

// If you have more processors:
builder.Services.AddApplicationInsightsTelemetryProcessor<MySecondCustomTelemetryProcessor>();

var app = builder.Build();

Untuk mendaftarkan prosesor telemetri yang memerlukan parameter di ASP.NET Core, buat kelas kustom yang mengimplementasikan ITelemetryProcessorFactory. Panggil konstruktor dengan parameter yang diinginkan dalam metode Buat lalu gunakan AddSingleton<ITelemetryProcessorFactory, MyTelemetryProcessorFactory>().

Layanan Pekerja

Nota

Menambahkan prosesor dengan menggunakan ApplicationInsights.config atau TelemetryConfiguration.Active tidak valid untuk aplikasi ASP.NET Core atau jika Anda menggunakan Microsoft.ApplicationInsights.WorkerService SDK.

Untuk Layanan Pekerja, menambahkan prosesor telemetri baru dilakukan dengan menggunakan metode ekstensi AddApplicationInsightsTelemetryProcessor pada IServiceCollection, seperti yang ditunjukkan. Metode ini dipanggil dalam metode ConfigureServices kelas Startup.cs Anda.

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.AddApplicationInsightsTelemetryProcessor<MyFirstCustomTelemetryProcessor>();
        // If you have more processors:
        services.AddApplicationInsightsTelemetryProcessor<MySecondCustomTelemetryProcessor>();
    }

Contoh filter

Permintaan sintetis

Menyaring bot dan pengujian situs web. Meskipun Metrics Explorer memberi Anda opsi untuk memfilter sumber sintetis, opsi ini mengurangi lalu lintas dan ukuran penyerapan dengan memfilternya di SDK itu sendiri.

public void Process(ITelemetry item)
{
    if (!string.IsNullOrEmpty(item.Context.Operation.SyntheticSource)) {return;}
    
    // Send everything else:
    this.Next.Process(item);
}
Autentikasi gagal

Saring keluar permintaan dengan tanggapan "401".

public void Process(ITelemetry item)
{
    var request = item as RequestTelemetry;

    if (request != null &&
    request.ResponseCode.Equals("401", StringComparison.OrdinalIgnoreCase))
    {
        // To filter out an item, return without calling the next processor.
        return;
    }

    // Send everything else
    this.Next.Process(item);
}
Memfilter panggilan dependensi jarak jauh yang cepat

Jika Anda hanya ingin mendiagnosis panggilan yang lambat, abaikan panggilan yang cepat.

Nota

Pemfilteran ini mengubah statistik yang Anda lihat di portal.

public void Process(ITelemetry item)
{
    var request = item as DependencyTelemetry;

    if (request != null && request.Duration.TotalMilliseconds < 100)
    {
        return;
    }
    this.Next.Process(item);
}

Pengambilan sampel

Untuk mempelajari cara mengonfigurasi pengambilan sampel untuk aplikasi ASP.NET dan ASP.NET Core, lihat Pengambilan sampel di Application Insights.

Layanan Pekerja

Application Insights SDK for Worker Service mendukung pengambilan sampel laju tetap dan pengambilan sampel adaptif. Pengambilan sampel adaptif diaktifkan secara default. Pengambilan sampel dapat dinonaktifkan dengan menggunakan EnableAdaptiveSampling opsi di ApplicationInsightsServiceOptions.

Untuk mengonfigurasi pengaturan pengambilan sampel lainnya, Anda dapat menggunakan contoh berikut:

using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.ApplicationInsights.Extensibility;

var builder = WebApplication.CreateBuilder(args);

builder.Services.Configure<TelemetryConfiguration>(telemetryConfiguration =>
{
   var telemetryProcessorChainBuilder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;

   // Using adaptive sampling
   telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond: 5);

   // Alternately, the following configures adaptive sampling with 5 items per second, and also excludes DependencyTelemetry from being subject to sampling:
   // telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");
});

builder.Services.AddApplicationInsightsTelemetryWorkerService(new ApplicationInsightsServiceOptions
{
   EnableAdaptiveSampling = false,
});

var app = builder.Build();

Memperkaya data melalui HTTP

ASP.NET

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

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

ASP.NET Core

HttpContext.Features.Get<RequestTelemetry>().Properties["myProp"] = someData

Konfigurasi SDK

Di bagian ini

Anda dapat menyesuaikan Application Insights SDK untuk ASP.NET, ASP.NET Core, dan Layanan Pekerja untuk mengubah konfigurasi default.

ASP.NET

Application Insights .NET SDK terdiri dari banyak paket NuGet. Paket inti menyediakan API untuk mengirim telemetri ke Application Insights. Lebih banyak paket menyediakan modul telemetri dan penginisialisasi untuk melacak telemetri secara otomatis dari aplikasi Anda dan konteksnya. Dengan menyesuaikan file konfigurasi, Anda dapat mengaktifkan atau menonaktifkan modul telemetri dan penginisialisasi. Anda juga dapat mengatur parameter untuk beberapa di antaranya.

File konfigurasi diberi nama ApplicationInsights.config atau ApplicationInsights.xml. Nama tergantung pada jenis aplikasi Anda. Ini secara otomatis ditambahkan ke proyek Anda saat Anda menginstal sebagian besar versi SDK.

Secara default, saat Anda menggunakan pengalaman otomatis dari proyek templat Visual Studio yang mendukung Tambahkan>Telmetri Wawasan Aplikasi, file ApplicationInsights.config dibuat di folder akar proyek. Setelah dikompilasi, file akan disalin ke folder bin. Ini juga ditambahkan ke aplikasi web oleh Application Insights Agent di server IIS.

Penting

File konfigurasi diabaikan jika ekstensi untuk situs web Azure atau ekstensi untuk VM Azure dan set skala mesin virtual Azure digunakan.

Tidak ada file yang setara untuk mengontrol SDK di halaman web.

ASP.NET Core

Dalam aplikasi ASP.NET Core, semua perubahan konfigurasi dilakukan dalam metode ConfigureServices() dari kelas Startup.cs Anda, kecuali ditentukan sebaliknya.

Nota

Dalam aplikasi ASP.NET Core, mengubah konfigurasi dengan memodifikasi TelemetryConfiguration.Active tidak didukung.

Layanan Pekerja

Pengaturan awal TelemetryConfiguration yang digunakan oleh Worker Service SDK mirip dengan konfigurasi otomatis yang digunakan dalam aplikasi ASP.NET atau ASP.NET Core, dikurangi penginisialisasi telemetri yang digunakan untuk memperkaya data telemetri dari HttpContext.

Anda dapat menyesuaikan SDK Application Insights untuk Layanan Pekerja untuk mengubah konfigurasi default. Pengguna Application Insights ASP.NET Core SDK mungkin terbiasa dengan mengubah konfigurasi dengan menggunakan injeksi dependensi bawaan ASP.NET Core. SDK Layanan Pekerja juga didasarkan pada prinsip serupa. Buat hampir semua perubahan konfigurasi di bagian ConfigureServices() dengan memanggil metode yang sesuai pada IServiceCollection, seperti yang dirinci di bagian berikutnya.

Nota

Saat Anda menggunakan SDK Layanan Pekerja, mengubah konfigurasi dengan memodifikasi TelemetryConfiguration.Active tidak didukung dan perubahan tidak akan tercermin.

Saluran telemetri

Saluran telemetri adalah bagian integral dari SDK Application Insights. Mereka mengelola buffering dan transmisi telemetri ke layanan Application Insights. Versi SDK .NET dan .NET Core memiliki dua saluran telemetri bawaan: InMemoryChannel dan ServerTelemetryChannel. Bagian ini menjelaskan setiap saluran dan menunjukkan cara menyesuaikan perilaku saluran.

Nota

Untuk meninjau tanya jawab umum (FAQ), lihat FAQ saluran telemetri

Apa itu saluran telemetri?

Saluran telemetri bertanggung jawab untuk memanajemen buffer item telemetri dan mengirimkannya ke layanan Application Insights, di mana item tersebut disimpan untuk keperluan kueri dan analisis. Saluran telemetri adalah kelas apa pun yang mengimplementasikan Microsoft.ApplicationInsights.ITelemetryChannel antarmuka.

Metode saluran telemetri Send(ITelemetry item) dipanggil setelah semua inisialisasi dan prosesor telemetri dipanggil. Jadi, item apa pun yang dijatuhkan oleh prosesor telemetri tidak akan mencapai saluran. Metode Send() ini umumnya tidak langsung mengirimkan item ke back end. Biasanya, ia menyimpan sementara data dalam memori dan mengirimkannya secara berkelompok untuk transmisi yang efisien.

Hindari memanggil Flush() kecuali sangat penting untuk segera mengirim telemetri yang di-buffer. Gunakan hanya dalam skenario seperti penghentian operasi aplikasi, penanganan pengecualian, atau saat menggunakan proses berumur pendek seperti pekerjaan latar belakang atau peralatan baris perintah. Dalam aplikasi web atau layanan yang berjalan lama, SDK menangani pengiriman telemetri secara otomatis. Memanggil Flush() secara tidak perlu dapat menyebabkan masalah performa.

Streaming Metrik Langsung juga memiliki saluran kustom yang mendukung streaming langsung telemetri. Saluran ini independen dari saluran telemetri reguler, dan dokumen ini tidak berlaku untuk itu.

Saluran telemetri bawaan

Application Insights .NET dan .NET Core SDK dikirim dengan dua saluran bawaan:

  • InMemoryChannel: Saluran ringan yang menyimpan item dalam memori hingga dikirimkan. Item di-buffer dalam memori dan dibuang setiap 30 detik sekali, atau setiap kali 500 item di-buffer. Saluran ini menawarkan jaminan keandalan minimal karena tidak mencoba kembali mengirim telemetri setelah kegagalan. Saluran ini juga tidak menyimpan item pada disk. Jadi setiap item yang tidak terkirim hilang secara permanen setelah aplikasi dimatikan, baik itu dengan baik atau tidak. Saluran ini menerapkan Flush() metode yang dapat digunakan untuk membersihkan paksa item telemetri dalam memori secara sinkron. Saluran ini sangat cocok untuk aplikasi berumur pendek di mana pengosongan sinkron sangat ideal.

    Saluran ini adalah bagian dari paket NuGet Microsoft.ApplicationInsights yang lebih besar dan merupakan saluran default yang digunakan SDK ketika tidak ada yang lain yang dikonfigurasi.

  • ServerTelemetryChannel: Saluran yang lebih canggih yang memiliki kebijakan coba lagi dan kemampuan untuk menyimpan data di disk lokal. Saluran ini mencoba kembali mengirim telemetri jika terjadi kesalahan sementara. Saluran ini juga menggunakan penyimpanan disk lokal untuk menyimpan item pada disk selama pemadaman jaringan atau volume telemetri tinggi. Karena mekanisme coba lagi dan penyimpanan disk lokal ini, saluran ini dianggap lebih dapat diandalkan. Kami merekomendasikannya untuk semua skenario produksi. Saluran ini adalah default untuk aplikasi ASP.NET dan ASP.NET Core yang dikonfigurasi sesuai dengan dokumentasi resmi. Saluran ini dioptimalkan untuk skenario server dengan proses yang berjalan lama. Metode Flush() yang diterapkan oleh saluran ini tidak sinkron.

    Saluran ini dikirim sebagai paket NuGet Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel dan diperoleh secara otomatis saat Anda menggunakan paket NuGet Microsoft.ApplicationInsights.Web atau Microsoft.ApplicationInsights.AspNetCore.

Mengonfigurasi saluran telemetri

Anda mengonfigurasi saluran telemetri dengan mengaturnya ke konfigurasi telemetri aktif. Untuk aplikasi ASP.NET, konfigurasi melibatkan pengaturan instans saluran telemetri ke TelemetryConfiguration.Active atau dengan memodifikasi ApplicationInsights.config. Untuk aplikasi ASP.NET Core, konfigurasi melibatkan penambahan saluran ke kontainer injeksi dependensi.

Bagian berikut menunjukkan contoh konfigurasi StorageFolder pengaturan untuk saluran di berbagai jenis aplikasi. StorageFolder hanyalah salah satu pengaturan yang dapat dikonfigurasi. Untuk daftar lengkap pengaturan konfigurasi, lihat bagian Pengaturan yang dapat dikonfigurasi di saluran nanti di artikel ini.

ASP.NET

Opsi 1: Konfigurasi dalam kode

Kode berikut mengonfigurasi ServerTelemetryChannel instance dengan StorageFolder diatur ke lokasi kustom. Tambahkan kode ini di awal aplikasi, biasanya dalam Application_Start() metode dalam Global.aspx.cs.

using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;
protected void Application_Start()
{
    var serverTelemetryChannel = new ServerTelemetryChannel();
serverTelemetryChannel.StorageFolder = @"d:\temp\applicationinsights";
    serverTelemetryChannel.Initialize(TelemetryConfiguration.Active);
    TelemetryConfiguration.Active.TelemetryChannel = serverTelemetryChannel;
}

Opsi 2: Konfigurasi di ApplicationInsights.config

Bagian berikut dari ApplicationInsights.config memperlihatkan saluran yang dikonfigurasi ServerTelemetryChannel dengan StorageFolder diatur ke lokasi kustom:

    <TelemetrySinks>
        <Add Name="default">
            <TelemetryProcessors>
                <!-- Telemetry processors omitted for brevity -->
            </TelemetryProcessors>
            <TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel">
                <StorageFolder>d:\temp\applicationinsights</StorageFolder>
            </TelemetryChannel>
        </Add>
    </TelemetrySinks>
ASP.NET Core

Modifikasi metode ConfigureServices dari kelas Startup.cs seperti yang ditunjukkan di sini:

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;

public void ConfigureServices(IServiceCollection services)
{
    // This sets up ServerTelemetryChannel with StorageFolder set to a custom location.
    services.AddSingleton(typeof(ITelemetryChannel), new ServerTelemetryChannel() {StorageFolder = @"d:\temp\applicationinsights" });

    services.AddApplicationInsightsTelemetry();
}

Penting

Mengonfigurasi saluran dengan menggunakan TelemetryConfiguration.Active tidak didukung untuk aplikasi ASP.NET Core.

Menimpa ServerTelemetryChannel

Saluran telemetri default adalah ServerTelemetryChannel. Contoh berikut menunjukkan cara mengambil alih.

using Microsoft.ApplicationInsights.Channel;

var builder = WebApplication.CreateBuilder(args);

// Use the following to replace the default channel with InMemoryChannel.
// This can also be applied to ServerTelemetryChannel.
builder.Services.AddSingleton(typeof(ITelemetryChannel), new InMemoryChannel() {MaxTelemetryBufferCapacity = 19898 });

builder.Services.AddApplicationInsightsTelemetry();

var app = builder.Build();

Nota

Jika Anda ingin mengosongkan buffer, lihat Pengosongan data. Misalnya, Anda mungkin perlu menghapus buffer jika Anda menggunakan SDK dalam aplikasi yang dimatikan.

Layanan Pekerja

Saluran defaultnya adalah ServerTelemetryChannel. Anda dapat mengambil alihnya seperti yang ditunjukkan contoh berikut:

using Microsoft.ApplicationInsights.Channel;

    public void ConfigureServices(IServiceCollection services)
    {
        // Use the following to replace the default channel with InMemoryChannel.
        // This can also be applied to ServerTelemetryChannel.
        services.AddSingleton(typeof(ITelemetryChannel), new InMemoryChannel() {MaxTelemetryBufferCapacity = 19898 });

        services.AddApplicationInsightsTelemetryWorkerService();
    }

Konfigurasi dalam kode untuk aplikasi konsol

Untuk aplikasi konsol, kodenya sama untuk .NET dan .NET Core:

var serverTelemetryChannel = new ServerTelemetryChannel();
serverTelemetryChannel.StorageFolder = @"d:\temp\applicationinsights";
serverTelemetryChannel.Initialize(TelemetryConfiguration.Active);
TelemetryConfiguration.Active.TelemetryChannel = serverTelemetryChannel;

Detail-detail operasional dari ServerTelemetryChannel

ServerTelemetryChannel menyimpan item yang tiba dalam buffer memori. Item diserialisasikan, dikompresi, dan disimpan ke dalam Transmission instans setiap 30 detik sekali, atau ketika 500 item di-buffer. Satu Transmission instans berisi hingga 500 item dan mewakili batch telemetri yang dikirim melalui satu panggilan HTTPS ke layanan Application Insights.

Secara default, maksimum 10 Transmission instans dapat dikirim secara paralel. Jika telemetri tiba pada kecepatan yang lebih tinggi, atau jika jaringan atau back end Application Insights lambat, Transmission instans disimpan di memori. Kapasitas default buffer dalam memori Transmission ini adalah 5 MB. Ketika kapasitas dalam memori terlampaui, Transmission instans disimpan pada disk lokal hingga batas 50 MB.

Transmission instance juga disimpan di disk lokal ketika ada masalah jaringan. Hanya item yang disimpan di disk lokal yang bertahan dari crash aplikasi. Mereka dikirim setiap kali aplikasi dimulai lagi. Jika masalah jaringan berlanjut, ServerTelemetryChannel gunakan logika backoff eksponensial mulai dari 10 detik hingga 1 jam sebelum mencoba kembali mengirim telemetri.

Pengaturan yang dapat dikonfigurasi di saluran

Untuk daftar lengkap pengaturan yang dapat dikonfigurasi untuk setiap saluran, lihat:

Berikut adalah pengaturan yang paling umum digunakan untuk ServerTelemetryChannel:

  • MaxTransmissionBufferCapacity: Jumlah maksimum memori, dalam byte, digunakan oleh saluran untuk menyangga transmisi dalam memori. Ketika kapasitas ini tercapai, item baru disimpan langsung ke disk lokal. Nilai defaultnya adalah 5 MB. Mengatur nilai yang lebih tinggi menyebabkan lebih sedikit penggunaan disk, tetapi ingat bahwa item dalam memori hilang jika aplikasi mengalami crash.

  • MaxTransmissionSenderCapacity: Jumlah Transmission maksimum instans yang dikirim ke Application Insights secara bersamaan. Nilai defaultnya adalah 10. Pengaturan ini dapat dikonfigurasi ke angka yang lebih tinggi, yang kami sarankan ketika volume telemetri yang besar dihasilkan. Volume tinggi biasanya terjadi selama pengujian beban atau saat pengambilan sampel dimatikan.

  • StorageFolder: Folder yang digunakan oleh saluran untuk menyimpan item ke disk sesuai kebutuhan. Dalam Windows, %LOCALAPPDATA% atau %TEMP% digunakan jika tidak ada jalur lain yang ditentukan secara eksplisit. Di lingkungan selain Windows, secara default lokasi berikut digunakan (berurutan): %TMPDIR%, /var/tmp/ atau /tmp/.

Saluran mana yang harus saya gunakan?

Kami merekomendasikan ServerTelemetryChannel untuk sebagian besar skenario produksi yang melibatkan aplikasi yang berjalan lama. Untuk informasi selengkapnya tentang membersihkan telemetri, pelajari cara menggunakan Flush().

Kapan menggunakan Flush()

Metode Flush() ini segera mengirim telemetri yang telah di-buffer. Namun, itu hanya boleh digunakan dalam skenario tertentu.

Gunakan Flush() saat:

  • Aplikasi akan dimatikan dan Anda ingin memastikan telemetri telah dikirim sebelum keluar.
  • Anda berada dalam penangan pengecualian dan perlu menjamin telemetri terkirim.
  • Anda menulis sebuah proses jangka pendek seperti pekerjaan latar belakang atau perangkat CLI yang berhenti dengan cepat.

Hindari menggunakan Flush() dalam aplikasi yang berjalan lama seperti layanan web. SDK secara otomatis mengelola buffering dan transmisi. Memanggil Flush() secara tidak perlu dapat menyebabkan masalah performa dan tidak menjamin semua data dikirim, terutama saat menggunakan ServerTelemetryChannel, yang tidak menyiram secara sinkron.

Modul telemetri

Application Insights secara otomatis mengumpulkan telemetri tentang beban kerja tertentu tanpa memerlukan pelacakan manual oleh pengguna.

Secara default, modul pengumpulan otomatis berikut diaktifkan. Anda dapat menonaktifkan atau mengonfigurasinya untuk mengubah perilaku defaultnya.

ASP.NET

Setiap modul telemetri mengumpulkan jenis data tertentu dan menggunakan API inti untuk mengirim data. Modul diinstal oleh paket NuGet yang berbeda, yang juga menambahkan baris yang diperlukan ke file .config.

Wilayah Deskripsi
Meminta pelacakan Mengumpulkan telemetri permintaan (waktu respons, kode hasil) untuk permintaan web masuk.

Modul:Microsoft.ApplicationInsights.Web.RequestTrackingTelemetryModule
NuGet:Microsoft.ApplicationInsights.Web
Pelacakan dependensi Mengumpulkan telemetri tentang dependensi keluar (panggilan HTTP, panggilan SQL). Untuk bekerja di IIS, instal Application Insights Agent. Anda juga dapat menulis pelacakan dependensi kustom menggunakan TRACKDependency API. Mendukung autoinstrumentasi dengan App Service dan mesin virtual serta pemantauan sekumpulan skala mesin virtual.

Modul:Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule
NuGet:Microsoft.ApplicationInsights.DependencyCollector
Penghitung kinerja Mengumpulkan penghitung kinerja Windows (CPU, memori, beban jaringan dari penginstalan IIS). Tentukan penghitung mana (termasuk penghitung kustom). Untuk informasi selengkapnya, lihat Mengumpulkan penghitung kinerja sistem.

Modul:Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule
NuGet:Microsoft.ApplicationInsights.PerfCounterCollector
Penghitung peristiwa Mengumpulkan .NET EventCounters. Direkomendasikan untuk ASP.NET Core dan lintas platform sebagai pengganti penghitung kinerja Windows.

Modul:EventCounterCollectionModule (SDK ≥ 2.8.0)
Metrik Langsung (QuickPulse) Mengumpulkan telemetri untuk panel Metrik Langsung.

Modul:QuickPulseTelemetryModule
Heartbeats (App Service) Mengirim heartbeat dan metrik kustom untuk lingkungan App Service.

Modul:AppServicesHeartbeatTelemetryModule
Heartbeats (VM dan set skala mesin virtual) Mengirim heartbeat dan metrik khusus untuk lingkungan Azure VM.

Modul:AzureInstanceMetadataTelemetryModule
Telemetri diagnostik Melaporkan kesalahan dalam kode instrumentasi Application Insights (misalnya, penghitung yang hilang, pengecualian ITelemetryInitializer). Telemetri pelacakan muncul di Pencarian Diagnostik.

Modul:Microsoft.ApplicationInsights.Extensibility.Implementation.Tracing.DiagnosticsTelemetryModule
NuGet:Microsoft.ApplicationInsights

Nota: Jika Anda hanya menginstal paket ini, file ApplicationInsights.config tidak dibuat secara otomatis.
Mode pengembang (debugger terlampir) TelemetryChannel Memaksa pengiriman item segera ketika debugger terlampir. Mengurangi latensi tetapi meningkatkan overhead CPU/jaringan.

Modul:Microsoft.ApplicationInsights.WindowsServer.DeveloperModeWithDebuggerAttachedTelemetryModule
NuGet: Wawasan Aplikasi Windows Server
Pelacakan pengecualian (Web) Melacak pengecualian yang tidak tertangani di aplikasi web. Lihat Kegagalan dan pengecualian.

Modul:Microsoft.ApplicationInsights.Web.ExceptionTrackingTelemetryModule
NuGet:Microsoft.ApplicationInsights.Web
Pelacakan pengecualian (Tidak Terpantau/Tidak Ditangani) Melacak pengecualian tugas yang tidak terlihat dan pengecualian yang tidak tertangani untuk peran pekerja, layanan Windows, dan aplikasi konsol.

Modul:
ʉۢ org.osgi.service.jdbc.DataSourceFactory
ʉۢ org.osgi.service.jdbc.DataSourceFactory
NuGet:Microsoft.ApplicationInsights.WindowsServer
Pelacakan EventSource Mengirim EventSource yang dikonfigurasi ke Application Insights sebagai tracing.

Modul:Microsoft.ApplicationInsights.EventSourceListener.EventSourceTelemetryModule
NuGet:Microsoft.ApplicationInsights.EventSourceListener
Pengumpul ETW Mengirim peristiwa penyedia ETW yang dikonfigurasi ke Application Insights sebagai pelacakan.

Modul:Microsoft.ApplicationInsights.EtwCollector.EtwCollectorTelemetryModule
NuGet:Microsoft.ApplicationInsights.EtwCollector
CORE API (bukan modul) CORE API yang digunakan oleh komponen telemetri lain dan untuk telemetri kustom.

Modul:Microsoft.ApplicationInsights package
NuGet:Microsoft.ApplicationInsights
Nota: Jika Anda hanya menginstal paket ini, file ApplicationInsights.config tidak dibuat secara otomatis.
ASP.NET Core
Wilayah Deskripsi
Meminta pelacakan Pelacakan permintaan bawaan melalui integrasi ASP.NET Core Application Insights.

Module:Tidak ada kelas modul terpisah.
NuGet:Microsoft.ApplicationInsights.AspNetCore
Pelacakan dependensi Melalui Kolektor Dependensi.

NuGet:Microsoft.ApplicationInsights.DependencyCollector
Penghitung kinerja Hanya Windows! Pada lintas platform, gunakan EventCounterCollectionModule (lihat baris berikutnya).

NuGet:Microsoft.ApplicationInsights.PerfCounterCollector
Penghitung peristiwa Mengumpulkan .NET EventCounters. Direkomendasikan untuk ASP.NET Core dan lintas platform sebagai pengganti penghitung kinerja Windows.

Modul:EventCounterCollectionModule (SDK 2.8.0 dan yang lebih tinggi)
NuGet:Microsoft.ApplicationInsights.EventCounterCollector
Metrik Langsung (QuickPulse) Fitur Live Metrics diaktifkan dalam integrasi dengan Application Insights ASP.NET Core.

Module:Tidak ada kelas modul terpisah.
NuGet:Microsoft.ApplicationInsights.AspNetCore
Pengumpul detak jantung (App Service) Mengirim heartbeat (sebagai metrik kustom) dengan detail tentang lingkungan App Service. Bawaan melalui SDK dasar saat dihosting di App Service.

Module:Tidak ada kelas modul terpisah.
NuGet:Microsoft.ApplicationInsights.AspNetCore
Pengumpul heartbeat (VM dan set skala komputer virtual) Mengirim detak jantung (sebagai metrik kustom) dengan detail tentang lingkungan Mesin Virtual Azure. Terintegrasi melalui SDK dasar saat dihosting di VM Azure dan kumpulan skala mesin virtual Azure.

Module:Tidak ada kelas modul terpisah.
NuGet:Microsoft.ApplicationInsights.AspNetCore
Telemetri diagnostik Melaporkan kesalahan dalam kode instrumentasi Application Insights itu sendiri (misalnya, tidak dapat mengakses penghitung kinerja, ITelemetryInitializer melemparkan pengecualian). Telemetri pelacakan muncul di Pencarian Diagnostik.

Modul:Microsoft.ApplicationInsights.Extensibility.Implementation.Tracing.DiagnosticsTelemetryModule
NuGet:Microsoft.ApplicationInsights
Mode pengembang (debugger terlampir) Perilaku yang sama tersedia; kelas adalah bagian dari paket Windows Server.

Modul:Microsoft.ApplicationInsights.WindowsServer.DeveloperModeWithDebuggerAttachedTelemetryModule
NuGet:Microsoft.ApplicationInsights.WindowsServer
Pelacakan pengecualian (Web) Pelacakan pengecualian otomatis dalam integrasi ASP.NET Core Application Insights

Module:Tidak ada kelas modul terpisah.
NuGet:Microsoft.ApplicationInsights.AspNetCore
Pelacakan pengecualian (Tidak Terpantau/Tidak Ditangani) Perilaku serupa melalui runtime/integrasi ASP.NET Core; nama kelas khusus untuk Windows Server.

NuGet:Microsoft.ApplicationInsights.WindowsServer
Pelacakan EventSource Mengirim peristiwa EventSource yang dikonfigurasi ke Application Insights sebagai jejak.

Modul:Microsoft.ApplicationInsights.EventSourceListener.EventSourceTelemetryModule
NuGet:Microsoft.ApplicationInsights.EventSourceListener
Pengumpul ETW Hanya untuk Windows (ETW). Mengirim peristiwa penyedia ETW yang dikonfigurasi ke Application Insights sebagai pelacakan.

Modul:Microsoft.ApplicationInsights.EtwCollector.EtwCollectorTelemetryModule
NuGet:Microsoft.ApplicationInsights.EtwCollector
CORE API (bukan modul) API Inti yang digunakan oleh komponen telemetri lain dan untuk telemetri kustom.

Modul:Microsoft.ApplicationInsights package
NuGet:Microsoft.ApplicationInsights

Mengonfigurasi modul telemetri

ASP.NET

Gunakan bagian TelemetryModules di ApplicationInsights.config untuk mengonfigurasi, menambahkan, atau menghapus modul. Contoh berikut:

  • Konfigurasikan DependencyTrackingTelemetryModule (aktifkan penyuntikan header W3C).
  • Konfigurasikan EventCounterCollectionModule (hapus default dan tambahkan satu penghitung).
  • Nonaktifkan pengumpulan PerformanceCollectorModule perf-counter dengan menghapusnya.
<ApplicationInsights>
  <TelemetryModules>

    <!-- Dependency tracking -->
    <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
      <!-- Match Core example: enable W3C header injection -->
      <EnableW3CHeadersInjection>true</EnableW3CHeadersInjection>
    </Add>

    <!-- EventCounterCollectionModule: add a single counter (if you use event counters) -->
    <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.EventCounterCollectionModule, Microsoft.AI.PerfCounterCollector">
      <Counters>
        <!-- Mirrors Core example: only collect 'gen-0-size' from System.Runtime -->
        <Add ProviderName="System.Runtime" CounterName="gen-0-size" />
      </Counters>
    </Add>

    <!-- PerformanceCollectorModule (classic Windows performance counters).
         To DISABLE perf-counter collection, do NOT include this module.
         If it already exists in your file, remove or comment it out.
         Example of the line you would remove:
    <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector" />
    -->

  </TelemetryModules>
</ApplicationInsights>

Nota

Set modul yang tepat di ApplicationInsights.config Anda bergantung pada paket SDK yang Anda instal.

ASP.NET Core

Opsi 1: Mengonfigurasi modul telemetri menggunakan ConfigureTelemetryModule

Untuk mengonfigurasi default TelemetryModuleapa pun, gunakan metode ConfigureTelemetryModule<T> ekstensi pada IServiceCollection, seperti yang ditunjukkan dalam contoh berikut:

using Microsoft.ApplicationInsights.DependencyCollector;
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// The following configures DependencyTrackingTelemetryModule.
// Similarly, any other default modules can be configured.
builder.Services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) =>
        {
            module.EnableW3CHeadersInjection = true;
        });

// The following removes all default counters from EventCounterCollectionModule, and adds a single one.
builder.Services.ConfigureTelemetryModule<EventCounterCollectionModule>((module, o) =>
        {
            module.Counters.Add(new EventCounterCollectionRequest("System.Runtime", "gen-0-size"));
        });

// The following removes PerformanceCollectorModule to disable perf-counter collection.
// Similarly, any other default modules can be removed.
var performanceCounterService = builder.Services.FirstOrDefault<ServiceDescriptor>(t => t.ImplementationType == typeof(PerformanceCollectorModule));
if (performanceCounterService != null)
{
    builder.Services.Remove(performanceCounterService);
}

var app = builder.Build();

Opsi 2: Mengonfigurasi modul telemetri menggunakan ApplicationInsightsServiceOptions

Di SDK versi 2.12.2 dan yang lebih baru, Anda dapat memodifikasi beberapa pengaturan umum dengan meneruskan ApplicationInsightsServiceOptions ke AddApplicationInsightsTelemetry, seperti dalam contoh ini:

var builder = WebApplication.CreateBuilder(args);

var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();

// Disables adaptive sampling.
aiOptions.EnableAdaptiveSampling = false;

// Disables live metrics (also known as QuickPulse).
aiOptions.EnableQuickPulseMetricStream = false;

builder.Services.AddApplicationInsightsTelemetry(aiOptions);
var app = builder.Build();

Tabel ini menyediakan daftar lengkap ApplicationInsightsServiceOptions setelan:

Setting Deskripsi Default
Aktifkan Modul Koleksi Penghitung Kinerja Aktifkan/Nonaktifkan PerformanceCounterCollectionModule. Benar
Aktifkan Modul Telemetri Pelacakan Permintaan Aktifkan/Nonaktifkan RequestTrackingTelemetryModule. Benar
Aktifkan Modul Pengumpulan Penghitung Acara Aktifkan/Nonaktifkan EventCounterCollectionModule. Benar
EnableDependencyTrackingTelemetryModule (Modul Telemetri Pelacakan Ketergantungan Aktif) Aktifkan/Nonaktifkan DependencyTrackingTelemetryModule. Benar
Aktifkan AppServicesHeartbeatTelemetryModule Aktifkan/Nonaktifkan AppServicesHeartbeatTelemetryModule. Benar
Aktifkan Azure Instance Metadata Telemetry Module Aktifkan/Nonaktifkan AzureInstanceMetadataTelemetryModule. Benar
AktifkanAliranMetrikQuickPulse Mengaktifkan/Menonaktifkan fitur LiveMetrics. Benar
Aktifkan Pengambilan Sampel Adaptif Aktifkan/Nonaktifkan Pengambilan Sampel Adaptif. Benar
Aktifkan Detak Jantung Aktifkan/Nonaktifkan fitur pemantauan denyut. Ini secara berkala (default 15 menit) mengirimkan metrik kustom bernama HeartbeatState dengan informasi tentang runtime seperti versi .NET dan informasi lingkungan Azure, jika relevan. Benar
AddAutoCollectedMetricExtractor (TambahEkstraktorMetrikTerkoleksiOtomatis) Aktifkan/Nonaktifkan AutoCollectedMetrics extractor. Prosesor telemetri ini mengirimkan metrik yang telah ditentukan sebelumnya tentang permintaan/dependensi sebelum pengambilan sampel terjadi. Benar
OpsiKoleksiPermintaan.LacakPengecualian Aktifkan/Nonaktifkan pelaporan pelacakan pengecualian yang tidak tertangani oleh modul pengumpulan permintaan. Salah di netstandard2.0 (karena pengecualian dilacak dengan ApplicationInsightsLoggerProvider). Benar sebaliknya.
Mengaktifkan Modul Telemetri Diagnostik Aktifkan/Nonaktifkan DiagnosticsTelemetryModule. Menonaktifkan menyebabkan pengaturan berikut diabaikan: EnableHeartbeat, , EnableAzureInstanceMetadataTelemetryModuledan EnableAppServicesHeartbeatTelemetryModule. Benar

Untuk daftar terbaru, lihat setelan yang dapat dikonfigurasi di ApplicationInsightsServiceOptions.

Rekomendasi konfigurasi untuk Microsoft.ApplicationInsights.AspNetCore SDK 2.15.0 dan yang lebih baru

Di Microsoft.ApplicationInsights.AspNetCore SDK versi 2.15.0 dan yang lebih baru, konfigurasikan setiap pengaturan yang tersedia di ApplicationInsightsServiceOptions, termasuk ConnectionString. Gunakan instans aplikasi IConfiguration . Pengaturan harus berada di bawah bagian ApplicationInsights, seperti yang ditunjukkan dalam contoh berikut. Bagian berikut dari appsettings.json mengonfigurasi string koneksi dan menonaktifkan pengambilan sampel adaptif dan pengumpulan penghitung kinerja.

{
    "ApplicationInsights": {
    "ConnectionString": "<YOUR-CONNECTION-STRING>",
    "EnableAdaptiveSampling": false,
    "EnablePerformanceCounterCollectionModule": false
    }
}

Jika builder.Services.AddApplicationInsightsTelemetry(aiOptions) untuk ASP.NET Core 6.0 atau services.AddApplicationInsightsTelemetry(aiOptions) untuk ASP.NET Core 3.1 dan versi sebelumnya digunakan, itu akan mengambil alih pengaturan dari Microsoft.Extensions.Configuration.IConfiguration.

Layanan Pekerja

Opsi 1: Mengonfigurasi modul telemetri menggunakan ConfigureTelemetryModule

Application Insights menggunakan modul telemetri untuk mengumpulkan telemetri secara otomatis tentang beban kerja tertentu tanpa memerlukan pelacakan manual.

Modul autocollection berikut diaktifkan secara default. Modul ini bertanggung jawab untuk mengumpulkan telemetri secara otomatis. Anda dapat menonaktifkan atau mengonfigurasinya untuk mengubah perilaku defaultnya.

  • DependencyTrackingTelemetryModule
  • PerformanceCollectorModule
  • QuickPulseTelemetryModule
  • AppServicesHeartbeatTelemetryModule (Saat ini ada masalah yang melibatkan modul telemetri ini. Untuk solusi sementara, lihat Masalah GitHub 1689.)
  • AzureInstanceMetadataTelemetryModule

Untuk mengonfigurasi modul telemetri default apa pun, gunakan metode ConfigureTelemetryModule ekstensi pada IServiceCollection, seperti yang ditunjukkan dalam contoh berikut:

    using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse;
    using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetryWorkerService();

            // The following configures QuickPulseTelemetryModule.
            // Similarly, any other default modules can be configured.
            services.ConfigureTelemetryModule<QuickPulseTelemetryModule>((module, o) =>
            {
                module.AuthenticationApiKey = "<YOUR-API-KEY-HERE>";
            });

            // The following removes PerformanceCollectorModule to disable perf-counter collection.
            // Similarly, any other default modules can be removed.
            var performanceCounterService = services.FirstOrDefault<ServiceDescriptor>
                                        (t => t.ImplementationType == typeof(PerformanceCollectorModule));
            if (performanceCounterService != null)
            {
                services.Remove(performanceCounterService);
            }
    }

Opsi 2: Mengonfigurasi modul telemetri menggunakan ApplicationInsightsServiceOptions

Anda dapat mengubah beberapa pengaturan umum dengan meneruskan ApplicationInsightsServiceOptions ke AddApplicationInsightsTelemetryWorkerService, seperti dalam contoh ini:

using Microsoft.ApplicationInsights.WorkerService;

public void ConfigureServices(IServiceCollection services)
{
    var aiOptions = new ApplicationInsightsServiceOptions();
    // Disables adaptive sampling.
    aiOptions.EnableAdaptiveSampling = false;

    // Disables live metrics (also known as QuickPulse).
    aiOptions.EnableQuickPulseMetricStream = false;
    services.AddApplicationInsightsTelemetryWorkerService(aiOptions);
}

ApplicationInsightsServiceOptions dalam SDK ini berada di namespace Microsoft.ApplicationInsights.WorkerService dibandingkan dengan Microsoft.ApplicationInsights.AspNetCore.Extensions di SDK ASP.NET Core.

Tabel berikut ini mencantumkan pengaturan yang umum digunakan di ApplicationInsightsServiceOptions.

Setting Deskripsi Default
AktifkanAliranMetrikQuickPulse Aktifkan/Nonaktifkan fitur metrik langsung. Benar
Aktifkan Pengambilan Sampel Adaptif Aktifkan/Nonaktifkan Pengambilan Sampel Adaptif. Benar
Aktifkan Detak Jantung Aktifkan/Nonaktifkan fitur Heartbeats, yang secara berkala (default 15 menit) mengirimkan metrik kustom bernama "HeartBeatState" dengan informasi tentang runtime seperti versi .NET dan lingkungan Azure, jika berlaku. Benar
AddAutoCollectedMetricExtractor (TambahEkstraktorMetrikTerkoleksiOtomatis) Aktifkan/Nonaktifkan ekstraktor AutoCollectedMetrics, yang merupakan prosesor telemetri yang mengirim metrik yang telah ditentukan sebelumnya tentang Permintaan/Dependensi sebelum pengambilan sampel terjadi. Benar
Mengaktifkan Modul Telemetri Diagnostik Aktifkan/Nonaktifkan DiagnosticsTelemetryModule. Menonaktifkan pengaturan ini menyebabkan pengaturan berikut diabaikan: EnableHeartbeat, , EnableAzureInstanceMetadataTelemetryModuledan EnableAppServicesHeartbeatTelemetryModule. Benar

Untuk daftar paling mutakhir, lihat pengaturan yang dapat dikonfigurasi di ApplicationInsightsServiceOptions.

Menonaktifkan telemetri

ASP.NET

Ada simpul dalam file konfigurasi untuk setiap modul. Untuk menonaktifkan modul, hapus simpul atau komentari.

ASP.NET Core

Jika Anda ingin menonaktifkan telemetri secara kondisional dan dinamis, Anda dapat menyelesaikan instance TelemetryConfiguration dengan kontainer injeksi dependensi ASP.NET Core di mana saja dalam kode Anda dan menyetel tanda DisableTelemetry di atasnya.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// any custom configuration can be done here:
builder.Services.Configure<TelemetryConfiguration>(x => x.DisableTelemetry = true);

var app = builder.Build();

Sampel kode sebelumnya mencegah pengiriman data telemetri ke Application Insights. Itu tidak mencegah modul pengumpulan otomatis mengumpulkan telemetri. Jika Anda ingin menghapus modul autocollection tertentu, lihat modul telemetri.

Layanan Pekerja

Jika Anda ingin menonaktifkan telemetri secara kondisional dan dinamis, Anda dapat menyelesaikan instance TelemetryConfiguration dengan kontainer injeksi dependensi ASP.NET Core di mana saja dalam kode Anda dan menyetel tanda DisableTelemetry di atasnya.

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetryWorkerService();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, TelemetryConfiguration configuration)
    {
        configuration.DisableTelemetry = true;
        ...
    }

Rangkaian koneksi

Pengaturan ini menentukan sumber daya Application Insights tempat data Anda muncul. Biasanya, Anda membuat sumber daya terpisah, dengan string koneksi terpisah, untuk setiap aplikasi Anda.

Lihat String koneksi di Application Insights untuk sampel kode.

Jika Anda ingin mengatur string koneksi secara dinamis, misalnya, untuk mengirim hasil dari aplikasi Anda ke sumber daya yang berbeda, Anda dapat menghilangkan string koneksi dari file konfigurasi dan mengaturnya dalam kode sebagai gantinya.

ASP.NET

Untuk mengatur string koneksi untuk semua instans TelemetryClient, termasuk modul telemetri standar, lakukan langkah ini dalam metode inisialisasi, seperti global.aspx.cs dalam layanan ASP.NET:

using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights;

    protected void Application_Start()
    {
        TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
        configuration.ConnectionString = "<YOUR-CONNECTION-STRING>";
        var telemetryClient = new TelemetryClient(configuration);

Jika Anda ingin mengirim serangkaian peristiwa tertentu ke sumber daya yang berbeda, Anda dapat mengatur kunci untuk klien telemetri tertentu:


    var tc = new TelemetryClient();
    tc.Context.ConnectionString = "<YOUR-CONNECTION-STRING>";
    tc.TrackEvent("myEvent");
    // ...

Untuk mendapatkan string koneksi baru, buat sumber daya baru di portal Application Insights.

ASP.NET Core

Di ASP.NET Core, konfigurasikan string koneksi di Program.cs saat memulai aplikasi menggunakan TelemetryConfiguration dari container injeksi dependensi (DI):

using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights;

var builder = WebApplication.CreateBuilder(args);

// Add Application Insights
builder.Services.AddApplicationInsightsTelemetry();

var app = builder.Build();

// Resolve TelemetryConfiguration from DI and set the connection string
var config = app.Services.GetRequiredService<TelemetryConfiguration>();
config.ConnectionString = "<YOUR-CONNECTION-STRING>";

app.Run();

Jika Anda ingin mengirim serangkaian peristiwa tertentu ke sumber daya yang berbeda, Anda dapat membuat instans baru TelemetryClient dan mengatur string koneksinya secara eksplisit:

using Microsoft.ApplicationInsights;

var tc = new TelemetryClient();
tc.Context.ConnectionString = "<YOUR-CONNECTION-STRING>";
tc.TrackEvent("myEvent");
// ...

Penyedia ApplicationId

Nota

Untuk ASP.NET, penyedia ini tersedia mulai dari SDK v2.6.0*.

Tujuan penyedia ini adalah untuk mencari ID aplikasi berdasarkan string koneksi. ID aplikasi disertakan dalam RequestTelemetry dan DependencyTelemetry digunakan untuk menentukan korelasi di portal.

Fungsionalitas ini tersedia dengan mengatur TelemetryConfiguration.ApplicationIdProvider.

Antarmuka: IApplicationIdProvider

public interface IApplicationIdProvider
{
    bool TryGetApplicationId(string connectionString, out string applicationId);
}

Kami menyediakan dua implementasi di Microsoft.ApplicationInsights SDK: ApplicationInsightsApplicationIdProvider dan DictionaryApplicationIdProvider.

ApplicationInsightsApplicationIdProvider

Pembungkus ini adalah untuk API Profil kami. Ini membatasi permintaan dan hasil cache. Penyedia ini secara otomatis disertakan saat Anda menginstal Microsoft.ApplicationInsights.DependencyCollector atau Microsoft.ApplicationInsights.Web.

Kelas mengekspos properti opsional yang disebut ProfileQueryEndpoint. Secara default, diatur ke https://dc.services.visualstudio.com/api/profiles/{0}/appId.

Jika Anda perlu mengonfigurasi proksi, sebaiknya melakukan proxy terhadap alamat dasar dan memastikan bahwa jalur tersebut mencakup /api/profiles/{0}/appId. Pada runtime, {0} diganti dengan string koneksi untuk setiap permintaan.

ASP.NET

Contoh konfigurasi melalui ApplicationInsights.config

<ApplicationInsights>
    ...
    <ApplicationIdProvider Type="Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId.ApplicationInsightsApplicationIdProvider, Microsoft.ApplicationInsights">
        <ProfileQueryEndpoint>https://dc.services.visualstudio.com/api/profiles/{0}/appId</ProfileQueryEndpoint>
    </ApplicationIdProvider>
    ...
</ApplicationInsights>

Contoh konfigurasi melalui kode

TelemetryConfiguration.Active.ApplicationIdProvider = new ApplicationInsightsApplicationIdProvider();
ASP.NET Core

Nota

Dalam ASP.NET Core, tidak ada file ApplicationInsights.config. Konfigurasi dilakukan melalui injeksi dependensi (DI) di Program.cs atau Startup.cs.

Anda dapat mengganti penyedia default atau menyesuaikannya ProfileQueryEndpoint.

using Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId;

var builder = WebApplication.CreateBuilder(args);

// Add Application Insights
builder.Services.AddApplicationInsightsTelemetry();

// Replace default provider with custom configuration
builder.Services.AddSingleton<IApplicationIdProvider>(sp =>
    new ApplicationInsightsApplicationIdProvider
    {
        ProfileQueryEndpoint = "https://custom-proxy/api/profiles/{0}/appId"
    });

var app = builder.Build();
app.Run();

DictionaryApplicationIdProvider

Penyedia statis ini bergantung pada pasangan string koneksi/ID aplikasi yang dikonfigurasi.

Kelas ini memiliki Defined properti , yang merupakan Dictionary<string,string> pasangan string koneksi/ID aplikasi.

Kelas ini memiliki properti Nextopsional , yang dapat digunakan untuk mengonfigurasi penyedia lain untuk digunakan ketika string koneksi diminta yang tidak ada dalam konfigurasi Anda.

ASP.NET

Contoh konfigurasi melalui ApplicationInsights.config

<ApplicationInsights>
    ...
    <ApplicationIdProvider Type="Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId.DictionaryApplicationIdProvider, Microsoft.ApplicationInsights">
        <Defined>
            <Type key="ConnectionString_1" value="ApplicationId_1"/>
            <Type key="ConnectionString_2" value="ApplicationId_2"/>
        </Defined>
        <Next Type="Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId.ApplicationInsightsApplicationIdProvider, Microsoft.ApplicationInsights" />
    </ApplicationIdProvider>
    ...
</ApplicationInsights>

Contoh konfigurasi melalui kode

TelemetryConfiguration.Active.ApplicationIdProvider = new DictionaryApplicationIdProvider{
 Defined = new Dictionary<string, string>
    {
        {"ConnectionString_1", "ApplicationId_1"},
        {"ConnectionString_2", "ApplicationId_2"}
    }
};
ASP.NET Core
using Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// Register DictionaryApplicationIdProvider
builder.Services.AddSingleton<IApplicationIdProvider>(sp =>
    new DictionaryApplicationIdProvider
    {
        Defined = new Dictionary<string, string>
        {
            { "ConnectionString_1", "ApplicationId_1" },
            { "ConnectionString_2", "ApplicationId_2" }
        },
        Next = new ApplicationInsightsApplicationIdProvider() // optional fallback
    });

var app = builder.Build();
app.Run();

Menambahkan pemantauan sisi klien

Bagian sebelumnya memberikan panduan tentang metode untuk mengonfigurasikan pemantauan sisi server secara otomatis dan manual. Untuk menambahkan pemantauan sisi klien, gunakan SDK JavaScript sisi klien. Anda dapat memantau transaksi sisi klien halaman web apa pun dengan menambahkan Skrip Pemuat SDK JavaScript (Web) sebelum tag penutup </head> HTML halaman.

Meskipun dimungkinkan untuk menambahkan Skrip Pemuat SDK JavaScript (Web) secara manual ke header setiap halaman HTML, kami sarankan Anda menambahkan Skrip Pemuat SDK JavaScript (Web) ke halaman utama. Tindakan itu menyuntikkan Skrip Pemuat SDK JavaScript (Web) ke semua halaman situs.

ASP.NET

Untuk aplikasi ASP.NET MVC berbasis templat dari artikel ini, file yang perlu Anda edit adalah _Layout.cshtml. Anda dapat menemukannya di Tampilan>yang Dibagikan. Untuk menambahkan pemantauan sisi klien, buka _Layout.cshtml dan ikuti instruksi penyiapan berbasis JavaScript (Web) SDK Loader Script dari artikel tentang konfigurasi JavaScript SDK sisi klien.

ASP.NET Core

Jika aplikasi Anda memiliki komponen sisi klien, ikuti langkah berikutnya untuk mulai mengumpulkan telemetri penggunaan menggunakan injeksi Skrip Pemuat SDK JavaScript (Web) menurut konfigurasi.

  1. Di _ViewImports.cshtml, tambahkan injeksi:

    @inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippet
    
  2. Di _Layout.cshtml, sisipkan HtmlHelper di akhir bagian <head> tetapi sebelum skrip lainnya. Jika Anda ingin melaporkan telemetri JavaScript kustom dari halaman, masukkan setelah cuplikan ini:

        @Html.Raw(JavaScriptSnippet.FullScript)
    </head>
    

Sebagai alternatif untuk menggunakan FullScript, ScriptBody tersedia mulai dari Application Insights SDK untuk ASP.NET Core versi 2.14. Gunakan ScriptBody jika Anda perlu mengontrol tag <script> untuk mengatur Kebijakan Keamanan Konten:

<script> // apply custom changes to this script tag.
    @Html.Raw(JavaScriptSnippet.ScriptBody)
</script>

Nama file .cshtml yang dirujuk sebelumnya berasal dari templat aplikasi MVC default. Pada akhirnya, jika Anda ingin mengaktifkan pemantauan sisi klien dengan benar untuk aplikasi Anda, Skrip Pemuat SDK JavaScript (Web) harus muncul di <head> bagian setiap halaman aplikasi yang ingin Anda pantau. Tambahkan Skrip Pemuat SDK JavaScript (Web) ke _Layout.cshtml dalam templat aplikasi untuk mengaktifkan pemantauan sisi klien.

Jika proyek Anda tidak menyertakan _Layout.cshtml, Anda masih dapat menambahkan pemantauan sisi klien dengan menambahkan Skrip Pemuat SDK JavaScript (Web) ke file yang setara yang mengontrol <head> semua halaman dalam aplikasi Anda. Atau, Anda dapat menambahkan Skrip Pemuat SDK JavaScript (Web) ke beberapa halaman, tetapi kami tidak merekomendasikannya.

Nota

Injeksi JavaScript memberikan pengalaman konfigurasi default. Jika Anda memerlukan konfigurasi di luar pengaturan connection string, Anda harus menghapus autoinjection seperti yang dijelaskan dan kemudian menambahkan JavaScript SDK secara manual.

API inti untuk peristiwa dan metrik kustom

Sisipkan beberapa baris kode di aplikasi Anda untuk mengetahui apa yang dilakukan pengguna dengannya, atau untuk membantu mendiagnosis masalah. Anda dapat mengirim telemetri dari aplikasi perangkat dan desktop, klien web, dan server web. Gunakan API telemetri inti Application Insights untuk mengirim peristiwa dan metrik kustom dan versi telemetri standar Anda sendiri. API ini adalah API yang sama dengan yang digunakan pengumpul data Application Insights standar.

Ringkasan API

API inti seragam di semua platform, selain dari beberapa variasi seperti GetMetric (hanya .NET).

Metode Digunakan untuk
TrackPageView Halaman, layar, panel, atau formulir.
TrackEvent Tindakan pengguna dan peristiwa lainnya. Digunakan untuk melacak perilaku pengguna atau untuk memantau performa.
GetMetric Metrik nol dan multidimensi, agregasi yang dikonfigurasi secara terpusat, hanya C#.
TrackMetric Pengukuran performa seperti panjang antrean yang tidak terkait dengan peristiwa tertentu.
TrackException Mencatat pengecualian untuk diagnosis. Lacak di mana mereka terjadi dalam kaitannya dengan peristiwa lain dan periksa jejak tumpukan.
TrackRequest Mencatat frekuensi dan durasi permintaan server untuk analisis performa.
TrackTrace Pesan log Diagnostik Sumber Daya. Anda juga dapat mengambil log pihak ketiga.
TrackDependency Mencatat durasi dan frekuensi panggilan ke komponen eksternal yang bergantung pada aplikasi Anda.

Anda dapat melampirkan properti dan metrik ke sebagian besar panggilan telemetri ini.

Prasyarat

Jika Anda belum memiliki referensi tentang Application Insights SDK:

  1. Tambahkan Application Insights SDK ke proyek Anda.

  2. Di perangkat atau kode server web Anda, sertakan:

    using Microsoft.ApplicationInsights;
    

Mendapatkan instans TelemetryClient

Dapatkan instans dari TelemetryClient:

Nota

Jika Anda menggunakan Azure Functions v2+ atau Azure WebJobs v3+, lihat Monitor Azure Functions.

Nota

Untuk aplikasi ASP.NET Core dan Non-HTTP/Worker pada .NET/.NET Core, dapatkan sebuah instance dari TelemetryClient dari kontainer injeksi dependensi seperti yang dijelaskan dalam dokumentasi masing-masing.

private TelemetryClient telemetry = new TelemetryClient();

Jika Anda melihat pesan yang memberi tahu Anda metode ini usang, lihat microsoft/ApplicationInsights-dotnet#1152 untuk informasi selengkapnya.

Permintaan HTTP masuk diambil secara otomatis. Anda mungkin ingin membuat lebih banyak instance TelemetryClient untuk modul lain dari aplikasi Anda. Misalnya, Anda mungkin memiliki satu TelemetryClient instans di kelas middleware Anda untuk melaporkan peristiwa logika bisnis. Anda dapat mengatur properti seperti UserId dan DeviceId untuk mengidentifikasi komputer. Informasi ini dilampirkan ke semua peristiwa yang dikirim instans.

TelemetryClient.Context.User.Id = "...";
TelemetryClient.Context.Device.Id = "...";

Nota

TelemetryClient adalah utas aman.

TrackEvent

Di Application Insights, peristiwa kustom adalah titik data yang dapat Anda tampilkan di Metrics Explorer sebagai jumlah agregat dan di Cari sebagai kemunculan individual. (Ini tidak terkait dengan MVC atau framework lain "event.")

Sisipkan TrackEvent panggilan dalam kode Anda untuk menghitung berbagai peristiwa. Misalnya, Anda mungkin ingin melacak seberapa sering pengguna memilih fitur tertentu. Atau Anda mungkin ingin tahu seberapa sering mereka mencapai tujuan tertentu atau membuat jenis kesalahan tertentu.

Misalnya, dalam aplikasi game, kirim peristiwa setiap kali pengguna memenangkan game:

telemetry.TrackEvent("WinGame");

Peristiwa kustom di Log Analytics

Telemetri tersedia dalam customEvents tabel pada tab Log Application Insights atau pengalaman penggunaan. Peristiwa mungkin berasal dari trackEvent(..) atau plugin Click Analytics Autocollection.

Jika pengambilan sampel sedang beroperasi, itemCount properti menunjukkan nilai yang lebih besar dari 1. Misalnya, itemCount==10 berarti bahwa dari 10 panggilan ke trackEvent(), proses pengambilan sampel hanya dikirimkan salah satunya. Untuk mendapatkan jumlah peristiwa kustom yang benar, gunakan kode seperti customEvents | summarize sum(itemCount).

Nota

itemCount memiliki nilai minimum satu; rekaman itu sendiri mewakili entri.

GetMetric

Untuk mempelajari cara menggunakan panggilan GetMetric() secara efektif untuk mengambil metrik yang telah dipragregasikan secara lokal untuk aplikasi .NET dan .NET Core, lihat Kumpulan metrik kustom di .NET dan .NET Core.

TrackMetric

Nota

Microsoft.ApplicationInsights.TelemetryClient.TrackMetric bukan metode yang disukai untuk mengirim metrik. Metrik harus selalu di-preaggregasi selama periode waktu sebelum dikirim. Gunakan salah satu overload GetMetric(..) untuk memperoleh objek metrik yang memungkinkan akses terhadap kemampuan preaggregasi SDK.

Jika Anda menerapkan logika preaggregasi Anda sendiri, Anda dapat menggunakan TrackMetric() metode untuk mengirim agregat yang dihasilkan. Jika aplikasi Anda mengharuskan pengiriman item telemetri terpisah pada setiap kesempatan tanpa agregasi sepanjang waktu, Anda mungkin memiliki kasus penggunaan untuk telemetri peristiwa. Lihat TelemetryClient.TrackEvent(Microsoft.ApplicationInsights.DataContracts.EventTelemetry).

Application Insights dapat membuat bagan metrik yang tidak dilampirkan ke peristiwa tertentu. Misalnya, Anda dapat memantau panjang antrean secara berkala. Dengan metrik, pengukuran individu kurang menarik daripada variasi dan tren, sehingga bagan statistik berguna.

Untuk mengirim metrik ke Application Insights, Anda dapat menggunakan TrackMetric(..) API. Ada dua cara untuk mengirim metrik:

  • Nilai tunggal. Setiap kali Anda melakukan pengukuran di aplikasi, Anda mengirim nilai yang sesuai ke Application Insights.

    Misalnya, asumsikan Anda memiliki metrik yang menjelaskan jumlah item dalam kontainer. Selama periode waktu tertentu, Anda terlebih dahulu memasukkan tiga item ke dalam kontainer dan kemudian Anda menghapus dua item. Dengan demikian, Anda akan menelepon TrackMetric dua kali. Pertama, Anda akan meneruskan nilai 3 dan kemudian meneruskan nilai -2. Application Insights menyimpan kedua nilai untuk Anda.

  • Agregasi. Ketika Anda bekerja dengan metrik, setiap pengukuran jarang menarik. Sebaliknya, ringkasan apa yang terjadi selama periode waktu tertentu penting. Ringkasan semacam itu disebut agregasi.

    Dalam contoh sebelumnya, jumlah metrik agregat untuk periode waktu tersebut adalah 1 dan jumlah nilai metrik adalah 2. Saat Anda menggunakan pendekatan agregasi, Anda hanya memanggil TrackMetric sekali per periode waktu dan mengirim nilai agregat. Kami merekomendasikan pendekatan ini karena dapat secara signifikan mengurangi biaya dan overhead performa dengan mengirim lebih sedikit poin data ke Application Insights, sambil tetap mengumpulkan semua informasi yang relevan.

Contoh nilai tunggal

Untuk mengirim satu nilai metrik:

var sample = new MetricTelemetry();
sample.Name = "queueLength";
sample.Sum = 42.3;
telemetryClient.TrackMetric(sample);

Metrik kustom dalam Log Analytics

Telemetri tersedia dalam customMetrics tabel di Application Insights Analytics. Setiap baris mewakili panggilan ke trackMetric(..) di aplikasi Anda.

  • valueSum: Jumlah pengukuran. Untuk mendapatkan nilai rata-rata, bagi dengan valueCount.
  • valueCount: Jumlah pengukuran yang dikumpulkan ke dalam panggilan ini trackMetric(..) .

Nota

valueCount memiliki nilai minimum satu; rekaman itu sendiri mewakili entri.

Jumlah tampilan halaman

Di perangkat atau aplikasi halaman web, telemetri tampilan halaman dikirim secara default saat setiap layar atau halaman dimuat. Tetapi Anda dapat mengubah default untuk melacak tampilan halaman pada waktu yang lebih banyak atau berbeda. Misalnya, dalam aplikasi yang menampilkan tab atau panel, Anda mungkin ingin melacak halaman setiap kali pengguna membuka panel baru.

Data pengguna dan sesi dikirim sebagai properti bersama dengan tampilan halaman, sehingga diagram pengguna dan sesi menjadi interaktif ketika ada telemetri tampilan halaman.

Tampilan halaman kustom

telemetry.TrackPageView("GameReviewPage");

Telemetri Halaman pada Log Analytics

Dalam Log Analytics, dua tabel memperlihatkan data dari operasi browser:

  • pageViews: Berisi data tentang URL dan judul halaman.
  • browserTimings: Berisi data tentang performa klien seperti waktu yang diperlukan untuk memproses data masuk.

Untuk menemukan berapa lama waktu yang dibutuhkan browser untuk memproses halaman yang berbeda:

browserTimings
| summarize avg(networkDuration), avg(processingDuration), avg(totalDuration) by name

Untuk menemukan popularitas browser yang berbeda:

pageViews
| summarize count() by client_Browser

Untuk mengaitkan tampilan halaman ke panggilan AJAX, gabungkan dengan dependensi:

pageViews
| join (dependencies) on operation_Id

TrackRequest

SDK server menggunakan TrackRequest untuk mencatat permintaan HTTP.

Anda juga dapat menyebutnya sendiri jika Anda ingin mensimulasikan permintaan dalam konteks di mana Anda tidak menjalankan modul layanan web.

Cara yang disarankan untuk pengiriman telemetri permintaan adalah di mana permintaan bertindak sebagai konteks operasi.

Konteks operasi

Anda dapat menghubungkan item telemetri bersama-sama dengan mengaitkannya dengan konteks operasi. Modul pelacakan permintaan standar melakukannya untuk pengecualian dan peristiwa lain yang dikirim saat permintaan HTTP sedang diproses. Di Pencarian dan Analitik, Anda dapat dengan mudah menemukan peristiwa apa pun yang terkait dengan permintaan dengan menggunakan ID operasinya.

Saat Anda melacak telemetri secara manual, cara term mudah untuk memastikan korelasi telemetri adalah dengan menggunakan pola ini:

// Establish an operation context and associated telemetry item:
using (var operation = telemetryClient.StartOperation<RequestTelemetry>("operationName"))
{
    // Telemetry sent in here uses the same operation ID.
    ...
    telemetryClient.TrackTrace(...); // or other Track* calls
    ...

    // Set properties of containing telemetry item--for example:
    operation.Telemetry.ResponseCode = "200";

    // Optional: explicitly send telemetry item:
    telemetryClient.StopOperation(operation);

} // When operation is disposed, telemetry item is sent.

Untuk informasi selengkapnya tentang korelasi, lihat Korelasi telemetri di Application Insights.

Bersama dengan mengatur konteks operasi, StartOperation membuat item telemetri dari jenis yang Anda tentukan. Item telemetri dikirim saat Anda menyelesaikan operasi atau jika Anda secara eksplisit memanggil StopOperation. Jika Anda menggunakan RequestTelemetry sebagai jenis telemetri, durasinya diatur ke interval berwaktu antara mulai dan berhenti.

Item telemetri yang dilaporkan dalam lingkup operasi menjadi turunan dari operasi seperti itu. Konteks operasi dapat saling bertautan.

Di Pencarian, konteks operasi digunakan untuk membuat daftar Item Terkait .

Cuplikan layar yang memperlihatkan daftar Item Terkait.

Untuk informasi selengkapnya tentang pelacakan operasi kustom, lihat Melacak operasi kustom dengan Application Insights .NET SDK.

Permintaan dalam Log Analytics

Di Application Insights Analytics, permintaan muncul dalam requests tabel.

Jika pengambilan sampel sedang beroperasi, itemCount properti menunjukkan nilai yang lebih besar dari 1. Misalnya, itemCount==10 berarti bahwa dari 10 panggilan ke trackRequest(), proses pengambilan sampel hanya dikirimkan salah satunya. Untuk mendapatkan jumlah permintaan yang benar dan durasi rata-rata yang disegmentasi berdasarkan nama permintaan, gunakan kode seperti:

requests
| summarize count = sum(itemCount), avgduration = avg(duration) by name

TrackException

Kirim pengecualian ke Application Insights:

Laporan tersebut mencakup jejak tumpukan.

try
{
    ...
}
catch (Exception ex)
{
    telemetry.TrackException(ex);
}

SDK menangkap banyak pengecualian secara otomatis, sehingga Anda tidak selalu harus memanggil TrackException secara eksplisit.

Pengecualian dalam Log Analytics

Di Application Insights Analytics, pengecualian muncul dalam exceptions tabel.

Jika pengambilan sampel sedang beroperasi, itemCount properti menunjukkan nilai yang lebih besar dari 1. Misalnya, itemCount==10 berarti bahwa dari 10 panggilan ke trackException(), proses pengambilan sampel hanya dikirimkan salah satunya. Untuk mendapatkan jumlah pengecualian yang benar yang disegmentasi berdasarkan jenis pengecualian, gunakan kode seperti:

exceptions
| summarize sum(itemCount) by type

Sebagian besar informasi tumpukan penting sudah diekstrak ke dalam variabel terpisah, tetapi Anda dapat membongkar struktur details untuk memperoleh lebih banyak. Karena struktur ini dinamis, Anda harus mengkasting hasilnya ke tipe yang Anda harapkan. Contohnya:

exceptions
| extend method2 = tostring(details[0].parsedStack[1].method)

Untuk mengaitkan pengecualian dengan permintaan terkait, gunakan gabungan:

exceptions
| join (requests) on operation_Id

TrackTrace

Gunakan TrackTrace untuk membantu mendiagnosis masalah dengan mengirim "jejak breadcrumb" ke Application Insights. Anda dapat mengirim potongan data diagnostik dan memeriksanya di Pencarian.

Di adaptor Log .NET, gunakan API ini untuk mengirim log pihak ketiga ke portal.

telemetry.TrackTrace(message, SeverityLevel.Warning, properties);

Catat peristiwa diagnostik seperti memasukkan atau meninggalkan metode.

Parameter Deskripsi
message Data diagnostik. Bisa jauh lebih panjang dari nama.
properties Peta string ke string. Lebih banyak data digunakan untuk memfilter pengecualian di portal. Default untuk kosong.
severityLevel Nilai yang didukung: SeverityLevel.ts.

Anda dapat mencari konten pesan, tetapi tidak seperti nilai properti, Anda tidak dapat memfilternya.

Batas ukuran pada message jauh lebih tinggi dibandingkan dengan batas pada properti. Keuntungannya TrackTrace adalah Anda dapat memasukkan data yang relatif panjang dalam pesan. Misalnya, Anda dapat mengodekan data POST di sana.

Anda juga dapat menambahkan tingkat keparahan ke pesan Anda. Dan, seperti telemetri lainnya, Anda dapat menambahkan nilai properti untuk membantu Anda memfilter atau mencari set jejak yang berbeda. Contohnya:

var telemetry = new Microsoft.ApplicationInsights.TelemetryClient();
telemetry.TrackTrace("Slow database response",
                SeverityLevel.Warning,
                new Dictionary<string,string> { {"database", db.ID} });

Di Pencarian, Anda kemudian dapat dengan mudah memfilter semua pesan tingkat keparahan tertentu yang terkait dengan database tertentu.

Pelacakan di Log Analytics

Di Application Insights Analytics, panggilan untuk TrackTrace muncul di tabel traces.

Jika pengambilan sampel sedang beroperasi, itemCount properti menunjukkan nilai yang lebih besar dari 1. Misalnya, itemCount==10 berarti bahwa dari 10 panggilan ke trackTrace(), proses pengambilan sampel hanya dikirimkan salah satunya. Untuk mendapatkan jumlah panggilan pelacakan yang benar, gunakan kode seperti traces | summarize sum(itemCount).

TrackDependency

Gunakan panggilan TrackDependency untuk melacak waktu respons dan tingkat keberhasilan panggilan ke bagian kode eksternal. Hasilnya muncul di bagan dependensi di portal. Cuplikan kode berikut harus ditambahkan di mana pun panggilan dependensi dilakukan.

Nota

Untuk .NET dan .NET Core, Anda dapat menggunakan metode TelemetryClient.StartOperation (ekstensi) yang mengisi properti DependencyTelemetry yang diperlukan untuk korelasi dan beberapa properti lain seperti waktu mulai dan durasi, sehingga Anda tidak perlu membuat timer kustom seperti contoh berikut. Untuk informasi selengkapnya, lihat bagian tentang pelacakan dependensi keluar di Melacak operasi kustom dengan Application Insights .NET SDK.

var success = false;
var startTime = DateTime.UtcNow;
var timer = System.Diagnostics.Stopwatch.StartNew();
try
{
    success = dependency.Call();
}
catch(Exception ex)
{
    success = false;
    telemetry.TrackException(ex);
    throw new Exception("Operation went wrong", ex);
}
finally
{
    timer.Stop();
    telemetry.TrackDependency("DependencyType", "myDependency", "myCall", startTime, timer.Elapsed, success);
}

Ingatlah bahwa SDK server menyertakan modul dependensi yang menemukan dan melacak panggilan dependensi tertentu secara otomatis, misalnya, ke database dan REST API. Anda harus menginstal agen di server Anda untuk membuat modul berfungsi.

Anda menggunakan panggilan ini jika Anda ingin melacak panggilan yang tidak ditangkap oleh pelacakan otomatis.

Untuk menonaktifkan modul pelacakan dependensi standar di C#, edit ApplicationInsights.config dan hapus referensi ke DependencyCollector.DependencyTrackingTelemetryModule.

Dependensi dalam Log Analytics

Di Application Insights Analytics, trackDependency panggilan terlihat di dependencies tabel.

Jika pengambilan sampel sedang beroperasi, itemCount properti menunjukkan nilai yang lebih besar dari 1. Misalnya, itemCount==10 berarti bahwa dari 10 panggilan ke trackDependency(), proses pengambilan sampel hanya dikirimkan salah satunya. Untuk mendapatkan jumlah dependensi yang benar yang disegmentasi oleh komponen target, gunakan kode seperti:

dependencies
| summarize sum(itemCount) by target

Untuk mengaitkan dependensi dengan permintaan terkait, gunakan join:

dependencies
| join (requests) on operation_Id

Mengosongkan data

Biasanya, SDK mengirim data pada interval tetap, biasanya 30 detik, atau setiap kali buffer penuh, yang biasanya 500 item. Dalam beberapa kasus, Anda mungkin ingin membersihkan buffer. Contohnya adalah jika Anda menggunakan SDK dalam aplikasi yang dimatikan.

Saat Anda menggunakan Flush(), kami merekomendasikan pola ini:

telemetry.Flush();
// Allow some time for flushing before shutdown.
System.Threading.Thread.Sleep(5000);

Saat Anda menggunakan FlushAsync(), kami merekomendasikan pola ini:

await telemetryClient.FlushAsync()
// No need to sleep

Kami sarankan selalu melakukan pengosongan sebagai bagian dari pemadaman aplikasi untuk menjamin bahwa data telemetri tidak hilang.

Nota

Tinjau konfigurasi Autoflush: Mengaktifkan autoflush dalam file Anda web.config dapat menyebabkan penurunan performa dalam aplikasi .NET yang diinstrumentasikan dengan Application Insights. Dengan *autoflush* diaktifkan, setiap pemanggilan metode System.Diagnostics.Trace.Trace* menghasilkan item telemetri individual yang dikirim sebagai permintaan web terpisah dan berbeda ke layanan penerimaan. Ini berpotensi menyebabkan kelelahan jaringan dan penyimpanan di server web Anda. Untuk performa yang ditingkatkan, disarankan untuk menonaktifkan autoflush dan juga, menggunakan ServerTelemetryChannel, yang dirancang untuk transmisi data telemetri yang lebih efektif.

Fungsi ini asinkron untuk saluran telemetri server.

Pengguna terautentikasi

Di aplikasi web, pengguna diidentifikasi oleh cookie secara default. Pengguna mungkin dihitung lebih dari sekali jika mereka mengakses aplikasi Anda dari komputer atau browser yang berbeda, atau jika mereka menghapus cookie.

Jika pengguna masuk ke aplikasi, Anda bisa mendapatkan jumlah yang lebih akurat dengan mengatur ID pengguna yang diautentikasi di kode browser. Tidak perlu menggunakan nama masuk pengguna yang sebenarnya. ID tersebut hanya perlu unik untuk pengguna tersebut. Ini tidak boleh menyertakan spasi atau karakter ,;=|apa pun .

ID pengguna juga diatur dalam cookie sesi dan dikirim ke server. Jika SDK server diinstal, ID pengguna yang diautentikasi dikirim sebagai bagian dari properti konteks telemetri klien dan server. Anda kemudian dapat memfilter dan mencarinya.

Jika aplikasi Anda mengelompokkan pengguna ke dalam akun, Anda juga dapat meneruskan pengidentifikasi untuk akun tersebut. Pembatasan karakter yang sama berlaku.

Di Metrics Explorer, Anda bisa membuat bagan yang menghitung akun Pengguna, Diautentikasi, dan Pengguna.

Anda juga dapat mencari titik data klien dengan nama pengguna dan akun tertentu.

Nota

Properti EnableAuthenticationTrackingJavaScript di kelas ApplicationInsightsServiceOptions di .NET Core SDK menyederhanakan konfigurasi JavaScript yang diperlukan untuk memasukkan nama pengguna sebagai ID Autentikasi untuk setiap jejak yang dikirim oleh Application Insights JavaScript SDK.

Ketika properti ini diatur ke true, nama pengguna dari pengguna di ASP.NET Core dicetak bersama dengan telemetri sisi klien. Untuk alasan ini, menambahkan appInsights.setAuthenticatedUserContext secara manual tidak diperlukan lagi karena sudah disuntikkan oleh SDK untuk ASP.NET Core. ID Autentikasi juga dikirim ke server tempat SDK di .NET Core mengidentifikasi dan menggunakannya untuk telemetri sisi server apa pun, seperti yang dijelaskan dalam referensi JavaScript API.

Untuk aplikasi JavaScript yang tidak berfungsi dengan cara yang sama seperti ASP.NET Core MVC, seperti aplikasi web SPA, Anda masih perlu menambahkan appInsights.setAuthenticatedUserContext secara manual.

Memfilter, mencari, dan mengesegmentasi data Anda dengan menggunakan properti

Anda dapat melampirkan properti dan pengukuran ke peristiwa, metrik, tampilan halaman, pengecualian, dan data telemetri lainnya.

Properti adalah nilai string yang dapat Anda gunakan untuk memfilter telemetri Anda dalam laporan penggunaan. Misalnya, jika aplikasi menyediakan beberapa game, Anda dapat melampirkan nama permainan ke setiap acara sehingga Anda dapat melihat game mana yang lebih populer.

Ada batas 8.192 pada panjang string. Jika Anda ingin mengirim potongan data yang besar, gunakan parameter pesan .TrackTrace

Metrik adalah nilai numerik yang dapat disajikan secara grafis. Misalnya, Anda mungkin ingin melihat apakah ada peningkatan skor bertahap yang dicapai gamer Anda. Grafik dapat disegmentasi oleh properti yang dikirim dengan peristiwa sehingga Anda bisa mendapatkan grafik terpisah atau bertumpuk untuk game yang berbeda.

Nilai metrik harus lebih besar dari atau sama dengan 0 untuk ditampilkan dengan benar.

Ada beberapa batasan jumlah properti, nilai properti, dan metrik yang dapat Anda gunakan.

// Set up some properties and metrics:
var properties = new Dictionary <string, string>
    {{"game", currentGame.Name}, {"difficulty", currentGame.Difficulty}};
var metrics = new Dictionary <string, double>
    {{"Score", currentGame.Score}, {"Opponents", currentGame.OpponentCount}};

// Send the event:
telemetry.TrackEvent("WinGame", properties, metrics);

Penting

Pastikan Anda tidak mencatat informasi yang dapat diidentifikasi secara pribadi di properti.

Cara alternatif untuk mengatur properti dan metrik

Jika lebih nyaman, Anda dapat mengumpulkan parameter peristiwa dalam objek terpisah:

var event = new EventTelemetry();

event.Name = "WinGame";
event.Metrics["processingTime"] = stopwatch.Elapsed.TotalMilliseconds;
event.Properties["game"] = currentGame.Name;
event.Properties["difficulty"] = currentGame.Difficulty;
event.Metrics["Score"] = currentGame.Score;
event.Metrics["Opponents"] = currentGame.Opponents.Length;

telemetry.TrackEvent(event);

Peringatan

Jangan gunakan kembali instans item telemetri yang sama (event dalam contoh ini) untuk memanggil Track*() beberapa kali. Praktik ini dapat menyebabkan telemetri dikirim dengan konfigurasi yang salah.

Pengukuran dan properti kustom dalam Log Analytics

Dalam Log Analytics, metrik dan properti kustom ditampilkan di atribut customMeasurements dan customDimensions dari setiap rekaman telemetri.

Misalnya, jika Anda menambahkan properti bernama "game" ke telemetri permintaan Anda, kueri ini menghitung kemunculan nilai yang berbeda dari "game" dan menunjukkan rata-rata metrik kustom "skor":

requests
| summarize sum(itemCount), avg(todouble(customMeasurements.score)) by tostring(customDimensions.game)

Perhatikan bahwa:

  • Ketika Anda mengekstrak nilai dari customDimensions atau customMeasurements JSON, nilai tersebut memiliki jenis dinamis, jadi Anda harus melemparkannya tostring atau todouble.
  • Untuk memperhitungkan kemungkinan pengambilan sampel, gunakan sum(itemCount) bukan count().

Peristiwa pengaturan waktu

Terkadang Anda ingin membuat bagan berapa lama waktu yang diperlukan untuk melakukan tindakan. Misalnya, Anda mungkin ingin tahu berapa lama waktu yang dibutuhkan pengguna untuk mempertimbangkan pilihan dalam game. Untuk mendapatkan informasi ini, gunakan parameter pengukuran.

var stopwatch = System.Diagnostics.Stopwatch.StartNew();

// ... perform the timed action ...

stopwatch.Stop();

var metrics = new Dictionary <string, double>
    {{"processingTime", stopwatch.Elapsed.TotalMilliseconds}};

// Set up some properties:
var properties = new Dictionary <string, string>
    {{"signalSource", currentSignalSource.Name}};

// Send the event:
telemetry.TrackEvent("SignalProcessed", properties, metrics);

Properti bawaan untuk telemetri kustom

Jika Anda ingin mengatur nilai properti default untuk beberapa peristiwa kustom yang Anda tulis, atur dalam TelemetryClient instans. Mereka dikaitkan dengan setiap item telemetri yang dikirim dari klien tersebut.

using Microsoft.ApplicationInsights.DataContracts;

var gameTelemetry = new TelemetryClient();
gameTelemetry.Context.GlobalProperties["Game"] = currentGame.Name;
// Now all telemetry is automatically sent with the context property:
gameTelemetry.TrackEvent("WinGame");

Panggilan telemetri individual dapat mengambil alih nilai default dalam kamus properti mereka.

Untuk menambahkan properti ke semua telemetri, termasuk data dari modul pengumpulan standar, terapkan ITelemetryInitializer.

Menonaktifkan telemetri

Untuk menghentikan dan memulai pengumpulan dan transmisi telemetri secara dinamis:

using  Microsoft.ApplicationInsights.Extensibility;

TelemetryConfiguration.Active.DisableTelemetry = true;

Mode pengembang

Selama debugging, berguna untuk mengalirkan telemetri Anda lebih cepat melalui pipeline sehingga Anda dapat melihat hasilnya secara langsung. Anda juga mendapatkan pesan lain yang membantu Anda melacak masalah dengan telemetri. Nonaktifkan di lingkungan produksi karena dapat memperlambat aplikasi Anda.

TelemetryConfiguration.Active.TelemetryChannel.DeveloperMode = true;

Mengatur kunci instrumentasi untuk telemetri kustom yang dipilih

var telemetry = new TelemetryClient();
telemetry.InstrumentationKey = "---my key---";
// ...

String koneksi dinamis

Untuk menghindari pencampuran telemetri dari lingkungan pengembangan, pengujian, dan produksi, Anda dapat membuat sumber daya Application Insights terpisah dan mengubah kuncinya, tergantung pada lingkungan.

Alih-alih mendapatkan kunci instrumentasi dari file konfigurasi, Anda dapat mengaturnya dalam kode Anda. Atur kunci dalam metode inisialisasi, seperti global.aspx.cs dalam layanan ASP.NET:

protected void Application_Start()
{
    Microsoft.ApplicationInsights.Extensibility.
    TelemetryConfiguration.Active.InstrumentationKey =
        // - for example -
        WebConfigurationManager.Settings["ikey"];
    ...
}

TelemetriKonteks

TelemetryClient memiliki properti Konteks, yang berisi nilai yang dikirim bersama dengan semua data telemetri. Biasanya diatur oleh modul telemetri standar, tetapi Anda juga dapat mengaturnya sendiri. Contohnya:

telemetry.Context.Operation.Name = "MyOperationName";

Jika Anda mengatur salah satu nilai ini sendiri, pertimbangkan untuk menghapus baris yang relevan dari ApplicationInsights.config sehingga nilai dan nilai standar Anda tidak bingung.

  • Komponen: Aplikasi dan versinya.
  • Perangkat: Data tentang perangkat tempat aplikasi berjalan. Di aplikasi web, ini adalah server atau perangkat klien tempat telemetri dikirim.
  • InstrumentationKey: Sumber daya Application Insights di Azure tempat telemetri muncul. Biasanya diambil dari ApplicationInsights.config.
  • Lokasi: Lokasi geografis perangkat.
  • Operasi: Di aplikasi web, permintaan HTTP saat ini. Di jenis aplikasi lain, Anda dapat mengatur nilai ini untuk mengelompokkan peristiwa bersama-sama.
    • ID: Nilai yang dihasilkan yang berkorelasi dengan peristiwa yang berbeda sehingga saat Anda memeriksa peristiwa apa pun di Pencarian Diagnostik, Anda dapat menemukan item terkait.
    • Nama: Pengidentifikasi, biasanya URL permintaan HTTP.
    • SyntheticSource: Jika tidak null atau kosong, string yang menunjukkan bahwa sumber permintaan telah diidentifikasi sebagai robot atau pengujian web. Secara default, ini dikecualikan dari perhitungan di Metrics Explorer.
  • Sesi: Sesi pengguna. ID diatur ke nilai yang dihasilkan, yang diubah ketika pengguna belum aktif untuk sementara waktu.
  • Pengguna: Informasi pengguna.

Batasan

Ada beberapa batasan jumlah metrik dan peristiwa per aplikasi, yaitu per string koneksi. Batasan bergantung pada paket harga yang Anda pilih.

Sumber Daya Batas standar Batas maksimum Catatan
Jumlah data per hari 100 GB Hubungi dukungan. Anda dapat mengatur batas untuk mengurangi data. Jika Anda membutuhkan lebih banyak data, Anda dapat meningkatkan batasan di portal, hingga 1.000 GB. Untuk kapasitas yang lebih besar dari 1.000 GB, kirim email ke AIDataCap@microsoft.com.
Pembatasan Kecepatan 32.000 acara/detik Hubungi dukungan. Batas diukur selama satu menit.
Data untuk log retensi 30 hingga 730 hari 730 hari Sumber daya ini untuk Log.
Metrik retensi data 90 hari 90 hari Sumber daya ini untuk Metrics Explorer.
Retensi hasil terperinci uji multistep ketersediaan 90 hari 90 hari Sumber daya ini memberikan hasil terperinci dari setiap langkah.
Ukuran item telemetri maksimum 64 KB 64 KB
Jumlah maksimal item telemetri per batch 64.000 64.000
Panjang nama properti dan metrik 150 150 Lihat jenis skema.
Panjang nilai properti berupa string 8,192 8,192 Lihat jenis skema.
Panjang pesan pelacakan dan pengecualian 32,768 32,768 Lihat jenis skema.
Jumlah pengujian ketersediaan per sumber daya Application Insights 100 100
Jumlah pengujian ketersediaan per grup sumber daya 800 800 Lihat Azure Resource Manager
Uji ketersediaan pengalihan maksimum per pengujian 10 10
Uji ketersediaan frekuensi pengujian minimum 300 detik Frekuensi pengujian kustom atau frekuensi kurang dari 5 menit memerlukan implementasi kustom TrackAvailability.
.NET Profiler dan Snapshot Debugger penyimpanan data Dua minggu Hubungi dukungan. Batas maksimum retensi adalah enam bulan.
Data .NET Profiler dikirim per hari Tidak ada batasan Tidak ada batasan.
Data Snapshot Debugger yang dikirim setiap hari 30 snapshot per hari per aplikasi yang dipantau Tidak ada batasan. Jumlah rekam jepret yang dikumpulkan per aplikasi dapat dimodifikasi melalui konfigurasi.

Untuk informasi selengkapnya tentang harga dan kuota, lihat Penagihan Application Insights.

Untuk menghindari mencapai batas laju data, gunakan pengambilan sampel.

Untuk menentukan berapa lama data disimpan, lihat Retensi dan privasi data.

Aplikasi contoh

Aplikasi konsol .NET Core: Gunakan sampel ini jika Anda menggunakan aplikasi konsol yang ditulis di .NET Core (2.0 atau lebih tinggi) atau .NET Framework (4.7.2 atau lebih tinggi).

Tugas latar belakang ASP.NET Core dengan HostedServices: Gunakan contoh ini jika Anda berada di ASP.NET Core dan membuat tugas latar belakang berdasarkan panduan resmi.

.NET Core Worker Service: Gunakan sampel ini jika Anda memiliki aplikasi .NET Worker Service sesuai dengan panduan resmi.

Troubleshooting

Lihat artikel pemecahan masalah khusus untuk .NET dan Node.js.

Menguji konektivitas antara host aplikasi Anda dan layanan penyerapan

SDK dan agen Application Insights mengirimkan telemetri untuk diproses sebagai panggilan REST ke titik akhir penyerapan kami. Anda dapat menguji konektivitas dari server web atau komputer host aplikasi Anda ke titik akhir layanan penyerapan dengan menggunakan klien REST mentah dari PowerShell atau perintah curl. Lihat Memecahkan masalah telemetri aplikasi yang hilang di Azure Monitor Application Insights.

SDK sumber terbuka

Baca dan berkontribusi pada kode untuk .NET dan Node.js.

Catatan Rilis

Pembaruan Layanan juga merangkum peningkatan utama pada Application Insights.

Langkah berikutnya