다음을 통해 공유


Application Insights(클래식 API)를 사용하여 Node.js 애플리케이션 및 서비스 모니터링

참고

클래식 API SDK 지원 정책에 대한 Application Insights SDK 지원 지침을 검토합니다.

주의

새 애플리케이션 또는 고객이 Azure Monitor Application Insights에 전원을 공급하려면 Azure Monitor OpenTelemetry Distro를 사용하는 것이 좋습니다. Azure Monitor OpenTelemetry Distro는 Application Insights SDK와 유사한 기능과 환경을 제공합니다. .NET, Node.jsPython에 대한 마이그레이션 가이드를 사용하여 Application Insights SDK에서 마이그레이션할 수 있지만 이전 버전과의 호환성을 위해 몇 가지 기능을 더 추가하기 위해 노력하고 있습니다.

Application Insights는 배포 후에 구성 요소를 모니터링하여 성능과 기타 문제를 발견합니다. 데이터 센터, Azure VM 및 웹앱에서 호스트되는 Node.js 서비스와 다른 퍼블릭 클라우드에서도 Application Insights를 사용할 수 있습니다.

모니터링 데이터를 수신, 저장 및 탐색하려면 코드에 SDK를 포함합니다. 그런 다음 Azure에서 해당 Application Insights 리소스를 설정합니다. SDK는 추가 분석 및 탐색을 위해 해당 리소스로 데이터를 보냅니다.

Node.js 클라이언트 라이브러리는 들어오고 나가는 HTTP 요청, 예외 및 여러 시스템 메트릭을 자동으로 모니터링할 수 있습니다. 0.20 버전부터 클라이언트 라이브러리는 MongoDB, MySQL 및 Redis와 같은 일반적인 타사 패키지 일부를 모니터링할 수 있습니다.

들어오는 HTTP 요청과 관련된 모든 이벤트는 좀 더 빠른 문제 해결을 위해 상호 관계가 지정됩니다.

TelemetryClient API를 사용하여 앱과 시스템의 다양한 측면을 수동으로 계측하고 모니터링 할 수 있습니다. TelemetryClient API는 이 문서의 뒷부분에 더 자세히 설명합니다.

시작하기

앱 또는 서비스에 대한 모니터링을 설정하려면 다음 작업을 완료합니다.

필수 조건

시작하기 전에 Azure 구독이 있는지 확인하여 없는 경우 무료 계정을 새로 만듭니다. 조직에 이미 Azure 구독이 있으면 관리자가 다음 지침에 따라 사용자를 구독에 추가할 수 있습니다.

Application Insights 리소스 설정

  1. Azure Portal에 로그인합니다.
  2. Application Insights 리소스를 생성합니다.

참고

2025년 3월 31일에 계측 키 수집에 대한 지원이 종료됩니다. 계측 키 수집은 계속 작동하지만 더 이상 기능에 대한 업데이트 또는 지원을 제공하지 않습니다. 연결 문자열로 전환하여 새로운 기능을 활용합니다.

Node.js 클라이언트 라이브러리 설정

데이터를 수집할 수 있도록 앱에 SDK를 포함합니다.

  1. 새 리소스에서 리소스의 연결 문자열을 복사합니다. Application Insights는 연결 문자열을 사용하여 Azure 리소스에 데이터를 매핑합니다. SDK에서 연결 문자열을 사용하려면 먼저 환경 변수 또는 코드에 연결 문자열을 지정해야 합니다.

    Application Insights 개요 및 연결 문자열을 보여 주는 스크린샷.

  2. package.json을 통해 앱의 종속성에 Node.js 클라이언트 라이브러리를 추가합니다. 앱의 루트 폴더에서 다음을 실행합니다.

    npm install applicationinsights --save
    

    참고

    TypeScript를 사용하는 경우 별도의 "typings" 패키지를 설치하지 마세요. 이 NPM 패키지에는 기본 제공 입력 항목이 포함되어 있습니다.

  3. 코드에서 라이브러리를 명시적으로 로드합니다. SDK는 여러 다른 라이브러리에 계측 값을 삽입합니다. 따라서 최대한 신속하게, 심지어 다른 require 문보다도 먼저 라이브러리를 로드합니다.

    let appInsights = require('applicationinsights');
    
  4. 또한 연결 문자열을 APPLICATIONINSIGHTS_CONNECTION_STRING 또는 setup()에 수동으로 전달하는 대신 new appInsights.TelemetryClient() 환경 변수를 통해 제공할 수 있습니다. 이렇게 하면 연결 문자열이 커밋된 소스 코드의 영향을 받지 않고, 다른 환경에 다른 연결 문자열을 지정할 수 있습니다. 수동으로 구성하려면 appInsights.setup('[your connection string]');을 호출합니다.

    추가 구성 옵션은 다음 섹션을 참조하세요.

    appInsights.defaultClient.config.disableAppInsights = true를 설정하면 원격 분석을 전송하지 않고 SDK를 사용해 볼 수 있습니다.

  5. appInsights.start();를 호출하면 데이터를 자동으로 수집하고 전송하기 시작합니다.

참고

Application Insights 계측 사용의 일환으로 진단 데이터를 수집하여 Microsoft에 보냅니다. 이 데이터는 Application Insights를 실행하고 개선하는 데 도움이 됩니다. 중요하지 않은 데이터 컬렉션을 사용하지 않도록 설정할 수 있는 옵션이 있습니다. 자세히 알아보기.

앱 모니터링

SDK는 Node.js 런타임 및 일반적인 타사 모듈 일부에 대한 원격 분석 데이터를 자동으로 수집합니다. 애플리케이션을 사용하여 이 데이터를 생성합니다.

그런 다음 Azure Portal에서 이전에 만든 Application Insights 리소스로 이동합니다. 타임라인 개요에서 먼저 몇 가지 데이터 요소를 찾습니다. 더 자세한 데이터를 보려면 차트에서 다른 구성 요소를 선택합니다.

앱에 대해 검색된 토폴로지를 보려면 애플리케이션 맵을 사용합니다.

데이터 없음

SDK는 제출을 위해 데이터를 일괄 처리하므로 항목이 포털에 표시되기까지 지연이 있을 수 있습니다. 리소스에 데이터가 보이지 않으면 다음 해결 방법 중 몇 가지를 시도해 보세요.

  • 애플리케이션을 계속 사용합니다. 더 많은 작업을 수행하여 더 많은 원격 분석을 생성합니다.
  • 포털 리소스 보기에서 새로 고침을 선택합니다. 차트는 자체에서 주기적으로 새로 고치지만, 수동으로 새로 고침하면 즉시 새로 고쳐집니다.
  • 필요한 발신 포트가 열려 있는지 확인합니다.
  • 검색을 사용하여 특정 이벤트를 찾습니다.
  • FAQ를 확인합니다.

기본 사용법

HTTP 요청, 인기 있는 타사 라이브러리 이벤트, 처리되지 않은 예외, 시스템 메트릭에 대한 기본 제공 컬렉션은 다음과 같습니다.

let appInsights = require("applicationinsights");
appInsights.setup("[your connection string]").start();

참고

APPLICATIONINSIGHTS_CONNECTION_STRING 환경 변수에 연결 문자열을 설정하는 경우 인수 없이 .setup()를 호출할 수 있습니다. 따라서 환경마다 다른 연결 문자열을 쉽게 사용할 수 있습니다.

다른 패키지를 로드하기 전에 스크립트에서 최대한 빨리 Application Insights 라이브러리 require("applicationinsights")를 로드합니다. 이 단계는 Application Insights 라이브러리에서 나중에 추적하기 위한 패키지를 준비할 수 있도록 하는 데 필요합니다. 다른 라이브러리가 비슷한 작업을 수행하면서 충돌이 발생할 경우, 그 후에 Application Insights 라이브러리를 로드해 보세요.

JavaScript가 콜백을 처리하는 방식 때문에 외부 종속성과 이후 콜백에서 요청을 추적하려면 추가 작업이 필요합니다. 이 추가 추적은 기본적으로 사용하도록 설정되어 있습니다. setAutoDependencyCorrelation(false) 섹션에 설명된 대로 을 호출하여 사용하지 않도록 설정합니다.

0.22 이전 버전에서 마이그레이션

0.22 이전 버전과 이후 버전 사이의 릴리스에 중요한 변경 사항이 있습니다. 해당 변경 내용은 다른 Application Insights SDK와의 일관성을 유지하고 향후 확장성을 허용하도록 설계되었습니다.

일반적으로 다음 작업을 통해 마이그레이션할 수 있습니다.

  • appInsights.client에 대한 참조를 appInsights.defaultClient로 바꾸기.
  • appInsights.getClient()에 대한 참조를 new appInsights.TelemetryClient()로 바꾸기.
  • 인수를 명명된 속성을 포함하는 단일 개체를 사용하여 모든 인수를 client.track* 메서드로 바꿉니다. 각 원격 분석 형식의 예외 개체 관련 사항은 IDE의 기본 제공 형식 힌트 또는 TelemetryTypes를 참조하세요.

appInsights.setup()에 연결하지 않고 SDK 구성 함수에 액세스하는 경우 이제 appInsights.Configurations에서 이러한 함수를 찾을 수 있습니다. 예제는 appInsights.Configuration.setAutoCollectDependencies(true)입니다. 다음 섹션의 기본 구성에 대한 변경 내용을 검토합니다.

SDK 구성

appInsights 개체는 많은 구성 메서드를 제공합니다. 해당 구성 메서드는 다음 코드 조각에 기본값과 함께 나열됩니다.

let appInsights = require("applicationinsights");
appInsights.setup("<connection_string>")
    .setAutoDependencyCorrelation(true)
    .setAutoCollectRequests(true)
    .setAutoCollectPerformance(true, true)
    .setAutoCollectExceptions(true)
    .setAutoCollectDependencies(true)
    .setAutoCollectConsole(true)
    .setUseDiskRetryCaching(true)
    .setSendLiveMetrics(false)
    .setDistributedTracingMode(appInsights.DistributedTracingModes.AI)
    .start();

서비스에서 이벤트의 상관 관계를 완전하게 지정하려면 .setAutoDependencyCorrelation(true)을 설정합니다. 이 옵션을 설정하면 SDK가 Node.js의 비동기 콜백에서 컨텍스트를 추적할 수 있습니다.

IDE의 기본 제공 형식 힌트 또는 applicationinsights.ts에서 자세한 정보와 선택적 2차 인수에 대한 설명을 검토합니다.

참고

기본적으로 setAutoCollectConsole 및 기타 콘솔 메서드에 대한 호출을 console.log 구성됩니다. 지원되는 타사 로거(예: winston 및 bunyan)에 대한 호출만 수집됩니다. console를 사용하여 setAutoCollectConsole(true, true) 메서드에 대한 호출을 포함하도록 해당 동작을 변경할 수 있습니다.

분산 추적

최신 클라우드 및 마이크로 서비스 아키텍처를 사용하면 가용성과 처리량을 늘리면서 비용을 절감하는 간단하고 독립적으로 배포 가능한 서비스를 사용할 수 있습니다. 그러나 전체 시스템을 추론하고 디버그하기가 더 어려워졌습니다. 분산 추적은 클라우드 및 마이크로 서비스 아키텍처에 대한 호출 스택과 같은 성능 프로파일러를 제공하여 이 문제를 해결합니다.

Azure Monitor는 분산 추적 데이터를 사용하는 두 가지 환경을 제공합니다. 즉, 단일 트랜잭션/요청에 대한 트랜잭션 진단 보기와 시스템이 상호 작용하는 방식을 보여 주는 애플리케이션 맵 보기입니다.

Application Insights는 각 구성 요소를 개별적으로 모니터링하고 분산 원격 분석 상관 관계를 사용하여 오류 또는 성능 저하를 담당하는 구성 요소를 검색할 수 있습니다. 이 문서에서는 Application Insights에서 사용하는 다양한 언어 및 플랫폼에 대한 데이터 모델, 컨텍스트 전파 기술, 프로토콜 및 상관 관계 전술 구현에 대해 설명합니다.

자동 계측 또는 SDK를 통해 Application Insights를 사용하여 분산 추적 활성화

.NET, .NET Core, Java, Node.js및 JavaScript용 Application Insights 에이전트 및 SDK는 모두 기본적으로 분산 추적을 지원합니다.

적절한 Application Insights SDK를 설치하고 구성하면 SDK 종속성 자동 수집기에서 인기 있는 프레임워크, 라이브러리 및 기술에 대한 추적 정보가 자동으로 수집됩니다. 지원되는 기술의 전체 목록은 종속성 자동 데이터 정렬 설명서에서 확인할 수 있습니다.

TelemetryClient에서 TrackDependency를 호출하여 모든 기술을 수동으로 추적할 수도 있습니다.

원격 분석 상관 관계에 대한 데이터 모델

Application Insights는 분산 원격 분석 상관 관계에 대한 데이터 모델을 정의합니다. 원격 분석을 논리 작업과 연결하기 위해 모든 원격 분석 항목에는 라는 컨텍스트 필드가 있습니다 operation_Id. 분산 추적의 모든 원격 분석 항목은 이 식별자를 공유합니다. 따라서 단일 계층에서 원격 분석이 손실되더라도 다른 구성 요소에서 보고한 원격 분석을 연결할 수 있습니다.

분산 논리 작업은 일반적으로 구성 요소 중 하나에서 처리되는 요청인 더 작은 작업 집합으로 구성됩니다. 요청 원격 분석은 이러한 작업을 정의합니다. 모든 요청 원격 분석 항목에는 고유하고 전역적으로 식별하는 자체 id 항목이 있습니다. 또한 요청과 연결된 모든 원격 분석 항목(예: 추적 및 예외)은 요청 operation_parentId값으로 설정 id 해야 합니다.

종속성 원격 분석은 다른 구성 요소에 대한 HTTP 호출과 같이 나가는 모든 작업을 나타냅니다. 또한 전역적으로 고유한 자체 id 도 정의합니다. 이 종속성 호출을 통해 시작된 요청 원격 분석은 이 idoperation_parentId로 사용합니다.

operation_Id, operation_parentId, request.iddependency.id를 사용하여 분산 논리 작업의 뷰를 빌드할 수 있습니다. 이러한 필드는 원격 분석 호출의 인과 관계 순서도 정의합니다.

마이크로 서비스 환경에서 구성 요소의 추적은 다른 스토리지 항목으로 이동됩니다. 모든 구성 요소는 Application Insights에서 자체 연결 문자열을 가질 수 있습니다. 논리 작업에 대한 원격 분석을 가져오기 위해 Application Insights는 모든 스토리지 항목의 데이터를 쿼리합니다.

스토리지 항목 수가 많으면 다음에 찾을 위치에 대한 힌트가 필요합니다. Application Insights 데이터 모델은 이 문제를 해결하기 위해 두 개의 필드, request.sourcedependency.target, 정의합니다. 첫 번째 필드는 종속성 요청을 시작한 구성 요소를 식별합니다. 두 번째 필드는 종속성 호출의 응답을 반환한 구성 요소를 식별합니다.

여러 서로 다른 인스턴스에서 쿼리하는 방법에 대한 자세한 내용은 Azure Monitor의 Log Analytics 작업 영역, 애플리케이션 및 리소스에서 데이터 쿼리를 참조하세요.

Example

예를 살펴보겠습니다. 주가라는 애플리케이션은 Stock이라는 외부 API를 사용하여 주식의 현재 시장 가격을 표시합니다. 주식 가격 애플리케이션에는 클라이언트 웹 브라우저에서 사용하여 여는 Stock 페이지라는 페이지가 있습니다 GET /Home/Stock. 애플리케이션은 HTTP 호출 GET /api/stock/value을 사용하여 Stock API를 쿼리합니다.

쿼리를 실행하여 결과 원격 분석을 분석할 수 있습니다.

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

결과에서 모든 원격 분석 항목은 루트 operation_Id를 공유합니다. 페이지에서 Ajax 호출이 이루어지면 종속성 원격 분석에 새 고유 ID(qJSXU)가 할당되고 pageView의 ID가 사용됩니다 operation_ParentId. 그런 다음 서버 요청은 Ajax ID를 .로 operation_ParentId사용합니다.

항목 유형 이름 아이디 operation_ParentId operation_Id
pageView 재고 페이지 STYz STYz
의존성 GET /Home/Stock qJSXU STYz STYz
request GET Home/Stock KqKwlrSt9PA= qJSXU STYz
의존성 GET /api/stock/value bBrf2L7mm2g= KqKwlrSt9PA= STYz

외부 서비스에 대한 호출 GET /api/stock/value 을 수행할 때 필드를 적절하게 설정할 수 있도록 해당 서버의 ID를 dependency.target 알아야 합니다. 외부 서비스가 모니터링을 target 지원하지 않는 경우 서비스의 호스트 이름으로 설정됩니다. 예제는 stock-prices-api.com입니다. 그러나 서비스가 미리 정의된 HTTP 헤더 target 를 반환하여 자신을 식별하는 경우 Application Insights가 해당 서비스의 원격 분석을 쿼리하여 분산 추적을 빌드할 수 있도록 하는 서비스 ID를 포함합니다.

W3C TraceContext를 사용하는 상관 관계 헤더

Application Insights는 다음을 정의하는 W3C 추적 컨텍스트로 전환됩니다.

  • traceparent: 호출의 전역적으로 고유한 작업 ID 및 고유 식별자를 전달합니다.
  • tracestate: 시스템별 추적 컨텍스트를 전달합니다.

최신 버전의 Application Insights SDK는 Trace-Context 프로토콜을 지원하지만 옵트인해야 할 수도 있습니다. (Application Insights SDK에서 지원하는 이전 상관 관계 프로토콜과의 이전 버전과의 호환성이 유지됩니다.)

Request-Id라고도 하는 상관 관계 HTTP 프로토콜은 더 이상 사용되지 않습니다. 이 프로토콜은 두 개의 헤더를 정의합니다.

  • Request-Id: 호출의 전역적으로 고유한 ID를 전달합니다.
  • Correlation-Context: 분산 추적 속성의 이름-값 쌍 컬렉션을 전달합니다.

Application Insights는 상관 관계 HTTP 프로토콜에 대한 확장 도 정의합니다. Request-Context 이름-값 쌍을 사용하여 직접 호출자나 피호출자가 사용하는 속성 목록을 전달합니다. Application Insights SDK는 이 헤더를 사용하여 dependency.target 필드 및 request.source 필드를 설정합니다.

W3C 추적 컨텍스트 및 Application Insights 데이터 모델은 다음과 같은 방식으로 매핑됩니다.

Application Insights (애플리케이션 인사이트) W3C TraceContext
IdRequestDependency parent-id
Operation_Id trace-id
Operation_ParentId 이 스팬의 부모 스팬의 parent-id입니다. 루트 범위인 경우 이 필드는 비어 있어야 합니다.

자세한 내용은 Application Insights 원격 분석 데이터 모델을 참조하세요.

샘플링

기본적으로 SDK는 수집된 모든 데이터를 Application Insights 서비스로 보냅니다. 샘플링을 사용하여 데이터의 양을 줄이려면 클라이언트의 samplingPercentage 개체에서 config 필드를 설정합니다. samplingPercentage를 100(기본값)으로 설정하면 모든 데이터가 전송되고, 0으로 설정하면 아무 데이터도 전송되지 않습니다.

자동 상관 관계를 사용하는 경우 단일 요청과 관련된 모든 데이터가 하나의 단위로 포함되거나 제외됩니다.

다음과 같은 코드를 추가해 샘플링을 사용하도록 설정합니다.

const appInsights = require("applicationinsights");
appInsights.setup("<connection_string>");
appInsights.defaultClient.config.samplingPercentage = 33; // 33% of all telemetry will be sent to Application Insights
appInsights.start();

다중 구성 요소 애플리케이션을 위한 다중 역할

일부 시나리오에서 애플리케이션은 동일한 연결 문자열로 모두 계측하려는 여러 구성 요소로 구성될 수 있습니다. 별도의 연결 문자열을 사용하는 것처럼 이러한 구성 요소를 포털에서 별도의 단위로 계속 표시하려고 합니다. 예를 들어, 애플리케이션 맵의 개별 노드가 있습니다. Application Insights 리소스에 데이터를 보내는 다른 구성 요소와 한 구성 요소의 원격 분석을 구별하려면 RoleName 필드를 수동으로 구성해야 합니다.

다음 코드를 사용하여 RoleName 필드를 설정합니다.

const appInsights = require("applicationinsights");
appInsights.setup("<connection_string>");
appInsights.defaultClient.context.tags[appInsights.defaultClient.context.keys.cloudRole] = "MyRoleName";
appInsights.start();

브라우저 SDK 로더

참고

공개 미리 보기로 제공됩니다. Microsoft Azure 미리 보기에 대한 보충 사용 약관

구성에 따라 JavaScript(웹) SDK 로더 스크립트 삽입을 통해 노드 서버에 대해 자동 웹 계측을 사용하도록 설정할 수 있습니다.

let appInsights = require("applicationinsights");
appInsights.setup("<connection_string>")
    .enableWebInstrumentation(true)
    .start();

또는 환경 변수 APPLICATIONINSIGHTS_WEB_INSTRUMENTATION_ENABLED = true를 설정하여.

다음 요구 사항이 모두 충족되면 노드 서버 응답에서 웹 계측이 사용하도록 설정됩니다.

  • 응답의 상태 코드는 200입니다.
  • 응답 방법은 GET입니다.
  • 서버 응답에 Content-Type HTML이 있습니다.
  • 서버 응답에는 <head></head> 태그가 모두 포함되어 있습니다.
  • 응답이 압축된 경우에는 Content-Encoding 형식이 하나만 있어야 하며 인코딩 형식은 gzip, br 또는 deflate 중 하나여야 합니다.
  • 응답에 현재 /backup web Instrumentation CDN 엔드포인트가 포함되어 있지 않습니다. (현재 및 백업 웹 계측 CDN 엔드포인트는 여기)

환경 변수 APPLICATIONINSIGHTS_WEB_INSTRUMENTATION_SOURCE = "web Instrumentation CDN endpoints"를 설정하여 웹 계측 CDN 엔드포인트를 변경할 수 있습니다. 환경 변수를 설정하여 웹 계측 연결 문자열을 변경할 수 있습니다. APPLICATIONINSIGHTS_WEB_INSTRUMENTATION_CONNECTION_STRING = "web Instrumentation connection string"

참고

웹 계측은 특히 응답 크기가 크거나 응답이 압축된 경우 서버 응답 시간을 느리게 할 수 있습니다. 일부 중간 계층이 적용되는 경우 웹 계측이 작동하지 않을 수 있으며 원래 응답이 반환됩니다.

타사 라이브러리 자동 계측

비동기 호출에서 컨텍스트를 추적하려면 MongoDB 및 Redis와 같은 타사 라이브러리에 일부 변경이 필요합니다. 기본적으로 Application Insights는 diagnostic-channel-publishers를 사용하여 이러한 라이브러리 중 일부를 원숭이 패치합니다. APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL 환경 변수를 설정하면 이 기능을 사용하지 않을 수 있습니다.

참고

해당 환경 변수를 설정하면 이벤트가 올바른 작업과 올바르게 연결되지 않을 수 있습니다.

APPLICATION_INSIGHTS_NO_PATCH_MODULES 환경 변수를 사용하지 않도록 설정할 패키지 목록을 쉼표로 구분하여 설정해 놓으면 개별 몽키 패치를 사용하지 않도록 설정할 수 있습니다. 예를 들어, APPLICATION_INSIGHTS_NO_PATCH_MODULES=console,redisconsole 패키지를 패치하지 않으려면 redis를 사용합니다.

현재 9개의 패키지(bunyan,console,mongodb,mongodb-core,mysql,redis,winston,pgpg-pool)가 계측됩니다. 이러한 패키지 중 정확히 어떤 버전이 패치되었는지에 대한 정보는 diagnostic-channel-publishers의 README를 참조하세요.

bunyan, winstonconsole 패치는 setAutoCollectConsole의 사용하도록 설정 여부에 따라 Application Insights 추적 이벤트를 생성합니다. 나머지는 setAutoCollectDependencies가 사용하도록 설정되었는지 여부에 따라 Application Insights 종속성 이벤트를 생성합니다.

라이브 메트릭

앱에서 Azure로 라이브 메트릭을 전송하려면 setSendLiveMetrics(true)를 사용합니다. 현재 포털의 라이브 메트릭 필터링은 지원되지 않습니다.

확장 메트릭

참고

확장 원시 메트릭 전송 기능이 1.4.0 버전에서 추가되었습니다.

앱에서 Azure로 확장 원시 메트릭을 보낼 수 있도록 설정하려면 별도의 원시 메트릭 패키지를 설치합니다. SDK는 설치되면 자동으로 로드되고 Node.js 네이티브 메트릭 수집을 시작합니다.

npm install applicationinsights-native-metrics

현재 기본 메트릭 패키지는 가비지 수집 CPU 시간, 이벤트 루프 틱 및 힙 메모리 사용량의 자동 수집을 수행합니다.

  • 가비지 수집: 각 가비지 수집 형식에 소요된 CPU 시간과 형식별 발생 횟수입니다.
  • 이벤트 루프: 발생한 틱 수 및 소요된 총 CPU 시간입니다.
  • 힙 대 비힙: 애플리케이션에서 힙 메모리 또는 비힙 메모리로 사용된 메모리 사용량입니다.

분산 추적 모드

기본적으로 SDK는 Application Insights SDK로 계측된 다른 애플리케이션 또는 서비스에서 이해하는 헤더를 보냅니다. 기존 AI 헤더 외에 W3C Trace Context 헤더의 송수신을 사용하도록 설정할 수 있습니다. 이러한 방식으로 기존 레거시 서비스와의 상관 관계를 끊지 않습니다. W3C 헤더를 사용하도록 설정하면, W3C 표준을 채택한 Application Insights를 사용하지 않는 다른 서비스와도 앱의 상관 관계를 설정할 수 있습니다.

const appInsights = require("applicationinsights");
appInsights
  .setup("<your connection string>")
  .setDistributedTracingMode(appInsights.DistributedTracingModes.AI_AND_W3C)
  .start()

TelemetryClient API

TelemetryClient API에 대한 전체 설명은 사용자 지정 이벤트 및 메트릭용 Application Insights API를 참조하세요.

Node.js용 Application Insights 클라이언트 라이브러리를 사용하여 모든 요청, 이벤트, 메트릭 또는 예외를 추적할 수 있습니다. 다음 코드 예제에는 사용할 수 있는 몇 가지 API가 나와 있습니다.

let appInsights = require("applicationinsights");
appInsights.setup().start(); // assuming connection string in env var. start() can be omitted to disable any non-custom data
let client = appInsights.defaultClient;
client.trackEvent({name: "my custom event", properties: {customProperty: "custom property value"}});
client.trackException({exception: new Error("handled exceptions can be logged with this method")});
client.trackMetric({name: "custom metric", value: 3});
client.trackTrace({message: "trace message"});
client.trackDependency({target:"http://dbname", name:"select customers proc", data:"SELECT * FROM Customers", duration:231, resultCode:0, success: true, dependencyTypeName: "ZSQL"});
client.trackRequest({name:"GET /customers", url:"http://myserver/customers", duration:309, resultCode:200, success:true});

let http = require("http");
http.createServer( (req, res) => {
  client.trackNodeHttpRequest({request: req, response: res}); // Place at the beginning of your request handler
});

종속성 추적

다음 코드를 사용하여 종속성을 추적합니다.

let appInsights = require("applicationinsights");
let client = new appInsights.TelemetryClient();

var success = false;
let startTime = Date.now();
// execute dependency call here....
let duration = Date.now() - startTime;
success = true;

client.trackDependency({target:"http://dbname", name:"select customers proc", data:"SELECT * FROM Customers", duration:duration, resultCode:0, success: true, dependencyTypeName: "ZSQL"});;

이벤트 루프 예약 시간을 측정하기 위해 trackMetric을 사용하는 예제 유틸리티는 다음과 같습니다.

function startMeasuringEventLoop() {
  var startTime = process.hrtime();
  var sampleSum = 0;
  var sampleCount = 0;

  // Measure event loop scheduling delay
  setInterval(() => {
    var elapsed = process.hrtime(startTime);
    startTime = process.hrtime();
    sampleSum += elapsed[0] * 1e9 + elapsed[1];
    sampleCount++;
  }, 0);

  // Report custom metric every second
  setInterval(() => {
    var samples = sampleSum;
    var count = sampleCount;
    sampleSum = 0;
    sampleCount = 0;

    if (count > 0) {
      var avgNs = samples / count;
      var avgMs = Math.round(avgNs / 1e6);
      client.trackMetric({name: "Event Loop Delay", value: avgMs});
    }
  }, 1000);
}

모든 이벤트에 사용자 지정 속성 추가

다음 코드를 사용하여 모든 이벤트에 사용자 지정 속성을 추가합니다.

appInsights.defaultClient.commonProperties = {
  environment: process.env.SOME_ENV_VARIABLE
};

HTTP GET 요청 추적

다음 코드를 사용하여 HTTP GET 요청을 수동으로 추적합니다.

참고

  • 모든 요청은 기본적으로 추적됩니다. 자동 컬렉션을 사용하지 않도록 설정하려면 .setAutoCollectRequests(false)를 호출하기 전에 start()를 호출합니다.
  • 네이티브 페치 API 요청은 클래식 Application Insights에 의해 자동으로 추적되지 않습니다. 수동 종속성 추적이 필요합니다.
appInsights.defaultClient.trackRequest({name:"GET /customers", url:"http://myserver/customers", duration:309, resultCode:200, success:true});

또는 trackNodeHttpRequest 메서드를 사용하여 요청을 추적할 수 있습니다.

var server = http.createServer((req, res) => {
  if ( req.method === "GET" ) {
      appInsights.defaultClient.trackNodeHttpRequest({request:req, response:res});
  }
  // other work here....
  res.end();
});

서버 시작 시간 추적

다음 코드를 사용하여 서버 시작 시간을 추적합니다.

let start = Date.now();
server.on("listening", () => {
  let duration = Date.now() - start;
  appInsights.defaultClient.trackMetric({name: "server startup time", value: duration});
});

플러시

기본적으로 원격 분석 데이터는 수집 서버로 전송되기 전에 15초 동안 버퍼링됩니다. 애플리케이션의 수명이 짧은 경우(예: CLI 도구) appInsights.defaultClient.flush()를 사용하여 애플리케이션이 종료될 때 버퍼링된 원격 분석을 수동으로 플러시해야 할 수 있습니다.

SDK가 애플리케이션 충돌을 감지하면 appInsights.defaultClient.flush({ isAppCrashing: true })를 사용하여 flush를 호출합니다. 플러시 옵션 isAppCrashing을 사용하면 애플리케이션이 비정상 상태인 것으로 간주되며 원격 분석을 전송하는 데 적합하지 않습니다. 대신 SDK는 모든 버퍼링된 원격 분석을 영구 스토리지에 저장하고 애플리케이션이 종료되도록 합니다. 애플리케이션이 재시작되면 영구 스토리지에 저장된 모든 원격 분석 데이터를 보내려고 합니다.

원격 분석 데이터 필터링 및 전처리

SDK에서 전송되기 전에 원격 분석을 필터링, 수정 또는 보강하는 코드를 작성할 수 있습니다. 처리에는 HTTP 요청 수집 및 종속성 수집과 같은 표준 원격 분석 모듈에서 전송되는 데이터가 포함됩니다.

  • 필터링은 SDK에서 전송되기 전에 원격 분석을 수정하거나 걸러낼 수 있도록 구현할 수 있습니다 ITelemetryProcessor. 예를 들어 로봇의 요청을 제외하여 원격 분석의 양을 줄일 수 있습니다. 샘플링과 달리 전송 또는 삭제되는 항목을 완전히 제어할 수 있지만 집계된 로그에 따라 모든 메트릭에 영향을 줍니다. 항목을 삭제하는 방법에 따라 관련 항목 간을 탐색하는 기능도 손실될 수 있습니다.

  • 속성을 추가하거나 수정하려면 앱에서 보내는 모든 원격 분석에 대해 ITelemetryInitializer를 구현하십시오. 예를 들어 포털에서 데이터를 필터링할 계산 값 또는 버전 번호를 추가할 수 있습니다.

  • 샘플링 은 통계에 영향을 주지 않고 원격 분석의 볼륨을 줄입니다. 관련 데이터 요소를 함께 유지하므로 문제를 진단할 때 데이터 요소를 탐색할 수 있습니다. 포털 내에서 샘플링을 보완하기 위해 총 개수를 곱합니다.

참고

SDK API 는 사용자 지정 이벤트 및 메트릭을 보내는 데 사용됩니다.

Filtering

이 기술을 사용하면 원격 분석 스트림에서 포함되거나 제외되는 항목을 직접 제어할 수 있습니다. 필터링을 사용하여 원격 분석 항목이 Application Insights로 전송되지 않도록 삭제할 수 있습니다. 샘플링과 함께 또는 별도로 필터링을 사용할 수 있습니다.

원격 분석을 필터링하려면 원격 분석 프로세서를 작성하고 등록합니다 TelemetryConfiguration. 모든 원격 분석은 프로세서를 통과합니다. 스트림에서 삭제하거나 체인의 다음 프로세서에 제공하도록 선택할 수 있습니다. HTTP 요청 수집기 및 종속성 수집기와 같은 표준 모듈의 원격 분석 및 직접 추적한 원격 분석이 포함됩니다. 예를 들어 로봇의 요청 또는 성공적인 종속성 호출에 대한 원격 분석을 필터링할 수 있습니다.

경고

프로세서를 사용하여 SDK에서 보낸 원격 분석을 필터링하면 포털에 표시되는 통계가 왜곡되어 관련 항목을 따르기 어려울 수 있습니다.

대신 샘플링을 사용하는 것이 좋습니다.

ITelemetryProcessor 및 ITelemetryInitializer

원격 분석 프로세서와 원격 분석 이니셜라이저의 차이점은 무엇인가요?

  • 그들로 할 수 있는 작업에 일부 겹침이 있습니다. 둘 다 원격 분석의 속성을 추가하거나 수정하는 데 사용할 수 있지만, 해당 용도로 이니셜라이저를 사용하는 것이 좋습니다.
  • 원격 분석 이니셜라이저는 항상 원격 분석 프로세서 전에 실행됩니다.
  • 원격 분석 이니셜라이저를 두 번 이상 호출할 수 있습니다. 규칙에 따라 이미 설정된 속성은 설정하지 않습니다.
  • 원격 분석 프로세서를 사용하면 원격 분석 항목을 완전히 바꾸거나 삭제할 수 있습니다.
  • 등록된 모든 원격 분석 이니셜라이저는 모든 원격 분석 항목에 대해 호출됩니다. 원격 분석 프로세서의 경우 SDK는 첫 번째 원격 분석 프로세서 호출을 보장합니다. 나머지 프로세서가 호출되는지 여부는 이전 원격 분석 프로세서에 의해 결정됩니다.
  • 원격 분석 이니셜라이저를 사용하여 더 많은 속성으로 원격 분석을 보강하거나 기존 속성을 재정의합니다. 원격 분석 프로세서를 사용하여 원격 분석을 필터링합니다.

속성 추가/수정

원격 분석 이니셜라이저를 사용하여 추가 정보로 원격 분석을 보강하거나 표준 원격 분석 모듈에서 설정한 원격 분석 속성을 재정의합니다.

예를 들어 웹 패키지에 대한 Application Insights는 HTTP 요청에 대한 원격 분석을 수집합니다. 기본적으로 응답 코드 >가 =400인 모든 요청에 실패로 플래그를 지정합니다. 대신 400을 성공으로 처리하려는 경우 성공 속성을 설정하는 원격 분석 이니셜라이저를 제공할 수 있습니다.

원격 분석 이니셜라이저를 제공하는 경우 Track*() 메서드를 호출할 때마다 호출됩니다. 이 이니셜라이저에는 표준 원격 분석 모듈에서 호출하는 Track() 메서드가 포함됩니다. 규칙에 따라 이러한 모듈은 이니셜라이저에 의해 이미 설정된 속성을 설정하지 않습니다. 원격 분석 이니셜라이저는 원격 분석 프로세서를 호출하기 전에 호출되므로 이니셜라이저에서 수행하는 모든 보강이 프로세서에 표시됩니다.

원격 분석 프로세서를 사용하여 데이터 전처리

원격 분석 프로세서를 사용하여 수집된 데이터를 처리 및 필터링한 후에 보존용으로 전송할 수 있습니다. 원격 분석 항목을 클라우드로 보내기 전에 원격 분석 프로세서를 추가된 순서대로 하나씩 호출합니다.

public addTelemetryProcessor(telemetryProcessor: (envelope: Contracts.Envelope, context: { http.RequestOptions, http.ClientRequest, http.ClientResponse, correlationContext }) => boolean)

원격 분석 프로세서가 false를 반환하면 해당 원격 분석 항목이 전송되지 않습니다.

모든 원격 분석 프로세서는 검사 및 수정을 위해 원격 분석 데이터 및 봉투를 수신합니다. 그들은 또한 컨텍스트 객체를 받습니다. 해당 개체의 내용은 수동으로 추적된 원격 분석 데이터에 대해 track 메서드를 호출할 때 contextObjects 매개 변수에 의해 정의됩니다. 자동으로 수집된 원격 분석 데이터에 대해 해당 개체는 (자동 종속성 상관 관계를 사용하는 경우) appInsights.getCorrelationContext()에서 제공하는 사용 가능 요청 정보 및 영속 요청 콘텐츠로 채워집니다.

원격 분석 프로세서의 TypeScript 형식은 다음과 같습니다.

telemetryProcessor: (envelope: ContractsModule.Contracts.Envelope, context: { http.RequestOptions, http.ClientRequest, http.ClientResponse, correlationContext }) => boolean;

예를 들어 예외에서 스택 추적 데이터를 제거하는 프로세서를 작성하고 다음과 같이 추가할 수 있습니다.

function removeStackTraces ( envelope, context ) {
  if (envelope.data.baseType === "Microsoft.ApplicationInsights.ExceptionData") {
    var data = envelope.data.baseData;
    if (data.exceptions && data.exceptions.length > 0) {
      for (var i = 0; i < data.exceptions.length; i++) {
        var exception = data.exceptions[i];
        exception.parsedStack = null;
        exception.hasFullStack = false;
      }
    }
  }
  return true;
}

appInsights.defaultClient.addTelemetryProcessor(removeStackTraces);

클라우드 역할 이름 및 클라우드 역할 인스턴스 추가

직접 컨텍스트 태그를 통해 클라우드 역할 이름을 설정합니다.

var appInsights = require("applicationinsights");
appInsights.setup('INSTRUMENTATION_KEY').start();
appInsights.defaultClient.context.tags["ai.cloud.role"] = "your role name";
appInsights.defaultClient.context.tags["ai.cloud.roleInstance"] = "your role instance";

원격 분석 프로세서를 통해 클라우드 역할 이름을 설정합니다.

var appInsights = require("applicationinsights");
appInsights.setup('INSTRUMENTATION_KEY').start();

appInsights.defaultClient.addTelemetryProcessor(envelope => {
    envelope.tags["ai.cloud.role"] = "your role name";
    envelope.tags["ai.cloud.roleInstance"] = "your role instance"
});

여러 연결 문자열 사용

여러 Application Insights 리소스를 만들고 해당 연결 문자열을 사용하여 각각에 서로 다른 데이터를 보낼 수 있습니다.

예시:

let appInsights = require("applicationinsights");

// configure auto-collection under one connection string
appInsights.setup("Connection String A").start();

// track some events manually under another connection string
let otherClient = new appInsights.TelemetryClient("Connection String B");
otherClient.trackEvent({name: "my custom event"});

고급 구성 옵션

클라이언트 개체에는 고급 시나리오에 대한 다양한 옵션 설정이 포함된 config 속성이 포함되어 있습니다. 설정하려면 다음을 사용합니다.

client.config.PROPERTYNAME = VALUE;

해당 속성은 클라이언트마다 고유하므로 appInsights.defaultClient를 사용하여 만든 클라이언트와 별도로 new appInsights.TelemetryClient()를 구성할 수 있습니다.

속성 설명
connectionString Application Insights 리소스용 식별자입니다.
endpointUrl 원격 분석 페이로드를 보낼 수집 엔드포인트입니다.
퀵펄스호스트 라이브 메트릭 원격 분석 데이터를 보낼 라이브 메트릭 스트림 호스트입니다.
프록시HTTP주소 SDK HTTP 트래픽용 프록시 서버. (선택 사항. 기본값은 http_proxy 환경 변수에서 가져옵니다.)
proxyHttpsUrl SDK HTTPS 트래픽용 프록시 서버. (선택 사항. 기본값은 https_proxy 환경 변수에서 가져옵니다.)
HTTP 에이전트 SDK HTTP 트래픽에 사용할 http.Agent입니다. (선택 사항입니다. 기본값은 정의되지 않습니다.)
httpsAgent SDK HTTPS 트래픽에 사용할 https.Agent입니다. (선택 사항입니다. 기본값은 정의되지 않습니다.)
maxBatchSize 수집 엔드포인트에 대한 페이로드에 포함될 원격 분석 항목의 최대 개수입니다. (기본값은 250입니다.)
최대 배치 간격(ms) 페이로드가 maxBatchSize에 도달할 때까지 기다리는 최대 시간입니다. (기본값은 15000입니다.)
AppInsights 비활성화 원격 분석 전송이 사용하지 않도록 설정되었는지 여부를 나타내는 플래그입니다. (기본값은 false입니다.)
샘플링 비율 전송되어야 하는 추적된 원격 분석 항목의 백분율입니다. (기본값은 100입니다.)
correlationIdRetryIntervalMs 구성 요소 간 상관 관계에 대한 ID 검색을 다시 시도하기 전까지 대기하는 시간입니다. (기본값은 30000입니다.)
상관관계헤더제외도메인 교차 구성 요소 상관 헤더 주입에서 제외할 도메인 목록입니다. (기본값. Config.ts 참조)

사용자 지정 이벤트 및 메트릭에 대한 핵심 API

애플리케이션에 몇 줄의 코드를 삽입하여 사용자가 이 코드로 무엇을 하고 있는지 알아보거나 문제를 진단하는 데 도움을 줍니다. 장치 및 데스크톱 앱, 웹 클라이언트 및 웹 서버에서 원격 분석을 보낼 수 있습니다. Application Insights 핵심 원격 분석 API를 사용하여 사용자 지정 이벤트 및 메트릭 및 고유한 버전의 표준 원격 분석을 보냅니다. 이 API는 표준 Application Insights 데이터 수집기에서 사용하는 것과 동일한 API입니다.

API 요약

핵심 API는 (.NET만 해당) 같은 GetMetric 몇 가지 변형을 제외하고 모든 플랫폼에서 균일합니다.

메서드 사용 용도
TrackPageView 페이지, 화면, 창 또는 양식
TrackEvent 사용자 작업 및 기타 이벤트. 사용자 동작을 추적하거나 성능을 모니터링하는 데 사용됩니다.
GetMetric 0차 및 다차원의 메트릭, 중앙에서 구성된 집계, C# 전용입니다.
TrackMetric 큐 길이와 같은 성능 측정은 특정 이벤트와 관련이 없습니다.
TrackException 진단을 위한 예외 로깅 다른 이벤트와 관련하여 발생하는 위치를 추적하고 스택 추적을 검사합니다.
TrackRequest 성능 분석을 위해 서버 요청의 빈도 및 기간을 로깅합니다.
TrackTrace 리소스 진단 로그 메시지입니다. 타사 로그를 캡처할 수도 있습니다.
TrackDependency 앱이 의존하는 외부 구성 요소에 대한 호출 기간 및 빈도 로깅

이러한 원격 분석 호출의 대부분 에 속성 및 메트릭을 연결할 수 있습니다.

필수 조건

Application Insights SDK에 대한 참조가 아직 없는 경우:

  1. Application Insights SDK를 프로젝트에 추가합니다.

  2. 디바이스 또는 웹 서버 코드에 다음을 포함합니다.

    using Microsoft.ApplicationInsights;
    

TelemetryClient 인스턴스 가져오기

다음의 인스턴스 TelemetryClient를 가져옵니다.

참고

Azure Functions v2+ 또는 Azure WebJobs v3+를 사용하는 경우 Azure Functions 모니터링을 참조하세요.

참고

ASP.NET Core 앱 및 .NET/.NET Core 앱용 비 HTTP/작업자의 경우 해당 설명서에 설명된 대로 종속성 주입 컨테이너에서 인스턴스 TelemetryClient 를 가져옵니다.

private TelemetryClient telemetry = new TelemetryClient();

이 메서드가 사용되지 않는다는 메시지가 표시되는 경우 자세한 내용은 microsoft/ApplicationInsights-dotnet#1152 를 참조하세요.

들어오는 HTTP 요청은 자동으로 캡처됩니다. 다른 모듈을 위해 앱의 TelemetryClient 인스턴스를 더 많이 만들고자 할 수도 있습니다. 예를 들어 미들웨어 클래스에 비즈니스 논리 이벤트를 보고하는 인스턴스가 하나 TelemetryClient 있을 수 있습니다. 기계를 식별하기 위해 UserIdDeviceId와 같은 속성을 설정할 수 있습니다. 이 정보는 인스턴스가 보내는 모든 이벤트에 연결됩니다.

TelemetryClient.Context.User.Id = "...";
TelemetryClient.Context.Device.Id = "...";

참고

TelemetryClient 는 스레드 안전합니다.

TrackEvent

Application Insights에서 사용자 지정 이벤트는메트릭 탐색기 에서 집계된 수로 표시하고 진단 검색 에서 개별 항목으로 표시할 수 있는 데이터 요소입니다. (MVC 또는 다른 프레임워크 "이벤트"와는 관련이 없습니다.)

코드에 TrackEvent 호출을 삽입하여 다양한 이벤트를 수집합니다. 예를 들어 사용자가 특정 기능을 선택하는 빈도를 추적할 수 있습니다. 또는 특정 목표를 얼마나 자주 달성하거나 특정 유형의 실수를 하는지 알고 싶을 수 있습니다.

예를 들어 게임 앱에서 사용자가 게임에서 이길 때마다 이벤트를 보냅니다.

telemetry.TrackEvent("WinGame");

Log Analytics의 사용자 지정 이벤트

원격 분석은 customEvents 또는 사용 환경 테이블에서 이용할 수 있습니다. 이벤트는 trackEvent(..) 또는 클릭 분석 자동 수집 플러그인에서 올 수 있습니다.

샘플링이 작동 중인 경우 속성은 itemCount 보다 1큰 값을 표시합니다. 예를 들어 itemCount==10 10개 호출 trackEvent()중 샘플링 프로세스는 그 중 하나만 전송됨을 의미합니다. 올바른 사용자 지정 이벤트 수를 얻으려면 .와 같은 customEvents | summarize sum(itemCount)코드를 사용합니다.

참고

itemCount의 최소값은 1입니다. 레코드 자체는 항목을 나타냅니다.

GetMetric

호출을 효과적으로 사용하여 GetMetric() .NET 및 .NET Core 애플리케이션에 대해 로컬로 사전 집계된 메트릭을 캡처하는 방법을 알아보려면 .NET 및 .NET Core의 사용자 지정 메트릭 컬렉션을 참조하세요.

TrackMetric

참고

Microsoft.ApplicationInsights.TelemetryClient.TrackMetric 은 메트릭을 보내는 기본 방법이 아닙니다. 메트릭은 전송되기 전에 항상 일정 기간 동안 미리 집계되어야 합니다. 오버로드 중 GetMetric(..) 하나를 사용하여 SDK 사전 집계 기능에 액세스하기 위한 메트릭 개체를 가져옵니다.

고유한 사전 집계 논리를 구현하는 경우 메서드를 TrackMetric() 사용하여 결과 집계를 보낼 수 있습니다. 애플리케이션이 시간에 걸친 집계 없이 모든 경우에 별도의 원격 분석 항목을 보내야 하는 경우 이벤트 원격 분석에 대한 사용 사례가 있을 수 있습니다. TelemetryClient.TrackEvent(Microsoft.ApplicationInsights.DataContracts.EventTelemetry)을(를) 참조하세요.

Application Insights는 특정 이벤트에 연결되지 않은 메트릭을 차트로 표시할 수 있습니다. 예를 들어 정기적으로 큐 길이를 모니터링할 수 있습니다. 메트릭을 사용하면 개별 측정값이 변형 및 추세보다 덜 관심이 있으므로 통계 차트가 유용합니다.

Application Insights에 메트릭을 보내려면 API를 TrackMetric(..) 사용할 수 있습니다. 메트릭을 보내는 방법에는 두 가지가 있습니다.

  • 단일 값입니다. 애플리케이션에서 측정을 수행할 때마다 해당 값을 Application Insights로 보냅니다.

    예를 들어 컨테이너의 항목 수를 설명하는 메트릭이 있다고 가정합니다. 특정 기간 동안 먼저 세 개의 항목을 컨테이너에 넣은 다음 두 항목을 제거합니다. 따라서 TrackMetric을 두 번 호출합니다. 먼저 값을 3 전달한 다음, 값을 -2 전달합니다. Application Insights는 두 값을 모두 저장합니다.

  • 집계. 메트릭을 사용할 때 각각의 개별 측정은 거의 관심을 끌지 않습니다. 대신 특정 기간 동안 발생한 일에 대한 요약이 중요합니다. 이러한 요약을 집계라고 합니다.

    앞의 예제에서 해당 기간의 집계 메트릭 합계는 1 메트릭 값의 개수입니다 2. 집계 방법을 사용하는 경우 기간당 한 번만 호출 TrackMetric 하고 집계 값을 보냅니다. 이 방법은 모든 관련 정보를 수집하면서 Application Insights에 적은 수의 데이터 요소를 전송하여 비용 및 성능 오버헤드를 크게 줄일 수 있기 때문에 권장됩니다.

단일 값 예제

단일 메트릭 값을 보내려면 다음을 수행합니다.

var sample = new MetricTelemetry();
sample.Name = "queueLength";
sample.Sum = 42.3;
telemetryClient.TrackMetric(sample);

Log Analytics의 사용자 지정 메트릭

customMetrics 테이블에서 원격 분석을 사용할 수 있습니다. 각 행은 앱에서 trackMetric(..)을(를) 호출한 것을 나타냅니다.

  • valueSum: 측정값의 합계입니다. 평균 값을 얻으려면 으로 valueCount나눕니다.
  • valueCount: 이 trackMetric(..) 호출에 집계된 측정값 수입니다.

참고

valueCount의 최소값은 1입니다. 레코드 자체는 항목을 나타냅니다.

페이지 보기

디바이스 또는 웹 페이지 앱에서 페이지 보기 원격 분석은 각 화면 또는 페이지가 로드될 때 기본적으로 전송됩니다. 그러나 기본값을 변경하여 페이지 보기를 더 많거나 다른 시간에 추적할 수 있습니다. 예를 들어 탭이나 창을 표시하는 앱에서 사용자가 새 창을 열 때마다 페이지를 추적할 수 있습니다.

사용자 및 세션 데이터는 페이지 보기와 함께 속성으로 전송되므로 페이지 보기 원격 분석이 있을 때 사용자 및 세션 차트가 활성 상태로 표시됩니다.

사용자 지정 페이지 보기

telemetry.TrackPageView("GameReviewPage");

Log Analytics의 페이지 원격 분석

Log Analytics에서 두 테이블은 브라우저 작업의 데이터를 표시합니다.

  • pageViews: URL 및 페이지 제목에 대한 데이터를 포함합니다.
  • browserTimings: 들어오는 데이터를 처리하는 데 걸린 시간과 같은 클라이언트 성능에 대한 데이터를 포함합니다.

브라우저가 다른 페이지를 처리하는 데 걸리는 시간을 찾으려면 다음을 수행합니다.

browserTimings
| summarize avg(networkDuration), avg(processingDuration), avg(totalDuration) by name

다른 브라우저의 인기를 검색하려면 다음을 수행합니다.

pageViews
| summarize count() by client_Browser

페이지 보기를 AJAX 호출에 연결하려면 종속성에 조인합니다.

pageViews
| join (dependencies) on operation_Id

추적요청

서버 SDK는 HTTP 요청을 기록하는 데 사용합니다 TrackRequest .

웹 서비스 모듈이 실행되지 않는 컨텍스트에서 요청을 시뮬레이션하려는 경우 직접 호출할 수도 있습니다.

요청 원격 분석을 보내는 권장 방법은 요청이 작업 컨텍스트로 작용하는 경우입니다.

작업 컨텍스트

원격 분석 항목을 작업 컨텍스트와 연결하여 상호 연결할 수 있습니다. 표준 요청 추적 모듈은 HTTP 요청이 처리되는 동안 전송되는 예외 및 기타 이벤트에 대해 수행합니다. 검색분석에서 작업 ID를 사용하여 요청과 연결된 이벤트를 쉽게 찾을 수 있습니다.

원격 분석을 수동으로 추적하는 경우 원격 분석 상관 관계를 확인하는 가장 쉬운 방법은 다음 패턴을 사용하는 것입니다.

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

상관 관계에 대한 자세한 내용은 Application Insights의 원격 분석 상관 관계를 참조하세요.

작업 컨텍스트 StartOperation 설정과 함께 지정한 형식의 원격 분석 항목을 만듭니다. 작업을 종료하거나 StopOperation를 명시적으로 호출하는 경우 원격 분석 항목을 보냅니다. 원격 분석 유형으로 사용하는 RequestTelemetry 경우 해당 기간은 시작과 중지 사이의 시간 제한 간격으로 설정됩니다.

작업 범위 내에서 보고된 원격 분석 항목은 이러한 작업의 자식이 됩니다. 작업 컨텍스트를 중첩할 수 있습니다.

검색에서 작업 컨텍스트는 관련 항목 목록을 만드는 데 사용됩니다.

관련 항목 목록을 보여 주는 스크린샷

사용자 지정 작업 추적에 대한 자세한 내용은 Application Insights .NET SDK를 사용하여 사용자 지정 작업 추적을 참조하세요.

Log Analytics의 요청

Application Insights Analytics에서 요청이 테이블에 표시됩니다requests.

샘플링이 작동 중인 경우 속성은 itemCount 보다 1큰 값을 표시합니다. 예를 들어 itemCount==10 10개 호출 trackRequest()중 샘플링 프로세스는 그 중 하나만 전송됨을 의미합니다. 요청 이름별로 분할된 정확한 요청 수 및 평균 기간을 얻으려면 다음과 같은 코드를 사용합니다.

requests
| summarize count = sum(itemCount), avgduration = avg(duration) by name

TrackException

Application Insights에 예외를 보냅니다.

보고서에는 스택 추적이 포함됩니다.

try
{
    ...
}
catch (Exception ex)
{
    telemetry.TrackException(ex);
}

SDK는 많은 예외를 자동으로 catch하므로 항상 명시적으로 호출 TrackException 할 필요는 없습니다.

Log Analytics의 예외

Application Insights Analytics에서 예외가 테이블에 표시됩니다exceptions.

샘플링이 작동 중인 경우 속성은 itemCount 보다 1큰 값을 표시합니다. 예를 들어 itemCount==10 10개 호출 trackException()중 샘플링 프로세스는 그 중 하나만 전송됨을 의미합니다. 예외 유형별로 구분된 올바른 예외 수를 얻으려면 다음과 같은 코드를 사용합니다.

exceptions
| summarize sum(itemCount) by type

대부분의 중요한 스택 정보는 이미 별도의 변수로 추출되었지만 구조를 분리 details 하여 더 많은 정보를 얻을 수 있습니다. 이 구조체는 동적이므로 결과를 예상한 형식으로 캐스팅해야 합니다. 예시:

exceptions
| extend method2 = tostring(details[0].parsedStack[1].method)

예외를 관련 요청과 연결하려면 조인을 사용합니다.

exceptions
| join (requests) on operation_Id

TrackTrace

"이동 경로 흔적"을 Application Insights에 보내면 TrackTrace를 사용하여 문제를 진단하는 데 도움이 됩니다. 진단 데이터의 청크를 보내고 진단 검색에서 검사할 수 있습니다.

.NET 로그 어댑터에서 이 API를 사용하여 타사 로그를 포털로 보냅니다.

telemetry.TrackTrace(message, SeverityLevel.Warning, properties);

메서드 입력 또는 종료와 같은 진단 이벤트를 기록합니다.

매개 변수 설명
message 진단 데이터입니다. 이름보다 훨씬 길 수 있습니다.
properties 문자열에서 문자열로의 매핑. 포털에서 예외를 필터링 하는 데 더 많은 데이터가 사용됩니다. 기본값은 비어 있는 값으로 기본 설정됩니다.
severityLevel 지원되는 값: SeverityLevel.ts.

메시지 콘텐츠를 검색할 수 있지만 속성 값과 달리 필터링할 수는 없습니다.

크기 제한이 message 속성의 제한보다 훨씬 높습니다. TrackTrace 장점은 메시지에 상대적으로 긴 데이터를 넣을 수 있다는 것입니다. 예를 들어 POST 데이터를 인코딩할 수 있습니다.

메시지에 심각도 수준을 추가할 수도 있습니다. 또한 다른 원격 분석과 마찬가지로 다양한 추적 집합을 필터링하거나 검색하는 데 도움이 되는 속성 값을 추가할 수 있습니다. 예시:

var telemetry = new Microsoft.ApplicationInsights.TelemetryClient();
telemetry.TrackTrace("Slow database response",
                SeverityLevel.Warning,
                new Dictionary<string,string> { {"database", db.ID} });

검색에서 특정 데이터베이스와 관련된 특정 심각도 수준의 모든 메시지를 쉽게 필터링할 수 있습니다.

Log Analytics의 추적

Application Insights Analytics에서 TrackTrace 호출은 traces 테이블에 나타납니다.

샘플링이 작동 중인 경우 속성은 itemCount 보다 1큰 값을 표시합니다. 예를 들어 itemCount==10 10개 호출 trackTrace()중 샘플링 프로세스는 그 중 하나만 전송됨을 의미합니다. 추적 호출의 올바른 수를 얻으려면 다음과 같은 traces | summarize sum(itemCount)코드를 사용합니다.

TrackDependency

호출을 TrackDependency 사용하여 외부 코드 조각에 대한 호출의 응답 시간 및 성공률을 추적합니다. 결과는 포털의 종속성 차트에 표시됩니다. 종속성 호출이 수행될 때마다 다음 코드 조각을 추가해야 합니다.

참고

.NET 및 .NET Core의 경우, 상관 관계에 필요한 속성과 시작 시간 및 지속 시간과 같은 다른 속성을 채우기 위해 TelemetryClient.StartOperation(확장) 메서드를 사용할 수 있으므로, 다음 예제와 같이 사용자 지정 타이머를 만들 필요가 없습니다. 자세한 내용은 Application Insights .NET SDK를 사용하여 사용자 지정 작업 추적에서 나가는 종속성 추적에 대한 섹션을 참조하세요.

var success = false;
var startTime = DateTime.UtcNow;
var timer = System.Diagnostics.Stopwatch.StartNew();
try
{
    success = dependency.Call();
}
catch(Exception ex)
{
    success = false;
    telemetry.TrackException(ex);
    throw new Exception("Operation went wrong", ex);
}
finally
{
    timer.Stop();
    telemetry.TrackDependency("DependencyType", "myDependency", "myCall", startTime, timer.Elapsed, success);
}

서버 SDK에는 특정 종속성 호출(예: 데이터베이스 및 REST API)을 자동으로 검색하고 추적하는 종속성 모듈 이 포함되어 있습니다. 모듈이 작동하려면 서버에 에이전트를 설치해야 합니다.

자동화된 추적이 포착하지 못하는 호출을 추적하려면 이 호출을 사용합니다.

C#에서 표준 종속성 추적 모듈을 해제하려면 ApplicationInsights.config 편집하고 참조를 삭제합니다 DependencyCollector.DependencyTrackingTelemetryModule.

Log Analytics의 종속성

Application Insights Analytics에서 호출이 trackDependencydependencies 테이블에 표시됩니다.

샘플링이 작동 중인 경우 속성은 itemCount 1보다 큰 값을 표시합니다. 예를 들어 itemCount==10 10개 호출 trackDependency()중 샘플링 프로세스는 그 중 하나만 전송됨을 의미합니다. 대상 구성 요소별로 분할된 올바른 종속성 수를 얻으려면 다음과 같은 코드를 사용합니다.

dependencies
| summarize sum(itemCount) by target

종속성을 관련 요청과 연결하려면 연결 작업(조인)을 사용합니다.

dependencies
| join (requests) on operation_Id

데이터 비우기

일반적으로 SDK는 고정 간격(일반적으로 30초) 또는 버퍼가 가득 찼을 때마다 일반적으로 500개 항목으로 데이터를 보냅니다. 경우에 따라 버퍼를 비워야 할 수도 있습니다. 예를 들어 종료되는 애플리케이션에서 SDK를 사용하는 경우입니다.

사용할 때 Flush()을, 우리는 다음의 패턴을 추천합니다:

telemetry.Flush();
// Allow some time for flushing before shutdown.
System.Threading.Thread.Sleep(5000);

FlushAsync()를 사용할 때는 다음 패턴을 사용하는 것을 권장합니다.

await telemetryClient.FlushAsync()
// No need to sleep

원격 분석이 손실되지 않도록 항상 애플리케이션 종료의 일부로 플러시하는 것이 좋습니다.

참고

Autoflush 구성 검토: 파일에서 web.config하면 Application Insights로 계측된 .NET 애플리케이션의 성능이 저하될 수 있습니다. autoflush를 사용하도록 설정하면 메서드를 System.Diagnostics.Trace.Trace* 호출할 때마다 개별 원격 분석 항목이 수집 서비스에 별도의 고유 웹 요청으로 전송됩니다. 이로 인해 웹 서버에서 네트워크 및 스토리지가 소모될 수 있습니다. 향상된 성능을 위해 자동 플러시를 사용하지 않도록 설정하고 보다 효과적인 원격 분석 데이터 전송을 위해 설계된 ServerTelemetryChannel을 활용하는 것이 좋습니다.

이 함수는 서버 원격 분석 채널에 대해 비동기적입니다.

인증된 사용자

웹앱에서 사용자는 기본적으로 쿠키로 식별됩니다 . 사용자가 다른 컴퓨터 또는 브라우저에서 앱에 액세스하거나 쿠키를 삭제하는 경우 두 번 이상 계산될 수 있습니다.

사용자가 앱에 로그인하는 경우 브라우저 코드에서 인증된 사용자 ID를 설정하여 보다 정확한 개수를 얻을 수 있습니다. 사용자의 실제 로그인 이름을 사용할 필요는 없습니다. 이 ID는 해당 사용자에게 고유한 ID여야 합니다. 공백이나 문자를 포함해서는 안 됩니다 ,;=|.

또한 사용자 ID는 세션 쿠키에서 설정되고 서버로 전송됩니다. 서버 SDK가 설치된 경우 인증된 사용자 ID는 클라이언트 및 서버 원격 분석의 컨텍스트 속성의 일부로 전송됩니다. 그런 다음 필터링하고 검색할 수 있습니다.

앱이 사용자를 계정으로 그룹화하면 계정에 대한 식별자를 전달할 수도 있습니다. 동일한 문자 제한이 적용됩니다.

메트릭 탐색기에서 사용자, 인증된 계정사용자 계정을 계산하는 차트를 만들 수 있습니다.

특정 사용자 이름 및 계정을 사용하여 클라이언트 데이터 요소를 검색 할 수도 있습니다.

참고

.NET Core SDK의 ApplicationInsightsServiceOptions 클래스에 있는 EnableAuthenticationTrackingJavaScript 속성은 Application Insights JavaScript SDK에서 보낸 각 추적에 대한 인증 ID로 사용자 이름을 삽입하는 데 필요한 JavaScript 구성을 간소화합니다.

이 속성을 설정 true하면 ASP.NET Core의 사용자 이름이 클라이언트 쪽 원격 분석과 함께 인쇄됩니다. 따라서 ASP.NET Core용 SDK에서 이미 삽입되어 있으므로 수동으로 추가할 appInsights.setAuthenticatedUserContext 필요가 없습니다. 또한 인증 ID는 JavaScript API 참조에 설명된 대로 .NET Core의 SDK가 서버 쪽 원격 분석을 식별하고 사용하는 서버로 전송됩니다.

SPA 웹앱과 같은 ASP.NET Core MVC와 동일한 방식으로 작동하지 않는 JavaScript 애플리케이션의 경우 수동으로 추가 appInsights.setAuthenticatedUserContext 해야 합니다.

속성을 사용하여 데이터 필터링, 검색 및 분할

이벤트, 메트릭, 페이지 보기, 예외 및 기타 원격 분석 데이터에 속성 및 측정값을 연결할 수 있습니다.

속성 은 사용 보고서에서 원격 분석을 필터링하는 데 사용할 수 있는 문자열 값입니다. 예를 들어 앱에서 여러 게임을 제공하는 경우 각 이벤트에 게임의 이름을 연결하여 더 인기 있는 게임을 확인할 수 있습니다.

문자열 길이는 8,192로 제한됩니다. 큰 데이터 청크를 보내려면 .의 메시지 매개 변수 TrackTrace를 사용합니다.

메트릭은 그래픽으로 표시할 수 있는 숫자 값입니다. 예를 들어 게이머가 달성한 점수가 점진적으로 증가하는지 확인할 수 있습니다. 그래프는 이벤트와 함께 전송되는 속성으로 구분하여 다른 게임에 대해 별도의 그래프 또는 누적 그래프를 가져올 수 있습니다.

메트릭 값을 올바르게 표시하려면 0보다 크거나 같아야 합니다.

사용할 수 있는 속성, 속성 값 및 메트릭의 수에는 몇 가지 제한이 있습니다 .

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

중요합니다

속성에 개인 식별 정보를 기록하지 않도록 합니다.

속성 및 메트릭을 설정하는 다른 방법

더 편리한 경우 별도의 개체에서 이벤트의 매개 변수를 수집할 수 있습니다.

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

경고

동일한 원격 분석 항목 인스턴스(event 이 예제에서는)를 여러 번 호출 Track*() 하는 데 다시 사용하지 마세요. 이러한 관행은 잘못된 구성으로 원격 분석이 전송되도록 할 수 있습니다.

Log Analytics의 사용자 지정 측정 및 속성

Log Analytics에서 사용자 지정 메트릭 및 속성은 각 원격 분석 레코드의 customMeasurementscustomDimensions 특성에 표시됩니다.

예를 들어 요청 원격 분석에 "game"이라는 속성을 추가하는 경우 이 쿼리는 "game"의 다양한 값 발생 수를 계산하고 사용자 지정 메트릭 "점수"의 평균을 표시합니다.

requests
| summarize sum(itemCount), avg(todouble(customMeasurements.score)) by tostring(customDimensions.game)

다음 사항을 확인합니다.

  • JSON에서 customDimensions 값을 추출할 때 동적 형식이 있으므로 이를 customMeasurements 또는 tostring로 캐스팅해야 합니다.
  • 샘플링 가능성을 고려하려면 sum(itemCount)를 사용하고 count()를 사용하지 마세요.

타이밍 이벤트

때로는 작업을 수행하는 데 걸리는 시간을 차트로 표시하려고 합니다. 예를 들어 사용자가 게임에서 선택을 고려하는 데 걸리는 시간을 알고 싶을 수 있습니다. 이 정보를 가져오려면 측정 매개 변수를 사용합니다.

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

사용자 지정 원격 분석의 기본 속성

작성하는 일부 사용자 지정 이벤트에 대한 기본 속성 값을 설정하려면 인스턴스에서 TelemetryClient 설정합니다. 해당 클라이언트에서 전송되는 모든 원격 분석 항목에 연결됩니다.

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

개별 원격 분석 호출이 자신의 속성 사전에 있는 기본값을 재정의할 수 있습니다.

표준 컬렉션 모듈의 데이터를 포함하여, 모든 원격 분석에 속성을 추가하려면, 를 구현하십시오.

원격 분석 사용 안 함

원격 분석의 수집 및 전송을 동적으로 중지하고 시작 하려면 다음을 수행합니다.

using  Microsoft.ApplicationInsights.Extensibility;

TelemetryConfiguration.Active.DisableTelemetry = true;

개발자 모드

디버깅하는 동안 즉시 결과를 볼 수 있도록 파이프라인을 통해 원격 분석을 신속하게 처리하도록 하는 것이 유용합니다. 또한 원격 분석 문제를 추적하는 데 도움이 되는 다른 메시지도 받습니다. 앱 속도가 느려질 수 있으므로 프로덕션 환경에서 해제합니다.

TelemetryConfiguration.Active.TelemetryChannel.DeveloperMode = true;

선택한 사용자 지정 원격 분석에 대한 계측 키 설정

var telemetry = new TelemetryClient();
telemetry.InstrumentationKey = "---my key---";
// ...

동적 연결 문자열

개발, 테스트 및 프로덕션 환경에서 원격 분석을 혼합하지 않도록 하려면 환경에 따라 별도의 Application Insights 리소스를 만들고 키를 변경할 수 있습니다.

구성 파일에서 계측 키를 가져오는 대신 코드에서 설정할 수 있습니다. ASP.NET 서비스와 같이 global.aspx.cs 초기화 메서드에서 키를 설정합니다.

protected void Application_Start()
{
    Microsoft.ApplicationInsights.Extensibility.
    TelemetryConfiguration.Active.InstrumentationKey =
        // - for example -
        WebConfigurationManager.Settings["ikey"];
    ...
}

TelemetryContext (원격 측정 컨텍스트)

TelemetryClient 에는 모든 원격 분석 데이터와 함께 전송되는 값이 포함된 Context 속성이 있습니다. 일반적으로 표준 원격 분석 모듈에 의해 설정되지만 직접 설정할 수도 있습니다. 예시:

telemetry.Context.Operation.Name = "MyOperationName";

이러한 값을 직접 설정하는 경우 값과 표준 값이 혼동되지 않도록 ApplicationInsights.config 관련 줄을 제거하는 것이 좋습니다.

  • 구성 요소: 앱 및 해당 버전입니다.
  • 디바이스: 앱이 실행 중인 디바이스에 대한 데이터입니다. 웹앱에서는 원격 분석을 보내는 서버 또는 클라이언트 디바이스입니다.
  • InstrumentationKey: 원격 분석이 표시되는 Azure의 Application Insights 리소스입니다. 일반적으로 ApplicationInsights.config에서 가져옵니다.
  • 위치: 디바이스의 지리적 위치입니다.
  • 작업: 웹앱에서 현재 HTTP 요청입니다. 다른 앱 유형에서는 이벤트를 그룹화하도록 이 값을 설정할 수 있습니다.
    • ID: 진단 검색에서 이벤트를 검사할 때 관련 항목을 찾을 수 있도록 서로 다른 이벤트의 상관 관계를 지정하는 생성된 값입니다.
    • 이름: 일반적으로 HTTP 요청의 URL인 식별자입니다.
    • SyntheticSource: null이 아니거나 비어 있지 않은 경우 요청의 원본이 로봇 또는 웹 테스트로 식별되었음을 나타내는 문자열입니다. 기본적으로 메트릭 탐색기의 계산에서 제외됩니다.
  • 세션: 사용자의 세션입니다. ID는 생성된 값으로 설정되며, 사용자가 잠시 동안 활성화되지 않은 경우 변경됩니다.
  • 사용자: 사용자 정보입니다.

Limits

애플리케이션별(즉, 계측 키별) 메트릭 및 이벤트의 수에 몇 가지 제한이 있습니다. 선택하는 가격 책정 계층에 따라 제한됩니다.

Resource 기본 제한 최대 한도 비고
일당 총 데이터 100GB 지원에 문의 데이터를 줄이기 위해 한도를 설정할 수 있습니다. 더 많은 데이터가 필요한 경우 포털에서 최대 1,000GB로 한도를 늘릴 수 있습니다. 1,000GB보다 큰 용량이 필요한 경우 AIDataCap@microsoft.com으로 이메일을 보내세요.
Throttling 32,000 이벤트/초 지원에 문의 제한은 분을 기준으로 측정됩니다.
데이터 보존 로그 30~730일 730일 이 리소스는 로그용입니다.
데이터 보존 메트릭 90일 90일 이 리소스는 메트릭 탐색기용입니다.
가용성 다단계 테스트 자세한 결과 보존 90일 90일 이 리소스는 각 단계의 자세한 결과를 제공합니다.
최대 원격 분석 항목 크기 64KB 64KB
일괄 처리당 최대 원격 분석 항목 수 64,000 64,000
속성 및 메트릭 이름 길이 150 150 형식 스키마를 참조하세요.
속성 값 문자열 길이 8,192 8,192 형식 스키마를 참조하세요.
추적 및 예외 메시지 길이 32,768 32,768 형식 스키마를 참조하세요.
Application Insights 리소스당 가용성 테스트 100 100
리소스 그룹당 가용성 테스트 수 800 800 Azure Resource Manager 참조
가용성 테스트 테스트당 최대 리디렉션 10 10
가용성 테스트 최소 테스트 빈도 300초 5분 미만의 사용자 지정 테스트 빈도에는 사용자 지정 TrackAvailability 구현이 필요합니다.
.NET Profiler스냅샷 디버거 데이터 보존 2주 지원에 문의 최대 보존 기간 제한은 6개월입니다.
하루에 전송되는 .NET Profiler 데이터 제한 없음 제한 없음
하루에 전송되는 스냅샷 디버거 데이터 모니터링되는 앱별로 하루에 스냅샷 30개 제한 없음 구성을 통해 애플리케이션별로 수집되는 스냅샷 수를 수정할 수 있습니다.

가격 책정 및 할당량에 대한 자세한 내용은 Application Insights 요금 청구를 참조하세요.

데이터 속도 제한에 도달하지 않도록 하려면 샘플링을 사용합니다.

데이터 보존 기간을 확인하려면 데이터 보존 및 개인 정보를 참조하세요.

문제 해결

"데이터 없음" 시나리오 및 로그 사용자 지정을 비롯한 문제 해결 정보는 Application Insights의 Node.js 앱 및 서비스 모니터링 문제 해결을 참조하세요.

다음 단계