Application Insights의 시스템 성능 카운터System performance counters in Application Insights

Windows는 광범위한 성능 카운터(예: CPU 점유율, 메모리, 디스크, 네트워크 사용량 등)를 제공합니다.Windows provides a wide variety of performance counters such as CPU occupancy, memory, disk, and network usage. 고유한 성능 카운터를 정의할 수도 있습니다.You can also define your own performance counters. 온-프레미스 호스트 또는 관리 액세스 권한이 있는 가상 컴퓨터에서 응용 프로그램이 IIS에서 실행되는 한 성능 카운터 컬렉션이 지원됩니다.Performance counters collection is supported as long as your application is running under IIS on an on-premises host, or virtual machine to which you have administrative access. Azure Web Apps로 실행되는 응용 프로그램은 성능 카운터에 직접 액세스할 수 없지만 사용 가능한 카운터의 하위 집합은 Application Insights에서 수집합니다.Though applications running as Azure Web Apps don't have direct access to performance counters, a subset of available counters are collected by Application Insights.

카운터 보기View counters

[메트릭] 창에는 기본 성능 카운터 세트가 표시됩니다.The Metrics pane shows the default set of performance counters.

Application Insights에서 보고하는 시스템 성능 카운터

ASP.NET/ASP.NET Core 웹 응용 프로그램에 대해 수집하도록 구성된 현재 기본 카운터는 다음과 같습니다.The current default counters that are configured to be collected for ASP.NET/ASP.NET Core web applications are:

  • %\프로세스 프로세서 시간% Process\Processor Time
  • %\프로세스 프로세서 시간 정규화% Process\Processor Time Normalized
  • 사용\가능한 메모리 바이트Memory\Available Bytes
  • ASP.NET 요청/초ASP.NET Requests/Sec
  • .NET CLR 예외 throw / 초.NET CLR Exceptions Thrown / sec
  • ASP.NET 응용 프로그램요청 실행 시간 요청ASP.NET ApplicationsRequest Execution Time
  • 프로세스\프라이빗 바이트Process\Private Bytes
  • 프로세스\IO 데이터 바이트/초Process\IO Data Bytes/sec
  • 응용 프로그램\큐에서 응용 프로그램 요청 ASP.NETASP.NET Applications\Requests In Application Queue
  • 프로세서(_Total)\% 프로세서 시간Processor(_Total)\% Processor Time

카운터 추가Add counters

원하는 성능 카운터가 메트릭 목록에 포함되지 않은 경우 추가할 수 있습니다.If the performance counter you want isn't included in the list of metrics, you can add it.

  1. 로컬 서버에서 다음 PowerShell 명령을 사용하여 서버에서 사용할 수 있는 카운터를 확인합니다.Find out what counters are available in your server by using this PowerShell command on the local server:

    Get-Counter -ListSet *

    (를 Get-Counter참조하십시오.)(See Get-Counter.)

  2. ApplicationInsights.config를 엽니다.Open ApplicationInsights.config.

    • 앱에 개발 중인 Application Insights를 추가한 경우 프로젝트에서 ApplicationInsights.config를 편집한 후 서버에 다시 배포합니다.If you added Application Insights to your app during development, edit ApplicationInsights.config in your project, and then redeploy it to your servers.
  3. 다음과 같이 성능 수집기 지시문을 편집합니다.Edit the performance collector directive:

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

참고

ASP.NET 코어 응용 프로그램에는 ApplicationInsights.config이가 없으므로 위의 방법은 ASP.NET 코어 응용 프로그램에 는 유효하지 않습니다.ASP.NET Core applications do not have ApplicationInsights.config, and hence the above method is not valid for ASP.NET Core Applications.

표준 카운터 및 사용자가 직접 구현한 카운터를 모두 캡처할 수 있습니다.You can capture both standard counters and those you've implemented yourself. \Objects\Processes는 모든 Windows 시스템에서 사용할 수 있는 표준 카운터의 한 예입니다.\Objects\Processes is an example of a standard counter that is available on all Windows systems. \Sales(photo)\# Items Sold는 웹 서비스에서 구현할 수 있는 사용자 지정 카운터의 한 예입니다.\Sales(photo)\# Items Sold is an example of a custom counter that might be implemented in a web service.

형식은 \Category(instance)\Counter"이며, 인스턴스가 없는 범주인 경우에는 \Category\Counter입니다.The format is \Category(instance)\Counter", or for categories that don't have instances, just \Category\Counter.

ReportAs[a-zA-Z()/-_ \.]+와 일치하지 않는 카운터 이름에 필요합니다. 즉 문자, 둥근 괄호, 슬래시, 하이픈, 밑줄, 공백, 점이 아닌 글자를 포함합니다.ReportAs is required for counter names that do not match [a-zA-Z()/-_ \.]+ - that is, they contain characters that are not in the following sets: letters, round brackets, forward slash, hyphen, underscore, space, dot.

인스턴스를 지정하면 보고된 메트릭의 "CounterInstanceName" 차원으로 수집됩니다.If you specify an instance, it will be collected as a dimension "CounterInstanceName" of the reported metric.

ASP.NET 웹 응용 프로그램 또는 .NET/.NET 코어 콘솔 응용 프로그램에 대한 코드에서 성능 카운터 수집Collecting performance counters in code for ASP.NET Web Applications or .NET/.NET Core Console Applications

시스템 성능 카운터를 수집하고 Application Insights에 보내려면 다음과 같은 코드 조각을 사용할 수 있습니다.To collect system performance counters and send them to Application Insights, you can adapt the snippet below:

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

또는 만든 사용자 지정 메트릭과 동일한 작업을 수행할 수 있습니다.Or you can do the same thing with custom metrics you created:

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Sales(photo)\# Items Sold", "Photo sales"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

ASP.NET 핵심 웹 응용 프로그램에 대한 코드에서 성능 카운터 수집Collecting performance counters in code for ASP.NET Core Web Applications

클래스에서 메서드를 아래에서 수정합니다. ConfigureServices Startup.csModify ConfigureServices method in your Startup.cs class as below.

using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetry();

        // The following configures PerformanceCollectorModule.
  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"));
            });
    }

분석에서의 성능 카운터Performance counters in Analytics

분석에서 성능 카운터 보고서를 검색하고 표시할 수 있습니다.You can search and display performance counter reports in Analytics.

성능카운터 스키마는 각 성능 category counter 카운터의 instance 에서 의 이름과 이름을 노출합니다.The performanceCounters schema exposes the category, counter name, and instance name of each performance counter. 각 애플리케이션에 대한 원격 분석 데이터에는 해당 애플리케이션에 대한 카운터에만 표시됩니다.In the telemetry for each application, you'll see only the counters for that application. 예를 들면 어떤 카운터를 사용할 수 있는지 알아보기:For example, to see what counters are available:

Application Insights 분석의 성능 카운터

(여기서 ‘인스턴스’는 역할이나 서버 머신 인스턴스가 아니라 성능 카운터 인스턴스를 나타냅니다.('Instance' here refers to the performance counter instance, not the role, or server machine instance. 성능 카운터 인스턴스 이름은 일반적으로 프로세스 또는 애플리케이션의 이름을 기준으로 프로세서 시간과 같은 카운터를 분할합니다.)The performance counter instance name typically segments counters such as processor time by the name of the process or application.)

최근 기간 동안 사용 가능한 메모리의 차트를 가져오려면:To get a chart of available memory over the recent period:

Application Insights 분석의 메모리 시간 차트

다른 원격 분석과 마찬가지로 performanceCounters에도 앱이 실행되는 호스트 서버 인스턴스의 ID를 나타내는 cloud_RoleInstance 열이 있습니다.Like other telemetry, performanceCounters also has a column cloud_RoleInstance that indicates the identity of the host server instance on which your app is running. 예를 들어, 서로 다른 컴퓨터에서 앱의 성능을 비교하려면:For example, to compare the performance of your app on the different machines:

Application Insights 분석에서 역할 인스턴스에 의해 분할된 성능

ASP.NET 및 Application Insights 개수ASP.NET and Application Insights counts

예외 속도와 예외 메트릭 간의 차이점은 무엇인가요?What's the difference between the Exception rate and Exceptions metrics?

  • 예외 속도 는 시스템 성능 카운터입니다.Exception rate is a system performance counter. CLR은 발생하는 처리된 예외 및 처리되지 않은 예외를 모두 계산하고 샘플링 간격의 합계를 간격 길이로 나눕니다.The CLR counts all the handled and unhandled exceptions that are thrown, and divides the total in a sampling interval by the length of the interval. Application Insights SDK는 이 결과를 수집하여 포털에 보냅니다.The Application Insights SDK collects this result and sends it to the portal.

  • 예외 는 차트의 샘플링 간격에 포털이 받은 TrackException 보고서 개수입니다.Exceptions is a count of the TrackException reports received by the portal in the sampling interval of the chart. 코드에서 TrackException 호출을 작성한 처리된 예외만 포함하며, 처리되지 않은 예외는 모두 포함되지 않습니다.It includes only the handled exceptions where you have written TrackException calls in your code, and doesn't include all unhandled exceptions.

Azure 웹 앱에서 실행 중인 응용 프로그램에 대한 성능 카운터Performance counters for applications running in Azure Web Apps

Azure 웹 앱에 배포된 ASP.NET 및 ASP.NET 핵심 응용 프로그램은 모두 특수 샌드박스 환경에서 실행됩니다.Both ASP.NET and ASP.NET Core applications deployed to Azure Web Apps run in a special sandbox environment. 이 환경에서는 시스템 성능 카운터에 직접 액세스할 수 없습니다.This environment does not allow direct access to system performance counters. 그러나 카운터의제한된 하위 집합은 여기에 설명된 대로 환경 변수로 노출됩니다.However, a limited subset of counters are exposed as environment variables as described here. ASP.NET 및 ASP.NET 코어용 응용 프로그램 인사이트 SDK는 이러한 특수 환경 변수에서 Azure Web Apps의 성능 카운터를 수집합니다.Application Insights SDK for ASP.NET and ASP.NET Core collects performance counters from Azure Web Apps from these special environment variables. 이 환경에서는 카운터의 하위 집합만 사용할 수 있으며 전체 목록은 여기에서 찾을 수 있습니다.Only a subset of counters are available in this environment, and the full list can be found here.

ASP.NET 핵심 애플리케이션의 성능 카운터Performance counters in ASP.NET Core applications

ASP.NET 코어의 성능 카운터에 대한 지원은 제한되어 있습니다.Support for performance counters in ASP.NET Core is limited:

  • SDK 버전 2.4.1 이후 응용 프로그램이 Azure 웹 앱(Windows)에서 실행 중인 경우 성능 카운터를 수집합니다.SDK versions 2.4.1 and later collect performance counters if the application is running in Azure Web Apps (Windows).
  • SDK 버전 2.7.1 이상 은 응용 프로그램이 Windows및 대상 NETSTANDARD2.0 에서 실행되는 경우 성능 카운터를 수집합니다.SDK versions 2.7.1 and later collect performance counters if the application is running in Windows and targets NETSTANDARD2.0 or later.
  • .NET Framework를 대상으로 하는 응용 프로그램의 경우 모든 버전의 SDK는 성능 카운터를 지원합니다.For applications targeting the .NET Framework, all versions of the SDK support performance counters.
  • SDK 버전 2.8.0 이상 리눅스에서 CPU / 메모리 카운터를 지원합니다.SDK Versions 2.8.0 and later support cpu/memory counter in Linux. 다른 카운터는 Linux에서 지원되지 않습니다.No other counter is supported in Linux. Linux(및 기타 Windows 이외의 환경)에서 시스템 카운터를 얻는 데 권장되는 방법은 EventCounters를 사용하는 것입니다.The recommended way to get system counters in Linux (and other non-Windows environments) is by using EventCounters

경고Alerts

다른 메트릭과 마찬가지로 성능 카운터에서 지정한 제한을 벗어나는 경우 경고 메시지를 표시하도록 경고를 설정할 수 있습니다.Like other metrics, you can set an alert to warn you if a performance counter goes outside a limit you specify. [경고] 창을 열고 [경고 추가]를 클릭합니다.Open the Alerts pane and click Add Alert.

다음 단계Next steps