Aracılığıyla paylaş


Application Insights (Klasik API) ile .NET ve Node.js uygulamalarını izleme

Uyarı

Klasik API SDK destek ilkemiz için Application Insights SDK destek kılavuzunu gözden geçirin.

Dikkat

Yeni uygulamalar veya müşteriler için Azure Monitor OpenTelemetry Distro'yu kullanarak Azure Monitor Application Insights'i güçlendirmelerini öneririz. Azure Monitor OpenTelemetry Distro, Application Insights SDK'sı ile benzer bir işlev ve deneyim sunar. .NET, Node.js ve Python geçiş kılavuzlarını kullanarak Application Insights SDK'sından geçiş yapılabilir, ancak geriye dönük uyumluluk için few daha fazla özellik eklemeye çalışıyoruz.

Bu makalede, .NET (ASP.NET, ASP.NET Core ve Çalışan Hizmeti) ve Node.js uygulamaları için Application Insights etkinleştirme ve yapılandırma işlemi açıklanır. Application Insights uygulamalarınızdan aşağıdaki telemetri verilerini toplayabilir:

  • Requests
  • Bağımlılıklar
  • Exceptions
  • Performans sayaçları
  • İzlemeler (Günlükler)
  • Kalp Atışları
  • Özel olaylar ve ölçümler (el ile izleme gerektirir)
  • Sayfa görünümleri (web sayfaları için JavaScript SDK'sı gerektirir)
  • Kullanılabilirlik testleri ( kullanılabilirlik testlerinin el ile ayarlanmasını gerektirir)

Desteklenen senaryolar

Destekleniyor ASP.NET ASP.NET Core İşçi Servisi
İşletim Sistemi Windows Windows, Linux veya macOS Windows, Linux veya macOS
Barındırma yöntemi İşlem içi (IIS veya IIS Express) Proses içi veya proses dışı Konsol veya arka plan hizmeti (genellikle dotnet CLI aracılığıyla veya Windows Hizmeti/Linux daemon'ı olarak işlem olarak çalışır)
Dağıtım yöntemi Web Dağıtımı, MSI veya el ile dosya kopyalama Çerçeveye bağımlı veya bağımsız Çerçeveye bağımlı veya bağımsız
Web sunucusu Internet Information Services (IIS) Internet Information Server (IIS) veya Kestrel Geçerli değil (web sunucusu yok; mesajlaşma, arka plan görevleri ve konsol uygulamaları gibi HTTP dışı iş yükleri için tasarlanmıştır)
Barındırma platformu Azure App Service (Windows), Azure Virtual Machines veya şirket içi sunucular Azure App Service, Azure Virtual Machines, Docker ve Azure Kubernetes Service (AKS) Web Apps özelliği Azure Virtual Machines, Azure Kubernetes Service (AKS), kapsayıcılar veya .NET Core'un desteklendiği herhangi bir ortam
.NET sürümü .NET Framework 4.6.1 ve üzeri Önizleme sürümünde olmayan tüm resmi desteklenen .NET sürümleri Önizleme sürümünde olmayan tüm resmi desteklenen .NET sürümleri

Çalışan Hizmeti SDK'sı tek başına herhangi bir telemetri koleksiyonu yapmaz. Bunun yerine DependencyCollector, PerfCounterCollector ve ApplicationInsightsLoggingProvider gibi diğer iyi bilinen Application Insights otomatik toplayıcılarını getirir. Bu SDK, telemetri toplama işlemini etkinleştirmek ve yapılandırmak için IServiceCollection üzerinde uzantı yöntemleri sunmaktadır.

Uyarı

Çalışan hizmeti, görevleri HTTP isteği/yanıt işlem hattı dışında yürüten uzun süre çalışan bir arka plan uygulamasıdır. Çalışan Hizmeti için Application Insights SDK, yeni kullanıma sunulan .NET Core Worker Service, ASP.NET Core arka plan görevleri ve .NET Core ve .NET Framework gibi konsol uygulamalarında kullanılabilir.

Application Insights ekleme

Bu bölümde

Ön koşullar

Uygulamanızı Application Insights SDK'sı ile izleme

Bu bölüm, şablon tabanlı bir web uygulamasına Application Insights ekleme işleminde size yol gösterir.

ASP.NET

  1. Projenize aşağıdaki NuGet paketlerini ve bunların bağımlılıklarını ekleyin:

  2. Bazı durumlarda ApplicationInsights.config dosyası sizin için otomatik olarak oluşturulur. Dosya zaten varsa, 4. adıma geçin.

    Eksikse kendiniz oluşturun. ASP.NET uygulamasının kök dizininde ApplicationInsights.config adlı yeni bir dosya oluşturun.

  3. Aşağıdaki XML yapılandırmasını yeni oluşturduğunuz dosyaya kopyalayın:


    Yapılandırmayı görüntülemek için genişletin
    <?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. Bağlantı dizesini ekleyin, bu iki şekilde yapılabilir:

    • (Önerilen) yapılandırmada connection string ayarlayın.

      </ApplicationInsights> içindeki closing etiketinden önce Application Insights kaynağınız için connection string ekleyin. Yeni oluşturulan Application Insights kaynağının genel bakış kısmında bağlantı dizesini bulabilirsiniz.

      <ConnectionString>Copy the connection string from your Application Insights resource</ConnectionString>
      
    • Kodda bağlantı dizesini ayarlayın.

      program.cs sınıfınızda bir connection string sağlayın.

      var configuration = new TelemetryConfiguration
      {
          ConnectionString = "Copy the connection string from your Application Insights resource"
      };
      
  5. Projenizin ApplicationInsights.config dosyasıyla aynı düzeyde ErrorHandler adlı ve AiHandleErrorAttribute.cs adlı yeni bir C# dosyası içeren bir klasör oluşturun. Dosyanın içeriği şöyle görünür:

    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. App_Start klasöründe FilterConfig.cs dosyasını açın ve örnekle eşleşecek şekilde değiştirin:

    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. Web.config zaten güncelleştirildiyse bu adımı atlayın. Aksi takdirde, dosyayı aşağıdaki gibi güncelleştirin:


    Yapılandırmayı görüntülemek için genişletin
    <?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>
    

Bu noktada, sunucu tarafı uygulama izlemeyi başarıyla yapılandırmışsınız. Web uygulamanızı çalıştırırsanız, telemetrinin Application Insights'ta görünmeye başlanacağını görürsünüz.

ASP.NET Core

  1. ASP.NET Core için Application Insights SDK NuGet paketini yükleyin.

    Her zaman en son kararlı sürümü kullanmanızı öneririz. SDK'nın tam sürüm notlarını open-source GitHub deposunda bulun.

    Aşağıdaki kod örneği, projenizin .csproj dosyasına eklenecek değişiklikleri gösterir:

    <ItemGroup>
        <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.21.0" />
    </ItemGroup>
    
  2. AddApplicationInsightsTelemetry() kodunu program.cs sınıfınıza ekleyin.

    Yöntemden builder.Services.AddApplicationInsightsTelemetry(); sonra WebApplication.CreateBuilder() ekleyin, aşağıdaki örnekte olduğu gibi.

    // 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. Bağlantı dizesini ekleyin, bunun üç farklı yolu vardır.

    • (Önerilen) yapılandırmada connection string ayarlayın.

      appsettings.json connection string ayarlayın ve yayımlama sırasında yapılandırma dosyasının uygulama kök klasörüne kopyalandığından emin olun.

      {
          "Logging": {
              "LogLevel": {
                  "Default": "Information",
                  "Microsoft.AspNetCore": "Warning"
              }
          },
          "AllowedHosts": "*",
          "ApplicationInsights": {
              "ConnectionString": "<YOUR-CONNECTION-STRING>"
          }
      }
      
    • APPLICATIONINSIGHTS_CONNECTION_STRING ortam değişkenindeki veya JSON yapılandırma dosyasındaki ApplicationInsights:ConnectionString connection string ayarlayın.

      Örneğin:

      • SET ApplicationInsights:ConnectionString = <Copy connection string from Application Insights Resource Overview>
      • SET APPLICATIONINSIGHTS_CONNECTION_STRING = <Copy connection string from Application Insights Resource Overview>
      • Genellikle web APPLICATIONINSIGHTS_CONNECTION_STRING uygulamalarında kullanılır. Ayrıca bu SDK'nın desteklendiği tüm yerlerde de kullanılabilir.

      Uyarı

      Kodda belirtilen bir connection string APPLICATIONINSIGHTS_CONNECTION_STRING ortam değişkenine karşı kazanır ve bu da diğer seçeneklerden üstün olur.

    • Kodda bağlantı dizesini ayarlayın.

      argümanının bir parçası olarak için program.cs sınıfınızda bir connection string sağlayın.

Kullanıcı sırları ve diğer yapılandırma sağlayıcıları

Bağlantı dizesini ASP.NET Core kullanıcı sırlarında depolamak veya başka bir yapılandırma sağlayıcısından almak istiyorsanız, Microsoft.Extensions.Configuration.IConfiguration parametresiyle aşırı yüklenmiş olanı kullanabilirsiniz. Örnek parametre: services.AddApplicationInsightsTelemetry(Configuration);.

Microsoft.ApplicationInsights.AspNetCore sürümü 2.15.0 ve sonraki sürümlerde, services.AddApplicationInsightsTelemetry() çağrısı uygulamanın bağlantı dizesini otomatik olarak okur. açıkça sağlamanıza IConfigurationgerek yoktur.

Yapılandırmayı birden çok sağlayıcıdan yüklediyseniz IConfiguration , services.AddApplicationInsightsTelemetry sağlayıcıların eklenme sırasına bakılmadan appsettings.json'den yapılandırmayı önceliklendirir. services.AddApplicationInsightsTelemetry(IConfiguration) yöntemini, IConfiguration'den appsettings.json için bu ayrıcalıklı işlem olmadan yapılandırmayı okumak için kullanın.

İşçi Servisi

Bu bölümde
Çalışan Hizmeti için Application Insights SDK'sını kullanma
  1. Uygulamaya Microsoft.ApplicationInsights.WorkerService paketini yükleyin.

    Aşağıdaki kod parçacığı, projenizin .csproj dosyasına eklenmesi gereken değişiklikleri gösterir:

        <ItemGroup>
            <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
        </ItemGroup>
    
  2. APPLICATIONINSIGHTS_CONNECTION_STRING ortam değişkeninde veya ayarlar içinde (appsettings.json) bağlantı dizesini yapılandırın.

    Ekran görüntüsü, Application Insights genel bakışını ve bağlantı dizesini gösterir.

  3. ILogger veya TelemetryClient örneğini Bağımlılık Enjeksiyonu (DI) kapsayıcısından, serviceProvider.GetRequiredService<TelemetryClient>(); çağrısı yaparak ya da Yapıcı Enjeksiyonu kullanarak alın. Bu adım, TelemetryConfiguration ve otomatik toplama modüllerinin kurulumu tetikler.

Her uygulama türü için belirli yönergeler aşağıdaki bölümlerde açıklanmıştır.

.NET Temel Çalışan Hizmeti uygulaması

Tam örnek NuGet web sitesinde paylaşılır.

  1. .NET SDK indirin ve yükleyin.

  2. yeni bir Visual Studio proje şablonu veya komut satırı dotnet new worker kullanarak yeni bir Çalışan Hizmeti projesi oluşturun.

  3. Uygulamaya Microsoft.ApplicationInsights.WorkerService paketini ekleyin.

  4. Şu örnekte olduğu gibi, sınıfınızdaki services.AddApplicationInsightsTelemetryWorkerService(); yöntemine CreateHostBuilder() ekleyin:

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<Worker>();
                    services.AddApplicationInsightsTelemetryWorkerService();
                });
    
  5. Aşağıdaki örnekte olduğu gibi, Worker.cs'inizi değiştirin.

        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. Bağlantı dizesini ayarlayın.

    Ekran görüntüsü, 'Application Insights' genel bakışını ve bağlantı dizesini gösteriyor.

    Uyarı

    Yapılandırmada connection string belirtmenizi öneririz. Aşağıdaki kod örneği, appsettings.json'da bir connection string nasıl belirtileceğini gösterir. Yayımlama sırasında uygulama kök klasörüne kopyalandığından emin appsettings.json olun.

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

Alternatif olarak, APPLICATIONINSIGHTS_CONNECTION_STRING ortam değişkeninde connection string belirtin.

Genellikle APPLICATIONINSIGHTS_CONNECTION_STRING, web uygulamalarına web job'ları olarak dağıtılan uygulamalar için bağlantı dizesini belirtir.

Uyarı

Kodda belirtilen connection string, diğer seçeneklerden öncelikli olan APPLICATIONINSIGHTS_CONNECTION_STRING ortam değişkenine göre önceliklidir.

ASP.NET Core ile barındırılan hizmetlerde arka plan görevleri

Bu belge bir ASP.NET Core uygulamasında arka plan görevlerinin nasıl oluşturulacağını açıklar.

Tam örnek bu GitHub sayfasında paylaşılır.

  1. Uygulamaya Microsoft.ApplicationInsights.WorkerService paketini yükleyin.

  2. services.AddApplicationInsightsTelemetryWorkerService(); ifadesini, bu örnekte olduğu gibi, ConfigureServices() yöntemine ekleyin.

        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();
            }
        }
    

    Aşağıdaki kod, TimedHostedServicearka plan görev mantığının bulunduğu içindir:

        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. Bağlantı dizesini ayarlayın. Önceki appsettings.json Çalışan Hizmeti örneğinden aynı kullanın.

.NET Core/.NET Framework konsol uygulaması

Bu makalenin başında belirtildiği gibi yeni paket, normal bir konsol uygulamasından bile Application Insights telemetrisini etkinleştirmek için kullanılabilir. Bu paket netstandard2.0 hedeflediğinden .NET Core veya üzeri ve .NET Framework veya üzeri konsol uygulamaları için kullanılabilir.

Tam örnek bu GitHub sayfasında paylaşılır.

  1. Uygulamaya Microsoft.ApplicationInsights.WorkerService paketini yükleyin.

  2. Aşağıdaki örnekte gösterildiği gibi Program.cs değiştirin:

        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();
                }
            }
        }
    

Bu konsol uygulaması aynı varsayılanı TelemetryConfigurationda kullanır. Önceki bölümlerdeki örneklerle aynı şekilde özelleştirilebilir.

Şirket içi sunucular için Application Insights Aracısı'nı dağıtma

Bu bölümde

Application Insights Aracısı, PowerShell Gallery'da yayımlanan bir PowerShell modülüdür. Durum İzleyicisi'nin yerini alır. Telemetri Azure portalına gönderilir; burada uygulamanızı izleyebilirsiniz.

Desteklenen otomatik enstrümantasyon senaryolarının tam listesi için bkz. Desteklenen ortamlar, diller ve kaynak sağlayıcıları.

Uyarı

Modül şu anda Internet Information Server (IIS) ile barındırılan ASP.NET ve ASP.NET Core web uygulamalarının kodsuz izlemesini destekler. Java ve Node.js uygulamalarını işaretlemek için SDK kullanın.

Uyarı

İstemci tarafı izleme, ASP.NET Core uygulamalar için varsayılan olarak etkindir. İstemci tarafı izlemeyi devre dışı bırakmak istiyorsanız, sunucuda aşağıdaki bilgilerle bir ortam değişkeni tanımlayın:

  • Ad:APPINSIGHTS_JAVASCRIPT_ENABLED
  • Değer:false

Başlangıç Yapmak

Bu bölüm, çoğu ortamda çalışması beklenen hızlı başlangıç komutlarını içerir. Güncelleştirmeleri dağıtmak için PowerShell Gallery'ye dayanan yönergeler. Bu komutlar PowerShell -Proxy parametresini destekler.

Bu komutların, özelleştirme yönergelerinin ve sorun giderme hakkındaki bilgilerin açıklaması için ayrıntılı yönergelere bakın.

Azure aboneliğiniz yoksa başlamadan önce free hesabı oluşturun.

Uyarı

İhtiyacınız olabilecek önkoşullar için bkz. PowerShell Gallery Aktarım Katmanı Güvenliği (TLS) desteği.

  1. Modülü yükleyin (yönetici olarak çalıştırın):

    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. Application Insights Aracısı'nın yüklenmesi (yönetici olarak çalıştır):

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

    Uyarı

    AllowPrerelease cmdlet'indeki Install-Module anahtar, beta sürümünün yüklenmesine izin verir.

    Daha fazla bilgi için bkz . Install-Module.

  3. İzlemeyi etkinleştir:

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
    Enable-ApplicationInsightsMonitoring -ConnectionString 'InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/'
    
2. Seçenek: Application Insights aracısını el ile indirme ve yükleme (çevrimdışı seçenek)
  1. modülün en son sürümünü PowerShell Gallery adresinden el ile indirin.

  2. Application Insights Aracısı'nın sıkıştırmasını açın ve yükleyin:

    $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. İzlemeyi etkinleştir:

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

Ayrıntılı yönergeler

Bu bölümde, PowerShell Gallery ekleme ve ApplicationMonitor modülünü indirme işlemleri açıklanmaktadır. Başlarken ihtiyacınız olan en yaygın parametreler bunlardır. ayrıca, İnternet erişiminiz yoksa el ile indirme yönergeleri de sağlıyoruz.

PowerShell'i yükseltilmiş yürütme ilkesiyle Yönetici olarak çalıştırma

Önemli

PowerShell'in bilgisayarınızda değişiklik yapmak için Yönetici düzeyinde izinlere sahip olması gerekir.

Yürütme ilkesi

  • Açıklama: PowerShell betiklerinin çalıştırılması varsayılan olarak devre dışıdır. Yalnızca şu anki kapsam için RemoteSigned betiklerine izin vermenizi öneririz.
  • Başvuru: Yürütme İlkeleri ve Set-ExecutionPolicy hakkında.
  • Komut: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process.
  • İsteğe bağlı parametre:
    • -Force. Onay istemini atlar.

Örnek hatalar

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.
PowerShell için ön koşullar

komutunu çalıştırarak $PSVersionTable PowerShell örneğinizi denetleyin. Bu komut aşağıdaki çıkışı oluşturur:

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

Bu yönergeler Windows 10 ve aşağıdaki sürümleri çalıştıran bir bilgisayarda yazıldı ve test edildi.

Bu adımlar sunucunuzu PowerShell Gallery modülleri indirmeye hazırlar.

Uyarı

PowerShell Gallery Windows 10, Windows Server 2016 ve PowerShell 6+ üzerinde desteklenir. Önceki sürümler hakkında bilgi için bkz . PowerShellGet'i Yükleme.

  1. PowerShell'i yükseltilmiş bir yürütme ilkesiyle Yönetici olarak çalıştırın.

  2. NuGet paket sağlayıcısını yükleyin.

    • Açıklama: bu sağlayıcının PowerShell Gallery gibi NuGet tabanlı depolarla etkileşim kurması gerekir.
    • Referans: Install-PackageProvider.
    • Komut: Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201.
    • İsteğe bağlı parametreler:
      • -Proxy. İstek için bir ara sunucu belirtir.
      • -Force. Onay istemini atlar.

    NuGet ayarlı değilse bu istemi alırsınız:

    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. PowerShell Gallery güvenilir bir depo olarak yapılandırın.

    • Açıklama: varsayılan olarak, PowerShell Gallery güvenilmeyen bir depodur.
    • Referans: Set-PSRepository.
    • Komut: Set-PSRepository -Name "PSGallery" -InstallationPolicy Trusted.
    • İsteğe bağlı parametre:
      • -Proxy. İstek için bir ara sunucu belirtir.

    Eğer PowerShell Gallery güvenilir değilse bu uyarıyı alırsınız:

    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"):
    

    PSRepositories komutunu çalıştırarak bu değişikliği onaylayabilir ve Get-PSRepository tümünü denetleyebilirsiniz.

  4. PowerShellGet'in en yeni sürümünü yükleyin.

    • Açıklama: Bu modül, PowerShell Gallery diğer modülleri almak için kullanılan araçları içerir. Sürüm 1.0.0.1, Windows 10 ve Windows Server ile birlikte bulunur. Sürüm 1.6.0 veya üzeri gereklidir. Hangi sürümün yüklü olduğunu belirlemek için komutunu çalıştırın Get-Command -Module PowerShellGet .
    • Referans: PowerShellGet'i Yükleme.
    • Komut: Install-Module -Name PowerShellGet.
    • İsteğe bağlı parametreler:
      • -Proxy. İstek için bir ara sunucu belirtir.
      • -Force. "Zaten yüklü" uyarısını atlar ve en son sürümü yükler.

    PowerShellGet'in en yeni sürümünü kullanmıyorsanız bu hatayı alırsınız:

    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. PowerShell'i yeniden başlatın. Geçerli oturumda yeni sürümü yükleyemezsiniz. Yeni PowerShell oturumları, PowerShellGet'in en son sürümünü yükler.

Bu adımlar PowerShell Gallery'dan Az.ApplicationMonitor modülünü indirir.

  1. PowerShell Gallery için tüm önkoşulların karşılandığından emin olun.
  2. PowerShell'i yükseltilmiş bir yürütme ilkesiyle Yönetici olarak çalıştırın.
  3. Az.ApplicationMonitor modülünü yükleyin.
    • Referans: Install-Module.
    • Komut: Install-Module -Name Az.ApplicationMonitor.
    • İsteğe bağlı parametreler:
      • -Proxy. İstek için bir ara sunucu belirtir.
      • -AllowPrerelease. Alfa ve beta sürümlerinin yüklenmesine izin verir.
      • -AcceptLicense. "Lisansı Kabul Et" istemini atlar
      • -Force. "Güvenilmeyen Depo" uyarısını atlar.
2. Seçenek: Modülü el ile indirme ve yükleme (çevrimdışı seçenek)

Herhangi bir nedenle PowerShell modülüne bağlanamıyorsanız Az.ApplicationMonitor modülünü el ile indirip yükleyebilirsiniz.

En son nupkg dosyasını el ile indirme
  1. https://www.powershellgallery.com/packages/Az.ApplicationMonitor'e gidin.
  2. Sürüm Geçmişi tablosunda dosyanın en son sürümünü seçin.
  3. Yükleme Seçenekleri'nin altında El ile İndir'i seçin.
Seçenek 2.1: PowerShell modülleri dizinine yükleme

PowerShell oturumları tarafından bulunabilmesi için el ile indirilen PowerShell modülünü bir PowerShell dizinine yükleyin. Daha fazla bilgi için bkz . PowerShell Modülü Yükleme.

Expand-Archive (v1.0.1.0) kullanarak zip dosyası olarak nupkg sıkıştırmasını açın

  • Açıklama: Microsoft.PowerShell.Archive'in (v1.0.1.0) temel sürümü nupkg dosyalarının sıkıştırmasını açamaz. Dosyayı .zip uzantısıyla yeniden adlandırın.

  • Başvuru: Expand-Archive.

  • Komut:

    $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
    

Expand-Archive kullanarak nupkg sıkıştırmasını açın (v1.1.0.0)

  • Açıklama: Uzantıyı değiştirmeden nupkg dosyalarının sıkıştırmasını açmak için Expand-Archive uygulamasının geçerli bir sürümünü kullanın.

  • Başvuru: Expand-Archive ve Microsoft.PowerShell.Archive.

  • Komut:

    $pathToNupkg = "C:\az.applicationmonitor.0.2.1-alpha.nupkg"
    $pathInstalledModule = "$Env:ProgramFiles\WindowsPowerShell\Modules\az.applicationmonitor"
    Expand-Archive -LiteralPath $pathToNupkg -DestinationPath $pathInstalledModule
    
Seçenek 2.2: Nupkg'ı el ile açma ve içeri aktarma

PowerShell oturumları tarafından bulunabilmesi için el ile indirilen PowerShell modülünü bir PowerShell dizinine yükleyin. Daha fazla bilgi için bkz . PowerShell Modülü Yükleme.

Modülü başka bir dizine yüklüyorsanız Import-Module kullanarak modülü el ile içeri aktarın.

Önemli

Dinamik bağlantı kitaplıkları (DLL' ler) göreli yollar aracılığıyla yüklenir. Paketin içeriğini hedeflenen çalışma zamanı dizininizde depolayın ve erişim izinlerinin okunmaya izin verilip yazılmadığını onaylayın.

  1. Uzantıyı ".zip" olarak değiştirin ve paketin içeriğini hedeflenen yükleme dizininize ayıklayın.
  2. Az.ApplicationMonitor.psd1 dosyasının yolunu bulun.
  3. PowerShell'i yükseltilmiş bir yürütme ilkesiyle Yönetici olarak çalıştırın.
  4. komutunu kullanarak Import-Module Az.ApplicationMonitor.psd1 modülü yükleyin.
Trafiği ara sunucu üzerinden yönlendirme

Özel intranetinizdeki bir bilgisayarı izlerken, HTTP trafiğini bir ara sunucu üzerinden yönlendirmeniz gerekir.

PowerShell Gallery'dan Az.ApplicationMonitor dosyasını indirip yüklemek için Kullanılan PowerShell komutları bir -Proxy parametresini destekler. Yükleme betiklerinizi yazarken önceki yönergeleri gözden geçirin.

Application Insights SDK'sının uygulamanızın telemetri verilerini Microsoft'a göndermesi gerekir. Web.config dosyanızda uygulamanız için ara sunucu ayarlarını yapılandırmanızı öneririz. Daha fazla bilgi için bkz Proxy geçirgenliğini nasıl sağlarsınız?

İzlemeyi etkinleştirme

İzlemeyi Enable-ApplicationInsightsMonitoring etkinleştirmek için komutunu kullanın.

Bu cmdlet'in nasıl kullanılacağına ilişkin ayrıntılı bir açıklama için API başvurusuna bakın.

API referansı

Önemli

  • Aşağıdaki cmdlet'ler, Yönetici izinlerine ve yükseltilmiş yürütme ilkesine sahip bir PowerShell oturumu gerektirir. Daha fazla bilgi için bkz . PowerShell'i yükseltilmiş yürütme ilkesiyle yönetici olarak çalıştırma.
  • Aşağıdaki cmdlet'ler, lisans ve gizlilik bildirimimizi gözden geçirmenizi ve kabul etmenizi gerektirir.
  • İzleme motoru daha fazla ek yük ekler ve varsayılan olarak kapalı durumda.

Bu bölümde, Az.ApplicationMonitor PowerShell modülünün üyeleri olan aşağıdaki cmdlet'ler açıklanmaktadır:

Uyarı

Örnekler, parametreler ve çıkış gibi daha fazla bilgi için aşağıdaki bölümlerden herhangi birini genişletin.

Enable-InstrumentationEngine

Bazı kayıt defteri anahtarlarını ayarlayarak araç motorunu etkinleştirir. Değişikliklerin etkili olması için IIS'yi yeniden başlatın.

Enstrümantasyon motoru, .NET Yazılım Geliştirme Kitleri (SDK'lar) tarafından toplanan verileri tamamlayabilir. Yönetilen bir işlemin yürütülmesini açıklayan olayları ve iletileri toplar. Bu olaylar ve iletiler bağımlılık sonuç kodlarını, HTTP fiillerini ve SQL komut metnini içerir.

Aşağıdakiler durumunda izleme altyapısını etkinleştirin:

  • Cmdlet ile Enable izlemeyi zaten etkinleştirdiniz ancak enstrümantasyon motorunu etkinleştirmediniz.
  • Uygulamanızı .NET SDK'ları ile elle entegre ettiniz ve ek telemetri verisi toplamak istiyorsunuz.
Örnekler
Enable-InstrumentationEngine
Parametreler
Parametre Description
-Lisansı Kabul Et Optional. Başsız yüklemelerde lisans ve gizlilik bildirimini kabul etmek için bu anahtarı kullanın.
-Ayrıntılı Ortak parametre. Ayrıntılı günlüklerin çıktısını almak için bu düğmeyi kullanın.
Çıktı

Başarıyla etkinleştirilen enstrümantasyon motorundan alınan örnek çıktı:

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

IIS uygulamalarında kodsuz bağlama izlemesini hedef bilgisayarda etkinleştirir.

Bu cmdlet, IIS applicationHost.config dosyasını değiştirir ve bazı kayıt defteri anahtarlarını ayarlar. Her bir uygulama tarafından kullanılan izleme anahtarını tanımlayan applicationinsights.ikey.config adlı bir dosya oluşturur. IIS başlangıçta RedfieldModule'yi yükler ve uygulamalar başlatılırken Application Insights SDK'sını uygulamalara ekler. Değişikliklerinizin etkili olması için IIS'yi yeniden başlatın.

İzlemeyi etkinleştirdikten sonra, uygulamanızın bize telemetri gönderip göndermediğini hızlıca denetlemek için Canlı Ölçümler'i kullanmanızı öneririz.

Örnekler
Tek bir connection string içeren örnek

Bu örnekte, geçerli bilgisayardaki tüm uygulamalara tek bir bağlantı dizesi sunulmaktadır.

Enable-ApplicationInsightsMonitoring -ConnectionString 'InstrumentationKey=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/'
Tek bir izleme anahtarına sahip örnek

Bu örnekte, mevcut bilgisayarda bulunan tüm uygulamalara tek bir izleme anahtarı sağlanmaktadır.

Enable-ApplicationInsightsMonitoring -InstrumentationKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Enstrümantasyon anahtarı eşlemesi içeren örneği

Bu örnekte:

  • MachineFilter, '.*' joker karakterini kullanarak geçerli bilgisayarla eşleşir.
  • AppFilter='WebAppExclude' bir null izleme anahtarı sağlar. Belirtilen uygulama enstrümante edilmedi.
  • AppFilter='WebAppOne' belirtilen uygulamaya benzersiz bir izleme anahtarı tanımlar.
  • AppFilter='WebAppTwo' belirtilen uygulamaya benzersiz bir izleme anahtarı tanımlar.
  • AppFilter karakteri '.*', henüz eşleşmediği tüm web uygulamalarıyla eşleşmesi için kullanılır ve varsayılan bir izleme anahtarı atar.
  • Okunabilirlik için boşluklar eklenir.
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 , bilgisayar veya sanal makine (VM) adının gerekli bir C# regex'idir.
    • '.*' her şeyi eşleştirir
    • 'ComputerName' yalnızca adı tam olarak belirtilen bilgisayarlarla eşleşir.
  • AppFilter , IIS Site Adı'nın gerekli bir C# kayıt defteridir. get-iissite komutunu çalıştırarak sunucunuzdaki sitelerin listesini alabilirsiniz.
    • '.*' her şeyi eşleştirir
    • 'SiteName', yalnızca belirtilen tam ada sahip IIS Sitesi ile eşleşir.
  • Önceki iki filtreyle eşleşen uygulamaların izlenmesini etkinleştirmek için InstrumentationKey gereklidir.
    • İzlemeyi dışlayacak kurallar tanımlamak istiyorsanız bu değeri null bırakın.
Parametreler
Parametre Description
-Enstrüman Motorunu Etkinleştir Optional. İzleme altyapısının yönetilen bir işlemin yürütülmesi sırasında gerçekleşen olaylar ve iletiler toplamasını sağlamak için bu anahtarı kullanın. Bu olaylar ve iletiler bağımlılık sonuç kodlarını, HTTP fiillerini ve SQL komut metnini içerir.

Enstrümantasyon motoru ek yük ekler ve varsayılan olarak kapalı olur.
-Lisansı Kabul Et Optional. Başsız yüklemelerde lisans ve gizlilik bildirimini kabul etmek için bu anahtarı kullanın.
-IgnoreSharedConfig Bir web sunucusu kümeniz olduğunda, paylaşılan bir yapılandırma kullanıyor olabilirsiniz. HttpModule bu paylaşılan yapılandırmaya eklenemez. Bu betik, ek yükleme adımları gerektiğini belirten iletiyle başarısız olur. Bu denetimi yoksaymak ve önkoşulları yüklemeye devam etmek için bu anahtarı kullanın.

Daha fazla bilgi için bkz. iis-paylaşılan-yapılandırmayla-çakışma-bilinen
-Ayrıntılı Ortak parametre. Ayrıntılı günlükleri görüntülemek için bu anahtarı kullanın.
-WhatIf Ortak parametre. İzlemeyi gerçekten etkinleştirmeden giriş parametrelerinizi test etmek ve doğrulamak için bu anahtarı kullanın.
Çıktı
Başarılı bir etkinleştirme işleminden örnek çıktı
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

Bazı kayıt defteri anahtarlarını kaldırarak araç motorunu devre dışı bırakır. Değişikliklerin etkili olması için IIS'yi yeniden başlatın.

Örnekler
Disable-InstrumentationEngine
Parametreler
Parametre Description
-Ayrıntılı Ortak parametre. Ayrıntılı günlüklerin çıktısını almak için bu düğmeyi kullanın.
Çıktı
Başarıyla devre dışı bırakılan izleme motorundan alınan örnek çıktı
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...
Disable-ApplicationInsightsMonitoring

Hedef bilgisayarda izlemeyi devre dışı bırakır. Bu cmdlet, IIS applicationHost.config dosyasındaki düzenlemeleri kaldırır ve kayıt defteri anahtarlarını kaldırır.

Örnekler
Disable-ApplicationInsightsMonitoring
Parametreler
Parametre Description
-Ayrıntılı Ortak parametre. Ayrıntılı günlükleri görüntülemek için bu anahtarı kullanın.
Çıktı
İzlemeyi başarıyla devre dışı bırakmanın örnek çıktısı
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

Yapılandırma dosyasını alır ve değerleri konsola yazdırır.

Örnekler
Get-ApplicationInsightsMonitoringConfig
Parametreler

Parametre gerekmez.

Çıktı
Yapılandırma dosyasının okunmasından alınan örnek çıktı
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

Bu cmdlet, Application Insights Aracısı hakkında sorun giderme bilgileri sağlar. İzleme durumunu, PowerShell Modülünün sürümünü araştırmak ve çalışan işlemi incelemek için bu cmdlet'i kullanın. Bu cmdlet, sürüm bilgilerini ve izleme için gereken önemli dosyalar hakkındaki bilgileri raporlar.

Örnekler
Örnek: Uygulama durumu

Web sitelerinin izleme durumunu görüntülemek için komutunu Get-ApplicationInsightsMonitoringStatus çalıştırın.

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

Bu örnekte:

  • Makine Tanımlayıcısı , sunucunuzu benzersiz olarak tanımlamak için kullanılan anonim bir kimliktir. Bir destek isteği oluşturursanız, sunucunuzun günlüklerini bulmak için bu kimlik gereklidir.

  • Iis'de Varsayılan Web Sitesi Durduruldu

  • IIS, DemoWebApp111'i başlatıldı olarak gösterir, ancak uygulama herhangi bir istek almaz. Raporda çalışan işlem yok (İşlem Kimliği: bulunamadı).

  • DemoWebApp222 çalışıyor ve izleniyor (Enstrümante Edildi: doğru). Kullanıcı yapılandırmasına göre, Araç Anahtarı xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx123 bu site için eşleştirildi.

  • DemoWebApp333, Application Insights SDK'si kullanılarak manuel olarak enstrümante edilmiştir. Application Insights Aracısı SDK'yi algılar ve bu siteyi izlemez.

  • Uygulama Insights aracısının web uygulamasına yüklenen çakışan bir AppAlreadyInstrumented : true tanımladığını, web uygulamasının manuel olarak enstrümante edildiğini varsaydığını ve arka planda kaldığını, bu süreci enstrümante etmediğini belirtir.

  • Instrumented : true Application Insights aracısının, belirtilen w3wp.exe işleminde çalışan web uygulamasını başarıyla işaretlediğini gösterir.

Örnek: PowerShell modülü bilgileri

Geçerli modül hakkındaki bilgileri görüntülemek için komutunu Get-ApplicationInsightsMonitoringStatus -PowerShellModule çalıştırın:

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
Örnek: Çalışma zamanı durumu

Araçlandırılmış bilgisayardaki işlemi inceleyerek tüm DLL'lerin yüklenip yüklenmediğini görebilirsiniz. İzleme çalışıyorsa en az 12 DLL yüklenmelidir.

Get-ApplicationInsightsMonitoringStatus -InspectProcess komutunu çalıştırın:

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
Parametreler

Varsayılan olarak, bu cmdlet web uygulamalarının izleme durumunu bildirir. Uygulamanızın başarıyla enstrümanlanıp enstrümanlanmadığını gözden geçirmek için bu seçeneği kullanın. Ayrıca hangi İzleme Anahtarının sitenizle eşleştirildiğini kontrol edebilirsiniz.

Parametre Description
-PowerShellModule İsteğe bağlı. İzleme için gereken DLL'lerin sürüm numaralarını ve yollarını raporlamak için bu anahtarı kullanın. Application Insights SDK'sı da dahil olmak üzere herhangi bir DLL sürümünü tanımlamanız gerekiyorsa bu seçeneği kullanın.
-İncelemeSüreci İsteğe bağlı. IIS'nin çalışıp çalışmadığını bildirmek için bu anahtarı kullanın. Gerekli DLL'lerin IIS çalışma zamanına yüklenip yüklenmediğini belirlemek için dış araçları indirir. Bu işlem herhangi bir nedenle başarısız olursa şu komutları el ile çalıştırabilirsiniz:

* 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 İsteğe bağlı. Yalnızca InspectProcess ile kullanılır. Daha fazla araç indirilmeden önce görüntülenen kullanıcı istemini atlamak için bu anahtarı kullanın.
Set-ApplicationInsightsMonitoringConfig

Tam yeniden yükleme yapmadan yapılandırma dosyasını ayarlar. Değişikliklerinizin etkili olması için IIS'yi yeniden başlatın.

Önemli

Bu cmdlet, Yönetici izinlerine sahip bir PowerShell oturumu gerektirir.

Örnekler
Tek bir izleme anahtarına sahip örnek

Bu örnekte, mevcut bilgisayarda bulunan tüm uygulamalara tek bir izleme anahtarı sağlanmaktadır.

Enable-ApplicationInsightsMonitoring -InstrumentationKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Enstrümantasyon anahtarı eşlemesi içeren örneği

Bu örnekte:

  • MachineFilter, '.*' joker karakterini kullanarak geçerli bilgisayarla eşleşir.
  • AppFilter='WebAppExclude' bir null izleme anahtarı sağlar. Belirtilen uygulama enstrümante edilmedi.
  • AppFilter='WebAppOne' belirtilen uygulamaya benzersiz bir izleme anahtarı tanımlar.
  • AppFilter='WebAppTwo' belirtilen uygulamaya benzersiz bir izleme anahtarı tanımlar.
  • AppFilter, henüz eşleşmediği web uygulamalarıyla eşleşme sağlamak için '.*' joker karakterini kullanır ve bu işlemler için varsayılan bir izleme anahtarı atar.
  • Okunabilirlik için boşluklar eklenir.
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'}})
Parametreler
Parametre Description
-InstrumentationKey Gerekli. Tüm uygulamalar tarafından hedef bilgisayarda kullanılmak üzere tek bir enstrümantasyon anahtarı sağlamak için bu parametreyi kullanın.
-EnstrümantasyonAnahtarHaritası Gerekli. Birden çok izleme anahtarı ve her uygulama tarafından kullanılan izleme anahtarlarının eşlemesini sağlamak için bu parametreyi kullanın.

MachineFilter ayarlayarak birkaç bilgisayar için tek bir yükleme betiği oluşturabilirsiniz.

Önemli

Uygulamalar, kuralları sizin sağladığınız sırayla eşleştirebilir. Önce en belirli kuralları ve en son en genel kuralları belirtin.

Önemli

InstrumentationKeyMap, aynı makinedeki Internet Information Services (IIS) uygulamalarını Application Insights kaynaklarıyla eşleyen gelişmiş bir yönlendirme özelliğidir. IIS tarafından barındırılan ASP.NET ve ASP.NET Core uygulamaları için otonom enstrümantasyon yapan Application Insights Aracısı'nın bu özelliği geçerlidir.

Eşleştirme nasıl çalışır?

  • Harita, filters adlı sıralı bir kural listesi tanımlar. İlk eşleşen kural devreye girer. Önce belirli kuralları yerleştirin ve genel bir kuralla bitirin.
  • Her kural eşleşen uygulamalara farklı bir Application Insights kaynağı atayabilir. İzleme anahtarları eski olduğundan desteklenen senaryolarda bağlantı dizelerini tercih edin.

Kullanılabilir filtreler

  • MachineFilter veya machineFilter: Bilgisayar veya sanal makine (VM) adıyla eşleşen C# normal ifadesi. .* tüm adlarla eşleşir.
  • AppFilter veya appFilter: IIS site adıyla (HostingEnvironment.SiteName) eşleşen C# normal ifadesi. Bu filtre, VirtualPathFilter veya virtualPathFilter sağlanmadığında gereklidir.
  • VirtualPathFilter veya virtualPathFilter: IIS sanal yolu (HostingEnvironment.ApplicationVirtualPath) ile eşleşen C# normal ifadesi. Sitenin altındaki tek bir uygulamayı hedeflemek için bu filtreyi kullanın.

Terminoloji eşlemesi

  • PowerShell cmdlet'leri MachineFilter, AppFilter ve VirtualPathFilter kullanır.
  • AZURE VM ve Virtual Machine Scale Sets uzantısı JSON, machineFilter, appFilter ve virtualPathFilter kullanır ve kaynağı instrumentationSettings ile ayarlar.

Tip

gibi .*tüm uygulamalarla eşleşen son bir kural ekleyin ve davranışı açık hale getirmek için varsayılan bir kaynak uygulayın.

Bu cmdlet'in harita şekli

  • -InstrumentationKeyMap Karma tablolardan oluşan bir PowerShell dizisi olarak sağlayın.
  • Bu cmdlet için, kaynak hedefini her bir kural için InstrumentationSettings=@{ InstrumentationKey = '<ikey>' } ile ayarlayın.
  • Makinedeki tüm uygulamalar için tek bir kaynak istiyorsanız, -ConnectionString veya -InstrumentationKey kullanın.
Start-ApplicationInsightsMonitoringTrace

codeless ekleme çalışma zamanının yaydığı Windows için Olay İzleme (ETW) olaylarını toplar. Bu cmdlet'i PerfView çalıştırmaya daha basit bir alternatif olarak kullanın.

Olaylar konsola gerçek zamanlı olarak yazdırılır ve ayrıca bir .etl dosyaya yazılır. Daha ayrıntılı analiz için dosyayı PerfView ile açabilirsiniz .etl .

Bu cmdlet, 5 dakikalık varsayılan zaman aşımına ulaşana kadar veya Ctrl + C ile el ile durdurulana kadar çalışır.

Örnekler
Olayları Nasıl Toplarsınız?

Bu akışı, IIS uygulamasının neden enstrümanize edilmediğini araştırmanız gerektiğinde kullanın.

Kodsuz ekleme çalışma zamanı, IIS başlatıldığında ve uygulamanız başlatıldığında ETW olaylarını yayar.

  1. Yönetim komut isteminde komutunu çalıştırarak iisreset /stop IIS'yi ve tüm web uygulamalarını durdurun.
  2. Bu cmdlet'i çalıştırarak izlemeye başlayın.
  3. Yönetici komut isteminde komutunu çalıştırarak iisreset /start IIS'yi başlatın.
  4. Uygulamanıza göz atarak başlatmayı tetikleme.
  5. Uygulamanın yüklenmesi tamamlandıktan sonra, durdurmak için Ctrl + C tuşuna basın veya oturumun zaman aşımına uğramasına izin verin.
Hangi olayların toplanması gerekiyor?

Hangi olay kaynaklarının dahilileceğini seçebilirsiniz:

  1. -CollectSdkEvents Application Insights SDK'sından olayları toplar.
  2. -CollectRedfieldEvents Application Insights Aracısı ve Redfield çalışma zamanından olayları toplar. Bu, IIS ve uygulama başlatma tanılamaları için kullanışlıdır.
  3. Her iki anahtarı da belirterek her iki kümeyi de toplayın.
  4. Bir anahtar belirtmezseniz, her iki küme de varsayılan olarak toplanır.
Parametreler
Parametre Description
-MaxDurationInMinutes (Dakika cinsinden maksimum süre) Optional. Zaman aşımına uğramadan önce ne kadar süre toplayacağını ayarlar. Varsayılan değer 5 dakikadır.
-LogDirectory Optional. Dosyanın yazılması gereken dizin .etl . Varsayılan olarak, dosya PowerShell dizini modülü altında oluşturulur. Oturum başladığında tam yol gösterilir.
-SdkOlaylarınıTopla Optional. Application Insights SDK olaylarını dahil edin.
-CollectRedfieldOlaylarıTopla Optional. Application Insights Aracısı'ndan ve Redfield çalışma zamanından olayları dahil edin.
-Ayrıntılı Ortak parametre. Ayrıntılı günlükleri çıkarır.

Çıktı

Uygulama başlatma günlükleri örneği
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

Sanal makineler (VM' ler) ve sanal makine ölçek kümeleri için Application Insights Aracısı'nı dağıtma

Bu bölümde

Azure Monitor Application Insights izlemeyi otoinstrumentasyon aracılığıyla, Internet Information Server (IIS) tarafından barındırılan ASP.NET ve ASP.NET Core uygulamaları için Azure Sanal Makineler ve Azure Sanal Makine Ölçek Kümeleri üzerinde etkinleştirin.

Application Insights Aracısını bir sanal makine uzantısıyla dağıtın. Aracı, SDK ile aynı bağımlılık sinyallerini otomatik olarak alır. Büyük ölçekli dağıtımları otomatikleştirmek için PowerShell'i kullanın.

Uyarı

Desteklenen otomatik enstrümantasyon senaryolarının tam listesi için bakınız: Desteklenen ortamlar, diller ve kaynak sağlayıcıları.

Sanal makineler için izlemeyi etkinleştirme

VM'ler için izlemeyi etkinleştirmek için Azure portalını veya PowerShell'i kullanabilirsiniz.

1. Seçenek: Azure portalı
  1. Azure portalında Application Insights kaynağınıza gidin. Bağlantı Dizinizi panoya kopyalayın.

    Bağlantı dizgisini gösteren ekran görüntüsü.

  2. Sanal makinenize gidin. Sol taraftaki menünün Ayarlar bölümünde Uzantılar + uygulamalar

    Uzantılar + uygulamalar bölmesinin Ekle düğmesinin gösterildiği ekran görüntüsü.

  3. Application Insights Aracısı>İleri seçin.

    İleri düğmesini içeren Uzantı Yükle bölmesini gösteren ekran görüntüsü.

  4. 1. adımda kopyaladığınız connection string yapıştırın ve Review + create öğesini seçin.

    Gözden Geçir ve oluştur düğmesini içeren Oluştur sekmesini gösteren ekran görüntüsü.

2. Seçenek: PowerShell

Uyarı

PowerShell'de yeni misiniz? Başlarken kılavuzuna göz atın.

Application Insights Aracısını Azure sanal makineler için uzantı olarak yükleyin veya güncelleştirin:

# 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

Uyarı

Daha karmaşık ölçekli dağıtımlar için, birden çok VM'de Application Insights Aracısı uzantısını yüklemek veya güncelleştirmek için bir PowerShell döngüsü kullanabilirsiniz.

Azure sanal makineler için Application Insights Aracısı uzantısının durumunu sorgulayın:

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

Azure sanal makineler için yüklü uzantıların listesini alın:

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

Application Insights Aracısı uzantısını Azure sanal makinelerden kaldırın:

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

Uyarı

Uygulama Insights Aracısı uzantısını dağıtmak için kullandığınız bağlantı dizesiyle ilişkili olan Application Insights kaynağında Live Metrics Stream seçeneğini seçerek yüklemeyi doğrulayın. Birden çok sanal makineden veri gönderiyorsanız Server Name altındaki hedef Azure sanal makineleri seçin. Verilerin akmaya başlaması bir dakika kadar sürebilir.

instrumentationKeyMap (uzantı ayarları)

Önemli

InstrumentationKeyMap, aynı makinedeki Internet Information Services (IIS) uygulamalarını Application Insights kaynaklarıyla eşleyen gelişmiş bir yönlendirme özelliğidir. IIS tarafından barındırılan ASP.NET ve ASP.NET Core uygulamaları için otonom enstrümantasyon yapan Application Insights Aracısı'nın bu özelliği geçerlidir.

Eşleştirme nasıl çalışır?

  • Harita, filters adlı sıralı bir kural listesi tanımlar. İlk eşleşen kural devreye girer. Önce belirli kuralları yerleştirin ve genel bir kuralla bitirin.
  • Her kural eşleşen uygulamalara farklı bir Application Insights kaynağı atayabilir. İzleme anahtarları eski olduğundan desteklenen senaryolarda bağlantı dizelerini tercih edin.

Kullanılabilir filtreler

  • MachineFilter veya machineFilter: Bilgisayar veya sanal makine (VM) adıyla eşleşen C# normal ifadesi. .* tüm adlarla eşleşir.
  • AppFilter veya appFilter: IIS site adıyla (HostingEnvironment.SiteName) eşleşen C# normal ifadesi. Bu filtre, VirtualPathFilter veya virtualPathFilter sağlanmadığında gereklidir.
  • VirtualPathFilter veya virtualPathFilter: IIS sanal yolu (HostingEnvironment.ApplicationVirtualPath) ile eşleşen C# normal ifadesi. Sitenin altındaki tek bir uygulamayı hedeflemek için bu filtreyi kullanın.

Terminoloji eşlemesi

  • PowerShell cmdlet'leri MachineFilter, AppFilter ve VirtualPathFilter kullanır.
  • AZURE VM ve Virtual Machine Scale Sets uzantısı JSON, machineFilter, appFilter ve virtualPathFilter kullanır ve kaynağı instrumentationSettings ile ayarlar.

Tip

gibi .*tüm uygulamalarla eşleşen son bir kural ekleyin ve davranışı açık hale getirmek için varsayılan bir kaynak uygulayın.

VM ve Sanal Makine Ölçek Kümesi uzantısının nereye yerleştirildiği

Haritayı uzantının genel ayarlarına redfieldConfiguration.instrumentationKeyMap.filters altına yerleştirin (VM'ler için -SettingString, Virtual Machine Scale Sets için -Setting). Özellik adları daha küçük deve büyük/küçük harftir. ile instrumentationSettings.connectionStringkural başına hedef kaynağı ayarlayın.

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

Sanal makine ölçek kümeleri için izlemeyi etkinleştirme

sanal makine ölçek kümelerinin izlenmesini etkinleştirmek için Azure portalını veya PowerShell'i kullanabilirsiniz.

1. Seçenek: Azure portalı

VM'ler için önceki adımları izleyin, ancak VM'niz yerine sanal makine ölçek kümelerinize gidin.

2. Seçenek: PowerShell

Application Insights Aracısı'nı sanal makine ölçek kümeleri için uzantı olarak yükleyin veya güncelleştirin:

# 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

Sanal makine ölçek kümeleri için yüklü uzantıların listesini alın:

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

Uygulama izleme uzantısını sanal makine ölçek kümelerinden kaldırın:

# 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

Sorun giderme

Özel sorun giderme adımları için bkz. VM'ler ve sanal makine ölçek kümeleri için Application Insights İzleme Aracısı uzantısını dağıtma sorunu.

Application Insights'ın telemetri aldığını doğrulama

ASP.NET ve ASP.NET Core

Uygulamanızı çalıştırın ve ona istekler yapın. Telemetri artık Application Insights'a akmalıdır. Application Insights SDK'sı, aşağıdaki telemetri verilerinin yanı sıra uygulamanıza gelen web isteklerini otomatik olarak toplar.

İşçi Servisi

Uygulamanızı çalıştırın. Önceki tüm örneklerden çalışanlar, bing.com için her saniye bir HTTP çağrısı yapar ve ayrıca ILogger kullanarak bazı günlükleri yayar. Bu satırlar, StartOperation'in TelemetryClient çağrısı içinde bir işlem oluşturmak için sarılmıştır. Bu örnekte, RequestTelemetry "operation" olarak adlandırılır.

Application Insights bu ILogger günlüklerini uyarı veya varsayılan olarak daha yüksek önem derecesine ve bağımlılıklara sahip olarak toplar. RequestTelemetry öğesiyle bir üst-alt ilişkisi kurar. Bağıntı, işlem/ağ sınırları arasında da çalışır. Örneğin, çağrı başka bir izlenen bileşene yapıldıysa, bu üst öğeyle de bağıntılı olur.

bu özel işlemi RequestTelemetry , tipik bir web uygulamasında gelen web isteğinin eşdeğeri olarak düşünülebilir. İşlem kullanmak gerekli değildir, ancak Application Insights bağıntı veri modeline en uygun olanıdır. RequestTelemetry üst işlem olarak davranır ve çalışan yinelemesi içinde oluşturulan her telemetri mantıksal olarak aynı işleme ait olarak değerlendirilir.

Bu yaklaşım, otomatik ve el ile oluşturulan telemetri verilerinin aynı operation_idolmasını da sağlar. Örnekleme operation_idtemel alındığından, örnekleme algoritması tek bir yinelemedeki tüm telemetriyi ya tutar ya da siler.

Telemetri verilerini toplama

Bu bölümde

Canlı ölçümler

Canlı ölçümler , Application Insights ile uygulama izlemenin doğru yapılandırılıp yapılandırılmadığını hızla doğrulamak için kullanılabilir. Telemetrinin Azure portalında görünmesi birkaç dakika sürebilir, ancak canlı ölçümler bölmesinde çalışan işlemin CPU kullanımı neredeyse gerçek zamanlı olarak gösterilir. Ayrıca istekler, bağımlılıklar ve izlemeler gibi diğer telemetri verilerini de gösterebilir.

Uyarı

Canlı ölçümler, .NET uygulamaları için önerilen yönergeleri kullanarak eklediğinizde varsayılan olarak etkinleştirilir.

Get started

  1. Dile özgü yönergeleri izleyerek Application Insights SDK'ları ile canlı ölçümleri etkinleştirin:

    • ASP.NET: Varsayılan olarak etkindir ancak kod kullanılarak el ile de etkinleştirilebilir.
    • ASP.NET Core: Varsayılan olarak etkindir ancak kod kullanılarak el ile de etkinleştirilebilir.
    • .NET/.NET Çekirdek Konsolu/Çalışanı: Varsayılan olarak etkindir.
  2. uygulamanızın Application Insights kaynağını Azure portalında açın. Sol taraftaki menüde Araştır altında listelenen Canlı ölçümler'i seçin.

  3. Özel filtreler kullanıyorsanız Microsoft Entra kimlik doğrulamasını etkinleştirerek denetim kanalını güvence altına alın.

Desteklenen özellikler
Language Temel ölçümler Performans ölçümleri Özel filtreleme Örnek telemetri İşleme göre CPU bölme
.NET Framework Desteklenen (LTS) Desteklenen (LTS) Desteklenen (LTS) Desteklenen (LTS) Desteklenen (LTS)
.NET Core (target=.NET Framework) Desteklenen (LTS) Desteklenen (LTS) Desteklenen (LTS) Desteklenen (LTS) Desteklenen (LTS)
.NET Çekirdeği (target=.NET Core) Desteklenen (LTS) Supported* Desteklenen (LTS) Desteklenen (LTS) Desteklenmiyor

Temel ölçümler istek, bağımlılık ve özel durum oranını içerir. Performans ölçümleri (performans sayaçları) bellek ve CPU içerir. Örnek telemetri başarısız istekler ve bağımlılıklar, özel durumlar, olaylar ve izlemeler için ayrıntılı bilgi akışını gösterir.

PerfCounters desteği, .NET Framework'leri hedeflemeyen .NET Core sürümleri arasında biraz değişiklik gösterir:

  • PerfCounters ölçümleri, Windows için Azure App Service (ASP.NET Core SDK sürüm 2.4.1 veya üzeri) çalıştırılırken desteklenir.
  • Uygulama .NET Core LTS veya üzerini hedefleyen uygulamalar için any Windows makinesinde çalıştırıldığında PerfCounters desteklenir.
  • PerfCounters, uygulama en son sürümlerde anywhere (Linux, Windows, Linux için uygulama hizmeti veya kapsayıcılar gibi) çalıştırıldığında desteklenir, ancak yalnızca .NET Core LTS veya üzerini hedefleyen uygulamalar için desteklenir.

Herhangi bir .NET uygulaması için kod kullanarak canlı ölçümleri etkinleştirme

ASP.NET

Canlı ölçümleri el ile yapılandırmak için:

  1. Microsoft.ApplicationInsights.PerfCounterCollector NuGet paketini yükleyin.

  2. Aşağıdaki örnek konsol uygulaması kodu canlı ölçümleri ayarlamayı gösterir:

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

Canlı ölçümleri el ile yapılandırmak için:

  1. Microsoft.ApplicationInsights.PerfCounterCollector NuGet paketini yükleyin.

  2. Aşağıdaki örnek konsol uygulaması kodu canlı ölçümleri ayarlamayı gösterir:

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();
}

Yukarıdaki örnek bir konsol uygulamasına yöneliktir, ancak aynı kod tüm .NET uygulamalarında kullanılabilir.

Önemli

Telemetriyi otomatik olarak almak için başka telemetri modülleri etkinleştirildiyse, canlı ölçüm modülü için bu modülleri başlatmak için kullanılan yapılandırmanın aynı olduğundan emin olun.

Uyarı

Varsayılan yapılandırma ILoggerWarning günlükleri ve daha ciddi olan günlükleri toplar. Daha fazla bilgi için bkz ILogger günlükleri koleksiyonunu nasıl özelleştiririm?.

İşçi Servisi

Uyarı veya daha yüksek şiddetle yayılan ILogger günlükler otomatik olarak yakalanır. Bu davranışı değiştirmek için, aşağıdaki kodda gösterildiği gibi sağlayıcı ApplicationInsightsiçin günlüğe kaydetme yapılandırmasını açıkça geçersiz kılın. Aşağıdaki yapılandırma, Application Insights'ın tüm Information günlükleri ve daha ciddi günlükleri yakalamasını sağlar.

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

Aşağıdaki örneğin, Application Insights sağlayıcısının Information günlüklerini yakalamasını sağlamak için tasarlanmadığını unutmayın. SDK yalnızca ApplicationInsights günlükleri ve daha ciddi günlükleri Warning yakalama talimatı veren bir varsayılan günlük filtresi eklediğinden bunu yakalamaz. Application Insights için açık bir geçersiz kılma gerekir.

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

Uyarı

Application Insights, koddaki ConfigureLogging(...) aracılığıyla yapılandırılan günlük düzeylerini dikkate alır. Yalnızca appsettings.json kullanılıyorsa ve ConfigureLogging açıkça geçersiz kılınmıyorsa, varsayılan günlük düzeyi Uyarı'dır.

Daha fazla bilgi için, Application Insights tarafından hangi günlük düzeylerinin yakalandığını özelleştirmek için ILogger belgelerini izleyin.

İzlemeler (günlükler)

Bu bölümde, ASP.NET veya ASP.NET Core uygulamalardan Application Insights'a tanılama izleme günlüklerinin nasıl gönderilip portalda nasıl araştırılıp aranacakları açıklanmaktadır.

her kullanıcı isteğiyle ilişkili izlemeleri tanımlamak ve bunları diğer olaylar ve özel durum raporlarıyla ilişkilendirmek için izleme günlüklerini kullanabilirsiniz.

Application Insights, ILogger aracılığıyla ASP.NET Core ve diğer .NET uygulamalarından ve klasik SDK ve bağdaştırıcılar aracılığıyla klasik ASP.NET (.NET Framework) günlükleri yakalar.

Uyarı

  • Varsayılan olarak, Application Insights sağlayıcısı, yalnızca önem derecesi Warning veya daha yüksek olan günlükleri gönderir. Information veya daha alt düzey günlükleri eklemek için appsettings.json içindeki günlük düzeyi ayarlarını güncelleyin.

  • Microsoft.ApplicationInsights.WorkerService Arka plan hizmetleri için Application Insights'ı etkinleştirmek için kullanılan NuGet paketi kapsam dışındadır.

  • Sık sorulan soruları (SSS) gözden geçirmek için bkz. SSS ile .NET hakkında bilgi edinin.

Uygulamanıza günlük kaydı yükleme

ASP.NET

Application Insights'ın toplayabileceği tanılama günlüklerini yazdırmak için bir günlükleme yöntemi seçin.

System.Diagnostics izleme kullanan klasik ASP.NET uygulamaları için yapılandırmada Application Insights TraceListener yapılandırın.

Bir dinleyici ekleyin: web.config veya app.config için.

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

Uyarı

Günlük yakalama modülü, üçüncü taraf günlükçüler için kullanışlı bir bağdaştırıcıdır. Ancak henüz NLog, log4Net veya System.Diagnostics.Tracekullanmıyorsanız Application Insights TrackTrace() öğesini doğrudan çağırmayı göz önünde bulundurun.

Application Insights'ı günlükleri toplayacak şekilde yapılandırma

Seçenek 1: Henüz yapmadıysanız projenize Application Insights ekleyin. Visual Studio Application Insights'ı eklerken günlük toplayıcısını ekleme seçeneği vardır.

Seçenek 2: Çözüm Gezgini'nde projenize sağ tıklayın ve Application Insights'ı yapılandırın. İzleme koleksiyonunu yapılandır seçeneğini belirleyin.

Uyarı

Application Insights menüsü veya günlük toplayıcı seçeneği eksikse, ayrılmış sorun giderme makalesine bakın.

ASP.NET Core

ASP.NET Core için Application Insights SDK'sı varsayılan olarak ILogger günlüklerini zaten toplar. SDK'yı kullanıyorsanız, genellikle builder.Logging.AddApplicationInsights() çağrısı yapmanız gerekmez ve aşağıdaki ILogger yükleme yönergelerini göz ardı edebilirsiniz.

Tam telemetri yığınına değil de yalnızca günlük iletmeye ihtiyacınız varsa, günlükleri yakalamak için Microsoft.Extensions.Logging.ApplicationInsights sağlayıcı paketini kullanabilirsiniz.

El ile yükleme

Proje türünüz Application Insights yükleyicisi tarafından desteklenmiyorsa (örneğin, bazı masaüstü/konsol senaryoları) veya açık paket düzeyi denetimi tercih ediyorsanız bu yöntemi kullanın.

  1. Solution Explorer'da projenize sağ tıklayın ve Manage NuGet Packages öğesini seçin.

  2. Application Insights için arama.

  3. Aşağıdaki paketlerden birini seçin:

NuGet paketi gerekli derlemeleri yükler ve uygun olduğunda web.config veya app.config dosyalarını değiştirir.

Yükleme Yönergeleri:

Uyarı

Pakete özgü yükleme yönergeleri için aşağıdaki bölümlerden herhangi birini genişletin.


Ilogger
  1. öğesini Microsoft.Extensions.Logging.ApplicationInsightsyükleyin.

  2. Ekle 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();

NuGet paketi yüklendikten ve sağlayıcı bağımlılık ekleme ile kaydedildikten sonra uygulama loglama yapmaya hazırdır. Oluşturucu enjeksiyon ile, ya ILogger ya da genel tür alternatifi ILogger<TCategoryName> gereklidir. Bu uygulamalar çözümlendiğinde bunları ApplicationInsightsLoggerProvider sağlar. Kayıtlı iletiler veya istisnalar Application Insights'a iletilir.

Aşağıdaki örnek denetleyiciyi göz önünde bulundurun:

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" };
    }
}

Daha fazla bilgi için bkz.: ASP.NET Core'da Günlük Kaydı ve ILogger günlüklerinden hangi Application Insights telemetri türü üretilir? Application Insights'ta ILogger günlüklerini nerede görebilirim?.

Tanılama günlüğü çağrıları ekleme (System.Diagnostics.Trace / log4net / NLog)

kullanıyorsanız System.Diagnostics.Trace, tipik bir çağrı şöyle olur:

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

log4net veya NLog tercih ediyorsanız, şunu kullanın:

    logger.Warn("Slow response - database01");
EventSource olaylarını kullanma

Application Insights'a izleme bilgisi olarak gönderilmek üzere System.Diagnostics.Tracing.EventSource olaylarını yapılandırabilirsiniz.

  1. Microsoft.ApplicationInsights.EventSourceListener NuGet paketini yükleyin.

  2. TelemetryModules ApplicationInsights.config dosyasının bölümünü düzenleyin:

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

Her kaynak için aşağıdaki parametreleri ayarlayabilirsiniz:

  • Ad, toplanacak EventSource'un adını belirtir.
  • Düzey , toplayacak günlük düzeyini belirtir: Kritik, Hata, Bilgilendirme, LogAlways, Ayrıntılı veya Uyarı.
  • Anahtar sözcükler (isteğe bağlı) kullanılacak anahtar sözcük bileşimlerinin tamsayı değerini belirtir.
DiagnosticSource olaylarını kullanma

Application Insights'e izleme olarak gönderilmesi için System.Diagnostics.DiagnosticSource olaylarını yapılandırabilirsiniz.

  1. Microsoft.ApplicationInsights.DiagnosticSourceListener NuGet paketini yükleyin.

  2. TelemetryModules ApplicationInsights.config dosyasının bölümünü düzenleyin:

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

İzlemek istediğiniz her tanılama kaynağı için, tanılama kaynağınızın adına özniteliği ayarlanmış bir girdi Name ekleyin.

ETW olaylarını kullanma

Windows için Olay İzleme (ETW) olaylarını, izler olarak Application Insights'a gönderilecek şekilde yapılandırabilirsiniz.

  1. Microsoft.ApplicationInsights.EtwCollector NuGet paketini yükleyin.

  2. ApplicationInsights.config dosyasının "TelemetryModules" bölümünü düzenleyin:

Uyarı

ETW olayları yalnızca SDK'yi barındıran işlem, Performans Günlüğü Kullanıcıları veya Yöneticileri grubuna üye olan bir kimlik altında çalışıyorsa toplanabilir.

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

Her kaynak için aşağıdaki parametreleri ayarlayabilirsiniz:

  • ProviderName , toplayacak ETW sağlayıcısının adıdır.
  • ProviderGuid , toplayacak ETW sağlayıcısının GUID'sini belirtir. yerine ProviderNamekullanılabilir.
  • Düzey , toplayacak günlük düzeyini ayarlar. Kritik, Hata, Bilgilendirme, LogAlways, Ayrıntılı veya Uyarı olabilir.
  • Anahtar sözcükler (isteğe bağlı) kullanılacak anahtar sözcük bileşimlerinin tamsayı değerini ayarlar.
İzleme API'sini doğrudan kullanma

Application Insights izleme API'sini doğrudan çağırabilirsiniz. Günlük bağdaştırıcıları bu API'yi kullanır. Örneğin:

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

Bunun bir avantajı TrackTrace , iletiye görece uzun veriler koyabilmenizdir. Örneğin, POST verilerini orada kodlayabilirsiniz.

İletinize bir önem düzeyi de ekleyebilirsiniz. Ayrıca, diğer telemetrilerde olduğu gibi, farklı izleme kümelerini filtrelemeye veya aramaya yardımcı olmak için özellik değerleri ekleyebilirsiniz. Örneğin:

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

Artık Belirli bir veritabanıyla ilgili belirli bir önem düzeyindeki tüm iletileri ara bölümünde kolayca filtreleyebilirsiniz.

Konsol uygulaması

Konsol uygulamalarına Application Insights günlüğü eklemek için önce aşağıdaki NuGet paketlerini yükleyin:

Aşağıdaki örnek, paketini kullanır Microsoft.Extensions.Logging.ApplicationInsights ve bir konsol uygulaması için varsayılan davranışı gösterir. Paket Microsoft.Extensions.Logging.ApplicationInsights bir konsol uygulamasında veya ölçümler, dağıtılmış izleme, örnekleme ve telemetri başlatıcıları gibi tam özellik kümesi olmadan Application Insights'ın en düşük düzeyde uygulanmasını istediğinizde kullanılmalıdır.

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));
}

Daha fazla bilgi için bkz . ILogger günlüklerinden hangi Application Insights telemetri türü üretilir? Application Insights'ta ILogger günlüklerini nerede görebilirim?.

Log kapsamları

Uyarı

Aşağıdaki kılavuz ILogger senaryoları için geçerlidir (yalnızca ASP.NET Core ve konsol). Klasik ASP.NET.

ApplicationInsightsLoggingProvider varsayılan olarak etkinleştirilen günlük kapsamlarını destekler.

Kapsam türündeyse IReadOnlyCollection<KeyValuePair<string,object>>koleksiyondaki her anahtar/değer çifti Application Insights telemetrisine özel özellikler olarak eklenir. Aşağıdaki örnekte, günlükler TraceTelemetry olarak yakalanır ve ("MyKey", "MyValue") özelliklerinde yer alır.

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

Kapsam olarak başka bir tür kullanılırsa, özellik 'Application Insights' telemetrisi altında Scope olarak depolanır. Aşağıdaki örnekte, TraceTelemetry kapsamı içeren adlı Scope bir özelliği vardır.

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

Günlüklerinizi bulma

Uygulamanızı hata ayıklama modunda çalıştırın veya canlı olarak dağıtın.

Uygulamanızın Application Insights portalındaki genel bakış bölmesinde Ara'yı seçerek şunları yapabilirsiniz:

  • Günlük izlerine veya belirli özelliklere sahip öğelere filtre uygulayın.
  • Belirli bir öğeyi ayrıntılı olarak inceleyin.
  • Aynı kullanıcı isteğiyle ilişkili (aynı işlem kimliğine sahip) diğer sistem günlüğü verilerini bulun.
  • Sayfanın yapılandırmasını sık kullanılan olarak kaydedin.

Uyarı

Uygulamanız büyük miktarlarda veri gönderiyorsa ve ASP.NET sürüm 2.0.0-beta3 veya üzeri için Application Insights SDK'sını kullanıyorsanız, adaptive örnekleme özelliği telemetrinizin yalnızca bir bölümünü çalıştırabilir ve gönderebilir. Örnekleme hakkında daha fazla bilgi edinin.

Azure Monitor Günlükleri'nde keşfetme

ILogger günlükleri izleme telemetrisi olarak görünür (Application Insights'ta tablo traces ve Log Analytics'de AppTraces).

Örnek

Azure portalında Application Insights'a gidin ve şunu çalıştırın:

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

Dağıtılmış izleme

Modern bulut ve mikro hizmet mimarileri , kullanılabilirliği ve aktarım hızını artırırken maliyetleri azaltan basit, bağımsız olarak dağıtılabilir hizmetler etkinleştirdi. Ancak, genel sistemlerin mantık yürütmesini ve hata ayıklamasını daha zor hale getirmiştir. Dağıtılmış izleme, bulut ve mikro hizmet mimarileri için çağrı yığınları gibi çalışan bir performans profili oluşturucu sağlayarak bu sorunu çözer.

Azure Monitor, dağıtılmış izleme verilerini kullanmak için iki deneyim sağlar: tek bir işlem/istek için transaction tanılama görünümü ve sistemlerin nasıl etkileşime geçtiğini göstermek için uygulama haritası görünümü.

Application Insights , dağıtılmış telemetri bağıntısını kullanarak her bileşeni ayrı ayrı izleyebilir ve hatalardan veya performans düşüşlerinden hangi bileşenin sorumlu olduğunu algılayabilir. Bu makalede application insights tarafından kullanılan farklı dil ve platformlarda veri modeli, bağlam yayma teknikleri, protokoller ve bağıntı taktiklerinin uygulanması açıklanmaktadır.

Application Insights aracılığıyla otomatikinstrumentasyon veya SDK'lar kullanarak dağıtılmış izlemeyi etkinleştirin

.NET, .NET Core, Java, Node.jsve JavaScript için Application Insights aracıları ve SDK'larının tümü yerel olarak dağıtılmış izlemeyi destekler.

Uygun Application Insights SDK'sı yüklenip yapılandırıldığında, SDK bağımlılık otomatik koleksiyonları tarafından popüler çerçeveler, kitaplıklar ve teknolojiler için izleme bilgileri otomatik olarak toplanır. Desteklenen teknolojilerin tam listesine Bağımlılık otomatik koleksiyonu belgelerinden ulaşabilirsiniz.

Herhangi bir teknoloji, TelemetryClient üzerindeki TrackDependency çağrısıyla el ile de izlenebilir.

Telemetri bağıntısı için veri modeli

Application Insights, dağıtılmış telemetri bağıntısı için bir veri modeli tanımlar. Telemetriyi mantıksal bir işlemle ilişkilendirmek için, her telemetri öğesinin adlı operation_Idbir bağlam alanı vardır. Dağıtılmış izlemedeki her telemetri öğesi bu tanımlayıcıyı paylaşır. Bu nedenle, tek bir katmandan telemetriyi kaybetseniz bile, diğer bileşenler tarafından bildirilen telemetriyi ilişkilendirebilirsiniz.

Dağıtılmış mantıksal işlem genellikle bileşenlerden biri tarafından işlenen istekler olan daha küçük bir işlem kümesinden oluşur. İstek telemetrisi bu işlemleri tanımlar. Her istek telemetri öğesini benzersiz ve global olarak tanımlayan kendi id tanımlayıcısı vardır. Ayrıca, istekle ilişkili tüm telemetri öğeleri (izlemeler ve özel durumlar gibi) değerini isteğin operation_parentIddeğerine ayarlamalıdırid.

Bağımlılık telemetrisi , başka bir bileşene http çağrısı gibi her giden işlemi temsil eder. Ayrıca, genel olarak benzersiz olan kendi id tanımlarını da tanımlar. Bu bağımlılık çağrısının başlattığı telemetri talebi, id olarak operation_parentId kullanır.

operation_Id, operation_parentId ve request.id ile dependency.id kullanarak dağıtılmış mantıksal işlemin bir görünümünü oluşturabilirsiniz. Bu alanlar, telemetri çağrılarının nedensellik sırasını da tanımlar.

Mikro hizmetler ortamında, bileşenlerden gelen izlemeler farklı depolama öğelerine gidebilir. Application Insights'ta her bileşenin kendi bağlantı dizesi olabilir. Mantıksal işlem için telemetri almak için Application Insights her depolama öğesindeki verileri sorgular.

Depolama öğelerinin sayısı büyük olduğunda, sonraki nereye bakabileceğiniz hakkında bir ipucuna ihtiyacınız vardır. Application Insights veri modeli bu sorunu çözmek için iki alan tanımlar: request.source ve dependency.target. İlk alan, bağımlılık isteğini başlatan bileşeni tanımlar. İkinci alan, bağımlılık çağrısının yanıtını döndüren bileşeni tanımlar.

Birden çok farklı örnekten sorgulama hakkında bilgi için, Azure Monitor'da Log Analytics çalışma alanları, uygulamalar ve kaynaklar arasında veri sorgulama bölümüne bakın.

Örnek

Bir örneğe bakalım. Hisse Senedi Fiyatları adlı bir uygulama, Hisse Senedi adlı bir dış API kullanarak hisse senedinin geçerli piyasa fiyatını gösterir. Hisse Senedi Fiyatları uygulamasının, istemci web tarayıcısının kullanarak GET /Home/Stockaçtığı Hisse Senedi sayfası adlı bir sayfası vardır. Uygulama, HTTP çağrısını GET /api/stock/valuekullanarak Stok API'sini sorgular.

Bir sorgu çalıştırarak sonuçta elde edilen telemetriyi analiz edebilirsiniz:

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

Sonuçlarda, tüm telemetri öğeleri kökünü operation_Idpaylaşır. Sayfadan bir Ajax çağrısı yapıldığında, bağımlılık telemetrisine yeni bir benzersiz kimlik (qJSXU) atanır ve pageView kimliği olarak operation_ParentIdkullanılır. Sunucu isteği daha sonra Ajax Kimliğini olarak operation_ParentIdkullanır.

öge türü name Kimlik işlem_EbeveynId operation_Id
pageView Stok sayfası STYz STYz
bağımlılık GET /Home/Stock qJSXU STYz STYz
request GET Anasayfa/Stok KqKwlrSt9PA= qJSXU STYz
bağımlılık GET /api/stock/value bBrf2L7mm2g= KqKwlrSt9PA= STYz

Bir dış hizmete çağrı GET /api/stock/value yapıldığında, alanı uygun şekilde ayarlayabilmeniz için o sunucunun dependency.target kimliğini bilmeniz gerekir. Dış hizmet izlemeyi desteklemiyorsa, target, hizmetin ana bilgisayar adı olarak ayarlanır. stock-prices-api.com bunun bir örneğidir. Ancak hizmet önceden tanımlanmış bir HTTP üst bilgisi döndürerek kendini tanımlarsa, target Application Insights'ın söz konusu hizmetten telemetriyi sorgulayarak dağıtılmış izleme oluşturmasına olanak tanıyan hizmet kimliğini içerir.

W3C TraceContext kullanarak korelasyon başlıkları

Application Insights W3C İzleme Bağlamı'na geçiş yaparak şunları tanımlar:

  • traceparent: Genel olarak benzersiz işlem kimliğini ve çağrının benzersiz tanımlayıcısını taşır.
  • tracestate: Sisteme özgü izleme bağlamı taşır.

Application Insights SDK'sının en son sürümü Trace-Context protokolü destekler, ancak bunu kabul etmeniz gerekebilir. (Application Insights SDK tarafından desteklenen önceki bağıntı protokolüyle geriye dönük uyumluluk korunur.)

Request-Id olarak da adlandırılan bağıntı HTTP protokolü kullanım dışı bırakılıyor. Bu protokol iki üst bilgi tanımlar:

  • Request-Id: Çağrının küresel olarak benzersiz kimliğini taşır.
  • Correlation-Context: Dağıtılmış izleme özelliklerinin ad-değer çiftleri koleksiyonunu taşır.

Application Insights, korelasyon HTTP protokolü uzantısını da tanımlar. Kullanıcı veya çağrılan tarafından kullanılan özellik koleksiyonunu yaymak için ad-değer çiftlerini kullanır Request-Context. Application Insights SDK, dependency.target ve request.source alanlarını ayarlamak için bu üst bilgiyi kullanır.

W3C İzleme Bağlamı ve Application Insights veri modelleri şu şekilde eşleşir:

Uygulama Öngörüleri W3C TraceContext
Id ile Request ve Dependency ebeveyn ID
Operation_Id trace-id
Operation_ParentId bu yayılma alanının ebeveyn yayılma alanının ebeveyn-id'si. Kök yayılma alanıysa bu alan boş olmalıdır.

Daha fazla bilgi için Application Insights telemetri veri modeli bkz.

W3C dağıtılmış izleme desteğini etkinleştirme

W3C TraceContext tabanlı dağıtılmış izleme, tüm son .NET Framework/.NET Core SDK'larında varsayılan olarak etkindir ve eski Request-Id protokolüyle geriye dönük uyumluluk sağlar.

Telemetri bağıntısı

Bir uygulama entegre edilirken bağıntı varsayılan olarak işlenir. Özel eylem gerekmez.

.NET çalışma zamanı, Activity ve DiagnosticSource yardımıyla dağıtılmış sistemleri destekler.

Application Insights .NET SDK'sı telemetri verilerini toplamak ve ilişkilendirmek için DiagnosticSource ve Activity kullanır.

Bağımlılıklar

Otomatik olarak izlenen bağımlılıklar

bağımlılıkları otomatik olarak toplayan bir telemetri modülü olan DependencyTrackingTelemetryModule ile .NET ve .NET Core için Application Insights SDK'ları sevk edilir. Modül DependencyTrackingTelemetryModule, Microsoft.ApplicationInsights.DependencyCollector NuGet paketi olarak gönderilir ve NuGet paketini veya Microsoft.ApplicationInsights.Web NuGet paketini kullandığınızda Microsoft.ApplicationInsights.AspNetCore otomatik olarak getirilir.

DependencyTrackingTelemetryModule Şu anda aşağıdaki bağımlılıkları otomatik olarak izler:

Bağımlılıklar Ayrıntılar
HTTP/HTTPS Yerel veya uzak HTTP/HTTPS çağrıları.
WCF çağrıları Yalnızca HTTP tabanlı bağlamalar kullanılıyorsa otomatik olarak izlenir.
SQL Çağrılar SqlClient ile yapıldı. SQL sorgularını yakalamak için genel SQL sorgularını almak amacıyla Gelişmiş SQL izleme bölümüne bakın.
Azure Blob Storage, Tablo Depolama veya Kuyruk Depolama Azure Storage istemcisiyle yapılan çağrılar.
Azure Event Hubs istemcisi SDK En son paketi kullanın: https://nuget.org/packages/Azure.Messaging.EventHubs.
Azure Service Bus İstemci Yazılım Geliştirme Kiti En son paketi kullanın: https://nuget.org/packages/Azure.Messaging.ServiceBus.
Azure Cosmos DB HTTP/HTTPS kullanılıyorsa otomatik olarak izlenir. TCP ile doğrudan modda işlemler için izleme, >= 3.33.0-preview önizleme paketi kullanılarak otomatik olarak yakalanır. Diğer ayrıntılar için belgeleri ziyaret edin.

Bağımlılık otomatik olarak toplanmıyorsa, bağımlılık izleme çağrısıyla el ile izleyebilirsiniz.

Bağımlılık izlemenin nasıl çalıştığı hakkında daha fazla bilgi için bkz. Application Insights'ta bağımlılık izleme.

Otomatik bağımlılık izleme nasıl çalışır?

  • Bayt kodu enstrümantasyonu, InstrumentationEngine kullanılarak seçilen yöntemlerin çevresine uygulanır ve StatusMonitor veya Azure App Service için Application Insights uzantısı aracılığıyla etkinleştirilebilir.

  • EventSource geri çağırma işlevleri, yapılandırılmış olayları yayan .NET kütüphanelerinden telemetriyi toplamak için kullanılır.

  • DiagnosticSource geri çağırmaları, dağıtılmış izlemeyi destekleyen kitaplıklardan telemetri toplamak için daha yeni .NET ve .NET Temel SDK'larda kullanılır.

Konsol uygulamalarında otomatik bağımlılık izlemeyi ayarlama

.NET konsol uygulamalarından bağımlılıkları otomatik olarak izlemek için Microsoft.ApplicationInsights.DependencyCollector NuGet paketini yükleyin ve DependencyTrackingTelemetryModule başlatın:

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

Uyarı

.NET Core konsol uygulamaları için TelemetryConfiguration.Active kullanım dışıdır.

Bağımlılıkları el ile izleme

Otomatik olarak toplanmayan aşağıdaki bağımlılık örnekleri için el ile izleme gerekir:

  • Azure Cosmos DB yalnızca HTTP/HTTPS kullanıldığında otomatik olarak izlenir. TCP modu, sürümünden 2.22.0-Beta1eski SDK sürümleri için Application Insights tarafından otomatik olarak yakalanmaz.
  • Redis

SDK tarafından otomatik olarak toplanmayan bağımlılıklar için, standart otomatik toplama modülleri tarafından kullanılan TrackDependency API'sini kullanarak bunları el ile izleyebilirsiniz.

Örnek

Kodunuzu kendi yazmadığınız bir derlemeyle oluşturursanız, tüm çağrıları zamanlayabilirsiniz. Bu senaryo, yanıt sürelerinize ne gibi bir katkı sağladığını bulmanıza olanak sağlar.

Bu verilerin Application Insights'taki bağımlılık grafiklerinde görüntülenmesini sağlamak için kullanarak TrackDependencygönderin:


    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);
    }

Alternatif olarak, TelemetryClient uzantı yöntemleri StartOperation ve StopOperation sağlar, bunlar el ile bağımlılıkları izlemek için kullanılabilir ve bu, Giden bağımlılıkları izleme bölümünde gösterildiği gibi yapılabilir.

Standart bağımlılık izleme modülünü devre dışı bırakma

Daha fazla bilgi için bkz . telemetri modülleri.

Tam SQL sorgusu almak için gelişmiş SQL izleme

SQL çağrıları için, sunucunun ve veritabanının adı her zaman toplanır ve toplanan DependencyTelemetryöğesinin adı olarak depolanır. Veri olarak adlandırılan başka bir alan, tam SQL sorgu metnini içerebilir.

Uyarı

Azure Functions, SQL metin toplamayı etkinleştirmek için ayrı ayarlar gerektirir. Daha fazla bilgi için bkz . SQL sorgu koleksiyonunu etkinleştirme.

ASP.NET

ASP.NET uygulamalar için, tam SQL sorgu metni bayt kodu izlemesi yardımıyla toplanır. Bu, izleme altyapısının kullanılmasını veya System.Data.SqlClient kitaplığı yerine Microsoft.Data.SqlClient NuGet paketinin kullanılmasını gerektirir. Tam SQL Sorgu koleksiyonunu etkinleştirmek için platforma özgü adımlar aşağıdaki tabloda açıklanmıştır.

Platform Tam SQL sorgusu almak için gereken adımlar
Azure App Service'da Web Apps Web uygulaması denetim masanızda Application Insights bölmesini açın ve .NET altında SQL Komutlarını etkinleştirin.
IIS Sunucusu (Azure Virtual Machines, şirket içi vb.) Microsoft.Data.SqlClient NuGet paketini kullanın veya izleme altyapısını yüklemek ve IIS'yi yeniden başlatmak için Application Insights Aracısı PowerShell Modülü'nü kullanın.
Azure Cloud Services StatusMonitor'ı yüklemek için bir başlangıç görevi ekleyin.
Uygulamanız, ASP.NET veya ASP.NET Core uygulamaları için NuGet paketleri yüklenerek derleme zamanında ApplicationInsights SDK'sına eklenmelidir.
IIS Express Microsoft.Data.SqlClient NuGet paketini kullanın.
Azure App Service'te WebJobs Microsoft.Data.SqlClient NuGet paketini kullanın.

Önceki platforma özgü adımlara ek olarak, dosyayı aşağıdaki kodla değiştirerek SQL komut koleksiyonunugerekir:

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

ASP.NET Core uygulamalar için aşağıdakileri kullanarak SQL Metin toplamayı kabul etmek gerekir:

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

Önceki durumlarda, izleme altyapısının doğru yüklendiğini doğrulamanın uygun yolu, toplanan DependencyTelemetry SDK sürümünün rddp olduğunu doğrulamaktır. Kullanımı rdddsd veya rddf, bağımlılıkların DiagnosticSource veya EventSource geri çağırmaları yoluyla toplandığını gösterir, bu nedenle tam SQL sorgusu yakalanmaz.

Exceptions

Web uygulamalarında özel durumlar Application Insights ile bildirilebilir. Başarısız istekleri özel durumlarla ve hem istemcide hem de sunucuda diğer olaylarla ilişkilendirebilir ve böylece nedenleri hızla tanılayabilirsiniz. Bu bölümde özel durum raporlamayı ayarlamayı, özel durumları açıkça bildirmeyi, hataları tanılamayı ve daha fazlasını öğreneceksiniz.

Özel durum raporlamayı ayarlama

Sunucuda veya istemcide oluşan özel durumları raporlamak için Application Insights'ı ayarlayabilirsiniz. Uygulamanızın bağımlı olduğu platforma bağlı olarak, uygun uzantıya veya SDK'ya ihtiyacınız vardır.

Server-side

Sunucu tarafı uygulamanızdan bildirilen özel durumlar için aşağıdaki senaryoları göz önünde bulundurun:

Client-side

JavaScript SDK'sı, web tarayıcılarında oluşan özel durumların istemci tarafında bildirilebilmesini sağlar. İstemcide özel durum raporlamayı ayarlamak için bkz. Web sayfaları için Application Insights.

Uygulama çerçeveleri

Bazı uygulama çerçeveleri ile daha fazla yapılandırma gerekir. Aşağıdaki teknolojileri göz önünde bulundurun:

Önemli

Bu bölüm, kod örneği açısından .NET Framework uygulamalarına odaklanmıştır. .NET Framework için çalışan yöntemlerden bazıları .NET Core SDK'sında kullanım dışıdır.

Hataları ve istisnaları tanılama

Azure portalı

Application Insights, izlenen uygulamalarınızdaki hataları tanılamanıza yardımcı olmak için seçilmiş bir Uygulama Performansı Yönetimi deneyimiyle birlikte gelir.

Ayrıntılı yönergeler için bkz . Application Insights ile hataları, performansı ve işlemleri araştırma.

Visual Studio
  1. Uygulama çözümünü Visual Studio açın. F5 kullanarak uygulamayı sunucunuzda veya geliştirme makinenizde çalıştırın. Özel durumu yeniden oluşturun.

  2. Application Insights Arama telemetri penceresini Visual Studio açın. Hata ayıklama sırasında Application Insights açılan kutusunu seçin.

  3. Bir özel durum raporunun yığın izini görmek için rapor seçin. İlgili kod dosyasını açmak için yığın izlemesinde bir satır başvurusu seçin.

    CodeLens etkinse özel durumlar hakkındaki verileri görürsünüz:

    Özel durumların CodeLens bildirimini gösteren ekran görüntüsü.

Özel izleme ve günlük verileri

Uygulamanıza özgü tanılama verilerini almak için kendi telemetri verilerinizi göndermek için kod ekleyebilirsiniz. Özel telemetri veya günlük verileriniz, tanılama aramasında istek, sayfa görünümü ve otomatik olarak toplanan diğer veriler ile birlikte görüntülenir.

Microsoft.VisualStudio.ApplicationInsights.TelemetryClientkullanarak kullanabileceğiniz çeşitli API'ler vardır:

Bu olayları görmek için soldaki menüde Ara'yı açın. Olay türleri açılan menüsünü seçin ve ardından Özel Olay, İzleme veya Özel Durum'u seçin.

Arama ekranını gösteren ekran görüntüsü.

Uyarı

Uygulamanız büyük miktarlarda telemetri oluşturuyorsa uyarlamalı örnekleme modülü, olayların yalnızca temsili bir bölümünü göndererek portala gönderilen hacmi otomatik olarak azaltır. Aynı operasyonun parçası olan olaylar, ilgili olaylar arasında kolayca gezinebilmeniz için grup olarak seçilir veya seçimi kaldırılır. Daha fazla bilgi için bkz . Application Insights'ta Örnekleme.

bkz. POST verilerini isteme

İstek ayrıntıları, POST çağrısında uygulamanıza gönderilen verileri içermez. Bu verilerin raporlanabilmesi için:

Varsayılan olarak, uygulamanızda hatalara neden olan tüm özel durumlar portalda görünmez. Web sayfalarınızda JavaScript SDK'sını kullanıyorsanız tarayıcı özel durumları görürsünüz. Ancak çoğu sunucu tarafı hata IIS tarafından kapatıldığından, bunları yakalamak ve raporlamak için bazı kodlar eklemeniz gerekir.

Şunları yapabilirsiniz:

  • Özel durumları bildirmek için özel durum işleyicilerine kod ekleyerek özel durumları açıkça günlüğe kaydetme.
  • ASP.NET çerçevenizi yapılandırarak özel durumları otomatik olarak yakalayın. Farklı çerçeve türleri için gerekli eklemeler farklıdır.
Özel durumları açıkça raporla

Raporlamanın en basit yolu, özel durum işleyicisine trackException() çağrısı eklemektir.

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()
    });
}

Özellikler ve ölçüm parametreleri isteğe bağlıdır, ancak filtreleme ve ek bilgi ekleme için kullanışlıdır. Örneğin, birkaç oyun çalıştırabilen bir uygulamanız varsa, belirli bir oyunla ilgili özel durum raporlarını bulabilirsiniz. Her sözlüğe istediğiniz kadar öğe ekleyebilirsiniz.

Tarayıcı özel durumları

Çoğu tarayıcı özel durumu bildirilir.

Web sayfanızda içerik teslim ağlarından veya diğer etki alanlarından betik dosyaları varsa, betik etiketinizin özniteliğine crossorigin="anonymous" sahip olduğundan ve sunucunun CORS üst bilgileri gönderdiğinden emin olun. Bu davranış, işlenmeyen JavaScript özel durumları için bu kaynaklardan yığın izleme bilgisi ve ayrıntı almanıza olanak tanır.

Telemetri istemcinizi yeniden kullanma

Uyarı

Bir kez örneği TelemetryClient oluşturmanızı ve bir uygulamanın ömrü boyunca yeniden kullanmanızı öneririz.

.NET içinde Dependency Injection (DI), uygun .NET SDK'sı ve DI için Application Insights'ı doğru şekilde yapılandırarak, oluşturucu parametresi olarak TelemetryClient'i gerektirebilirsiniz.

public class ExampleController : ApiController
{
    private readonly TelemetryClient _telemetryClient;

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

Yukarıdaki örnekte, TelemetryClient öğesi ExampleController sınıfına enjekte edilir.

Web formları

Web formları için HTTP Modülü ile CustomErrorsyapılandırılmış hiçbir yeniden yönlendirme olmadığında özel durumları toplayabilir. Ancak, etkin yeniden yönlendirmeleriniz olduğunda, Application_Error işlevine Global.asax.cs dosyasındaki aşağıdaki satırları ekleyin.

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

Yukarıdaki örnekte, _telemetryClient türünde TelemetryClientsınıf kapsamlı bir değişkendir.

MVC

Application Insights Web SDK'sı sürüm 2.6 (beta 3 ve üzeri) ile başlayarak, Application Insights MVC 5+ denetleyici yöntemlerinde oluşan işlenmeyen özel durumları otomatik olarak toplar. Daha önce bu tür özel durumları izlemek için bir özel işleyici eklediyseniz, özel durumların çift izlenmesini önlemek için bunu kaldırabilirsiniz.

Özel durum filtresinin özel durumlar oluştuğunda hataları doğru şekilde işleyememesinde çeşitli senaryolar vardır:

  • Denetleyici oluşturucularından
  • İleti işleyicilerinden
  • Yönlendirme sırasında
  • Yanıt içeriği serileştirme sırasında
  • Uygulama başlatma sırasında
  • Arka plan görevlerinde

Uygulama tarafından ele alınan tüm özel durumların yine de el ile izlenmesi gerekir. Denetleyicilerden kaynaklanan işlenmeyen özel durumlar genellikle 500 "İç Sunucu Hatası" yanıtıyla sonuçlanır. Bu tür bir yanıt, işlenen bir özel durumun sonucu olarak el ile oluşturulursa veya hiç özel durum yoksa, 500 ile ResultCode ilgili istek telemetrisinde izlenir. Ancak, Application Insights SDK'sı ilgili özel durumu izleyemiyor.

Önceki sürümler desteği

Application Insights Web SDK 2.5(ve öncesi) MVC 4 (ve öncesi) kullanıyorsanız, özel durumları izlemek için aşağıdaki örneklere bakın.


Önceki sürümlere yönelik yönergeleri görüntülemek için genişletin

CustomErrors yapılandırması Off olduğunda, HTTP Modülü tarafından toplanabilecek istisnalar vardır. Bununla birlikte, RemoteOnly (varsayılan) veya On olarak ayarlanmışsa, özel durum temizlenir ve Application Insights tarafından otomatik olarak toplanması mümkün değildir. bu davranışı düzeltmek için System.Web.Mvc.HandleErrorAttribute sınıfını geçersiz kılabilir ve geçersiz kılınan sınıfı farklı MVC sürümleri için burada gösterildiği gibi uygulayabilirsiniz (bkz. GitHub source):

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

HandleError özniteliğini denetleyicilerinizdeki yeni özniteliğinizle değiştirin:

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

Örnek

MVC 3

'y<ı> küresel filtre olarak Global.asax.cs'de kaydedin:

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

Örnek

MVC 4, MVC 5

AiHandleErrorAttribute'yi FilterConfig.cs dosyasında genel filtre olarak kaydedin.

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

Örnek

Web API'si

Application Insights Web SDK'sı sürüm 2.6 (beta 3 ve üzeri) ile başlayarak Application Insights, Web API 2+ için denetleyici yöntemlerinde otomatik olarak oluşan işlenmeyen özel durumları toplar. Aşağıdaki örneklerde açıklandığı gibi, bu tür özel durumları izlemek için daha önce bir özel işleyici eklediyseniz, özel durumların çift izlenmesini önlemek için bunu kaldırabilirsiniz.

Özel durum filtrelerinin işleyemediği birkaç durum vardır. Örneğin:

  • Denetleyici oluşturucularından fırlatılan istisnalar.
  • Mesaj işleyicilerinden fırlatılan istisnalar.
  • Yönlendirme sırasında oluşan özel durumlar.
  • Yanıt içeriği serileştirmesi sırasında oluşan özel durumlar.
  • Uygulama başlatma sırasında özel durum oluştu.
  • Arka plan görevlerinde istisna atıldı.

Uygulama tarafından ele alınan tüm özel durumların yine de el ile izlenmesi gerekir. Denetleyicilerden kaynaklanan işlenmeyen özel durumlar genellikle 500 "İç Sunucu Hatası" yanıtıyla sonuçlanır. Böyle bir yanıt işlenen bir özel durumun sonucu olarak el ile oluşturulursa veya hiç özel durum söz konusu değilse, ResultCode 500 ile ilişkili bir istek telemetrisinde izlenir. Ancak Application Insights SDK'sı ilgili özel durumu izleyemiyor.

Önceki sürümler desteği

Application Insights Web SDK 2.5'in (ve önceki sürümlerinin) Web API 1'ini (ve önceki sürümlerini) kullanıyorsanız, özel durumları izlemek için aşağıdaki örneklere bakın.


Önceki sürümlere yönelik yönergeleri görüntülemek için genişletin

Web API 1.x

Geçersiz kıl 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);
    }
    }
}

Geçersiz kılınan bu özniteliği belirli denetleyicilere ekleyebilir veya sınıfındaki genel filtre yapılandırmasına WebApiConfig ekleyebilirsiniz:

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());
        }
    }
}

Örnek

Web API 2.x

Bir IExceptionLogger uygulaması ekleyin.

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);
        }
    }
}

Bu kod parçacığını içindeki WebApiConfighizmetlere ekleyin:

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());
        }
    }
}

Örnek

Alternatif olarak şunları da kullanabilirsiniz:

  • Yalnızca tek bir ExceptionHandler örneğini özelleştirilmiş bir IExceptionHandler uygulamasıyla değiştirin. Bu özel durum işleyicisi yalnızca çerçevenin hangi yanıt iletisini göndereceğini seçebilmesi durumunda çağrılır, örneğin bağlantı durdurulduğunda değil.
  • Her durumda çağrılmayan Web API 1.x denetleyicilerinin önceki bölümünde açıklandığı gibi özel durum filtrelerini kullanın.

WCF

Attribute'yi genişleten ve IErrorHandler ile IServiceBehavior'yi uygulayan bir sınıf ekleyin.

    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)
        {
        }
      }
    }

Özniteliğini hizmet uygulamalarına ekleyin:

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

Örnek

İstisna performans sayaçları

Azure Monitor Application Insights Aracısı sunucunuza eklediyseniz, .NET tarafından ölçülen özel durum oranının grafiğini alabilirsiniz. Hem işlenen hem de işlenmeyen .NET özel durumlar dahil edilir.

Ölçüm gezgini sekmesini açın ve yeni bir grafik ekleyin. Performans Sayaçları'nın altında Özel durum oranı'yı seçin.

.NET Framework, bir aralıktaki özel durum sayısını sayarak ve aralığın uzunluğuna bölerek oranı hesaplar.

Application Insights portalı tarafından TrackException raporları sayılarak hesaplanan İstisna sayısından farklıdır. Örnekleme aralıkları farklıdır ve SDK tüm işlenen ve işlenmeyen özel durumlar için rapor göndermez TrackException .

Özel ölçüm koleksiyonu

Azure Monitor Application Insights .NET ve .NET Core SDK'larının özel ölçüm toplamaya yönelik iki farklı yöntemi vardır:

  • Ön toplama içermeyen TrackMetric() yöntemi.
  • GetMetric() ön toplama içeren yöntem.

Toplama kullanmanızı öneririz, bu nedenle TrackMetric()artık özel ölçümleri toplamak için tercih edilen yöntem değildir. Bu makale, GetMetric() yöntemini kullanma ve nasıl çalıştığının ardındaki bazı nedenleri anlamanıza yardımcı olur.


Önceden toplama ve önceden toplama yapmama API'leri hakkında daha fazla bilgi edinmek için genişletin

TrackMetric() yöntemi, bir metriği belirten ham telemetri gönderir. Her değer için tek bir telemetri öğesi göndermek verimsizdir. TrackMetric() yöntemi, performans bakımından da verimsizdir çünkü her bir TrackMetric(item) telemetri başlatıcıları ve işlemcilerinin tam SDK işlem hattından geçer.

'nin aksine TrackMetric(), GetMetric() sizin için yerel ön toplamayı işler ve ardından yalnızca bir dakikalık sabit bir aralıkta toplu özet ölçümü gönderir. Bazı özel ölçümleri saniye ve hatta milisaniye düzeyinde yakından izlemeniz gerekiyorsa, bunu yalnızca her dakikada bir izleme yapılmasının depolama ve ağ trafiği maliyetine tabi olarak gerçekleştirebilirsiniz. Toplanan ölçüm için gönderilmesi gereken telemetri öğelerinin toplam sayısı büyük ölçüde azaldığından, bu özellik kısıtlama yaşanma riskini de büyük ölçüde azaltır.

Application Insights'ta, TrackMetric() ve GetMetric() aracılığıyla toplanan özel ölçümler, örneklemeye tabi değildir. Önemli ölçümleri örneklemek, bu ölçümlerin etrafında oluşturulan uyarıların güvenilir olmadığı senaryolara yol açabilir. Özel ölçümlerinizi hiçbir zaman örneklemediğinizde, uyarı eşik değerleriniz ihlal edildiğinde uyarının tetikleneceğinden çoğunlukla emin olabilirsiniz. Özel ölçümler örneklenmemiş olduğundan bazı olası endişeler vardır.

Bir ölçümde her saniye veya daha ayrıntılı bir aralıkta eğilim izleme aşağıdakilere neden olabilir:

  • Artan veri depolama maliyetleri. Azure Monitor ne kadar veri gönderdiğinizle ilişkili bir maliyet vardır. Ne kadar çok veri gönderirseniz izlemenin genel maliyeti o kadar yüksek olur.
  • Artan ağ trafiği veya performans yükü. Bazı senaryolarda bu ek yükün hem parasal hem de uygulama performansı maliyeti olabilir.
  • Alma azaltma riski. Azure Monitor, uygulamanız kısa bir zaman aralığında yüksek hızda telemetri gönderdiğinde veri noktalarını düşürür ("kısıtlar").

Kısmak, uyarıların kaçırılmasına neden olabileceği için bir sorundur. Bir uyarıyı tetikleme koşulu yerel olarak gerçekleşebilir ve çok fazla veri gönderimi nedeniyle alım uç noktasında düşürülebilir. Kendi yerel toplama mantığınızı uygulamadığınız sürece .NET ve .NET Core için TrackMetric() kullanmanızı önermeyiz. Belirli bir zaman aralığında gerçekleşen her örneği izlemeye çalışıyorsanız, bunun daha uygun olduğunu TrackEvent() fark edebilirsiniz. Özel ölçümlerden farklı olarak özel olayların örneklemeye tabi olduğunu unutmayın. Kendi yerel ön toplamanızı yazmadan bile kullanabilirsiniz TrackMetric() . Ama bunu yaparsanız, tuzakların farkında olun.

Özetle, ön toplama yaptığı, tüm GetMetric() çağrılarının değerlerini biriktirdiği ve her dakika bir özet/toplama gönderdiği için Track() öneriyoruz. Yöntem, GetMetric() tüm ilgili bilgileri toplamaya devam ederken daha az veri noktası göndererek maliyet ve performans ek yükünü önemli ölçüde azaltabilir.

GetMetric'i kullanmaya başlama

Örneklerimiz için temel bir .NET Core 3.1 çalışan hizmeti uygulaması kullanacağız. Bu örneklerle kullanılan test ortamını çoğaltmak istiyorsanız, .NET Core Worker Service uygulaması altındaki 1-6 arası adımları izleyin. Bu adımlar, Application Insights'ı temel çalışan hizmeti proje şablonuna ekler. Kavramlar, web uygulamaları ve konsol uygulamaları da dahil olmak üzere SDK'nın kullanabildiği tüm genel uygulamalar için geçerlidir.

Ölçümleri gönderme

Dosyanızın worker.cs içeriğini aşağıdaki kodla değiştirin:

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);
            }
        }
    }
}

Örnek kodu çalıştırdığınızda, while döngüsünün Visual Studio çıkış penceresinde telemetri gönderilmeden art arda yürütülmekte olduğunu görürsünüz. 60 saniyelik işaretin etrafında tek bir telemetri öğesi gönderilir ve bu da testte şöyle görünür:

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"}}}}

Bu tek telemetri öğesi 41 ayrı ölçüm ölçümünün toplamını temsil eder. Aynı değeri tekrar tekrar gönderdiğimiz için, aynı maksimum () stDev ve en düşük (0max) değerlerle standart sapması (min) vardır. özelliği, value toplanan tüm tek tek değerlerin toplamını temsil eder.

Uyarı

yöntemi, GetMetric son değeri izlemeyi (örneğin, gauge) veya histogramları veya dağıtımları izlemeyi desteklemez.

Application Insights kaynağımızı Günlükler (Analiz) deneyiminde incelediğimizde, tek tek telemetri öğesi aşağıdaki ekran görüntüsüne benzer olacaktır.

Log Analytics sorgu görünümü ekran görüntüsü.

Uyarı

Ham telemetri öğesi alındığında açık bir toplam özelliği/alanı içermese de, sizin için bir tane oluşturuyoruz. Bu durumda hem value ve valueSum özelliği aynı şeyi temsil eder.

Ayrıca portalın Ölçümler bölümünden özel ölçüm telemetrinize hem günlük tabanlı hem de özel ölçüm olarak erişebilirsiniz. Aşağıdaki ekran görüntüsü bir log tabanlı metrik örneğidir.

Ölçüm gezgini görünümünü gösteren ekran görüntüsü.

Yüksek aktarım hızı kullanımı için önbellek metrik referansı

Ölçüm değerleri bazı durumlarda sık sık gözlemlenebilir. Örneğin, saniyede 500 istek işleyen yüksek aktarım hızına sahip bir hizmet, her istek için 20 telemetri ölçümü yaymak isteyebilir. Sonuç, saniyede 10.000 değeri izleme anlamına gelir. Bu tür yüksek aktarım hızı senaryolarında kullanıcıların bazı aramalardan kaçınarak SDK'ya yardımcı olması gerekebilir.

Örneğin, önceki örnekte ölçüm ComputersSold için bir tanıtıcı araması gerçekleştirildi ve ardından gözlemlenen değer 42 takip edildi. Bunun yerine, tanıtıcı birden çok izleme çağrısı için önbelleğe alınmış olabilir:

//...

        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);
            }
        }

Önceki örnek, ölçüm tutamacını önbelleğe almanın yanı sıra Task.Delay 50 milisaniyeye indirdi, böylece döngü daha sık yürütülebilir. Sonuç 772 TrackValue() çağrıdır.

Çok boyutlu ölçümler

Önceki bölümdeki örneklerde sıfır boyutlu ölçümler gösterilmektedir. Ölçümler çok boyutlu da olabilir. Şu anda en fazla 10 boyutu destekliyoruz.

Tek boyutlu ölçüm oluşturma örneği aşağıda verilmişti:

//...

        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);
            }
        }

Örnek kodun en az 60 saniye çalıştırılması, Azure üç ayrı telemetri öğesinin gönderilmesine neden olur. Her öğe, üç form faktöründen birinin toplamasını temsil eder. Daha önce olduğu gibi Günlükler (Analiz) görünümünde daha fazla inceleme yapabilirsiniz.

Çok boyutlu metrik, Log Analytics görünümünü gösteren ekran görüntüsü.

Ölçüm gezgininde:

Özel ölçümleri gösteren ekran görüntüsü.

Ölçümü yeni özel boyutunuzla bölemezsiniz veya özel boyutunuzu metrik görünümüyle görüntüleyemezsiniz.

Bölme desteğini gösteren ekran görüntüsü.

Varsayılan olarak, ölçüm gezginindeki çok boyutlu ölçümler Application Insights kaynaklarında açılmaz.

Çok boyutlu ölçümleri etkinleştirme

Application Insights kaynağında çok boyutlu ölçümleri etkinleştirmek için Kullanım ve tahmini maliyetler>>Özel ölçüm boyutlarında> uyarıyı etkinleştirTamam'ı seçin. Daha fazla bilgi için Özel ölçüm boyutları ve ön toplama konusuna bakın.

Bu değişikliği yaptıktan ve yeni çok boyutlu telemetri gönderdikten sonra Bölmeyi uygula'yı seçebilirsiniz.

Uyarı

Yalnızca portalda özellik açıldıktan sonra yeni gönderilen ölçümlerin boyutları depolanır.

Bölmenin uygulanmasını gösteren ekran görüntüsü.

Her FormFactor boyut için ölçüm toplamalarınızı görüntüleyin.

Form faktörlerini gösteren ekran görüntüsü.

Üçten fazla boyut olduğunda MetricIdentifier kullanma

Şu anda 10 boyut desteklenmektedir. Üçten fazla boyut kullanmak için MetricIdentifier gereklidir.

// 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");

Özel metrik yapılandırması

Ölçüm yapılandırmasını değiştirmek istiyorsanız, ölçümün başlatıldığı yerde değişiklikler yapmanız gerekir.

Özel boyut adları

Ölçümler, bunlara erişmek için kullanılan telemetri bağlamını TelemetryClient kullanmaz. Sabit olarak kullanılabilen MetricDimensionNames sınıfındaki özel boyut adlarından yararlanmak, bu sınırlama için en iyi çözümdür.

Aşağıdaki Special Operation Request Size ölçüm tarafından gönderilen ölçüm toplamaları 'ayarlı değil' olarak Context.Operation.NameSpecial Operation. TrackMetric() yöntemi veya başka bir TrackXXX() yöntemi, OperationName doğru bir şekilde Special Operation olarak ayarlanmıştır.

        //...
        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);
                //...
            }
                   
        }

Bu durumda, MetricDimensionNames değerlerini belirtmek için TelemetryContext sınıfında listelenen özel boyut adlarını kullanın.

Örneğin, bir sonraki ifadeden elde edilen metrik topluluğu Application Insights bulut uç noktasına gönderildiğinde, Context.Operation.Name veri alanı olarak Special Operation olarak ayarlanır.

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

Bu özel boyutun değeri içine TelemetryContext kopyalanır ve normal boyut olarak kullanılmaz. Normal ölçüm keşfi için bir işlem boyutunu da korumak istiyorsanız, bu amaç için ayrı bir boyut oluşturmanız gerekir:

_telemetryClient.GetMetric("Request Size", "Operation Name", MetricDimensionNames.TelemetryContext.Operation.Name).TrackValue(requestSize, "Special Operation", "Special Operation");
Boyut ve zaman serisi sınırlaması

Telemetri alt sisteminin kaynaklarınızı yanlışlıkla kullanmasını önlemek için ölçüm başına en fazla veri serisi sayısını denetleyebilirsiniz. Varsayılan sınırlar, ölçüm başına en fazla 1.000 toplam veri serisi ve boyut başına en fazla 100 farklı değerdir.

Önemli

Kısıtlamadan kaçınmak için boyutlar için düşük kardinal değerler kullanın.

Boyut ve zaman serisi kısıtlaması bağlamında, sınırların dikkate alındığından emin olmak için kullanırız Metric.TrackValue(..) . Sınırlara zaten ulaşıldıysa, Metric.TrackValue(..) döndürür False ve değer izlenmez. Aksi takdirde Truedeğerini döndürür. Bu davranış, bir ölçümün verileri kullanıcı girişinden kaynaklanıyorsa yararlıdır.

Oluşturucu, MetricConfiguration ilgili ölçüm içinde farklı serileri yönetmeye ilişkin bazı seçenekleri ve ölçümün her bir serisi için toplama davranışını belirten bir sınıfın IMetricSeriesConfiguration nesnesini alır:

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 bir ölçümün içerebileceği en fazla veri zaman serisi sayısıdır. Bu sınıra ulaşıldığında, normalde yeni bir seri başlatacak olan TrackValue() çağrıları false döndürür.
  • valuesPerDimensionLimit boyut başına ayrı değerlerin sayısını benzer şekilde sınırlar.
  • restrictToUInt32Values yalnızca negatif olmayan tamsayı değerlerinin izlenip izlenmeyeceğini belirler.

Burada, sınır sınırlarının aşılıp aşılmadığını öğrenmek için bir ileti gönderme örneği verilmişti:

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);
}

Özel işlemler takibi

Application Insights SDK'ları, HTTP istekleri ve SQL sorguları gibi bağımlı hizmetlere gelen HTTP isteklerini ve çağrılarını otomatik olarak izler. İsteklerin ve bağımlılıkların izlenmesi ve bağıntılanması, bu uygulamayı birleştiren tüm mikro hizmetlerde uygulamanın yanıt hızı ve güvenilirliği hakkında görünürlük sağlar.

Genel olarak desteklenemez bir uygulama desenleri sınıfı vardır. Bu tür desenlerin düzgün izlenmesi için el ile kod enstrümantasyonu gereklidir. Bu bölüm, özel kuyruk işleme ve uzun süreli arka plan görevlerinin yürütülmesi gibi manuel ölçümleme gerektirebilecek birkaç desenleri kapsar.

Bu bölümde, Application Insights SDK'sı ile özel işlemleri izleme hakkında rehberlik sağlanır.

Genel Bakış

İşlem, bir uygulama tarafından çalıştırılan mantıksal bir iş parçasıdır. Ad, başlangıç zamanı, süre, sonuç ve kullanıcı adı, özellikler ve sonuç gibi yürütme bağlamı vardır. A işlemi B işlemi tarafından başlatıldıysa, B işlemi A için üst öğe olarak ayarlanır. Bir işlemin yalnızca bir üst öğesi olabilir, ancak birçok alt işlemi olabilir. İşlemler ve telemetri bağıntısı hakkında daha fazla bilgi için bkz. Application Insights telemetri bağıntısı.

Application Insights .NET SDK'sında, işlem OperationTelemetry soyut sınıfı ve alt öğeleri RequestTelemetry ve DependencyTelemetry ile açıklanır.

Gelen işlemleri izleme

Application Insights web SDK'sı, IIS işlem hattında ve tüm ASP.NET Core uygulamalarında çalışan ASP.NET uygulamalar için HTTP isteklerini otomatik olarak toplar. Diğer platformlar ve çerçeveler için topluluk tarafından desteklenen çözümler vardır. Uygulama, standart veya topluluk destekli çözümlerden herhangi biri tarafından desteklenmiyorsa, onu manuel olarak izleyebilirsiniz.

Özel izleme gerektiren bir diğer örnek de kuyruktan öğe alan çalışandır. Bazı kuyruklarda, bu kuyruğa ileti ekleme çağrısı bağımlılık olarak izlenir. İleti işlemeyi açıklayan üst düzey işlem otomatik olarak toplanmaz.

Şimdi bu tür işlemlerin nasıl izlendiğini görelim.

Görev, yüksek düzeyde RequestTelemetry oluşturmak ve bilinen özellikleri ayarlamaktır. İşlem tamamlandıktan sonra telemetriyi izlersiniz. Aşağıdaki örnekte bu görev gösterilmektedir.

Owin kendi kendine barındırılan uygulamada HTTP isteği

Bu örnekte, izleme bağlamı, İlişkilendirme için HTTP Protokolü'ne göre yayılır. Burada açıklanan üst bilgileri almayı beklemeniz gerekir.


Kodu görüntülemek için genişletin
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);
    }
}

Bağıntı için HTTP Protokolü Correlation-Context başlık bilgisini de bildirir. Basitlik için burada atlanır.

Kuyruk Enstrümantasyonu

Bağıntı içinW3C İzleme Bağlamı ve HTTP Protokolü, bağıntı ayrıntılarını HTTP istekleriyle geçirir, ancak her kuyruk protokolü aynı ayrıntıların kuyruk iletisi boyunca nasıl geçirildiğini tanımlamalı. AMQP gibi bazı kuyruk protokolleri daha fazla meta veri geçirilmesine izin verir. Diğer protokoller, örneğin Azure Storage Kuyruğu, bağlamın ileti yüküne kodlanması gerektiğini gerektirir.

Uyarı

Bileşenler arası izleme henüz kuyruklar için desteklenmemektedir.

HTTP ile, üreticiniz ve tüketiciniz farklı Application Insights kaynaklarına telemetri gönderiyorsa, işlem tanılama deneyimi ve Uygulama Haritası işlemleri gösterir ve uçtan uca eşler. Kuyruklar için bu özellik henüz desteklenmemektedir.

Service Bus kuyruğu

İzleme bilgileri için bkz. Dağıtılmış izleme ve Azure Service Bus mesajlaşma aracılığıyla bağlantı kurulması.

Azure Storage kuyruğu

Aşağıdaki örnekte, Azure Storage kuyruğu işlemlerinin nasıl izlenip üretici, tüketici ve Azure Storage arasındaki telemetrinin nasıl ilişkilendirilme işlemi gösterilmektedir.

Depolama kuyruğunun bir HTTP API'si vardır. Kuyruğa yapılan tüm çağrılar, HTTP istekleri için Application Insights Bağımlılık Toplayıcısı tarafından izlenir. ASP.NET ve ASP.NET Core uygulamalarında varsayılan olarak yapılandırılır. Diğer uygulama türlerinde Konsol uygulamaları belgelerine bakın.

Application Insights işlem kimliğini Depolama isteği kimliğiyle ilişkilendirmek de isteyebilirsiniz. Depolama isteği istemcisini ve sunucu isteği kimliğini ayarlama ve alma hakkında bilgi almak için bkz. Azure Storage izleme, tanılama ve sorun giderme.

Kuyruğa ekle

Depolama kuyrukları HTTP API'sini desteklediğinden, kuyrukla yapılan tüm işlemler Application Insights tarafından otomatik olarak izlenir. Çoğu durumda, bu enstrümantasyon yeterli olmalıdır. Tüketici tarafındaki izlemeleri üretici izlemeleriyle ilişkilendirmek için, bağıntı için HTTP Protokolü'nde yaptığımıza benzer bir bağıntı bağlamı geçirmeniz gerekir.

Bu örnek, Enqueue işleminin nasıl izleneceğini göstermektedir. Şunları yapabilirsiniz:

  • Yeniden denemeleri bağıntı yap (varsa): Hepsinin ortak bir üst öğesi Enqueue işlemidir. Aksi takdirde, bunlar gelen isteğin alt öğeleri olarak izlenir. Kuyruğa birden çok mantıksal istek varsa, hangi çağrının yeniden denemelere neden olduğunu bulmak zor olabilir.
  • Depolama günlüklerini ilişkilendirin (gerektiğinde ve ihtiyaç duyulduğunda): Bunlar Application Insights telemetrisiyle ilişkilendirilir.

Enqueue işlemi, bir üst işlemin alt operasyonudur. Bir örnek, gelen HTTP isteğidir. HTTP bağımlılık çağrısı, Enqueue işleminin alt birimi ve gelen isteğin torunudur.

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);
    }
}  

Uygulama raporlarınızın telemetri miktarını azaltmak için veya işlemi başka nedenlerle izlemek Enqueue istemiyorsanız API'yi Activity doğrudan kullanın:

  • Yeni bir Activity oluşturma (ve başlatma), Application Insights işlemini başlatmak yerine. İşlem adı dışında üzerinde herhangi bir özellik atamanız gerekmez .
  • yerine ileti yükünü yourActivity.Idseri hale getirmeoperation.Telemetry.Id. Activity.Current.Idde kullanabilirsiniz.
Kuyruktan Çıkartma

benzer şekilde Enqueue, Depolama kuyruğuna yönelik gerçek bir HTTP isteği Application Insights tarafından otomatik olarak izlenir. İşlem Enqueue büyük olasılıkla gelen istek bağlamı gibi üst bağlamda gerçekleşir. Application Insights SDK'ları, bu tür bir işlemi ve HTTP bölümünü, üst istek ve diğer telemetri verilerinin aynı kapsamda rapor edilmesiyle otomatik olarak ilişkilendirilir.

İşlem Dequeue biraz karmaşık. Application Insights SDK'sı HTTP isteklerini otomatik olarak izler. Ancak ileti ayrıştırılana kadar bağıntı bağlamını bilmez. özellikle birden fazla ileti alındığında, iletiyi almak için HTTP isteğini telemetrinin geri kalanıyla ilişkilendirmek mümkün değildir.

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;
}
İşlem

Aşağıdaki örnekte, gelen bir ileti gelen HTTP isteğine benzer şekilde izlenir:

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);
    }
}

Benzer şekilde, diğer kuyruk işlemleri de enstrümanize edilebilir. Bir göz atma işlemi, dequeue işlemi ile aynı şekilde yapılandırılmalıdır. Kuyruk yönetimi işlemlerini enstrümante etmek gerekli değildir. Application Insights HTTP gibi işlemleri izler ve çoğu durumda yeterlidir.

İleti silme işlemine başladığınızda, işlem (bağıntı) tanımlayıcılarını ayarladığınızdan emin olun. Alternatif olarak API'yi Activity kullanabilirsiniz. Ardından, Application Insights SDK'sı bunu sizin için yaptığı için telemetri öğelerinde işlem tanımlayıcıları ayarlamanız gerekmez:

  • Kuyruktan bir öğe aldıktan sonra yeni Activity bir öğe oluşturun.
  • Tüketici ve üretici günlüklerini ilişkilendirmek için kullanın Activity.SetParentId(message.ParentId) .
  • Activity öğesini başlatın.
  • Kuyruktan çıkarma, işleme ve silme işlemlerini Start/StopOperation yardımcıları kullanarak izleyin. Bunu aynı asenkron kontrol akışından (yürütme bağlamı) yapın. Bu şekilde, düzgün bir şekilde bağıntılı olurlar.
  • Activity'yi durdurun.
  • Start/StopOperation kodunu kullanın veya Track komutunu el ile çağırın.
Bağımlılık türleri

Application Insights, kullanıcı arabirimi deneyimlerini özelleştirmek için bağımlılık türünü kullanır. İşlem teşhis deneyimini geliştiren aşağıdaki kuyru türlerini tanır: DependencyTelemetry

  • Azure Storage kuyrukları için Azure queue
  • Azure Event Hubs için Azure Event Hubs
  • Azure Service Bus için Azure Service Bus
Toplu işleme

Bazı kuyruklarda, tek bir istekle birden fazla mesajı kuyruktan çıkarabilirsiniz. Bu tür iletilerin işlenmesi büyük olasılıkla bağımsızdır ve farklı mantıksal işlemlere aittir. İşlemin belirli bir mesaj ile ilişkilendirilmesi mümkün değildir.

Her ileti kendi zaman uyumsuz denetim akışında işlenmelidir. Daha fazla bilgi için Giden bağımlılıkları izleme bölümüne bakın.

Uzun süre çalışan arka plan görevleri

Bazı uygulamalar, kullanıcı isteklerinin neden olabileceği uzun süre çalışan işlemler başlatır. İz bırakma/araçlaştırma açısından, istek veya bağımlılık izleme/araçlaştırmadan farklı değildir.

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);
    }
}

Bu örnekte telemetryClient.StartOperation, DependencyTelemetry oluşturur ve bağıntı bağlamını doldurur. İşlemi zamanlayan gelen istekler tarafından oluşturulmuş bir üst işleminiz olduğunu varsayalım. Gelen bir istekle aynı eşzamanlı olmayan denetim akışında başladığında, BackgroundTask ana işlemle ilişkilidir. BackgroundTask ve tüm iç içe telemetri öğeleri, istek sona erdikten sonra bile buna neden olan istekle otomatik olarak ilişkilendirilir.

Görev, kendisiyle ilişkilendirilmiş herhangi bir işlemi (Activity) olmayan arka plan iş parçacığından başladığında ebeveyn BackgroundTask yoktur. Ancak, iç içe işlemlere sahip olabilir. Görevden bildirilen tüm telemetri öğeleri, DependencyTelemetry içinde oluşturulan BackgroundTask ile ilişkilendirilir.

Giden bağımlılıkları izleme

Kendi bağımlılık türünüzü veya Application Insights tarafından desteklenmeyen bir işlemi izleyebilirsiniz.

Service Bus kuyruğundaki veya Depolama kuyruğundaki Enqueue yöntemi, bu tür özel izleme için örnek olarak kullanılabilir.

Özel bağımlılık izleme için genel yaklaşım:

  • Başlangıç, zaman damgası ve süre gibi diğer bazı özelliklerle birlikte bağıntı için gereken TelemetryClient.StartOperation özelliklerini dolduran DependencyTelemetry (uzantı) yöntemini çağırın.
  • Ad ve ihtiyacınız olan diğer bağlam gibi diğer özel özellikleri DependencyTelemetry üzerinde ayarlayın.
  • Bir bağımlılık bağı yapın ve onun gerçekleşmesini bekleyin.
  • İşlem tamamlandığında StopOperation ile durdurun.
  • Özel durumları işleme.
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.
        }
    }
}

Bir işlemin sonlandırılması işlemin durmasına neden olur, bu nedenle StopOperation çağırmak yerine bunu yapabilirsiniz.

Uyarı

Bazı durumlarda, işlenmeyen bir istisna çağrılmasını engelleyebilirfinally, bu nedenle işlemler izlenmeyebilir.

Paralel işlemlerin işlenmesi ve izlenmesi

StopOperation çağrısı yalnızca başlatılan operasyonu durdurur. Geçerli çalışan işlem durdurmak istediğiniz işlemle eşleşmiyorsa hiçbir StopOperation şey yapmaz. Aynı yürütme bağlamında paralel olarak birden çok işlem başlatırsanız bu durum oluşabilir.

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;

Paralel çalışan işlemleri yalıtmak için işlemi her zaman aynı StartOperation yönteminde çağırdığınızdan ve işlediğinizden emin olun, ve bunun için aynı async yöntemi kullanın. İşlem eşzamanlıysa (veya eşzamanlı değilse) işlemi kapsayıp Task.Run ile izleyin.

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);
}

ApplicationInsights işlemleri ile System.Diagnostics.Activity karşılaştırması

System.Diagnostics.Activity dağıtılmış izleme bağlamını temsil eder ve çerçeveler ve kitaplıklar tarafından işlemin içinde ve dışında bağlam oluşturup yaymak ve telemetri öğelerini ilişkilendirmek için kullanılır. Activity gelen veya giden istekler ve özel durumlar gibi ilginç olayları bildirmek için çerçeve/kitaplık arasında bildirim mekanizması olarak birlikte System.Diagnostics.DiagnosticSource çalışır.

Etkinlikler, Application Insights'ın en üst düzey özellikleridir. Otomatik bağımlılık ve istek toplama, DiagnosticSource olayları ile birlikte onlara büyük ölçüde bağlıdır. Eğer Activity uygulamanızda oluşturduysanız, Application Insights telemetrisi oluşturulmaz. Application Insights'ın DiagnosticSource olaylarını alabilmesi ve Activity öğelerini telemetriye çevirebilmesi için olay adlarını ve yüklerini bilmesi gerekir.

Her bir Application Insights işlemi (istek veya bağımlılık) içerir Activity. Çağrıldığında StartOperation , altında oluşturur Activity . StartOperation , istek veya bağımlılık telemetrilerini el ile izlemenin ve her şeyin bağıntılı olduğundan emin olmak için önerilen yoldur.

Sayaçlar

Application Insights performans sayaçlarını ve olay sayaçlarını destekler. Bu kılavuz, .NET uygulamalarında amaçları, yapılandırmaları ve kullanımları dahil olmak üzere her ikisine de genel bir bakış sağlar.

  • Performance sayaçları Windows işletim sisteminde yerleşiktir ve CPU kullanımı, bellek tüketimi ve disk etkinliği gibi önceden tanımlanmış ölçümler sunar. Bu sayaçlar, minimum kurulumla standart performans ölçümlerini izlemek için idealdir. Bunlar, Windows tabanlı uygulamalarda kaynak kullanımını izlemeye veya sistem düzeyindeki performans sorunlarını gidermeye yardımcı olur, ancak uygulamaya özgü özel ölçümleri desteklemez.

  • Event sayaçları Windows, Linux ve macOS gibi birden çok platformda çalışır. Geliştiricilerin uygulamaya özgü hafif, özelleştirilebilir ölçümleri tanımlamasına ve izlemesine olanak tanıyarak performans sayaçlarına göre daha fazla esneklik sağlar. Sistem ölçümleri yetersiz olduğunda veya platformlar arası uygulamalarda ayrıntılı telemetri gerektiğinde olay sayaçları kullanışlıdır. Açıkça belirtilmiş uygulama ve yapılandırma gerektirirler, bu da kurulumu daha fazla çaba gerektiren bir hale getirir.

Performans sayaçları

Windows işlemci, bellek ve disk kullanım istatistiklerini toplamak için kullanılanlar gibi çeşitli performance sayaçları sağlar. Kendi performans sayaçlarınızı da tanımlayabilirsiniz.

Uygulamanız, şirket içi bir konakta veya yönetim erişimine sahip bir sanal makinede Internet Information Server (IIS) altında çalışıyorsa performans sayacı toplamayı destekler. Azure Web Apps olarak çalışan uygulamalar performans sayaçlarına doğrudan erişemez, ancak Application Insights kullanılabilir sayaçların bir alt kümesini toplar.

Tip

Diğer ölçümlerde olduğu gibi, bir sayacın belirtilen sınırın dışına çıkması durumunda uyaracak bir uyarı ayarlayabilirsiniz . Uyarı ayarlamak için Uyarılar bölmesini açın ve Uyarı Ekle'yi seçin.

Ön koşullar

Uygulama havuzu hizmeti hesabına performans sayaçlarını Performance Monitor Users grubuna ekleyerek izleme izni verin.

net localgroup "Performance Monitor Users" /add "IIS APPPOOL\NameOfYourPool"
Sayaçları görüntüleme

Ölçümler bölmesinde varsayılan performans sayaçları kümesi gösterilir.

ASP.NET

ASP.NET web uygulamaları için varsayılan sayaçlar:

  • % İşlem\İşlemci Zamanı
  • % İşlem\İşlemci Süresi Normalleştirildi
  • Bellek\Kullanılabilir Bayt sayısı
  • ASP.NET İstekleri/Sn
  • .NET Ortak Dil Çalışma Zamanı (CLR) Özel Durumların Atılması / saniye
  • ASP.NET Applications Request Çalıştırma Süresi
  • İşlem\Özel Baytlar
  • İşlem\Giriş/Çıkış Veri Bayt/sn
  • ASP.NET Uygulamaları\Uygulama Kuyruğundaki İstekler
  • İşlemci(_Total)\% İşlemci Süresi
ASP.NET Core

ASP.NET Core web uygulamaları için varsayılan sayaçlar:

  • % İşlem\İşlemci Zamanı
  • % İşlem\İşlemci Süresi Normalleştirildi
  • Bellek\Kullanılabilir Bayt sayısı
  • İşlem\Özel Baytlar
  • İşlem\Giriş/Çıkış Veri Bayt/sn
  • İşlemci(_Total)\% İşlemci Süresi

Uyarı

ASP.NET Core performans sayaçları desteği sınırlıdır:

  • SDK 2.4.1 ve sonraki sürümleri, uygulama Azure Web Apps (Windows) içinde çalışıyorsa performans sayaçlarını toplar.
  • SDK 2.7.1 ve sonraki sürümleri, uygulama Windows çalıştırılıyorsa ve NETSTANDARD2.0 veya üzerini hedeflerse performans sayaçlarını toplar.
  • .NET Framework'ünü hedefleyen uygulamalar için SDK'nın tüm sürümleri performans sayaçlarını destekler.
  • SDK 2.8.0 ve sonraki sürümleri Linux'ta CPU/Bellek sayacını destekler. Linux'ta başka bir sayaç desteklenmez. Linux'ta (ve diğer Windows olmayan ortamlarda) sistem sayaçlarını almak için olay sayaçlarını kullanın.
Sayaç ekleme

İstediğiniz performans sayacı ölçüm listesine eklenmiyorsa, bunu ekleyebilirsiniz.

ASP.NET

1. Seçenek: ApplicationInsights.configyapılandırma

  1. Yerel sunucuda bu PowerShell komutunu kullanarak sunucunuzda hangi sayaçların kullanılabilir olduğunu öğrenin:

    Get-Counter -ListSet *
    

    Daha fazla bilgi için bkz. Get-Counter.

  2. ApplicationInsights.config'ı açın.

    Geliştirme sırasında uygulamanıza Application Insights eklediyseniz:

    1. Projenizde ApplicationInsights.config düzenleyin.
    2. Sunucularınıza yeniden dağıt.
  3. Performans toplayıcı yönergesini düzenleyin:

    
        <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>
    

Hem standart sayaçları hem de kendi uyguladığınız sayaçları yakalarsınız. \Objects\Processes, tüm Windows sistemlerinde kullanılabilen standart bir sayaç örneğidir. \Sales(photo)\# Items Sold , bir web hizmetinde uygulanabilecek özel bir sayaç örneğidir.

Biçimi , \Category(instance)\Counterveya örneği olmayan kategoriler için, yalnızca \Category\Counterolur.

parametresi, ReportAs ile eşleşmeyen [a-zA-Z()/-_ \.]+sayaç adları için gereklidir.

Bir örnek belirtirseniz, raporlanan ölçümün bir boyutu CounterInstanceName olur.

Seçenek 2: Kodda yapılandırma

Aşağıdaki bölüme bakın.

ASP.NET Core

Yönteminden PerformanceCollectorModule sonra WebApplication.CreateBuilder() içindeki Program.cs'yi yapılandırın.

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();
ASP.NET web uygulamaları veya .NET/.NET Core konsol uygulamaları için kodda performans sayaçlarını toplama

Sistem performans sayaçlarını toplamak ve Application Insights'a göndermek için aşağıdaki kod parçacığını uyarlayabilirsiniz:

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

İsterseniz, oluşturduğunuz özel ölçümlerle de aynı işlemi yapabilirsiniz:

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Sales(photo)\# Items Sold", "Photo sales"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);
Azure App Service Azure Web Apps ve Windows kapsayıcılarında çalışan uygulamalar için performans sayaçları

Azure Web Apps dağıtılan hem ASP.NET hem de ASP.NET Core uygulamaları özel bir korumalı alan ortamında çalışır. Azure App Service'e dağıtılan uygulamalar bir Windows kapsayıcı kullanabilir veya bir korumalı alan ortamında barındırılabilir. Uygulama bir Windows kapsayıcısında dağıtılırsa, kapsayıcı görüntüsünde tüm standart performans sayaçları kullanılabilir.

Korumalı alan ortamı, sistem performans sayaçlarına doğrudan erişime izin vermez. Ancak, sayaçların sınırlı bir alt kümesi, ortam değişkenleri olarak kullanıma sunulan Performans Sayaçları'nda açıklandığı gibi ortam değişkenleri olarak sunulur. Bu ortamda yalnızca bir sayaç alt kümesi kullanılabilir.

ASP.NET ve ASP.NET Core için Application Insights SDK'sı, kodun bir web uygulamasına mı yoksa Windows olmayan bir kapsayıcıya mı dağıtılıp dağıtılmadığını algılar. Algılama, bir korumalı alan ortamında performans sayaçları toplayıp toplamadığını veya bir Windows kapsayıcısında ya da sanal makinede barındırıldığında standart koleksiyon yöntemini kullanıp kullanmadığını belirler.

Log Analytics performans sayaçları için sorgular

performans sayacı raporlarını Log Analytics içinde arayabilir ve görüntüleyebilirsiniz.

performanceCounters şeması, her performans sayacının category, counter adını ve instance adını kullanıma sunar. Her uygulamanın telemetrisinde yalnızca bu uygulamanın sayaçlarını görürsünüz. Örneğin, hangi sayaçların kullanılabilir olduğunu görmek için:

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

Burada, Instance rol veya sunucu makinesi örneğine değil performans sayacı örneğine başvurur. Performans sayacı örneği adı genellikle işlemci süresi gibi sayaçları işlem veya uygulama adına göre segmentlere ayırır.

Son dönemdeki kullanılabilir bellek grafiğini almak için:

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

Diğer telemetride olduğu gibi performanceCounters'da da uygulamanızın üzerinde çalıştığı konak sunucu örneğinin kimliğini gösteren bir sütun cloud_RoleInstance vardır. Örneğin, uygulamanızın farklı makinelerdeki performansını karşılaştırmak için:

performanceCounters | where counter == "% Processor Time" and instance == "SendMetrics" | summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1d)
Performans sayaçları hakkında SSS

Sık sorulan soruları (SSS) gözden geçirmek için bkz. Performans sayaçları hakkında SSS.

Etkinlik sayaçları

EventCounter, sayaçları veya istatistikleri yayımlamak ve kullanmak için .NET/.NET Core mekanizmasıdır. EventCounters, Windows, Linux ve macOS gibi tüm işletim sistemi platformlarında desteklenir. Yalnızca Windows sistemlerinde desteklenen PerformanceCounters için platformlar arası eşdeğer olarak düşünülebilir.

Kullanıcılar gereksinimlerini karşılamak için herhangi bir özel olay sayacı yayımlayarken, .NET varsayılan olarak bu sayaçların bir kümesini yayımlar. Bu belge, Azure Application Insights'ta olay sayaçlarını (sistem tanımlı veya kullanıcı tanımlı) toplamak ve görüntülemek için gereken adımlarda yol gösterir.

Tip

Diğer ölçümlerde olduğu gibi, bir sayacın belirtilen sınırın dışına çıkması durumunda uyaracak bir uyarı ayarlayabilirsiniz . Uyarı ayarlamak için Uyarılar bölmesini açın ve Uyarı Ekle'yi seçin.

EventCounters toplamak için Application Insights'ı kullanma

Application Insights, yeni yayımlanan NuGet paketi EventCounters'ın bir parçası olan EventCounterCollectionModule ile toplamayı destekler. EventCounterCollectionModule AspNetCore veya WorkerService kullanılırken otomatik olarak etkinleştirilir. EventCounterCollectionModule 60 saniyelik yapılandırılamayan koleksiyon sıklığına sahip sayaçları toplar. EventCounters'ı toplamak için özel izin gerekmez. ASP.NET Core uygulamalar için Microsoft.ApplicationInsights.AspNetCore paketini de eklemek istiyorsunuz.

dotnet add package Microsoft.ApplicationInsights.EventCounterCollector
dotnet add package Microsoft.ApplicationInsights.AspNetCore
Toplanan varsayılan sayaçlar

AspNetCore SDK veya WorkerService SDK'sının 2.15.0 sürümünden itibaren varsayılan olarak hiçbir sayaç toplanmaz. Modülün kendisi etkinleştirildiğinden, kullanıcılar bunları toplamak için istenen sayaçları ekleyebilir.

.NET Çalışma Zamanı tarafından yayımlanan iyi bilinen sayaçların listesini almak için bkz. Available Counters belgesi.

Toplanacak sayaçları özelleştirme

Aşağıdaki örnekte sayaçların nasıl ekleneceği/kaldırılacağı gösterilmektedir. Bu özelleştirme, AddApplicationInsightsTelemetry() veya AddApplicationInsightsWorkerService() kullanılarak Application Insights telemetri toplama etkinleştirildikten sonra, uygulama hizmeti yapılandırmanızın bir parçası olarak yapılır. Aşağıda bir ASP.NET Core uygulamasından örnek kod verilmiştir. Diğer uygulama türleri için telemetri modüllerini yapılandırma bölümüne bakın.

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"));
        }
    );
EventCounter koleksiyon modülünü devre dışı bırakma

EventCounterCollectionModule kullanılarak ApplicationInsightsServiceOptionsdevre dışı bırakılabilir.

Aşağıdaki örnekte ASP.NET Core SDK'sı kullanılmaktadır.

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

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

Çalışan Hizmeti SDK'sı için de benzer bir yaklaşım kullanılabilir, ancak ad alanı aşağıdaki örnekte gösterildiği gibi değiştirilmelidir.

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

var applicationInsightsServiceOptions = new ApplicationInsightsServiceOptions();
applicationInsightsServiceOptions.EnableEventCounterCollectionModule = false;
builder.Services.AddApplicationInsightsTelemetry(applicationInsightsServiceOptions);
Olay sayaçları için Log Analytics sorguları

olay sayacı raporlarını Log AnalyticscustomMetrics tablosunda arayabilir ve görüntüleyebilirsiniz.

Örneğin, hangi sayaçların toplandığını ve sorgu için kullanılabilir olduğunu görmek için aşağıdaki sorguyu çalıştırın:

customMetrics | summarize avg(value) by name

Son dönemde belirli bir sayacın (örneğin: ThreadPool Completed Work Item Count) grafiğini almak için aşağıdaki sorguyu çalıştırın.

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

Diğer telemetrilerde olduğu gibi customMetrics'de de uygulamanızın üzerinde çalıştığı konak sunucu örneğinin kimliğini gösteren bir sütun cloud_RoleInstance bulunur. Önceki sorgu örnek başına sayaç değerini gösterir ve farklı sunucu örneklerinin performansını karşılaştırmak için kullanılabilir.

SSS: Olay Sayaçları Hakkında

Sık Sorulan Soruları (SSS) gözden geçirmek için Olay sayaçları SSS'si'ne bakın.

Anlık görüntü koleksiyonu

ASP.NET ve ASP.NET Core uygulamaları için anlık görüntü toplamayı yapılandırmayı öğrenmek için bkz. Azure Service Fabric, Cloud Services ve Virtual Machines .NET uygulamaları için Snapshot Debugger'ı etkinleştirme.

Telemetriyi işleme ve filtreleme

Bu bölümde

Telemetriyi filtreleme ve ön işleme

SDK'dan gönderilmeden önce telemetrinizi filtrelemek, değiştirmek veya zenginleştirmek için kod yazabilirsiniz. İşleme, HTTP isteği koleksiyonu ve bağımlılık koleksiyonu gibi standart telemetri modüllerinden gönderilen verileri içerir.

  • Filtreleme,ITelemetryProcessor uygulayarak telemetriyi SDK'dan gönderilmeden önce değiştirebilir veya atabilir. Örneğin, robotlardan gelen istekleri dışlayarak telemetri hacmini azaltabilirsiniz. Örneklemeden farklı olarak, gönderilen veya atılan öğeler üzerinde tam denetime sahipsiniz, ancak birleştirilmiş günlükleri temel alan tüm ölçümleri etkiler. Öğeleri nasıl attığınıza bağlı olarak, ilgili öğeler arasında gezinme özelliğini de kaybedebilirsiniz.

  • uygulamanızdan gönderilen herhangi bir telemetriye, özellikleri eklemek veya değiştirmek için bir ITelemetryInitializer uygulayarak özellikler ekleyin veya değiştirin. Örneğin, portaldaki verileri filtrelemek için hesaplanan değerler veya sürüm numaraları ekleyebilirsiniz.

  • Örnekleme , istatistiklerinizi etkilemeden telemetri hacmini azaltır. Bir sorunu tanıladığınızda aralarında gezinebilmeniz için ilgili veri noktalarını bir arada tutar. Portalda, örneklemeyi telafi etmek için toplam sayılar çarpılır.

Uyarı

SDK API'si özel olayları ve ölçümleri göndermek için kullanılır.

Filtering

Bu teknik, telemetri akışına dahil edilen veya telemetri akışından dışlananlar üzerinde doğrudan denetim sağlar. Filtreleme, telemetri öğelerinin Application Insights'a gönderilmesini bırakmak için kullanılabilir. Filtrelemeyi örneklemeyle veya ayrı ayrı kullanabilirsiniz.

Telemetriyi filtrelemek için bir telemetri işlemcisi yazar ve ile TelemetryConfiguration kaydedersiniz. Tüm telemetri işlemcinizden geçer. Akıştan çıkarmayı veya zincirdeki bir sonraki işlemciye iletmeyi seçebilirsiniz. HTTP isteği toplayıcısı ve bağımlılık toplayıcısı gibi standart modüllerden alınan telemetri ve kendiniz takip ettiğiniz telemetri dahildir. Örneğin, robotlardan gelen istekler veya başarılı bağımlılık çağrıları hakkındaki telemetri verilerini filtreleyebilirsiniz.

Uyarı

SDK'dan gönderilen telemetri verilerini işlemciler kullanarak filtrelemek, portalda gördüğünüz istatistikleri çarpıtabilir ve ilgili öğeleri izlemeyi zorlaştırabilir.

Bunun yerine örnekleme kullanmayı göz önünde bulundurun.

ITelemetryProcessor ve ITelemetryInitializer

Telemetri işlemcileri ile telemetri başlatıcıları arasındaki fark nedir?

  • Bunlarla yapabileceklerinizde bazı çakışmalar vardır. Her ikisi de telemetri özelliklerini eklemek veya değiştirmek için kullanılabilir, ancak bu amaçla başlatıcıları kullanmanızı öneririz.
  • Telemetri başlatıcıları her zaman telemetri işlemcilerinden önce çalışır.
  • Telemetri başlatıcıları birden çok kez çağrılabilir. Kurala göre, önceden ayarlanmış herhangi bir özelliği ayarlamaz.
  • Telemetri işlemcileri, bir telemetri öğesini tamamen değiştirmenize veya atmanıza olanak sağlar.
  • Tüm kayıtlı telemetri başlatıcıları her telemetri öğesi için çağrılır. Telemetri işlemcileri için SDK, ilk telemetri işlemcisini çağırmayı garanti eder. Geri kalan işlemcilerin çağrılıp çağrılmayacağı, önceki telemetri işlemcileri tarafından belirlenir.
  • Telemetriyi daha fazla özellik ile zenginleştirmek veya var olan bir telemetriyi geçersiz kılmak için telemetri başlatıcılarını kullanın. Telemetriyi filtrelemek için telemetri işlemcisi kullanın.

Özellikleri ekleme/değiştirme

Telemetriyi ek bilgilerle zenginleştirmek veya standart telemetri modülleri tarafından ayarlanan telemetri özelliklerini geçersiz kılmak için telemetri başlatıcılarını kullanın.

Örneğin, web paketi için Application Insights HTTP istekleri hakkında telemetri toplar. Varsayılan olarak, yanıt kodu >=400 olan tüm istekleri başarısız olarak işaretler. Bunun yerine 400 durum kodunu bir başarı olarak değerlendirmek istiyorsanız, başarı özelliğini ayarlayan bir telemetri başlatıcısı sağlayabilirsiniz.

Telemetri başlangıç ​​yapılandırıcısı sağlarsanız, Track*() yöntemlerinden herhangi biri çağrıldığında bu yapılandırıcı çağrı yapılır. Bu başlatıcı, standart telemetri modülleri tarafından çağrılan yöntemleri içerir Track() . Kural gereği, bu modüller zaten bir başlatıcı tarafından ayarlanmış olan herhangi bir özelliği ayarlamaz. Telemetri başlatıcıları telemetri işlemcileri çağrılmadan önce çağrılır, bu nedenle başlatıcılar tarafından yapılan tüm zenginleştirmeler işlemciler tarafından görülebilir.

Telemetri başlatıcıları

Telemetriyi ek bilgilerle zenginleştirmek veya standart telemetri modülleri tarafından ayarlanan telemetri özelliklerini geçersiz kılmak için telemetri başlatıcılarını kullanın.

Telemetri başlatıcıları, her telemetri öğesiyle birlikte gönderilen bağlam özelliklerini ayarlar. Bağlam özelliklerini ayarlamak için kendi başlatıcılarınızı yazabilirsiniz.

Standart başlatıcıların tümü web veya WindowsServer NuGet paketleri tarafından ayarlanır:

Başlatıcı Description
AccountIdTelemetryInitializer AccountId özelliğini ayarlar.
AuthenticatedUserIdTelemetryInitializer AuthenticatedUserId Özelliği JavaScript SDK'sı tarafından ayarlandığı şekilde ayarlar.
AzureRoleEnvironmentTelemetryInitializer tüm telemetri öğeleri için RoleName bağlamının RoleInstance ve Device özelliklerini Azure çalışma zamanı ortamından ayıklanan bilgilerle güncelleştirir.
BuildInfoConfigComponentVersionTelemetryInitializer Version Tüm telemetri öğeleri için bağlamın Component özelliğini MS Build tarafından oluşturulan BuildInfo.config dosyasından ayıklanan değerle güncelleştirir.
ClientIpHeaderTelemetryInitializer Ip tüm telemetri öğelerinin bağlamının Location özelliğini isteğin X-Forwarded-For HTTP üst bilgisine göre güncelleştirir.
DeviceTelemetryInitializer Tüm telemetri öğeleri için bağlamın Device aşağıdaki özelliklerini güncelleştirir:

Type olarak PCayarlanır.
Id web uygulamasının çalıştığı bilgisayarın etki alanı adına ayarlanır.
OemNameWin32_ComputerSystem.Manufacturer alanından WMI kullanılarak ayıklanan değere ayarlanır.
ModelWin32_ComputerSystem.Model alanından WMI kullanılarak ayıklanan değere ayarlanır.
NetworkType özelliğinden ayıklanan değer NetworkInterface'ye ayarlanır.
Language değeri, CurrentCulture özelliğinin adına ayarlanır.
DomainNameRoleInstanceTelemetryInitializer Web uygulamasının çalıştığı bilgisayarın etki alanı adıyla tüm telemetri öğeleri için RoleInstance bağlamın Device özelliğini güncelleştirir.
OperationNameTelemetryInitializer Name RequestTelemetry özelliğini ve HTTP yöntemini temel alan tüm telemetri öğelerinin Name bağlamının Operation özelliğini ve isteği işlemek için çağrılan ASP.NET MVC denetleyicisinin ve eylemin adlarını güncelleştirir.
OperationIdTelemetryInitializer veya OperationCorrelationTelemetryInitializer Operation.Id bağlam özelliği, otomatik olarak oluşturulan RequestTelemetry.Id ile bir isteği işlerken izlenen tüm telemetri öğelerinin güncellenmesini sağlar.
SessionTelemetryInitializer Tüm telemetri öğeleri için bağlamın Id özelliğini, kullanıcının tarayıcısında çalışan Session JavaScript araç kodu tarafından oluşturulan ai_session çerezinden elde edilen değerle güncelleştirir.
SyntheticTelemetryInitializer veya SyntheticUserAgentTelemetryInitializer Tüm telemetri öğelerinin User, Session, ve Operation bağlam özelliklerini, kullanılabilirlik testi veya arama motoru botu gibi yapay bir kaynaktan gelen bir isteği işlerken güncelleştirir. Varsayılan olarak ölçüm gezgini yapay telemetri görüntülemez.

<Filters> İsteklerin tanımlayıcı özellikleri kümesi.
UserTelemetryInitializer Application Insights JavaScript izleme kodunun kullanıcının tarayıcısında oluşturduğu Id tanımlama bilgisinden ayıklanan değerlerle, tüm telemetri öğeleri için AcquisitionDate bağlamının User ve ai_user özelliklerini günceller.
WebTestTelemetryInitializer Kullanılabilirlik testlerinden gelen HTTP istekleri için kullanıcı kimliğini, oturum kimliğini ve yapay kaynak özelliklerini ayarlar.

<Filters> İsteklerin tanımlayıcı özellikleri kümesi.

Uyarı

Azure Service Fabric'da çalışan .NET uygulamalar için Microsoft.ApplicationInsights.ServiceFabric NuGet paketini ekleyebilirsiniz. Bu paket, telemetri öğelerine Service Fabric özellikleri ekleyen bir FabricTelemetryInitializer özellik içerir. Daha fazla bilgi için bu NuGet paketi tarafından eklenen özellikler hakkında GitHub sayfasına bakın.

ITelemetryInitializer Ekleme

Bu blogda , bağımlılıklara otomatik olarak düzenli ping göndererek bağımlılık sorunlarını tanılamaya yönelik bir proje açıklanır.

  1. Başlatıcınızı tanımlama

    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. Başlatıcınızı yükleme

ASP.NET

1. Seçenek: Kodda yapılandırma

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

Seçenek 2: ApplicationInsights.config'da yapılandırma

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

Bu örneğe daha fazla bakın.

Uyarı

applicationinsights.config dosyasının çıkış dizininizde olduğundan ve son değişiklikleri içerdiğinden emin olun.

ASP.NET Core

ApplicationInsights.config veya TelemetryConfiguration.Active kullanarak başlatıcı eklemek ASP.NET Core uygulamalar için geçerli değildir.

ASP.NET Core kullanılarak yazılmış uygulamalar için, gösterildiği gibi telemetri başlatıcısı DependencyInjection kapsayıcısına eklenir. yönteminde bu adımı gerçekleştirin Startup.ConfigureServices .

var builder = WebApplication.CreateBuilder(args);

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

var app = builder.Build();

Uyarı

builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>(); basit başlatıcılar için çalışır. Başkaları için builder.Services.AddSingleton(new MyCustomTelemetryInitializer() { fieldName = "myfieldName" }); gereklidir.

Telemetri başlatıcılarını kaldırma

Varsayılan olarak telemetri başlatıcıları vardır. Telemetri başlatıcılarının tümünü veya belirli bir öğesini kaldırmak için çağrısı yaptıktan sonraAddApplicationInsightsTelemetry()kullanın.

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();
İşçi Servisi

ApplicationInsights.config veya TelemetryConfiguration.Active kullanarak bir başlatıcı eklemek, Worker Service SDK'sı için geçerli değildir.

Çalışan Hizmeti kullanılarak yazılan uygulamalar için yeni bir telemetri başlatıcısı ekleme işlemi, gösterildiği gibi kapsayıcıya DependencyInjection eklenerek gerçekleştirilir. yönteminde bu adımı gerçekleştirin Startup.ConfigureServices .

    using Microsoft.ApplicationInsights.Extensibility;

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
        services.AddApplicationInsightsTelemetryWorkerService();
    }
Telemetri başlatıcılarını kaldırma

Telemetri başlatıcıları varsayılan olarak vardır. Telemetri başlatıcılarının tümünü veya belirli bir öğesini kaldırmak için çağrısı yaptıktan sonraAddApplicationInsightsTelemetryWorkerService()kullanın.

   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));
   }

Örnek ITelemetryInitializers

Özel özellik ekleme

Aşağıdaki örnek başlatıcı izlenen her telemetriye özel bir özellik ekler.

public void Initialize(ITelemetry item)
{
    var itemProperties = item as ISupportProperties;
    if(itemProperties != null && !itemProperties.Properties.ContainsKey("customProp"))
    {
        itemProperties.Properties["customProp"] = "customValue";
    }
}
Bulut rolü adı ve bulut rolü örneği ekleme

1. Adım: Özel TelemetryInitializer yazma

Aşağıdaki örnek başlatıcı, bulut rolü adını izlenen her telemetriye ayarlar.

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";
            }
        }
    }
}

2. Adım: TelemetryConfiguration'a başlatıcı yükleme

ASP.NET

ApplicationInsights.config dosyasında:

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

ASP.NET Web uygulamaları için alternatif bir yöntem, kodda başlatıcıyı örneklemektir. Aşağıdaki örnekte Global.aspx.cs dosyasındaki kod gösterilmektedir:

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

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

Yeni TelemetryInitializer bir örnek eklemek için bunu Bağımlılık Ekleme kapsayıcısına eklersiniz. Aşağıdaki örnekte bu yaklaşım gösterilmektedir. Bu kodu ConfigureServices sınıfınızın Startup.cs yöntemine ekleyin.

 using Microsoft.ApplicationInsights.Extensibility;
 using CustomInitializer.Telemetry;
 public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();
}
Coğrafi konum eşlemeleri için kullanılan istemci IP adresini denetleme

Aşağıdaki örnek başlatıcı, telemetri alımı sırasında istemci yuva IP adresi yerine coğrafi konum eşlemesi için kullanılan istemci IP'sini ayarlar.

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;
}

Telemetri işlemcileri

Telemetri işlemcileri, SDK'dan portala gönderilmeden önce her telemetri öğesini filtreleyebilir ve değiştirebilir.

Uygula ITelemetryProcessor

Telemetri işlemcileri bir işleme zinciri oluşturur. Telemetri işlemcisini örneklediğinizde, zincirdeki bir sonraki işlemciye referans alırsınız. Bir telemetri veri noktası işlem yöntemine geçirildiğinde, işini yapar ve ardından zincirdeki sonraki telemetri işlemcisini çağırır (veya çağırmaz).

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;
    }
}

İşlemcinizi ekleme

ASP.NET

Bu kod parçacığını ApplicationInsights.configekleyin:

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

Sınıfınızda genel adlandırılmış özellikler sağlayarak .config dosyasından dize değerlerini geçirebilirsiniz.

Uyarı

tür adını ve .config dosyasındaki tüm özellik adlarını koddaki sınıf ve özellik adlarına eşleştirmeye dikkat edin. .config dosyası var olmayan bir türe veya özelliğe başvurursa, SDK sessizce herhangi bir telemetri gönderemeyebilir.

Alternatif olarak, filtreyi kodda başlatabilirsiniz. Uygun bir başlatma sınıfında, örneğin Global.asax.cs içindeki AppStart, işlemcinizi zincire ekleyin.

Uyarı

Aşağıdaki kod örneği kullanımdan kaldırılmış ancak gelecek nesiller için burada kullanıma sunulmuştur. OpenTelemetry kullanmaya başlamayı veya OpenTelemetry'ye geçiş yapmayı göz önünde bulundurun.

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();

Bu noktadan sonra oluşturulan telemetri istemcileri işlemcilerinizi kullanır.

Uyarlamalı örnekleme telemetri işlemcisi (2.0.0-beta3 arası)

Bu işlev varsayılan olarak etkindir. Uygulamanız önemli ölçüde telemetri gönderirse, bu işlemci bazı telemetri verilerini kaldırır.


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

parametresi, algoritmanın ulaşmaya çalıştığı hedefi sağlar. SDK'nın her örneği bağımsız olarak çalışır. Bu nedenle, sunucunuz birkaç makineden oluşan bir kümeyse, gerçek telemetri hacmi buna göre çarpılır.

Örnekleme hakkında daha fazla bilgi edinin.

Sabit hızlı örnekleme telemetri işlemcisi (2.0.0-beta1 arası)

Standart bir örnekleme telemetri işlemcisi de vardır (2.0.1'den itibaren):

    <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

Uyarı

ApplicationInsights.config veya TelemetryConfiguration.Active kullanarak işlemci eklemek, ASP.NET Core uygulamalar veya Microsoft.ApplicationInsights.WorkerService SDK kullanıyorsanız geçerli değildir.

ASP.NET Core için yeni telemetri işlemcisi ekleme işlemi, gösterildiği gibi AddApplicationInsightsTelemetryProcessor üzerinde IServiceCollection uzantısı yöntemi kullanılarak yapılır. Bu yöntem, ConfigureServices yönteminde sınıfınızın Startup.cs yönteminde çağrılır.

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();

parametre gerektiren telemetri işlemcilerini ASP.NET Core kaydetmek için ITelemetryProcessorFactory uygulayan özel bir sınıf oluşturun. Create yönteminde istenen parametrelerle oluşturucuyu çağırın ve ardından AddSingleton<ITelemetryProcessorFactory, MyTelemetryProcessorFactory>() kullanın.

İşçi Servisi

Uyarı

ApplicationInsights.config veya TelemetryConfiguration.Active kullanarak işlemci eklemek, ASP.NET Core uygulamalar veya Microsoft.ApplicationInsights.WorkerService SDK kullanıyorsanız geçerli değildir.

Çalışan Hizmeti için, yeni bir telemetri işlemcisi ekleme işlemi, gösterildiği gibi üzerinde AddApplicationInsightsTelemetryProcessoruzantı yöntemi kullanılarak IServiceCollection gerçekleştirilir. Bu yöntem, ConfigureServices yönteminde sınıfınızın Startup.cs yönteminde çağrılır.

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

Örnek filtreler

Sentetik istekler

Botları ve web testlerini filtreleyin. Ölçüm Gezgini yapay kaynakları filtreleme seçeneği sunar ancak bu seçenek trafiği ve alma boyutunu SDK'nın kendisinde filtreleyerek azaltır.

public void Process(ITelemetry item)
{
    if (!string.IsNullOrEmpty(item.Context.Operation.SyntheticSource)) {return;}
    
    // Send everything else:
    this.Next.Process(item);
}
Kimlik doğrulaması başarısız oldu

"401" yanıtı veren istekleri filtreleyerek çıkarın.

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);
}
Hızlı uzak bağımlılık çağrılarını filtreleme

Yalnızca yavaş çağrıları tanılamak istiyorsanız, hızlı olanları filtreleyin.

Uyarı

Bu filtreleme, portalda gördüğünüz istatistikleri çarpıtır.

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

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

Örnekleme

ASP.NET ve ASP.NET Core uygulamaları için örneklemeyi yapılandırmayı öğrenmek için bkz. Application Insights'da Örnekleme.

İşçi Servisi

Çalışan Hizmeti için Application Insights SDK'sı hem sabit hızlı örneklemeyi hem de uyarlamalı örneklemeyi destekler. Uyarlamalı örnekleme varsayılan olarak etkindir. EnableAdaptiveSampling ApplicationInsightsServiceOptions içindeki seçeneği kullanarak örnekleme devre dışı bırakılabilir.

Diğer örnekleme ayarlarını yapılandırmak için aşağıdaki örneği kullanabilirsiniz:

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();

HTTP aracılığıyla verileri zenginleştirme

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

SDK yapılandırması

Bu bölümde

Varsayılan yapılandırmayı değiştirmek üzere ASP.NET, ASP.NET Core ve Çalışan Hizmeti için Application Insights SDK'sını özelleştirebilirsiniz.

ASP.NET

Application Insights .NET SDK'sı birçok NuGet paketinden oluşur. Çekirdek paket, Application Insights'a telemetri göndermek için API sağlar. Daha fazla paket , uygulamanızdan ve bağlamından telemetriyi otomatik olarak izlemek için telemetri modülleri ve başlatıcılar sağlar. Yapılandırma dosyasını ayarlayarak telemetri modüllerini ve başlatıcıları etkinleştirebilir veya devre dışı bırakabilirsiniz. Ayrıca bazıları için parametreler de ayarlayabilirsiniz.

Yapılandırma dosyası ApplicationInsights.config veya ApplicationInsights.xml olarak adlandırılır. Ad, uygulamanızın türüne bağlıdır. SDK'nın çoğu sürümünü yüklediğinizde projenize otomatik olarak eklenir.

Varsayılan olarak, Add>Application Insights Telemetrisi destekleyen Visual Studio şablon projelerinden otomatik deneyimi kullandığınızda, proje kök klasöründe ApplicationInsights.config dosyası oluşturulur. Derledikten sonra bin klasörüne kopyalanır. Ayrıca bir IIS sunucusundaki Application Insights Aracısı tarafından bir web uygulamasına eklenir.

Önemli

Azure web siteleri için uzantı veya Azure VM'ler ve Azure sanal makine ölçek kümeleri için uzantı kullanılırsa, yapılandırma dosyası yoksayılır.

Bir web sayfasında SDK'yi denetlemek için eşdeğer bir dosya yoktur.

ASP.NET Core

ASP.NET Core uygulamalarında, aksi belirtilmedikçe tüm yapılandırma değişiklikleri ConfigureServices() sınıfınızın yönteminde yapılır.

Uyarı

ASP.NET Core uygulamalarında, TelemetryConfiguration.Active değiştirerek yapılandırmayı değiştirmek desteklenmez.

İşçi Servisi

Çalışan Hizmet SDK'sı tarafından kullanılan varsayılan TelemetryConfiguration, ASP.NET veya ASP.NET Core uygulamasında kullanılan otomatik yapılandırmaya benzer, ancak HttpContext aracılığıyla telemetriyi zenginleştirmek için kullanılan telemetri başlatıcıları dahil edilmemiştir.

Varsayılan yapılandırmayı değiştirmek için Çalışan Hizmeti için Application Insights SDK'sını özelleştirebilirsiniz. Application Insights ASP.NET Core SDK'sı kullanıcıları, gömülü ASP.NET Core dependency injection kullanarak yapılandırmayı değiştirme konusunda aşina olabilir. Çalışan Hizmeti SDK'sı da benzer ilkeleri temel alır. Sonraki bölümde ayrıntılı olarak açıklandığı gibi, ConfigureServices() üzerinde uygun yöntemleri çağırarak IServiceCollection bölümünde neredeyse tüm yapılandırma değişikliklerini yapın.

Uyarı

Çalışan Hizmeti SDK'sını kullandığınızda, değişiklik yaparak TelemetryConfiguration.Active yapılandırmayı değiştirmek desteklenmez ve değişiklikler yansıtılamaz.

Telemetri kanalları

Telemetri kanalları , Application Insights SDK'larının ayrılmaz bir parçasıdır. Onlar, telemetriyi arabelleğe almayı ve Application Insights hizmetine iletimini yönetir. SDK'ların .NET ve .NET Core sürümlerinde iki yerleşik telemetri kanalı vardır: InMemoryChannel ve ServerTelemetryChannel. Bu bölümde her kanal açıklanır ve kanal davranışının nasıl özelleştirileceği gösterilir.

Uyarı

Sık sorulan soruları (SSS) gözden geçirmek için bkz . Telemetri kanalları hakkında SSS

Telemetri kanalları nedir?

Telemetri kanalları, telemetri verilerini arabelleğe alma ve sorgulama ile analiz amacıyla depolandıkları yer olan Application Insights hizmetine göndermekle sorumludur. Telemetri kanalı, arabirimini uygulayan Microsoft.ApplicationInsights.ITelemetryChannel herhangi bir sınıftır.

Send(ITelemetry item) Bir telemetri kanalının metodu, tüm telemetri başlatıcıları ve telemetri işlemcileri çağrıldıktan sonra çağrılır. Bu nedenle, telemetri işlemcisi tarafından bırakılan öğeler kanala ulaşmaz. Send() yöntemi öğeleri normalde arka uca anında göndermez. Genellikle bunları bellekte arabelleğe alır ve verimli iletim için toplu olarak gönderir.

Arabelleğe alınan telemetrinin hemen gönderilmesi kritik değilse aramaktan Flush() kaçının. Bunu yalnızca uygulama kapatma, özel durum işleme gibi senaryolarda veya arka plan işleri veya komut satırı araçları gibi kısa süreli işlemleri kullanırken kullanın. Web uygulamalarında veya uzun süre çalışan hizmetlerde SDK, telemetri gönderme işlemini otomatik olarak işler. Gereksiz yere çağrılması Flush() performans sorunlarına neden olabilir.

Canlı Ölçüm Akışı'nda telemetrinin canlı akışını destekleyen özel bir kanal da vardır. Bu kanal normal telemetri kanalından bağımsızdır ve bu belge bu kanal için geçerli değildir.

Yerleşik telemetri kanalları

Application Insights .NET ve .NET Core SDK'ları iki yerleşik kanalla birlikte gönderilir:

  • InMemoryChannel: Öğeleri gönderilene kadar bellekte arabelleğe alan basit bir kanal. Öğeler bellekte arabelleğe alınıp her 30 saniyede bir veya 500 öğe arabelleğe alındıktan sonra boşaltılır. Bu kanal, bir hatadan sonra telemetri göndermeyi yeniden denemediğinden en düşük güvenilirlik garantisi sunar. Bu kanal ayrıca öğeleri diskte tutmaz. Bu nedenle, nazik olsun veya olmasın, uygulama kapatıldığında tüm gönderilmemiş öğeler kalıcı olarak kaybolur. Bu kanal, bellek içi telemetri öğelerini eşzamanlı olarak zorla temizlemek için kullanılabilecek bir Flush() yöntem uygular. Bu kanal, zaman uyumlu temizlemenin ideal olduğu kısa süreli uygulamalar için uygundur.

    Bu kanal, daha büyük Microsoft.ApplicationInsights NuGet paketinin bir parçasıdır ve başka hiçbir şey yapılandırılmadığında SDK'nın kullandığı varsayılan kanaldır.

  • ServerTelemetryChannel: Yeniden deneme ilkelerine ve verileri yerel diskte depolama özelliğine sahip daha gelişmiş bir kanal. Bu kanal, geçici hatalar oluşursa telemetri göndermeyi yeniden dener. Bu kanal, ağ kesintileri veya yüksek telemetri birimleri sırasında öğeleri diskte tutmak için yerel disk depolamayı da kullanır. Bu yeniden deneme mekanizmaları ve yerel disk depolaması nedeniyle bu kanal daha güvenilir olarak kabul edilir. Bunu tüm üretim senaryoları için öneririz. Bu kanal, resmi belgelere göre yapılandırılan ASP.NET ve ASP.NET Core uygulamaları için varsayılandır. Bu kanal, uzun süre çalışan işlemlere sahip sunucu senaryoları için iyileştirilmiştir. Flush() Bu kanal tarafından uygulanan yöntem zaman uyumlu değildir.

    Bu kanal Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel NuGet paketi olarak gönderilir ve Microsoft.ApplicationInsights.Web veya Microsoft.ApplicationInsights.AspNetCore NuGet paketini kullandığınızda otomatik olarak alınır.

Telemetri kanalını yapılandırma

Telemetri kanalını etkin telemetri yapılandırmasına ayarlayarak yapılandırabilirsiniz. ASP.NET uygulamaları için yapılandırma telemetri kanalı örneğini TelemetryConfiguration.Active olarak veya ApplicationInsights.config değiştirerek ayarlamayı içerir. ASP.NET Core uygulamalar için yapılandırma, kanalı bağımlılık ekleme kapsayıcısına eklemeyi içerir.

Aşağıdaki bölümlerde, çeşitli uygulama türlerinde kanal için ayarı yapılandırma StorageFolder örnekleri gösterilmektedir. StorageFolder yapılandırılabilir ayarlardan yalnızca biridir. Yapılandırma ayarlarının tam listesi için bu makalenin devamında yer alan Kanallarda yapılandırılabilir ayarlar bölümüne bakın.

ASP.NET

1. Seçenek: Kodda yapılandırma

Aşağıdaki kod, ServerTelemetryChannel örneğini özel bir StorageFolder konumuna ayarlayarak kurar. Bu kodu uygulamanın başına, genellikle Global.aspx.cs yöntemine Application_Start() ekleyin.

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;
}

Seçenek 2: ApplicationInsights.config'da yapılandırma

ApplicationInsights.config'in aşağıdaki bölümünde, ServerTelemetryChannel kanalının özel bir konuma ayarlanmış olarak yapılandırıldığı gösterilmektedirStorageFolder.

    <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

Sınıfın ConfigureServicesStartup.cs yöntemini burada gösterildiği gibi değiştirin:

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();
}

Önemli

TelemetryConfiguration.Active kullanarak kanalı yapılandırmak ASP.NET Core uygulamalar için desteklenmez.

ServerTelemetryChannel'i Geçersiz Kılma

Varsayılan telemetri kanalı şeklindedir ServerTelemetryChannel. Aşağıdaki örnek, bunun nasıl geçersiz kılınacağını göstermektedir.

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();

Uyarı

Eğer arabelleği boşaltmak istiyorsanız Verileri boşaltma bölümüne bakın. Örneğin, kapanan bir uygulamada SDK'yı kullanıyorsanız arabelleği temizlemeniz gerekebilir.

İşçi Servisi

Varsayılan kanaldır ServerTelemetryChannel. Aşağıdaki örnekte gösterildiği gibi geçersiz kılabilirsiniz:

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();
    }

Konsol uygulamaları için kodda yapılandırma

Konsol uygulamaları için kod hem .NET hem de .NET Core için aynıdır:

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

ServerTelemetryChannel'in işlem ayrıntıları

ServerTelemetryChannel gelen öğeleri bellek içi arabelleğe depolar. Öğeler, her 30 saniyede bir veya 500 öğe arabelleğe alındığında serileştirilir, sıkıştırılır ve bir Transmission örneğinde depolanır. Tek Transmission bir örnek en fazla 500 öğe içerir ve Application Insights hizmetine tek bir HTTPS çağrısı üzerinden gönderilen bir telemetri toplu işlemini temsil eder.

Varsayılan olarak, en fazla 10 Transmission örnek paralel olarak gönderilebilir. Telemetri daha hızlı hızlara ulaşıyorsa veya ağ veya Application Insights arka ucu yavaşsa örnekler Transmission bellekte depolanır. Bu bellek Transmission içi arabelleğin varsayılan kapasitesi 5 MB'tır. Bellek içi kapasite aşıldığında, Transmission örnekler yerel diskte 50 MB sınırına kadar depolanır.

Transmission örnekler, ağ sorunları olduğunda da yerel diskte depolanır. Yalnızca yerel diskte depolanan öğeler uygulama çökmesi durumunda korunur. Uygulama her yeniden başlatıldığında gönderilirler. Ağ sorunları devam ederse, ServerTelemetryChannel telemetri göndermek için yeniden denemeden önce 10 saniye ile 1 saat arasında bir üstel geri alma mantığı kullanır.

Kanallarda yapılandırılabilir ayarlar

Her kanal için yapılandırılabilir ayarların tam listesi için bkz:

için en yaygın kullanılan ayarlar ServerTelemetryChannelşunlardır:

  • MaxTransmissionBufferCapacity: Kanal tarafından bellekteki iletimleri arabelleğe almak için kullanılan maksimum bellek miktarı (bayt cinsinden). Bu kapasiteye ulaşıldığında, yeni öğeler doğrudan yerel diske depolanır. Varsayılan değer 5 MB'tır. Daha yüksek bir değer ayarlamak daha az disk kullanımına neden olur, ancak uygulama kilitlenirse bellekteki öğelerin kaybolduğunu unutmayın.

  • MaxTransmissionSenderCapacity: Application Insights'a aynı anda gönderilen en fazla örnek sayısı Transmission . Varsayılan değer 10'dur. Bu ayar, çok büyük bir telemetri hacmi oluşturulduğunda önerdiğimiz daha yüksek bir sayıya yapılandırılabilir. Yüksek hacim genellikle yük testi sırasında veya örnekleme kapatıldığında oluşur.

  • StorageFolder: Kanal tarafından öğeleri gerektiğinde diske depolamak için kullanılan klasör. Windows'da, başka bir yol açıkça belirtilmezse %LOCALAPPDATA% veya %TEMP% kullanılır. Windows dışındaki ortamlarda varsayılan olarak şu konumlar kullanılır (sırayla): %TMPDIR%, /var/tmp/ veya /tmp/.

Hangi kanalı kullanmalıyım?

Çoğu uzun süre çalışan uygulamaları içeren üretim senaryosu için ServerTelemetryChannel öneriyoruz. Telemetriyi temizleme hakkında daha fazla bilgi için Flush() kullanma hakkında okuyun.

Flush() ne zaman kullanılır?

Flush() yöntemi, arabelleğe alınan telemetri verilerini hemen gönderir. Ancak, yalnızca belirli senaryolarda kullanılmalıdır.

Şu durumlarda kullanın Flush() :

  • Uygulama kapatılmak üzere ve çıkış öncesinde telemetrinin gönderildiğinden emin olmak istiyorsunuz.
  • Bir özel durum işleyicisindesiniz ve telemetrinin teslimini garanti etmeniz gerekiyor.
  • Örneğin, arka plan görevi veya hızlıca sona eren bir CLI aracı gibi kısa süreli bir işlem yazıyorsunuz.

Web hizmetleri gibi uzun süre çalışan uygulamalarda kullanmaktan Flush() kaçının. SDK, verilerin arabelleğe alınıp iletilmesini otomatik olarak yönetir. Gereksiz yere Flush() çağrılması performans sorunlarına neden olabilir ve tüm verilerin gönderilmesini garanti etmez; özellikle ServerTelemetryChannel kullanımı, verileri zaman uyumlu olarak temizlemediği için bu durum geçerlidir.

Telemetri modülleri

Application Insights, kullanıcı tarafından el ile izlemeye gerek kalmadan belirli iş yükleriyle ilgili telemetri verilerini otomatik olarak toplar.

Varsayılan olarak, aşağıdaki otomatik toplama modülleri etkinleştirilir. Varsayılan davranışlarını değiştirmek için bunları devre dışı bırakabilir veya yapılandırabilirsiniz.

ASP.NET

Her telemetri modülü belirli bir veri türünü toplar ve verileri göndermek için çekirdek API'yi kullanır. Modüller, .config dosyasına gerekli satırları da ekleyen farklı NuGet paketleri tarafından yüklenir.

Area Description
İstek izleme Gelen web istekleri için istek telemetrisi (yanıt süresi, sonuç kodu) toplar.

Modül:Microsoft.ApplicationInsights.Web.RequestTrackingTelemetryModule
NuGet:Microsoft.ApplicationInsights.Web
Bağımlılık izleme Giden bağımlılıklar (HTTP çağrıları, SQL çağrıları) hakkında telemetri toplar. IIS'de çalışmak için Application Insights Aracısını yükleyin. TrackDependency API'lerini kullanarak özel bağımlılık izleme de yazabilirsiniz. App Service ve VM'ler ve sanal makine ölçek kümeleri izleme için otonom enstrümantasyonu destekler.

Modül:Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule
NuGet:Microsoft.ApplicationInsights.DependencyCollector
Performans sayaçları Windows Performans Sayaçlarını (IIS yüklemelerinden CPU, bellek, ağ yükü) toplar. Hangi sayaçları (özel sayaçlar dahil) belirtin. Daha fazla bilgi için bkz. Sistem performans sayaçlarını toplar.

Modül:Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule
NuGet:Microsoft.ApplicationInsights.PerfCounterCollector
Olay sayaçları .NET Olay Sayaçları toplar. Windows performans sayaçları yerine ASP.NET Core ve platformlar arası için önerilir.

Modül:EventCounterCollectionModule (SDK ≥ 2.8.0)
Canlı Ölçümler (QuickPulse) Canlı Ölçümler bölmesi için telemetri toplar.

Modül:QuickPulseTelemetryModule
Kalp Atışları (App Service) App Service ortamı için kalp atışları ve özel ölçümler gönderir.

Modül:AppServicesHeartbeatTelemetryModule
Kalp Atışları (VM'ler ve sanal makine ölçek kümeleri) Azure VM ortamı için durum sinyalleri ve özel ölçümler gönderir.

Modül:AzureInstanceMetadataTelemetryModule
Tanılama telemetrisi Application Insights izleme kodundaki hataları bildirir (örneğin, eksik sayaçlar, ITelemetryInitializer istisnalar). Tanılama Araması'nda iz telemetrisi görüntülenir.

Modül:Microsoft.ApplicationInsights.Extensibility.Implementation.Tracing.DiagnosticsTelemetryModule
NuGet:Microsoft.ApplicationInsights

Not: Yalnızca bu paketi yüklerseniz ,ApplicationInsights.config dosyası otomatik olarak oluşturulmaz.
Geliştirici modu (hata ayıklayıcısı eklendi) Hata ayıklayıcı bağlıyken TelemetryChannel öğeleri hemen göndermeye zorlar. Gecikme süresini azaltır, ancak CPU/ağ ek yükünü artırır.

Modül:Microsoft.ApplicationInsights.WindowsServer.DeveloperModeWithDebuggerAttachedTelemetryModule
NuGet:Application Insights Windows Server
Özel durum izleme (Web) Web uygulamalarında işlenmeyen özel durumları izler. Bkz . Hatalar ve özel durumlar.

Modül:Microsoft.ApplicationInsights.Web.ExceptionTrackingTelemetryModule
NuGet:Microsoft.ApplicationInsights.Web
Özel durum izleme (Gözlemlenmeyen/İşlenmeyen) Çalışan rolleri, Windows hizmetleri ve konsol uygulamaları için gözlemlenmeyen görev özel durumlarını ve işlenmeyen özel durumları izler.

Modüller:
 • Microsoft.ApplicationInsights.WindowsServer.UnobservedExceptionTelemetryModule
 • Microsoft.ApplicationInsights.WindowsServer.UnhandledExceptionTelemetryModule
NuGet:Microsoft.ApplicationInsights.WindowsServer
EventSource izleme Yapılandırılmış EventSource olaylarını Application Insights'a izleme olarak gönderir.

Modül:Microsoft.ApplicationInsights.EventSourceListener.EventSourceTelemetryModule
NuGet:Microsoft.ApplicationInsights.EventSourceListener
ETW toplayıcısı Yapılandırılmış ETW sağlayıcısı olaylarını izleme olarak Application Insights'a gönderir.

Modül:Microsoft.ApplicationInsights.EtwCollector.EtwCollectorTelemetryModule
NuGet:Microsoft.ApplicationInsights.EtwCollector
Çekirdek API (modül değil) Diğer telemetri bileşenleri tarafından ve özel telemetri için kullanılan temel API.

Modül:Microsoft.ApplicationInsights package
NuGet:Microsoft.ApplicationInsights
Not: Yalnızca bu paketi yüklerseniz ,ApplicationInsights.config dosyası otomatik olarak oluşturulmaz.
ASP.NET Core
Area Description
İstek izleme ASP.NET Core Application Insights entegrasyonu ile yerleşik istek izleme.

Module:Ayrı modül sınıfı yok.
NuGet:Microsoft.ApplicationInsights.AspNetCore
Bağımlılık izleme Bağımlılık Toplayıcı aracılığıyla.

NuGet:Microsoft.ApplicationInsights.DependencyCollector
Performans sayaçları Yalnızca Windows! Platformlar arası olarak kullanın EventCounterCollectionModule (sonraki satıra bakın).

NuGet:Microsoft.ApplicationInsights.PerfCounterCollector
Olay sayaçları .NET Olay Sayaçları toplar. Windows performans sayaçları yerine ASP.NET Core ve platformlar arası için önerilir.

Modül:EventCounterCollectionModule (SDK 2.8.0 ve üzeri)
NuGet:Microsoft.ApplicationInsights.EventCounterCollector
Canlı Ölçümler (QuickPulse) ASP.NET Core Application Insights tümleştirmesinde Canlı Ölçümler etkinleştirildi.

Module:Ayrı modül sınıfı yok.
NuGet:Microsoft.ApplicationInsights.AspNetCore
Durum Kontrol Sinyalleri Toplayıcısı (App Service) App Service ortamı hakkında özel metrikler olarak kalp atışları (heartbeat'ler) gönderir. App Service'te barındırıldığında temel SDK aracılığıyla yerleşik.

Module:Ayrı modül sınıfı yok.
NuGet:Microsoft.ApplicationInsights.AspNetCore
Nabız sinyali toplayıcı (VM'ler ve sanal makine ölçek kümeleri) Azure VM ortamı hakkındaki ayrıntıları içeren heartbeat sinyallerini (özel ölçümler olarak) gönderir. Azure VM'lerde ve Azure sanal makine ölçek kümelerinde barındırıldığında temel SDK aracılığıyla yerleşik.

Module:Ayrı modül sınıfı yok.
NuGet:Microsoft.ApplicationInsights.AspNetCore
Tanılama telemetrisi Application Insights izleme kodundaki hataları bildirir (örneğin, performans sayaçlarına erişemez, ITelemetryInitializer bir özel durum oluşturur). Tanılama Araması'nda iz telemetrisi görüntülenir.

Modül:Microsoft.ApplicationInsights.Extensibility.Implementation.Tracing.DiagnosticsTelemetryModule
NuGet:Microsoft.ApplicationInsights
Geliştirici modu (hata ayıklayıcısı eklendi) Aynı davranış kullanılabilir; sınıfı, Windows Server paketinin bir parçasıdır.

Modül:Microsoft.ApplicationInsights.WindowsServer.DeveloperModeWithDebuggerAttachedTelemetryModule
NuGet:Microsoft.ApplicationInsights.WindowsServer
Özel durum izleme (Web) ASP.NET Core Application Insights tümleştirmesinde otomatik özel durum izleme

Module:Ayrı modül sınıfı yok.
NuGet:Microsoft.ApplicationInsights.AspNetCore
Özel durum izleme (Gözlemlenmeyen/İşlenmeyen) ASP.NET Core çalışma zamanı/tümleştirme aracılığıyla benzer davranış; sınıf adları Windows Server özgü.

NuGet:Microsoft.ApplicationInsights.WindowsServer
EventSource izleme Yapılandırılmış EventSource olaylarını Application Insights'a izleme olarak gönderir.

Modül:Microsoft.ApplicationInsights.EventSourceListener.EventSourceTelemetryModule
NuGet:Microsoft.ApplicationInsights.EventSourceListener
ETW toplayıcısı Yalnızca Windows (ETW). Yapılandırılmış ETW sağlayıcısı olaylarını izleme olarak Application Insights'a gönderir.

Modül:Microsoft.ApplicationInsights.EtwCollector.EtwCollectorTelemetryModule
NuGet:Microsoft.ApplicationInsights.EtwCollector
Çekirdek API (modül değil) Diğer telemetri bileşenleri tarafından ve özel telemetri için kullanılan temel API.

Modül:Microsoft.ApplicationInsights package
NuGet:Microsoft.ApplicationInsights

Telemetri modüllerini yapılandırma

ASP.NET

TelemetryModules modülleri yapılandırmak, eklemek veya kaldırmak için ApplicationInsights.config bölümünü kullanın. Aşağıdaki örnekler:

  • DependencyTrackingTelemetryModule yapılandırın (W3C üst bilgi eklemeyi etkinleştirerek).
  • Yapılandır EventCounterCollectionModule (varsayılanları temizleyin ve tek bir sayaç ekleyin).
  • PerformanceCollectorModule öğesini kaldırarak perf-counter koleksiyonunu devre dışı bırakın.
<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>

Uyarı

Cihazınızda ApplicationInsights.config bulunan tam modül kümesi, yüklediğiniz SDK paketlerine bağlıdır.

ASP.NET Core

Seçenek 1: ConfigureTelemetryModule kullanarak telemetri modüllerini yapılandırma

Herhangi bir varsayılan TelemetryModuleyapılandırmak için, aşağıdaki örnekte gösterildiği gibi üzerinde ConfigureTelemetryModule<T>uzantı yöntemini IServiceCollection kullanın:

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();

Seçenek 2: ApplicationInsightsServiceOptions kullanarak telemetri modüllerini yapılandırma

SDK 2.12.2 ve sonraki sürümlerinde, aşağıdaki örnekte olduğu gibi ApplicationInsightsServiceOptionsAddApplicationInsightsTelemetry'ye geçirerek birkaç yaygın ayarı değiştirebilirsiniz.

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();

Bu tabloda ayarların tam listesi vardır ApplicationInsightsServiceOptions :

Setting Description Varsayılan
Performans Sayacı Toplama Modülünü Etkinleştir etkinleştirin/devre dışı bırakın PerformanceCounterCollectionModule. Doğru
İstekTakibiTelemetriModülünüEtkinleştir etkinleştirin/devre dışı bırakın RequestTrackingTelemetryModule. Doğru
Olay Sayaç Toplama Modülünü Etkinleştir etkinleştirin/devre dışı bırakın EventCounterCollectionModule. Doğru
Bağımlılık İzleme Telemetri Modülünü Etkinleştir etkinleştirin/devre dışı bırakın DependencyTrackingTelemetryModule. Doğru
UygulamaServisleriKalpAtışıTelemetriModülünüEtkinleştir etkinleştirin/devre dışı bırakın AppServicesHeartbeatTelemetryModule. Doğru
AzureÖrneğiniMetaVeriTelemetriModülü'nüEtkinleştir etkinleştirin/devre dışı bırakın AzureInstanceMetadataTelemetryModule. Doğru
HızlıNabızMetrikAkışınıEtkinleştir LiveMetrics özelliğini etkinleştirin/devre dışı bırakın. Doğru
Uyarlanabilir Örneklemeyi Etkinleştir Uyarlamalı Örneklemeyi Etkinleştir/Devre Dışı Bırak. Doğru
EtkinleştirKalpAtışı Kalp atışları özelliğini etkinleştirin/devre dışı bırakın. Düzenli aralıklarla (varsayılan olarak 15 dk) HeartbeatState adlı özel bir ölçüm gönderir ve varsa .NET sürümü ve Azure ortam bilgileri gibi çalışma zamanı hakkında bilgiler içerir. Doğru
Otomatik Toplanan Metrik Çıkarıcı Ekle öğesini AutoCollectedMetrics extractoretkinleştirin/devre dışı bırakın. Bu telemetri işlemcisi, örnekleme gerçekleşmeden önce istekler/bağımlılıklar hakkında önceden toplanmış ölçümler gönderir. Doğru
RequestCollectionSeçenekleri.İstisnalarıİzle İstek toplama modülü tarafından işlenmeyen özel durum izleme raporlamasını etkinleştirin/devre dışı bırakın. netstandard2.0'da yanlış (çünkü özel durumlar ApplicationInsightsLoggerProvider ile takip ediliyor). Aksi takdirde doğru.
Tanılama Telemetri Modülünü Etkinleştir etkinleştirin/devre dışı bırakın DiagnosticsTelemetryModule. Devre dışı bırakmak, aşağıdaki ayarların yoksayılmasına neden olur: EnableHeartbeat, EnableAzureInstanceMetadataTelemetryModuleve EnableAppServicesHeartbeatTelemetryModule. Doğru

En güncel liste için içindeki yapılandırılabilir ayarlara ApplicationInsightsServiceOptionsbakın.

Microsoft.ApplicationInsights.AspNetCore SDK 2.15.0 ve üzeri için yapılandırma önerisi

Microsoft.ApplicationInsights.AspNetCore SDK'sı sürüm 2.15.0 ve sonraki sürümlerinde, ApplicationInsightsServiceOptions ve ConnectionString dahil olmak üzere tüm ayarları yapılandırın. Uygulamanın IConfiguration örneğini kullanın. Ayarlar, aşağıdaki örnekte gösterildiği gibi bölümünün ApplicationInsightsaltında olmalıdır. appsettings.json'nin aşağıdaki bölümünde connection string yapılandırılır ve uyarlamalı örnekleme ve performans sayacı koleksiyonu devre dışı bırakılır.

{
    "ApplicationInsights": {
    "ConnectionString": "<YOUR-CONNECTION-STRING>",
    "EnableAdaptiveSampling": false,
    "EnablePerformanceCounterCollectionModule": false
    }
}

ASP.NET Core 3.1 ve öncesi için ASP.NET Core 6.0 veya builder.Services.AddApplicationInsightsTelemetry(aiOptions) için services.AddApplicationInsightsTelemetry(aiOptions) kullanılırsa, Microsoft.Extensions.Configuration.IConfiguration ayarlarını geçersiz kılar.

İşçi Servisi

Seçenek 1: ConfigureTelemetryModule kullanarak telemetri modüllerini yapılandırma

Application Insights, belirli iş yükleriyle ilgili telemetri verilerini el ile izlemeye gerek kalmadan otomatik olarak toplamak için telemetri modüllerini kullanır.

Aşağıdaki otomatik toplama modülleri varsayılan olarak etkindir. Bu modüller telemetri verilerini otomatik olarak toplamakla sorumludur. Varsayılan davranışlarını değiştirmek için bunları devre dışı bırakabilir veya yapılandırabilirsiniz.

  • DependencyTrackingTelemetryModule
  • PerformanceCollectorModule
  • QuickPulseTelemetryModule
  • AppServicesHeartbeatTelemetryModule (Şu anda bu telemetri modülüyle ilgili bir sorun var. Geçici bir geçici çözüm için bkz. GitHub Sorun 1689.)
  • AzureInstanceMetadataTelemetryModule

Herhangi bir varsayılan telemetri modülünü yapılandırmak için, aşağıdaki örnekte gösterildiği gibi üzerinde ConfigureTelemetryModuleuzantı yöntemini IServiceCollection kullanın:

    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);
            }
    }

Seçenek 2: ApplicationInsightsServiceOptions kullanarak telemetri modüllerini yapılandırma

Aşağıdaki örnekte olduğu gibi, ApplicationInsightsServiceOptions öğesini AddApplicationInsightsTelemetryWorkerService öğesine geçirerek birkaç yaygın ayarı değiştirebilirsiniz.

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);
}

Bu SDK'daki ApplicationInsightsServiceOptions, ASP.NET Core SDK'daki Microsoft.ApplicationInsights.WorkerService aksine Microsoft.ApplicationInsights.AspNetCore.Extensions ad alanındadır.

Aşağıdaki tabloda, içinde ApplicationInsightsServiceOptionsyaygın olarak kullanılan ayarlar listelenir.

Setting Description Varsayılan
HızlıNabızMetrikAkışınıEtkinleştir Canlı ölçümler özelliğini etkinleştirin/devre dışı bırakın. Doğru
Uyarlanabilir Örneklemeyi Etkinleştir Uyarlamalı Örneklemeyi Etkinleştir/Devre Dışı Bırak. Doğru
EtkinleştirKalpAtışı Varsa, .NET sürümü ve Azure ortamı gibi çalışma zamanı hakkında bilgi içeren "HeartBeatState" adlı özel bir ölçümü düzenli aralıklarla gönderen Sinyaller özelliğini etkinleştirin/devre dışı bırakın. Doğru
Otomatik Toplanan Metrik Çıkarıcı Ekle Örnekleme gerçekleşmeden önce İstekler/Bağımlılıklar hakkında önceden toplanmış ölçümler gönderen bir telemetri işlemcisi olan AutoCollectedMetrics ayıklayıcısını etkinleştirin/devre dışı bırakın. Doğru
Tanılama Telemetri Modülünü Etkinleştir etkinleştirin/devre dışı bırakın DiagnosticsTelemetryModule. Bu ayarın devre dışı bırakılması, aşağıdaki ayarların yoksayılmasına neden olur: EnableHeartbeat, EnableAzureInstanceMetadataTelemetryModuleve EnableAppServicesHeartbeatTelemetryModule. Doğru

Güncel liste için ApplicationInsightsServiceOptions içindeki yapılandırılabilir ayarlara göz atın.

Telemetriyi devre dışı bırakma

ASP.NET

Yapılandırma dosyasında her modül için bir düğüm bulunur. Modülü devre dışı bırakmak için düğümü silin veya açıklama satırı yapın.

ASP.NET Core

Telemetriyi koşullu ve dinamik olarak devre dışı bırakmak istiyorsanız, TelemetryConfiguration örneğini kodunuzun herhangi bir yerinde ASP.NET Core bağımlılık ekleme kapsayıcısıyla çözümleyebilir ve üzerinde DisableTelemetry bayrağını ayarlayabilirsiniz.

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();

Yukarıdaki kod örneği, Application Insights'a telemetri gönderilmesini engeller. Hiçbir otomatik toplama modülünün telemetri toplamasını engellemez. Belirli bir otomatik toplama modülünü kaldırmak istiyorsanız bkz. telemetri modülleri.

İşçi Servisi

Telemetriyi koşullu ve dinamik olarak devre dışı bırakmak istiyorsanız, TelemetryConfiguration örneğini kodunuzun herhangi bir yerinde ASP.NET Core bağımlılık ekleme kapsayıcısıyla çözümleyebilir ve üzerinde DisableTelemetry bayrağını ayarlayabilirsiniz.

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetryWorkerService();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, TelemetryConfiguration configuration)
    {
        configuration.DisableTelemetry = true;
        ...
    }

Bağlantı dizesi

Bu ayar, verilerinizin görüntülendiği Application Insights kaynağını belirler. Genellikle, uygulamalarınızın her biri için ayrı bir connection string ile ayrı bir kaynak oluşturursunuz.

Kod örnekleri için bkz. Application Insights'ta bağlantı dizeleri .

örneğin, connection string dinamik olarak ayarlamak istiyorsanız, uygulamanızdan farklı kaynaklara sonuç göndermek için yapılandırma dosyasından connection string atlayabilir ve bunun yerine kodda ayarlayabilirsiniz.

ASP.NET

Standart telemetri modülleri de dahil olmak üzere tüm TelemetryClient örnekleri için connection string ayarlamak için bu adımı ASP.NET hizmetindeki global.aspx.cs gibi bir başlatma yönteminde gerçekleştirin:

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);

Belirli bir olay kümesini farklı bir kaynağa göndermek istiyorsanız, belirli bir telemetri istemcisinin anahtarını ayarlayabilirsiniz:


    var tc = new TelemetryClient();
    tc.Context.ConnectionString = "<YOUR-CONNECTION-STRING>";
    tc.TrackEvent("myEvent");
    // ...

Yeni bir connection string almak için Application Insights portalında yeni bir kaynak oluşturun.

ASP.NET Core

ASP.NET Core'da, bağımlılık ekleme (DI) kapsayıcısından Program.cs kullanarak uygulama başlatma sırasında TelemetryConfiguration connection string yapılandırın:

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();

Belirli bir olay kümesini farklı bir kaynağa göndermek istiyorsanız, yeni bir TelemetryClient örneği oluşturabilir ve connection string açıkça ayarlayabilirsiniz:

using Microsoft.ApplicationInsights;

var tc = new TelemetryClient();
tc.Context.ConnectionString = "<YOUR-CONNECTION-STRING>";
tc.TrackEvent("myEvent");
// ...

ApplicationId Sağlayıcısı

Uyarı

ASP.NET için bu sağlayıcı SDK v2.6.0* ile başlayarak kullanılabilir.

Bu sağlayıcının amacı, connection string temelinde bir uygulama kimliği aramaktır. Uygulama kimliği RequestTelemetry ve DependencyTelemetry içinde yer alır ve portaldaki ilişkiyi belirlemek için kullanılır.

Bu işlev ayarıyla TelemetryConfiguration.ApplicationIdProviderkullanılabilir.

Arabirim: IApplicationIdProvider

public interface IApplicationIdProvider
{
    bool TryGetApplicationId(string connectionString, out string applicationId);
}

Microsoft.ApplicationInsights SDK'sında iki uygulama sağlıyoruz: ApplicationInsightsApplicationIdProvider ve DictionaryApplicationIdProvider.

ApplicationInsightsApplicationIdProvider

Bu sarmalayıcı Profil API'mize yöneliktir. İstekleri ve önbellek sonuçlarını kısıtlar. Microsoft.ApplicationInsights.DependencyCollector veya Microsoft.ApplicationInsights.Web yüklediğinizde bu sağlayıcı otomatik olarak eklenir.

sınıfı adlı ProfileQueryEndpointisteğe bağlı bir özelliği kullanıma sunar. Varsayılan olarak https://dc.services.visualstudio.com/api/profiles/{0}/appId olarak ayarlanır.

Bir proxy yapılandırmanız gerekiyorsa, temel adres için bir proxy ayarlamanızı ve yolun /api/profiles/{0}/appId içerdiğinden emin olmanızı öneririz. Çalışma zamanında, {0} her istek için bağlantı dizesi ile değiştirilir.

ASP.NET

ApplicationInsights.configaracılığıyla örnek yapılandırma

<ApplicationInsights>
    ...
    <ApplicationIdProvider Type="Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId.ApplicationInsightsApplicationIdProvider, Microsoft.ApplicationInsights">
        <ProfileQueryEndpoint>https://dc.services.visualstudio.com/api/profiles/{0}/appId</ProfileQueryEndpoint>
    </ApplicationIdProvider>
    ...
</ApplicationInsights>

Kod aracılığıyla örnek yapılandırma

TelemetryConfiguration.Active.ApplicationIdProvider = new ApplicationInsightsApplicationIdProvider();
ASP.NET Core

Uyarı

ASP.NET Core'da ApplicationInsights.config dosyası yoktur. Yapılandırma, Program.cs veyaStartup.cs bağımlılık ekleme (DI) yoluyla gerçekleştirilir.

Varsayılan sağlayıcıyı geçersiz kılabilir veya ProfileQueryEndpoint öğesini özelleştirebilirsiniz.

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();

SözlükUygulamaKimlikSağlayıcı

Bu statik sağlayıcı, yapılandırılmış bağlantı dizesi/uygulama kimliği çiftlerinizi temel alır.

Bu sınıf, bir bağlantı dizesi/uygulama kimliği çiftleri Dictionary<string,string> olan Defined özelliğine sahiptir.

Bu sınıfın isteğe bağlı Next özelliği vardır. Bu özellik, yapılandırmanızda olmayan bir connection string istendiğinde kullanmak üzere başka bir sağlayıcı yapılandırmak için kullanılabilir.

ASP.NET

ApplicationInsights.configaracılığıyla örnek yapılandırma

<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>

Kod aracılığıyla örnek yapılandırma

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();

İstemci tarafına izleme ekle

Önceki bölümlerde, sunucu tarafı izlemeyi otomatik ve el ile yapılandırma yöntemleriyle ilgili yönergeler sağlanmıştır. İstemci tarafı izleme eklemek için istemci tarafı JavaScript SDK'sını kullanın. Sayfanın HTML'sinin kapanış etiketinden önce bir JavaScript (Web) SDK Yükleyici Betiği</head>web sayfasının istemci tarafı işlemlerini izleyebilirsiniz.

JavaScript (Web) SDK Yükleyici Betiğini her HTML sayfasının üst bilgisine el ile eklemek mümkün olsa da, bunun yerine JavaScript (Web) SDK Yükleyici Betiğini birincil sayfaya eklemenizi öneririz. Bu eylem JavaScript (Web) SDK Yükleyici Betiğini bir sitenin tüm sayfalarına ekler.

ASP.NET

Bu makaledeki şablon tabanlı ASP.NET MVC uygulaması için düzenlemeniz gereken dosya _Layout.cshtml şeklindedir. Paylaşılan>bulabilirsiniz. İstemci tarafı izleme eklemek için _Layout.cshtml dosyasını açın ve istemci tarafı JavaScript SDK yapılandırması hakkındaki makaledeki JavaScript (Web) SDK Yükleyicisi Betik tabanlı kurulum yönergelerini izleyin.

ASP.NET Core

Uygulamanızın istemci tarafı bileşenleri varsa, JavaScript (Web) SDK Yükleyici Betiği ekleme işlemine yapılandırma aracılığıyla kullanım telemetrisi toplamaya başlamak için sonraki adımları izleyin.

  1. _ViewImports.cshtml dosyasında enjeksiyon ekleyin.

    @inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippet
    
  2. _Layout.cshtml dosyasında, HtmlHelper bölümünün sonuna, diğer betiklerden önce <head> ekleyin. Sayfadan herhangi bir özel JavaScript telemetrisi bildirmek istiyorsanız, bu kod parçacığından sonra ekleyin:

        @Html.Raw(JavaScriptSnippet.FullScript)
    </head>
    

FullScript kullanmaya alternatif olarak ScriptBody, ASP.NET Core sürüm 2.14 için Application Insights SDK'dan başlayarak kullanılabilir. ScriptBody etiketi denetlemeniz gerekiyorsa, bir İçerik Güvenliği İlkesi ayarlamak için <script> kullanın.

<script> // apply custom changes to this script tag.
    @Html.Raw(JavaScriptSnippet.ScriptBody)
</script>

Daha önce başvurulan .cshtml dosya adları varsayılan bir MVC uygulama şablonundan alınıyor. Sonuç olarak, uygulamanız için istemci tarafı izlemeyi düzgün bir şekilde etkinleştirmek istiyorsanız JavaScript (Web) SDK Yükleyici Betiği, uygulamanızın izlemek istediğiniz her sayfasının bölümünde görünmelidir <head> . İstemci tarafı izlemeyi etkinleştirmek için uygulama şablonunda _Layout.cshtml dosyasına JavaScript (Web) SDK Yükleyici Betiğini ekleyin.

Projeniz _Layout.cshtml içermiyorsa, JavaScript (Web) SDK Yükleyici Betiğini, uygulamanızdaki tüm sayfaların kontrolünü gerçekleştiren eşdeğer bir dosyaya ekleyerek <head> ekleyebilirsiniz. Alternatif olarak, JavaScript (Web) SDK Yükleyici Betiğini birden çok sayfaya ekleyebilirsiniz, ancak bunu önermeyiz.

Uyarı

JavaScript ekleme, varsayılan bir yapılandırma deneyimi sağlar. Bağlantı dizesini ayarlamanın ötesinde bir yapılandırma gerekiyorsa, belirtildiği gibi otomatik enjeksiyonu kaldırmanız ve JavaScript SDK'yı manuel olarak eklemeniz gerekir.

Özel olaylar ve ölçümler için temel API

Kullanıcıların uygulamayla ne yaptığını öğrenmek veya sorunları tanılamaya yardımcı olmak için uygulamanıza birkaç kod satırı ekleyin. Cihaz ve masaüstü uygulamalarından, web istemcilerinden ve web sunucularından telemetri gönderebilirsiniz. Özel olayları ve ölçümleri ve kendi standart telemetri sürümlerinizi göndermek için Application Insights çekirdek telemetri API'sini kullanın. Bu API, standart Application Insights veri toplayıcılarının kullandığı API ile aynıdır.

API özeti

Çekirdek API, GetMetric (yalnızca .NET) gibi birkaç varyasyon dışında tüm platformlarda tekdüzendir.

Yöntem Için kullanılır
TrackPageView Sayfalar, ekranlar, bölmeler veya formlar.
TrackEvent Kullanıcı eylemleri ve diğer olaylar. Kullanıcı davranışını izlemek veya performansı izlemek için kullanılır.
GetMetric Sıfır ve çok boyutlu ölçütler, merkezi yapılandırmalı toplama, sadece C#.
TrackMetric Belirli olaylarla ilgili olmayan kuyruk uzunlukları gibi performans ölçümleri.
TrackException Tanılama için özel durumları günlüğe kaydetme. Diğer olaylarla ilgili olarak nerede oluştuklarını izleme ve yığın izlemelerini inceleme.
TrackRequest Performans analizi için sunucu isteklerinin sıklığını ve süresini kaydetmek.
TrackTrace Kaynak Tanı günlüğü iletileri. Ayrıca üçüncü taraf günlüklerini de yakalayabilirsiniz.
TrackDependency Uygulamanızın bağımlı olduğu dış bileşenlere yapılan çağrıların süresini ve sıklığını günlüğe kaydetme.

Bu telemetri çağrılarının çoğuna özellikler ve ölçümler ekleyebilirsiniz .

Ön koşullar

Eğer henüz Application Insights SDK hakkında bir referansınız yoksa:

  1. Application Insights SDK'sını projenize ekleyin.

  2. Cihaz veya web sunucusu kodunuzda şunları ekleyin:

    using Microsoft.ApplicationInsights;
    

TelemetryClient örneği alma

TelemetryClient örneğini alın.

Uyarı

Azure Functions v2+ veya Azure WebJobs v3+ kullanıyorsanız bkz. Monitor Azure Functions.

Uyarı

ASP.NET Core ve .NET/.NET Core uygulamaları için HTTP dışı/Çalışan uygulamalarında, ilgili belgelerde açıklandığı gibi bağımlılık enjeksiyon kapsayıcısından TelemetryClient örneğini alın.

private TelemetryClient telemetry = new TelemetryClient();

Bu yöntemin kullanımdan kaldırıldığını belirten bir ileti görürseniz daha fazla bilgi için bkz. microsoft/ApplicationInsights-dotnet#1152 .

Gelen HTTP istekleri otomatik olarak yakalanır. Uygulamanızın diğer modülleri için daha fazla örneği TelemetryClient oluşturmak isteyebilirsiniz. Örneğin, ara yazılım sınıfınızda iş mantığı olaylarını raporlamak için bir TelemetryClient örneğiniz olabilir. Makineyi tanımlamak için UserId ve DeviceId gibi özellikleri ayarlayabilirsiniz. Bu bilgiler, örneğin gönderdiği tüm olaylara eklenir.

TelemetryClient.Context.User.Id = "...";
TelemetryClient.Context.Device.Id = "...";

Uyarı

TelemetryClient iş parçacığı açısından güvenlidir.

TrackEvent

Application Insights'ta özel olay , Ölçüm Gezgini'nde toplanmış sayı olarak ve Arama'da tek tek oluşum olarak görüntüleyebileceğiniz bir veri noktasıdır. (MVC veya diğer "olaylar" çerçevesiyle ilgili değildir.)

Çeşitli olayları saymak için kodunuza çağrılar ekleyin TrackEvent . Örneğin, kullanıcıların belirli bir özelliği ne sıklıkta seçtiğini izlemek isteyebilirsiniz. Ya da belirli hedeflere ne sıklıkta ulaştıklarını veya belirli hata türlerini yaptıklarını bilmek isteyebilirsiniz.

Örneğin, bir oyun uygulamasında, bir kullanıcı oyunu her kazandığında bir etkinlik gönderin:

telemetry.TrackEvent("WinGame");

Log Analytics için özel olaylar

Telemetriyi customEvents tabloda veya kullanım deneyiminde bulabilirsiniz. Olaylar trackEvent(..) veya Tıklama Analizi Otomatik Toplama eklentisinden gelebilir.

Örnekleme işlemi devam ederse özelliği değerinden itemCount1büyük bir değer gösterir. Örneğin, itemCount==10 örnekleme işleminin 10 çağrısından trackEvent()yalnızca birini iletmiş olduğu anlamına gelir. Özel olayların doğru sayısını almak için gibi customEvents | summarize sum(itemCount)bir kod kullanın.

Uyarı

itemCount değerinin en az bir değeri vardır; kaydın kendisi bir girdiyi temsil eder.

GetMetric

.NET ve .NET Core uygulamaları için yerel olarak önceden toplanmış ölçümleri yakalamak üzere GetMetric() çağrısını etkili bir şekilde kullanmayı öğrenmek için bkz. .NET ve .NET Core'de özel ölçüm koleksiyonu.

TrackMetric

Uyarı

Microsoft.ApplicationInsights.TelemetryClient.TrackMetric ölçümleri göndermek için tercih edilen yöntem değildir. Ölçümler gönderilmeden önce her zaman bir zaman aralığında önceden toplanmalıdır. SDK önceden toplama özelliklerine erişmek için GetMetric(..) aşırı yüklemelerden birini kullanarak bir ölçüm nesnesi edinin.

Kendi ön toplama mantığınızı uyguluyorsanız, elde edilen toplamları göndermek için yöntemini kullanabilirsiniz TrackMetric() . Uygulamanız zaman içinde toplama olmadan her durumda ayrı bir telemetri öğesi göndermeyi gerektiriyorsa, büyük olasılıkla olay telemetrisi için bir kullanım örneğine sahipsinizdir. Bkz. TelemetryClient.TrackEvent(Microsoft.ApplicationInsights.DataContracts.EventTelemetry).

Application Insights, belirli olaylara eklenmemiş ölçümlerin grafiğini oluşturabilir. Örneğin, bir kuyruk uzunluğunu düzenli aralıklarla izleyebilirsiniz. Ölçümlerle, tek tek ölçümler varyasyonlardan ve eğilimlerden daha az ilgi çekicidir ve bu nedenle istatistiksel grafikler kullanışlıdır.

Application Insights'a ölçüm göndermek için API'yi TrackMetric(..) kullanabilirsiniz. Ölçüm göndermenin iki yolu vardır:

  • Tek değer. Uygulamanızda her ölçüm gerçekleştirdiğinizde ilgili değeri Application Insights'a gönderirsiniz.

    Örneğin, kapsayıcıdaki öğe sayısını açıklayan bir ölçüme sahip olduğunuzu varsayalım. Belirli bir süre boyunca, kapsayıcıya önce üç öğe koyarsınız ve sonra iki öğeyi kaldırırsınız. Buna göre, iki kez ararsın TrackMetric . Önce 3 değerini geçirin ve sonra -2 değerini geçirin. Application Insights her iki değeri de sizin için depolar.

  • Toplama. Ölçümlerle çalışırken, her ölçüm nadiren ilgi çekicidir. Bunun yerine, belirli bir zaman aralığında gerçekleşenlerin özeti önemlidir. Böyle bir özet toplama olarak adlandırılır.

    Yukarıdaki örnekte, bu dönemin birikimli metrik toplamı 1 ve metrik değerlerinin sayısı 2 şeklindedir. Toplama yaklaşımını kullandığınızda, zaman aralığı başına yalnızca bir kez çağırır TrackMetric ve toplama değerlerini gönderirsiniz. Tüm ilgili bilgileri toplamaya devam ederken Application Insights'a daha az veri noktası göndererek maliyet ve performans ek yükünü önemli ölçüde azaltabileceğinden bu yaklaşımı öneririz.

Tek değer örnekleri

Tek bir ölçüm değeri göndermek için:

var sample = new MetricTelemetry();
sample.Name = "queueLength";
sample.Sum = 42.3;
telemetryClient.TrackMetric(sample);

Log Analytics'da özel ölçümler

Telemetriyi customMetrics tabloda bulabilirsiniz. Uygulamanızdaki trackMetric(..) çağrısını temsil eden her satır.

  • valueSum: Ölçümlerin toplamı. Ortalama değeri almak için valueCount değerine bölün.
  • valueCount: Bu trackMetric(..) çağrıda toplanan ölçülerin sayısı.

Uyarı

valueCount değerinin en az bir değeri vardır; kaydın kendisi bir girdiyi temsil eder.

Sayfa görünümleri

Bir cihaz veya web sayfası uygulamasında, her ekran veya sayfa yüklendiğinde sayfa görünümü telemetrisi varsayılan olarak gönderilir. Ancak, sayfa görünümlerini daha fazla veya farklı zamanlarda izlemek için varsayılanı değiştirebilirsiniz. Örneğin, sekmeleri veya bölmeleri görüntüleyen bir uygulamada, kullanıcı yeni bir bölme açtığında sayfayı izlemek isteyebilirsiniz.

Kullanıcı ve oturum verileri, sayfa görünümleri ile birlikte özellik olarak gönderilir, böylece sayfa görünümü telemetrisi olduğunda kullanıcı ve oturum grafikleri canlanır.

Özel sayfa görünümleri

telemetry.TrackPageView("GameReviewPage");

Log Analytics'da sayfa telemetrisi

Log Analytics'da iki tablo tarayıcı işlemlerinden verileri gösterir:

  • pageViews: URL ve sayfa başlığı hakkındaki verileri içerir.
  • browserTimings: Gelen verileri işlemek için geçen süre gibi istemci performansıyla ilgili verileri içerir.

Tarayıcının farklı sayfaları işlemesinin ne kadar sürdüğünü bulmak için:

browserTimings
| summarize avg(networkDuration), avg(processingDuration), avg(totalDuration) by name

Farklı tarayıcıların popülerliğini keşfetmek için:

pageViews
| summarize count() by client_Browser

Sayfa görünümlerini AJAX çağrılarıyla ilişkilendirmek için bağımlılıklarla birleştirin:

pageViews
| join (dependencies) on operation_Id

TrackRequest

Sunucu SDK'sı TrackRequest kullanarak HTTP isteklerini günlüğe kaydeder.

Web hizmeti modülünün çalışmadığı bir bağlamda isteklerin benzetimini yapmak istiyorsanız kendiniz de çağırabilirsiniz.

İstek telemetrisi göndermenin önerilen yolu, isteğin bir işlem bağlamı görevi gördüğü yerdir.

İşlem bağlamı

Telemetri öğelerini işlem bağlamıyla ilişkilendirerek birbiriyle ilişkilendirebilirsiniz. Standart istek izleme modülü, bir HTTP isteği işlenirken gönderilen özel durumlar ve diğer olaylar için bunu yapar. Arama ve Analiz bölümünde, işlem kimliğini kullanarak istekle ilişkili tüm olayları kolayca bulabilirsiniz.

Telemetriyi el ile izlediğinizde, telemetri bağıntısını sağlamanın en kolay yolu şu deseni kullanmaktır:

// 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.

Bağıntı hakkında daha fazla bilgi için bkz. Application Insights'ta telemetri bağıntısı.

İşlem bağlamı ayarlamanın yanı sıra, StartOperation belirttiğiniz türde bir telemetri öğesi oluşturur. İşlemi attığınızda veya StopOperation öğesini açıkça çağırdığınızda, telemetri öğesini gönderir. Telemetri türü olarak RequestTelemetry kullanırsanız, süresi başlangıç ve durdurma arasındaki zamanlanmış aralık olarak ayarlanır.

bir işlem kapsamında bildirilen telemetri öğeleri, böyle bir işlemin alt öğeleri haline gelir. İşlem bağlamları iç içe yerleştirilmiş olabilir.

Arama'da, işlem bağlamı İlgili Öğeler listesini oluşturmak için kullanılır.

İlgili Öğeler listesini gösteren ekran görüntüsü.

Özel işlemleri izleme hakkında daha fazla bilgi için bkz. Microsoft Insights .NET SDK ile özel işlemleri izleme.

Log Analytics istekleri

Application Insights Analytics'terequests istekler tabloda gösterilir.

Örnekleme işlemi devam ederse özelliği değerinden itemCount1büyük bir değer gösterir. Örneğin, itemCount==10 örnekleme işleminin 10 çağrısından trackRequest()yalnızca birini iletmiş olduğu anlamına gelir. İsteklerin doğru sayısını ve istek adlarına göre segmentlere ayrılmış ortalama süreyi almak için aşağıdaki gibi bir kod kullanın:

requests
| summarize count = sum(itemCount), avgduration = avg(duration) by name

TrackException

Application Insights'a özel durumlar gönderme:

Raporlar yığın izlemelerini içerir.

try
{
    ...
}
catch (Exception ex)
{
    telemetry.TrackException(ex);
}

SDK'lar birçok özel durumu otomatik olarak yakalar, bu nedenle her zaman açıkça çağırmanız TrackException gerekmez.

Log Analytics istisnaları

Application Insights Analytics'teexceptions, tabloda özel durumlar gösterilir.

Örnekleme işlemi devam ederse özelliği değerinden itemCount1büyük bir değer gösterir. Örneğin, itemCount==10 örnekleme işleminin 10 çağrısından trackException()yalnızca birini iletmiş olduğu anlamına gelir. Özel durum türüne göre segmentlere ayrılmış özel durumların doğru sayısını almak için aşağıdaki gibi bir kod kullanın:

exceptions
| summarize sum(itemCount) by type

Önemli yığın bilgilerinin çoğu zaten ayrı değişkenlere ayıklanmıştır, ancak daha fazlasını elde etmek için details yapısını bölerek detayları elde edebilirsiniz. Bu yapı dinamik olduğundan, sonucu beklediğiniz türe atamanız gerekir. Örneğin:

exceptions
| extend method2 = tostring(details[0].parsedStack[1].method)

Özel durumları ilgili istekleriyle ilişkilendirmek için birleştirme kullanın:

exceptions
| join (requests) on operation_Id

TrackTrace

Sorunları tanılamaya yardımcı olmak için TrackTrace kullanarak Application Insights'a bir "ekmek kırıntısı izi" gönderin. Tanılama verilerinin öbeklerini gönderebilir ve Bunları Arama'da inceleyebilirsiniz.

Üçüncü taraf günlüklerini portala göndermek için .NET Log bağdaştırıcılarındaki bu API'yi kullanın.

telemetry.TrackTrace(message, SeverityLevel.Warning, properties);

Yönteme girmek ya da çıkmak gibi bir tanılama olayını günlüğe kaydedin.

Parametre Description
message Tanılama verileri. Bir isimden çok daha uzun olabilir.
properties Dize ile dizenin eşle. Portaldaki özel durumları filtrelemek için daha fazla veri kullanılır. Varsayılan olarak boş ayarlanır.
severityLevel Desteklenen değerler: SeverityLevel.ts.

İleti içeriğinde arama yapabilirsiniz, ancak özellik değerlerinin aksine, bu içeriğe filtre ekleyemezsiniz.

üzerindeki message boyut sınırı, özelliklerdeki sınırdan çok daha yüksektir. Bunun bir avantajı TrackTrace , iletiye görece uzun veriler koyabilmenizdir. Örneğin, POST verilerini orada kodlayabilirsiniz.

İletinize bir önem düzeyi de ekleyebilirsiniz. Ayrıca, diğer telemetrilerde olduğu gibi, farklı izleme kümelerini filtrelemenize veya aramanıza yardımcı olmak için özellik değerleri ekleyebilirsiniz. Örneğin:

var telemetry = new Microsoft.ApplicationInsights.TelemetryClient();
telemetry.TrackTrace("Slow database response",
                SeverityLevel.Warning,
                new Dictionary<string,string> { {"database", db.ID} });

Arama'da, belirli bir veritabanıyla ilgili belirli bir önem düzeyine ait tüm iletileri kolayca filtreleyebilirsiniz.

Log Analytics'deki izlemeler

Application Insights Analytics'teki TrackTrace çağrıları traces tablosunda görünür.

Örnekleme işlemi devam ederse özelliği değerinden itemCount1büyük bir değer gösterir. Örneğin, itemCount==10 örnekleme işleminin 10 çağrısından trackTrace()yalnızca birini iletmiş olduğu anlamına gelir. İzleme çağrılarının doğru sayısını almak için gibi traces | summarize sum(itemCount)bir kod kullanın.

TrackDependency

Dış kod parçasına TrackDependency yapılan çağrıların yanıt sürelerini ve başarı oranlarını izlemek için çağrıyı kullanın. Sonuçlar portaldaki bağımlılık grafiklerinde görünür. Bağımlılık çağrısının yapıldığı her yere aşağıdaki kod parçacığı eklenmelidir.

Uyarı

.NET ve .NET Core için alternatif olarak, bağıntı için gereken TelemetryClient.StartOperation özelliklerini ve başlangıç zamanı ve süresi gibi diğer bazı özellikleri dolduran DependencyTelemetry (uzantı) yöntemini kullanabilirsiniz, bu nedenle aşağıdaki örneklerde olduğu gibi özel bir zamanlayıcı oluşturmanız gerekmez. Daha fazla bilgi için Track custom operations with Application Insights .NET SDK başlığındaki giden bağımlılık izleme bölümüne bakın.

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);
}

Sunucu SDK'larının, veritabanları ve REST API'leri gibi belirli bağımlılık çağrılarını otomatik olarak bulup izleyen bir bağımlılık modülü içerdiğini unutmayın. Modülün çalışması için sunucunuza bir aracı yüklemeniz gerekir.

Otomatik izlemenin yakalamadığı çağrıları izlemek istiyorsanız bu çağrıyı kullanırsınız.

tr-TR: C# dilinde standart bağımlılık takibi modülünü kapatmak için ApplicationInsights.config dosyasını düzenleyin ve DependencyCollector.DependencyTrackingTelemetryModule referansını silin.

Log Analytics bağımlılıkları

Application Insights Analytics'tetrackDependency çağrılar dependencies tabloda gösterilir.

Örnekleme işlemi devam ederse özelliği itemCount 1'den büyük bir değer gösterir. Örneğin, itemCount==10 örnekleme işleminin 10 çağrısından trackDependency()yalnızca birini iletmiş olduğu anlamına gelir. Hedef bileşene göre segmentlere ayrılmış doğru bağımlılık sayısını almak için aşağıdaki gibi bir kod kullanın:

dependencies
| summarize sum(itemCount) by target

Bağımlılıkları ilgili istekleriyle ilişkilendirmek için join işlemi kullanın:

dependencies
| join (requests) on operation_Id

Verileri temizleme

Normalde SDK, verileri sabit aralıklarla ( genellikle 30 saniye) veya arabellek dolu olduğunda (genellikle 500 öğedir) gönderir. Bazı durumlarda, arabelleği boşaltmak isteyebilirsiniz. Sdk'nın kapanan bir uygulamada kullanılması buna örnek olarak verilmiştir.

Flush() kullandığınızda, bu şablonu öneririz:

telemetry.Flush();
// Allow some time for flushing before shutdown.
System.Threading.Thread.Sleep(5000);

FlushAsync() kullandığınızda, şu deseni öneririz:

await telemetryClient.FlushAsync()
// No need to sleep

Telemetrinin kaybolmaması için uygulama kapatma işleminin bir parçası olarak her zaman temizlemenizi öneririz.

Uyarı

Autoflush konfigürasyonunu gözden geçirin: Autoflush'u etkinleştirmekweb.config dosyanızda, Application Insights ile izlenen .NET uygulamalarında performans düşüşüne neden olabilir. Otomatik sıkıştırma etkinleştirildiğinde, yöntemlerin her çağrılması, ayrı telemetri öğelerinin System.Diagnostics.Trace.Trace* alım hizmetine ayrı ayrı web istekleri olarak gönderilmesine neden olur. Bu, web sunucularınızda ağ ve depolamanın tükenmesine neden olabilir. Gelişmiş performans için, otomatik gönderimi devre dışı bırakmalı ve ayrıca daha etkili bir telemetri veri aktarımı için tasarlanmış ServerTelemetryChannel'i kullanmanız önerilir.

İşlev, sunucu telemetri kanalı için zaman uyumsuzdur.

Kimliği doğrulanmış kullanıcılar

Bir web uygulamasında kullanıcılar varsayılan olarak tanımlama bilgileriyle tanımlanır . Uygulamanıza farklı bir makineden veya tarayıcıdan erişen veya tanımlama bilgilerini silen bir kullanıcı birden çok kez sayılabilir.

Kullanıcılar uygulamanızda oturum açarsa, tarayıcı kodunda kimliği doğrulanmış kullanıcı kimliğini ayarlayarak daha doğru bir sayı elde edebilirsiniz. Kullanıcının gerçek oturum açma adını kullanmak gerekli değildir. Bu kullanıcıya özgü bir ID olmalıdır. Boşluk veya karakterlerden ,;=|herhangi birini içermemelidir.

Kullanıcı kimliği de oturum tanımlama bilgisinde ayarlanır ve sunucuya gönderilir. Sunucu SDK'sı yüklüyse, kimliği doğrulanmış kullanıcı kimliği hem istemci hem de sunucu telemetrisinin bağlam özelliklerinin bir parçası olarak gönderilir. Daha sonra filtreleyebilir ve üzerinde arama yapabilirsiniz.

Uygulamanız kullanıcıları hesaplar halinde gruplandırırsa, hesap için bir tanımlayıcı da geçirebilirsiniz. Aynı karakter kısıtlamaları uygulanır.

Ölçüm Gezgini'ndeKullanıcılar, Kimliği Doğrulanmış ve Kullanıcı hesaplarını sayan bir grafik oluşturabilirsiniz.

Ayrıca, belirli kullanıcı adları ve hesapları olan istemci veri noktalarını da arayabilirsiniz .

Uyarı

.NET Core SDK'sında ApplicationInsightsServiceOptions sınıfındaki EnableAuthenticationTrackingJavaScript özelliği Application Insights JavaScript SDK'sı tarafından gönderilen her izleme için kullanıcı adını Kimlik Doğrulama Kimliği olarak eklemek için gereken JavaScript yapılandırmasını basitleştirir.

Bu özellik true olarak ayarlandığında, ASP.NET Core kullanıcısından kullanıcı adı istemci tarafı telemetri ile birlikte yazdırılır. Bu nedenle appInsights.setAuthenticatedUserContext el ile eklenmesi artık gerekli değildir çünkü ASP.NET Core için SDK tarafından zaten eklenmiştir. Kimlik Doğrulama Kimliği, .NET Core'daki SDK'nın JavaScript API başvurusu'nda açıklandığı gibi sunucu tarafı telemetri verilerini tanımlayıp kullandığı sunucuya da gönderilir.

SPA web uygulamaları gibi ASP.NET Core MVC ile aynı şekilde çalışmayan JavaScript uygulamaları için appInsights.setAuthenticatedUserContext el ile eklemeniz gerekir.

Özellikleri kullanarak verilerinizi filtreleme, arama ve segmentlere ayırma

Olaylarınıza, ölçümlerinize, sayfa görünümlerinize, özel durumlarınıza ve diğer telemetri verilerinize özellikler ve ölçümler ekleyebilirsiniz.

Özellikler , kullanım raporlarında telemetrinizi filtrelemek için kullanabileceğiniz dize değerleridir. Örneğin, uygulamanız birkaç oyun sağlıyorsa, hangi oyunların daha popüler olduğunu görebilmek için oyunun adını her etkinliğe ekleyebilirsiniz.

Dize uzunluğunda 8.192 adet sınır vardır. Büyük veri öbekleri göndermek istiyorsanız, ileti parametresini TrackTracekullanın.

Ölçümler , grafik olarak sunulabilen sayısal değerlerdir. Örneğin, oyuncularınızın elde ettiği puanlarda kademeli bir artış olup olmadığını görmek isteyebilirsiniz. Grafikler, farklı oyunlar için ayrı veya yığılmış grafikler elde edebilmeniz için olayla birlikte gönderilen özelliklere göre segmentlere ayrılabilir.

Ölçüm değerlerinin doğru görüntülenmesi için 0'dan büyük veya buna eşit olması gerekir.

Kullanabileceğiniz özelliklerin, özellik değerlerinin ve ölçümlerin sayısıyla ilgili bazı sınırlar vardır.

// 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);

Önemli

Özelliklerde kişisel verileri günlüğe kaydetmediğinizden emin olun.

Özellikleri ve ölçümleri ayarlamanın alternatif yolu

Daha uygunsa, bir olayın parametrelerini ayrı bir nesnede toplayabilirsiniz:

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);

Uyarı

Aynı telemetri öğesi örneğini birden çok kez event çağırmak için yeniden kullanma (Track*() bu örnekte). Bu uygulama, telemetrinin yanlış yapılandırmayla gönderilmesine neden olabilir.

Log Analytics'de özel ölçümler ve özellikler

Log Analytics'da, özel ölçümler ve özellikler her telemetri kaydının customMeasurements ve customDimensions özniteliklerinde gösterilir.

Örneğin, istek telemetrinize "game" adlı bir özellik eklerseniz, bu sorgu farklı "oyun" değerlerinin oluşumlarını sayar ve "score" özel ölçümünün ortalamasını gösterir:

requests
| summarize sum(itemCount), avg(todouble(customMeasurements.score)) by tostring(customDimensions.game)

Aşağıdakilere dikkat edin:

  • customDimensions veya customMeasurements JSON'dan bir değer çıkardığınızda, dinamik tiptedir, bu yüzden onu tostring veya todouble dönüştürmelisiniz.
  • Örnekleme olasılığını dikkate almak için sum(itemCount) kullanın, count() değil.

Zamanlama olayları

Bazen eylem gerçekleştirmenin ne kadar sürdüğünü grafiğini çizersiniz. Örneğin, kullanıcıların bir oyundaki seçimleri ne kadar süreyle dikkate alacağını bilmek isteyebilirsiniz. Bu bilgileri almak için ölçüm parametresini kullanın.

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);

Özel telemetri için varsayılan özellikler

Yazdığınız bazı özel olaylar için varsayılan özellik değerlerini ayarlamak istiyorsanız, bunları bir TelemetryClient örnekte ayarlayın. Bunlar, bu istemciden gönderilen her telemetri öğesine eklenir.

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");

Tek tek telemetri çağrıları, kendi özellik sözlüklerindeki varsayılan değerleri geçersiz kılabilir.

Standart koleksiyon modüllerindeki veriler de dahil olmak üzere tüm telemetriye özellikler eklemek içinuygulayınITelemetryInitializer.

Telemetriyi devre dışı bırakma

Telemetrinin toplanmasını ve iletimini dinamik olarak durdurmak ve başlatmak için:

using  Microsoft.ApplicationInsights.Extensibility;

TelemetryConfiguration.Active.DisableTelemetry = true;

Geliştirici modu

Hata ayıklama sürecinde, sonuçları hemen görebilmeniz için telemetri verilerinizin işlem hattı üzerinden hızlıca geçiş yapması yararlıdır. Ayrıca telemetriyle ilgili sorunları izlemenize yardımcı olan başka iletiler de alırsınız. Uygulamanızı yavaşlatabileceğinden üretim ortamında kapatın.

TelemetryConfiguration.Active.TelemetryChannel.DeveloperMode = true;

Seçili özel telemetri için enstrümantasyon anahtarını ayarlayın.

var telemetry = new TelemetryClient();
telemetry.InstrumentationKey = "---my key---";
// ...

Dinamik bağlantı dizesi

Geliştirme, test ve üretim ortamlarından gelen telemetri verilerinin karıştırılmasını önlemek için, ortama bağlı olarak ayrı Application Insights kaynakları oluşturabilir ve anahtarlarını değiştirebilirsiniz.

Enstrümantasyon anahtarını yapılandırma dosyasından almak yerine kodunuzda ayarlayabilirsiniz. ASP.NET hizmetinde global.aspx.cs gibi bir başlatma yönteminde anahtarı ayarlayın:

protected void Application_Start()
{
    Microsoft.ApplicationInsights.Extensibility.
    TelemetryConfiguration.Active.InstrumentationKey =
        // - for example -
        WebConfigurationManager.Settings["ikey"];
    ...
}

TelemetryContext

TelemetryClient , tüm telemetri verileriyle birlikte gönderilen değerleri içeren bir Context özelliğine sahiptir. Bunlar normalde standart telemetri modülleri tarafından ayarlanır, ancak bunları kendiniz de ayarlayabilirsiniz. Örneğin:

telemetry.Context.Operation.Name = "MyOperationName";

Bu değerlerden herhangi birini kendiniz ayarlarsanız, değerlerinizle standart değerlerinizin karıştırılmaması için ApplicationInsights.config ilgili satırı kaldırmayı göz önünde bulundurun.

  • Bileşen: Uygulama ve sürümü.
  • Cihaz: Uygulamanın çalıştığı cihazla ilgili veriler. Web uygulamalarında, telemetrinin gönderildiği sunucu veya istemci cihazıdır.
  • InstrumentationKey: Telemetrinin görüntülendiği Azure Application Insights kaynağı. Genellikle ApplicationInsights.config dosyasından alınır.
  • Konum: Cihazın coğrafi konumu.
  • İşlem: Web uygulamalarında geçerli HTTP isteği. Diğer uygulama türlerinde bu değeri olayları birlikte gruplandıracak şekilde ayarlayabilirsiniz.
    • Kimlik: Tanılama Arama'da herhangi bir olayı incelediğinizde ilgili öğeleri bulabilmeniz için farklı olayları ilişkilendiren oluşturulan bir değer.
    • Ad: Bir tanımlayıcı, genellikle bir HTTP isteğinin URL'si.
    • SyntheticSource: Null veya boş değilse, isteğin kaynağının robot veya web testi olarak tanımlandığını belirten bir dize. Varsayılan olarak, Ölçüm Gezgini'ndeki hesaplamaların dışında tutulur.
  • Oturum: Kullanıcının oturumu. Kimlik, kullanıcı bir süredir etkin olmadığında değiştirilen, oluşturulan bir değere ayarlanır.
  • Kullanıcı: Kullanıcı bilgileri.

Limits

Uygulama başına ölçüm ve olay sayısıyla ilgili bazı sınırlar vardır, yani connection string başına. Limitler seçtiğiniz fiyatlandırma planına bağlıdır.

Resource Varsayılan limit Maksimum sınır Notes
Günlük toplam veri 100 GB Desteğe ulaşın. Verileri azaltmak için bir üst sınır ayarlayabilirsiniz. Daha fazla veriye ihtiyacınız varsa portaldaki sınırı 1.000 GB'a kadar artırabilirsiniz. 1.000 GB'tan büyük kapasiteler için adresine AIDataCap@microsoft.come-posta gönderin.
Throttling 32.000 olay/saniye Desteğe ulaşın. Sınır bir dakika içinde ölçülür.
Veri saklama günlükleri 30 ile 730 gün 730 gün Bu kaynak Günlükler içindir.
Veri saklama ölçümleri 90 gün 90 gün Bu kaynak Ölçüm Gezgini içindir.
Kullanılabilirlik çok adımlı test ayrıntılı sonuç saklama 90 gün 90 gün Bu kaynak her adımın ayrıntılı sonuçlarını verir.
En büyük telemetri öğesi boyutu 64 KB 64 KB
Toplu iş başına en fazla telemetri öğesi sayısı 64,000 64,000
Özellik ve ölçüm adı uzunluğu Yüz elli Yüz elli Bkz. tür şemaları.
Özellik değeri dize uzunluğu 8,192 8,192 Bkz. tür şemaları.
İzleme ve özel durum iletisi uzunluğu 32,768 32,768 Bkz. tür şemaları.
Application Insights kaynağı başına kullanılabilirlik testleri sayısı 100 100
Kaynak grubu başına kullanılabilirlik testleri sayısı 800 800 Bkz. Azure Resource Manager
Test başına maksimum yeniden yönlendirme sayısı, kullanılabilirlik testleri 10 10
Kullanılabilirlik testleri en düşük test sıklığı 300 saniye Özel test sıklıkları veya 5 dakikadan kısa frekanslar için özel TrackAvailability uygulamaları gerekir.
.NET Profiler ve Snapshot Debugger veri saklama İki hafta Desteğe ulaşın. Maksimum saklama sınırı altı aydır.
.NET Profiler günlük gönderilen veriler Sınır yok Sınır yok.
Anlık Görüntü Hata Ayıklayıcısı tarafından günlük gönderilen veriler İzlenen uygulama başına günde 30 anlık görüntü Sınır yok. Uygulama başına toplanan anlık görüntü sayısı yapılandırma aracılığıyla değiştirilebilir.

Fiyatlandırma ve kotalar hakkında daha fazla bilgi için Application Insights faturalaması'na bakın.

Veri hızı sınırına çarpmamak için örneklemeyi kullanın.

Verilerin ne kadar süreyle tutulduğunu belirlemek için bkz. Veri saklama ve gizlilik.

Örnek uygulamalar

.NET Core konsol uygulaması: .NET Core (2.0 veya üzeri) veya .NET Framework (4.7.2 veya üzeri) ile yazılmış bir konsol uygulaması kullanıyorsanız bu örneği kullanın.

ASP.NET Core ile HostedServices kullanarak arka plan görevleri: ASP.NET Core'da resmi yönergelere uygun arka plan görevleri oluşturuyorsanız bu örneği kullanın.

.NET Core Worker Service: .NET Çalışan Hizmeti uygulamanız varsa resmi yönergeler uyarınca bu örneği kullanın.

Sorun giderme

.NET ve Node.js için özel sorun giderme makalelerine bakın.

Uygulama konağınızla alma hizmeti arasındaki bağlantıyı test etme

Application Insights SDK'ları ve aracıları, alma uç noktalarımıza REST çağrıları olarak alınabilmek için telemetri gönderir. PowerShell veya curl komutlarından ham REST istemcilerini kullanarak web sunucunuzdan veya uygulama konak makinenizden alma hizmeti uç noktalarına bağlantıyı test edebilirsiniz. Bkz. Azure Monitor Uygulama İçgörüleri'nde eksik uygulama telemetri verilerinin sorun giderilmesine.

Açık kaynak SDK

.NET ve Node.js kodunu okuyun ve katkıda bulunun.

Sürüm Notları

Hizmet Güncelleştirmeleri , önemli Application Insights geliştirmelerini de özetler.

Sonraki Adımlar