Azure Application Insights JavaScript SDK는 웹 애플리케이션을 추적하고, 모니터링하고, 디버깅하기 위한 구성을 제공합니다.
SDK 구성
이러한 구성 필드는 선택 사항이며 달리 명시되지 않는 한 기본값은 false입니다.
SDK 구성을 추가하는 방법에 대한 지침은 SDK 구성 추가를 참조하세요.
| 이름 | 유형 | 기본값 |
|---|---|---|
| 계정 ID 앱이 사용자를 계정으로 그룹화하는 경우 계정 ID(선택 사항)입니다. 공백, 쉼표, 세미콜론, 등호 또는 세로 막대를 사용할 수 없습니다. |
문자열 | null |
| 요청 컨텍스트 추가 API 호출을 시작할 때 컨텍스트를 사용하여 종속성 로그를 보강하는 방법을 제공합니다. 기본값은 정의되지 않았습니다. xhr 관련 컨텍스트를 구성하는 경우 xhr이 존재하는지 확인해야 합니다.
fetch request 관련 컨텍스트를 구성하는 경우 fetch response 및 fetch가 존재하는지 확인해야 합니다. 그렇지 않으면 필요한 데이터를 가져오지 못할 수도 있습니다. |
(requestContext: IRequestionContext) => {[key: string]: any} | 정의되지 않음 |
| ajaxPerfLookupDelay 기본값은 25ms입니다. Ajax 요청에 대한 windows.performance 타이밍 찾기를 다시 시도하기 전에 대기하는 시간입니다. 시간은 밀리초 단위이고 setTimeout()에 직접 전달됩니다. |
numeric | 이십오 (25) |
| appId (앱 ID) AppId는 클라이언트에서 발생하는 AJAX 종속성과 서버 쪽 요청 간의 상관 관계에 사용됩니다. 알림 API가 설정된 경우 자동으로 사용할 수 없고 구성에서 수동으로 설정할 수 있습니다. 기본값은 null입니다. |
문자열 | null |
| 자동_페이지_방문_시간_추적 True인 경우 페이지 보기에서 이전에 계측된 페이지의 보기 시간이 추적되어 원격 분석으로 전송되고 현재 페이지 보기에 대해 새 타이머가 시작됩니다. PageVisitTime에서 milliseconds이라는 사용자 지정 메트릭으로 전송되고 Date now() 함수(사용 가능한 경우)를 통해 계산되고 (새 Date())로 돌아갑니다. now()를 사용할 수 없는 경우(IE8 이하) getTime()입니다. 기본값은 false입니다. |
부울 | 거짓 |
| convertUndefined 사용자에게 정의되지 않은 필드를 사용자 정의 값으로 변환하는 옵션을 제공합니다. |
any |
정의되지 않음 |
| cookieCfg 기본적으로 쿠키 사용이 활성화되어 있습니다. 전체 기본값은 ICookieCfgConfig 설정을 참조하세요. |
ICookieCfgConfig [선택 사항] (2.6.0 이상) |
정의되지 않음 |
| cookieDomain 사용자 지정 쿠키 도메인입니다. 하위 도메인에서 Application Insights 쿠키를 공유하려는 경우에 유용합니다. (v2.6.0 이상) cookieCfg.domain을 정의하는 경우 이 값보다 우선 적용됩니다. |
cookieCfg.domain의 별칭[선택 사항] |
null |
| cookiePath 사용자 지정 쿠키 경로입니다. 애플리케이션 게이트웨이 뒤에서 Application Insights 쿠키를 공유하려는 경우 유용합니다. cookieCfg.path가 정의되면 우선 적용됩니다. |
cookieCfg.path의 별칭[선택 사항] (2.6.0 이상) |
null |
| correlationHeaderDomains 특정 도메인에 대한 상관 관계 헤더를 사용하도록 설정합니다. |
문자열[] | 정의되지 않음 |
| 상관관계헤더제외도메인 특정 도메인에 대한 상관 관계 헤더를 사용하지 않도록 설정합니다. |
문자열[] | 정의되지 않음 |
| correlationHeaderExcludePatterns 정규식을 사용하는 상관 관계 헤더를 사용하지 않도록 설정합니다. |
regex[] | 정의되지 않음 |
| createPerfMgr 필요한 경우 및 enablePerfMgr이 활성화된 경우 IPerfManager 인스턴스를 생성하기 위해 호출되는 콜백 함수를 사용하면 초기화 후 필요 없이 PerfManager()의 기본 생성을 재정의할 수 setPerfMgr() 있습니다. |
(core: IAppInsightsCore, notificationManager: INotificationManager) => IPerfManager | 정의되지 않음 |
| 사용자 지정 헤더 사용자가 사용자 지정 엔드포인트를 사용할 때 추가 헤더를 제공할 수 있는 기능입니다. customHeaders는 비콘 발신자가 사용되는 브라우저 종료 순간에 추가되지 않습니다. 또한 IE9 이하에서는 사용자 지정 헤더 추가가 지원되지 않습니다. |
[{header: string, value: string}] |
정의되지 않음 |
| diagnosticLogInterval 내부 로깅 큐의 (내부) 폴링 간격(밀리초)입니다. |
numeric | 1만 |
| Ajax 추적 비활성화 True인 경우 Ajax 호출이 자동으로 수집되지 않습니다. 기본값은 false입니다. |
부울 | 거짓 |
| 쿠키 사용 비활성화 기본값: false. SDK에서 쿠키 사용을 비활성화할지 여부를 나타내는 부울입니다. True인 경우 SDK가 쿠키의 데이터를 저장하거나 읽지 않습니다. (v2.6.0 이상) cookieCfg.enabled가 정의되면 우선 적용됩니다. core.getCookieMgr().setEnabled(true)를 통해 초기화 후 쿠키 사용을 다시 활성화할 수 있습니다. |
cookieCfg.enabled의 별칭[선택 사항] |
거짓 |
| 상관 관계 헤더 비활성화 False인 경우 SDK에서 모든 종속성 요청에 두 개의 헤더('Request-Id' 및 'Request-Context')를 추가하여 서버 쪽의 해당 요청과 상관 관계를 설정합니다. 기본값은 false입니다. |
부울 | 거짓 |
| 데이터 손실 분석 비활성화 False인 경우 내부 원격 분석 보낸 사람 버퍼를 시작할 때 아직 보내지 않은 항목을 확인합니다. |
부울 | 맞다 |
| disableExceptionTracking (예외 추적 비활성화) True인 경우 예외가 자동으로 수집되지 않습니다. 기본값은 false입니다. |
부울 | 거짓 |
disableFetchTrackingdisableFetchTracking의 기본 설정은 false입니다. 즉, 사용하도록 설정됩니다. 그러나 2.8.10 이전 버전에서는 기본적으로 사용하지 않도록 설정되었습니다.
true로 설정하면 페치 요청이 자동으로 수집되지 않습니다. 버전 2.8.0에서 기본 설정이 true에서 false로 변경되었습니다. |
부울 | 거짓 |
| disableFlushOnBeforeUnload 기본값: false. True인 경우 onBeforeUnload 이벤트가 트리거될 때 flush 메서드가 호출되지 않습니다. |
부울 | 거짓 |
| Ikey 사용 중단 메시지 비활성화 계측 키 사용 중단 오류 메시지를 사용하지 않도록 설정합니다. True이면 오류 메시지가 전송되지 않습니다. |
부울 | 맞다 |
| 계측 키 검증 비활성화 True인 경우 계측 키 유효성 검사를 무시합니다. 기본값은 거짓입니다. |
부울 | 거짓 |
| 원격 측정 비활성화 True인 경우 원격 분석이 수집되거나 전송되지 않습니다. 기본값은 false입니다. |
부울 | 거짓 |
| XHR 비활성화 기본적으로 XMLHttpRequest나 XDomainRequest(Internet Explorer < 버전 9의 경우)를 사용하지 말고 대신 fetch()나 sendBeacon을 사용해 보세요. 다른 전송을 사용할 수 없는 경우 XMLHttpRequest를 사용합니다. |
부울 | 거짓 |
| 분산 추적 모드 분산 추적 모드를 설정합니다. AI_AND_W3C 모드 또는 W3C 모드를 설정하는 경우 W3C 추적 컨텍스트 헤더(traceparent/tracestate)가 생성되고 나가는 모든 요청에 포함됩니다. AI_AND_W3C는 Application Insights로 계측되는 레거시 서비스와의 하위 호환성을 위해 제공됩니다. |
numeric 또는 DistributedTracingModes |
DistributedTracing Modes.AI_AND_W3C |
| enableAjaxErrorStatusText (AJAX 오류 상태 텍스트 활성화) 기본값: false. True인 경우 실패한 AJAX 요청에 대한 종속성 이벤트에 응답 오류 데이터 텍스트 부울을 포함합니다. |
부울 | 거짓 |
| Ajax 성능 추적 활성화 (enableAjaxPerfTracking) 기본값: false. 보고된 Ajax(XHR 및 페치) 메트릭에 추가 브라우저 window.performance 타이밍을 조회하고 포함할 수 있도록 하는 플래그입니다. |
부울 | 거짓 |
| 자동 경로 추적 활성화 SPA(단일 페이지 애플리케이션)의 경로 변경 내용을 자동으로 추적합니다. True인 경우 각 경로 변경 시 Application Insights에 새 페이지 보기가 전송됩니다. 해시 경로 변경( example.com/foo#bar)도 새 페이지 보기로 기록됩니다.참고: 이 필드를 사용하도록 설정하면 여러 페이지 보기 이벤트가 발생하므로 React 라우터 구성 history개체를 사용하도록 설정 하지 마세요. |
부울 | 거짓 |
| CORS 연관 활성화 True인 경우 SDK에서 모든 CORS 요청에 두 개의 헤더('Request-Id' 및 'Request-Context')를 추가하여 나가는 AJAX 종속성과 해당 서버 쪽 요청 간의 상관 관계를 설정합니다. 기본값은 false입니다. |
부울 | 거짓 |
| enableDebug (디버그 활성화) True인 경우 SDK 로깅 설정에 관계없이 내부 디버깅 데이터가 기록되는 대신 예외로 throw됩니다. 기본값은 false입니다. 참고: 이 설정을 사용하면 내부 오류가 발생할 때마다 원격 분석이 삭제됩니다. SDK의 구성 또는 사용과 관련된 문제를 신속하게 식별하는 데 유용할 수 있습니다. 디버깅하는 동안 원격 분석이 손실되지 않게 하려면 loggingLevelConsole 대신 loggingLevelTelemetry 또는 enableDebug을 사용하는 것이 좋습니다. |
부울 | 거짓 |
| enablePerfMgr 사용하도록 설정하면(true) doPerf() 도우미를 통해 perfEvents를 내보내도록 계측된 코드에 대한 로컬 perfEvents를 만듭니다. 이는 사용량에 따라 또는 계측된 코드 내에서 필요에 따라 SDK 내의 성능 문제를 식별할 수 있습니다. |
부울 | 거짓 |
| 요청 헤더 추적 활성화 True인 경우 AJAX 및 페치 요청 헤더가 추적되고 기본값은 false입니다. ignoreHeaders가 구성되지 않은 경우 권한 부여 및 X-API-Key 헤더가 기록되지 않습니다. |
부울 | 거짓 |
| 응답 헤더 추적 활성화 True인 경우 AJAX 및 페치 요청의 응답 헤더가 추적되고 기본값은 false입니다. ignoreHeaders가 구성되지 않은 경우 WWW-Authenticate 헤더가 기록되지 않습니다. |
부울 | 거짓 |
| 세션스토리지버퍼활성화 기본값은 true입니다. True인 경우 모든 전송하지 않은 원격 분석을 포함하는 버퍼가 세션 스토리지에 저장됩니다. 페이지가 로드되면 버퍼가 복원됩니다. |
부울 | 맞다 |
| 처리되지 않은 프로미스 거부 추적 활성화 True인 경우 처리되지 않은 약속 거부가 JavaScript 오류로 자동으로 수집됩니다. disableExceptionTracking이 true인 경우(예외를 추적하지 않음) 구성 값이 무시되고 처리되지 않은 약속 거부가 보고되지 않습니다. |
부울 | 거짓 |
| eventsLimitInMem 세션 스토리지(기본값)를 사용하지 않을 때 SDK가 이벤트를 삭제하기 시작하기 전에 메모리에 보관할 수 있는 이벤트 수입니다. |
숫자 | 1만 |
| 자동 추적 패턴에서 요청 제외 (excludeRequestFromAutoTrackingPatterns) XMLHttpRequest 또는 Fetch 요청에 대한 자동 추적에서 특정 경로를 제외하는 방법을 제공합니다. 정의된 경우 요청 URL이 정규식 패턴과 일치하는 Ajax/fetch 요청에 대해 자동 추적이 해제됩니다. 기본값은 정의되지 않았습니다. |
string[] | RegExp[] | 정의되지 않음 |
| featureOptIn 기능 옵트인 세부 정보를 설정합니다. 이 구성 필드는 버전 3.0.3 이상에서만 사용할 수 있습니다. |
IFeatureOptIn | 정의되지 않음 |
| 아이디 길이 새 임의 세션 및 사용자 ID를 생성하는 데 사용되는 기본 길이를 식별합니다. 기본값은 22이고, 이전 기본값(v2.5.8 이하)은 5입니다. 이전 최대 길이를 유지해야 하는 경우 값을 5로 설정해야 합니다. |
numeric | 22 (이십이) |
| ignoreHeaders AJAX 및 페치 요청 및 응답 헤더는 로그 데이터에서 무시됩니다. 기본값을 재정의하거나 취소하려면 제외할 모든 헤더가 있는 배열을 추가하거나 구성에 빈 배열을 추가합니다. |
문자열[] | ["인증", "X-API-Key", "WWW-인증"] |
| isBeaconApiDisabled False인 경우 SDK가 비콘 API를 사용하여 모든 원격 분석을 전송합니다. |
부울 | 맞다 |
| isBrowserLinkTrackingEnabled (브라우저 링크 추적 기능 사용 가능 여부) 기본값은 false입니다. True인 경우 SDK가 모든 브라우저 링크 요청을 추적합니다. |
부울 | 거짓 |
| isRetryDisabled 기본값: false. False인 경우 206(부분 성공), 408(시간 초과), 429(너무 많은 요청), 500(내부 서버 오류), 503(서비스를 사용할 수 없음), 0(오프라인, 검색된 경우만)에서 다시 시도합니다. |
부울 | 거짓 |
| 저장소 사용 불가 여부 True인 경우 SDK가 로컬 및 세션 스토리지에서 데이터를 저장하거나 읽지 않습니다. 기본값은 false입니다. |
부울 | 거짓 |
| loggingLevelConsole 내부 Application Insights 오류를 콘솔에 기록합니다. 0: 꺼짐, 1: 심각한 오류만, 2: 모든 항목(오류 및 경고) |
numeric | 0 |
| loggingLevelTelemetry 내부 Application Insights 오류를 원격 분석으로 전송합니다. 0: 꺼짐, 1: 심각한 오류만, 2: 모든 항목(오류 및 경고) |
numeric | 1 |
| maxAjaxCallsPerView 기본값 500 - 페이지 보기당 모니터링할 Ajax 호출 수를 제어합니다. 페이지에서 모든 무제한 Ajax 호출을 모니터링하려면 -1로 설정합니다. |
numeric | 500 |
| maxAjaxPerfLookupAttempts 기본값은 3입니다. window.performance 타이밍(사용 가능한 경우)을 찾는 최대 횟수입니다. 모든 브라우저가 XHR 요청의 끝을 보고하기 전에 window.performance를 채우는 것은 아닙니다. 페치 요청의 경우 완료된 후 추가됩니다. |
numeric | 3 |
| maxBatchInterval 전송하기 전에 원격 분석을 일괄 처리하는 시간(밀리초)입니다. |
numeric | 15000 |
| 최대 배치 크기(바이트 단위) 원격 분석 일괄 처리의 최대 크기입니다. 일괄 처리가 이 제한을 초과하는 즉시 전송되고 새 일괄 처리가 시작됩니다. |
numeric | 1만 |
| namePrefix localStorage 및 세션 쿠키 이름의 이름 접미사로 사용되는 선택적 값입니다. |
문자열 | 정의되지 않음 |
| onunload 비콘 비활성화 기본값: false. 탭이 닫히면 SDK가 비콘 API를 사용하여 나머지 모든 원격 분석을 전송합니다. |
부울 | 거짓 |
| onunloadDisableFetch 페치 keepalive가 지원되는 경우 언로드 중에 이벤트를 보내는 데 사용하지 않으면 유지 관리 없이 fetch()로 대체됩니다. |
부울 | 거짓 |
| 페이지뷰 지속시간 무시 True인 경우 trackPageView의 기본 동작이 trackPageView가 호출될 때 페이지 보기 기간의 끝을 기록하도록 변경됩니다. False로 설정하고 trackPageView에 사용자 지정 기간을 제공하지 않는 경우 페이지 보기 성능이 탐색 타이밍 API를 사용하여 계산됩니다. 기본값은 false입니다. |
부울 | 거짓 |
| perfEvtsSendAll enablePerfMgr가 사용하도록 설정되고 IPerfManager가 INotificationManager.perfEvent()를 실행하는 경우 이 플래그는 모든 이벤트(true)에 대해 또는 '부모' 이벤트(false <기본값>)에 대해서만 이벤트가 생성되고 모든 수신기에 전송되는지 여부를 결정합니다. 부모 IPerfEvent는 이 이벤트가 생성되는 시점에서 다른 IPerfEvent가 실행 중이지 않고 parent 속성이 Null이거나 정의되지 않은 경우의 이벤트입니다. v2.5.7 이상 |
부울 | 거짓 |
| 샘플링 비율 전송되는 이벤트의 백분율입니다. 기본값은 100입니다. 즉, 모든 이벤트가 전송됩니다. 대규모 애플리케이션에 대한 데이터 상한을 유지하려는 경우에 설정합니다. |
numeric | 100 |
| sdkExtension SDK 확장 이름을 설정합니다. 영문자만 사용할 수 있습니다. 확장명이 'ai.internal.sdkVersion' 태그에 접두사로 추가됩니다(예: 'ext_javascript:2.0.0'). 기본값은 null입니다. |
문자열 | null |
| sessionCookiePostfix 세션 쿠키 이름의 이름 접두사로 사용되는 선택적 값입니다. 정의되지 않은 경우 namePrefix는 세션 쿠키 이름의 이름 접미사로 사용됩니다. |
문자열 | 정의되지 않음 |
| sessionExpirationMs 세션이 일정 시간(밀리초 단위) 이상 지속되면 해당 세션이 기록됩니다. 기본값은 24시간입니다. |
numeric | 86400000 |
| sessionRenewalMs 사용자가 이 시간(밀리초) 동안 비활성 상태이면 세션이 기록됩니다. 기본값은 30분입니다. |
numeric | 1800000 |
| throttleMgrCfg 키별로 제한 mgr 구성을 설정합니다. 이 구성 필드는 버전 3.0.3 이상에서만 사용할 수 있습니다. |
{[key: number]: IThrottleMgrConfig} |
정의되지 않음 |
| userCookiePostfix 사용자 쿠키 이름의 이름 접두사로 사용되는 선택적 값입니다. 정의되지 않으면 사용자 쿠키 이름에 접미사가 추가되지 않습니다. |
문자열 | 정의되지 않음 |
분산 추적
최신 클라우드 및 마이크로 서비스 아키텍처를 사용하면 가용성과 처리량을 늘리면서 비용을 절감하는 간단하고 독립적으로 배포 가능한 서비스를 사용할 수 있습니다. 그러나 전체 시스템을 추론하고 디버그하기가 더 어려워졌습니다. 분산 추적은 클라우드 및 마이크로 서비스 아키텍처에 대한 호출 스택과 같은 성능 프로파일러를 제공하여 이 문제를 해결합니다.
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 도 정의합니다. 이 종속성 호출을 통해 시작된 요청 원격 분석은 이 id를 operation_parentId로 사용합니다.
operation_Id, operation_parentId, request.id 및 dependency.id를 사용하여 분산 논리 작업의 뷰를 빌드할 수 있습니다. 이러한 필드는 원격 분석 호출의 인과 관계 순서도 정의합니다.
마이크로 서비스 환경에서 구성 요소의 추적은 다른 스토리지 항목으로 이동됩니다. 모든 구성 요소는 Application Insights에서 자체 연결 문자열을 가질 수 있습니다. 논리 작업에 대한 원격 분석을 가져오기 위해 Application Insights는 모든 스토리지 항목의 데이터를 쿼리합니다.
스토리지 항목 수가 많으면 다음에 찾을 위치에 대한 힌트가 필요합니다. Application Insights 데이터 모델은 이 문제를 해결하기 위해 두 개의 필드, request.source 및 dependency.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 (W3C 추적 컨텍스트) |
|---|---|
Id 및 Request의 Dependency |
parent-id |
Operation_Id |
trace-id |
Operation_ParentId |
이 스팬의 부모 스팬의 parent-id입니다. 루트 범위인 경우 이 필드는 비어 있어야 합니다. |
자세한 내용은 Application Insights 원격 분석 데이터 모델을 참조하세요.
W3C 분산 추적 지원 사용
이 기능은 JavaScript에 대해 기본적으로 사용하도록 설정되며, 호스팅 페이지 도메인이 요청이 전송되는 도메인과 같을 때 헤더가 자동으로 포함됩니다(예: 호스팅 페이지가 example.com 있고 Ajax 요청이 전송 example.com됨). 분산 추적 모드를 변경하려면 구성 필드를 사용합니다distributedTracingMode. AI_AND_W3C는 Application Insights를 이용하여 계측된 기존 서비스를 위한 하위 호환성을 위해 기본적으로 제공됩니다.
-
다음 구성을 추가합니다.
distributedTracingMode: DistributedTracingModes.W3C JavaScript(웹) SDK 로더 스크립트 기반 설정
다음 구성을 추가합니다.
distributedTracingMode: 2 // DistributedTracingModes.W3C
XMLHttpRequest 또는 Fetch Ajax 요청이 하위 도메인을 포함하여 다른 도메인 호스트로 전송되는 경우 상관 관계 헤더는 기본적으로 포함되지 않습니다. 이 기능을 사용하도록 설정하려면 구성 필드를 .로 설정합니다enableCorsCorrelation.true 설정 enableCorsCorrelationtrue하면 모든 XMLHttpRequest 및 Fetch Ajax 요청에 상관 관계 헤더가 포함됩니다. 따라서 호출되는 서버의 애플리케이션이 헤더를 지원하지 traceparent 않는 경우 브라우저/버전이 서버에서 허용하는 헤더에 따라 요청의 유효성을 검사할 수 있는지 여부에 따라 요청이 실패할 수 있습니다.
구성 필드를 사용하여correlationHeaderExcludedDomains 구성 요소 간 상관 관계 헤더 삽입에서 서버의 도메인을 제외할 수 있습니다. 예를 들어 Auth0 ID 공급자로 전송된 요청에서 상관 관계 헤더를 제외하는 데 사용할 correlationHeaderExcludedDomains: ['*.auth0.com'] 수 있습니다.
중요합니다
상관 관계를 사용하도록 설정하는 데 필요한 모든 구성을 보려면 JavaScript 상관 관계 설명서를 참조하세요.
원격 분석 데이터 필터링 및 전처리
SDK에서 전송되기 전에 원격 분석을 필터링, 수정 또는 보강하는 코드를 작성할 수 있습니다. 처리에는 HTTP 요청 수집 및 종속성 수집과 같은 표준 원격 분석 모듈에서 전송되는 데이터가 포함됩니다.
필터링은 SDK에서 전송되기 전에 원격 분석을 수정하거나 걸러낼 수 있도록 구현할 수 있습니다
ITelemetryProcessor. 예를 들어 로봇의 요청을 제외하여 원격 분석의 양을 줄일 수 있습니다. 샘플링과 달리 전송 또는 삭제되는 항목을 완전히 제어할 수 있지만 집계된 로그에 따라 모든 메트릭에 영향을 줍니다. 항목을 삭제하는 방법에 따라 관련 항목 간을 탐색하는 기능도 손실될 수 있습니다.속성을 추가하거나 수정하려면 앱에서 보내는 모든 원격 분석에 대해
ITelemetryInitializer를 구현하십시오. 예를 들어 포털에서 데이터를 필터링할 계산 값 또는 버전 번호를 추가할 수 있습니다.샘플링 은 통계에 영향을 주지 않고 원격 분석의 볼륨을 줄입니다. 관련 데이터 요소를 함께 유지하므로 문제를 진단할 때 데이터 요소를 탐색할 수 있습니다. 포털 내에서 샘플링을 보완하기 위해 총 개수를 곱합니다.
비고
SDK API 는 사용자 지정 이벤트 및 메트릭을 보내는 데 사용됩니다.
Filtering
이 기술을 사용하면 원격 분석 스트림에서 포함되거나 제외되는 항목을 직접 제어할 수 있습니다. 필터링을 사용하여 원격 분석 항목이 Application Insights로 전송되지 않도록 삭제할 수 있습니다. 샘플링과 함께 또는 별도로 필터링을 사용할 수 있습니다.
원격 분석을 필터링하려면 원격 분석 프로세서를 작성하고 등록합니다 TelemetryConfiguration. 모든 원격 분석은 프로세서를 통과합니다. 스트림에서 삭제하거나 체인의 다음 프로세서에 제공하도록 선택할 수 있습니다. HTTP 요청 수집기 및 종속성 수집기와 같은 표준 모듈의 원격 분석 및 직접 추적한 원격 분석이 포함됩니다. 예를 들어 로봇의 요청 또는 성공적인 종속성 호출에 대한 원격 분석을 필터링할 수 있습니다.
JavaScript 웹 애플리케이션
ITelemetryInitializer를 사용하여 JavaScript 웹 애플리케이션에서 원격 분석을 필터링할 수 있습니다.
원격 분석 이니셜라이저 콜백 함수를 만듭니다. 콜백 함수는 처리 중인 이벤트인 매개 변수로 사용됩니다
ITelemetryItem.false를 이 콜백에서 반환하면 결과적으로 원격 분석 항목이 필터링됩니다.var filteringFunction = (envelope) => { if (envelope.data.someField === 'tobefilteredout') { return false; } return true; };텔레메트리 이니셜라이저 콜백을 추가하세요.
appInsights.addTelemetryInitializer(filteringFunction);
ITelemetryProcessor 및 ITelemetryInitializer
원격 분석 프로세서와 원격 분석 이니셜라이저의 차이점은 무엇인가요?
- 그들로 할 수 있는 작업에 일부 겹침이 있습니다. 둘 다 원격 분석의 속성을 추가하거나 수정하는 데 사용할 수 있지만, 해당 용도로 이니셜라이저를 사용하는 것이 좋습니다.
- 원격 분석 이니셜라이저는 항상 원격 분석 프로세서 전에 실행됩니다.
- 원격 분석 이니셜라이저를 두 번 이상 호출할 수 있습니다. 규칙에 따라 이미 설정된 속성은 설정하지 않습니다.
- 원격 분석 프로세서를 사용하면 원격 분석 항목을 완전히 바꾸거나 삭제할 수 있습니다.
- 등록된 모든 원격 분석 이니셜라이저는 모든 원격 분석 항목에 대해 호출됩니다. 원격 분석 프로세서의 경우 SDK는 첫 번째 원격 분석 프로세서 호출을 보장합니다. 나머지 프로세서가 호출되는지 여부는 이전 원격 분석 프로세서에 의해 결정됩니다.
- 원격 분석 이니셜라이저를 사용하여 더 많은 속성으로 원격 분석을 보강하거나 기존 속성을 재정의합니다. 원격 분석 프로세서를 사용하여 원격 분석을 필터링합니다.
속성 추가/수정
원격 분석 이니셜라이저를 사용하여 추가 정보로 원격 분석을 보강하거나 표준 원격 분석 모듈에서 설정한 원격 분석 속성을 재정의합니다.
예를 들어 웹 패키지에 대한 Application Insights는 HTTP 요청에 대한 원격 분석을 수집합니다. 기본적으로 응답 코드 >가 =400인 모든 요청에 실패로 플래그를 지정합니다. 대신 400을 성공으로 처리하려는 경우 성공 속성을 설정하는 원격 분석 이니셜라이저를 제공할 수 있습니다.
원격 분석 이니셜라이저를 제공하는 경우 Track*() 메서드를 호출할 때마다 호출됩니다. 이 이니셜라이저에는 표준 원격 분석 모듈에서 호출하는 Track() 메서드가 포함됩니다. 규칙에 따라 이러한 모듈은 이니셜라이저에 의해 이미 설정된 속성을 설정하지 않습니다. 원격 분석 이니셜라이저는 원격 분석 프로세서를 호출하기 전에 호출되므로 이니셜라이저에서 수행하는 모든 보강이 프로세서에 표시됩니다.
JavaScript 원격 분석 이니셜라이저
필요한 경우 JavaScript 원격 분석 이니셜라이저를 삽입합니다. Application Insights JavaScript SDK의 원격 분석 이니셜라이저에 대한 자세한 내용은 원격 분석 이니셜라이저를 참조하세요.
JavaScript(웹) SDK 로더 스크립트 구성에 onInit 콜백 함수를 추가하여 원격 분석 이니셜라이저를 삽입합니다.
<script type="text/javascript">
!(function (cfg){function e(){cfg.onInit&&cfg.onInit(n)}var x,w,D,t,E,n,C=window,O=document,b=C.location,q="script",I="ingestionendpoint",L="disableExceptionTracking",j="ai.device.";"instrumentationKey"[x="toLowerCase"](),w="crossOrigin",D="POST",t="appInsightsSDK",E=cfg.name||"appInsights",(cfg.name||C[t])&&(C[t]=E),n=C[E]||function(g){var f=!1,m=!1,h={initialize:!0,queue:[],sv:"8",version:2,config:g};function v(e,t){var n={},i="Browser";function a(e){e=""+e;return 1===e.length?"0"+e:e}return n[j+"id"]=i[x](),n[j+"type"]=i,n["ai.operation.name"]=b&&b.pathname||"_unknown_",n["ai.internal.sdkVersion"]="javascript:snippet_"+(h.sv||h.version),{time:(i=new Date).getUTCFullYear()+"-"+a(1+i.getUTCMonth())+"-"+a(i.getUTCDate())+"T"+a(i.getUTCHours())+":"+a(i.getUTCMinutes())+":"+a(i.getUTCSeconds())+"."+(i.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z",iKey:e,name:"Microsoft.ApplicationInsights."+e.replace(/-/g,"")+"."+t,sampleRate:100,tags:n,data:{baseData:{ver:2}},ver:undefined,seq:"1",aiDataContract:undefined}}var n,i,t,a,y=-1,T=0,S=["js.monitor.azure.com","js.cdn.applicationinsights.io","js.cdn.monitor.azure.com","js0.cdn.applicationinsights.io","js0.cdn.monitor.azure.com","js2.cdn.applicationinsights.io","js2.cdn.monitor.azure.com","az416426.vo.msecnd.net"],o=g.url||cfg.src,r=function(){return s(o,null)};function s(d,t){if((n=navigator)&&(~(n=(n.userAgent||"").toLowerCase()).indexOf("msie")||~n.indexOf("trident/"))&&~d.indexOf("ai.3")&&(d=d.replace(/(\/)(ai\.3\.)([^\d]*)$/,function(e,t,n){return t+"ai.2"+n})),!1!==cfg.cr)for(var e=0;e<S.length;e++)if(0<d.indexOf(S[e])){y=e;break}var n,i=function(e){var a,t,n,i,o,r,s,c,u,l;h.queue=[],m||(0<=y&&T+1<S.length?(a=(y+T+1)%S.length,p(d.replace(/^(.*\/\/)([\w\.]*)(\/.*)$/,function(e,t,n,i){return t+S[a]+i})),T+=1):(f=m=!0,s=d,!0!==cfg.dle&&(c=(t=function(){var e,t={},n=g.connectionString;if(n)for(var i=n.split(";"),a=0;a<i.length;a++){var o=i[a].split("=");2===o.length&&(t[o[0][x]()]=o[1])}return t[I]||(e=(n=t.endpointsuffix)?t.location:null,t[I]="https://"+(e?e+".":"")+"dc."+(n||"services.visualstudio.com")),t}()).instrumentationkey||g.instrumentationKey||"",t=(t=(t=t[I])&&"/"===t.slice(-1)?t.slice(0,-1):t)?t+"/v2/track":g.endpointUrl,t=g.userOverrideEndpointUrl||t,(n=[]).push((i="SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details)",o=s,u=t,(l=(r=v(c,"Exception")).data).baseType="ExceptionData",l.baseData.exceptions=[{typeName:"SDKLoadFailed",message:i.replace(/\./g,"-"),hasFullStack:!1,stack:i+"\nSnippet failed to load ["+o+"] -- Telemetry is disabled\nHelp Link: https://go.microsoft.com/fwlink/?linkid=2128109\nHost: "+(b&&b.pathname||"_unknown_")+"\nEndpoint: "+u,parsedStack:[]}],r)),n.push((l=s,i=t,(u=(o=v(c,"Message")).data).baseType="MessageData",(r=u.baseData).message='AI (Internal): 99 message:"'+("SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details) ("+l+")").replace(/\"/g,"")+'"',r.properties={endpoint:i},o)),s=n,c=t,JSON&&((u=C.fetch)&&!cfg.useXhr?u(c,{method:D,body:JSON.stringify(s),mode:"cors"}):XMLHttpRequest&&((l=new XMLHttpRequest).open(D,c),l.setRequestHeader("Content-type","application/json"),l.send(JSON.stringify(s)))))))},a=function(e,t){m||setTimeout(function(){!t&&h.core||i()},500),f=!1},p=function(e){var n=O.createElement(q),e=(n.src=e,t&&(n.integrity=t),n.setAttribute("data-ai-name",E),cfg[w]);return!e&&""!==e||"undefined"==n[w]||(n[w]=e),n.onload=a,n.onerror=i,n.onreadystatechange=function(e,t){"loaded"!==n.readyState&&"complete"!==n.readyState||a(0,t)},cfg.ld&&cfg.ld<0?O.getElementsByTagName("head")[0].appendChild(n):setTimeout(function(){O.getElementsByTagName(q)[0].parentNode.appendChild(n)},cfg.ld||0),n};p(d)}cfg.sri&&(n=o.match(/^((http[s]?:\/\/.*\/)\w+(\.\d+){1,5})\.(([\w]+\.){0,2}js)$/))&&6===n.length?(d="".concat(n[1],".integrity.json"),i="@".concat(n[4]),l=window.fetch,t=function(e){if(!e.ext||!e.ext[i]||!e.ext[i].file)throw Error("Error Loading JSON response");var t=e.ext[i].integrity||null;s(o=n[2]+e.ext[i].file,t)},l&&!cfg.useXhr?l(d,{method:"GET",mode:"cors"}).then(function(e){return e.json()["catch"](function(){return{}})}).then(t)["catch"](r):XMLHttpRequest&&((a=new XMLHttpRequest).open("GET",d),a.onreadystatechange=function(){if(a.readyState===XMLHttpRequest.DONE)if(200===a.status)try{t(JSON.parse(a.responseText))}catch(e){r()}else r()},a.send())):o&&r();try{h.cookie=O.cookie}catch(k){}function e(e){for(;e.length;)!function(t){h[t]=function(){var e=arguments;f||h.queue.push(function(){h[t].apply(h,e)})}}(e.pop())}var c,u,l="track",d="TrackPage",p="TrackEvent",l=(e([l+"Event",l+"PageView",l+"Exception",l+"Trace",l+"DependencyData",l+"Metric",l+"PageViewPerformance","start"+d,"stop"+d,"start"+p,"stop"+p,"addTelemetryInitializer","setAuthenticatedUserContext","clearAuthenticatedUserContext","flush"]),h.SeverityLevel={Verbose:0,Information:1,Warning:2,Error:3,Critical:4},(g.extensionConfig||{}).ApplicationInsightsAnalytics||{});return!0!==g[L]&&!0!==l[L]&&(e(["_"+(c="onerror")]),u=C[c],C[c]=function(e,t,n,i,a){var o=u&&u(e,t,n,i,a);return!0!==o&&h["_"+c]({message:e,url:t,lineNumber:n,columnNumber:i,error:a,evt:C.event}),o},g.autoExceptionInstrumented=!0),h}(cfg.cfg),(C[E]=n).queue&&0===n.queue.length?(n.queue.push(e),n.trackPageView({})):e();})({
src: "https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js",
crossOrigin: "anonymous", // When supplied this will add the provided value as the cross origin attribute on the script tag
onInit: function (sdk) {
sdk.addTelemetryInitializer(function (envelope) {
envelope.data = envelope.data || {};
envelope.data.someField = 'This item passed through my telemetry initializer';
});
}, // Once the application insights instance has loaded and initialized this method will be called
// sri: false, // Custom optional value to specify whether fetching the snippet from integrity file and do integrity check
cfg: { // Application Insights Configuration
connectionString: "YOUR_CONNECTION_STRING"
}});
</script>
원격 분석 항목에서 사용할 수 있는 비사용자 지정 속성에 대한 요약은 Application Insights Export 데이터 모델을 참조하세요.
원하는 만큼 이니셜라이저를 추가할 수 있습니다. 추가되는 순서대로 호출합니다.
클라우드 역할 이름 및 클라우드 역할 인스턴스 추가
원격 분석 이니셜라이저를 사용하여 ai.cloud.role 및 ai.cloud.roleInstance 태그를 설정합니다. 이러한 태그는 구성 요소가 Azure Monitor의 애플리케이션 맵 에 표시되는 방식을 정의합니다.
appInsights.queue.push(() => {
appInsights.addTelemetryInitializer((envelope) => {
envelope.tags["ai.cloud.role"] = "your role name";
envelope.tags["ai.cloud.roleInstance"] = "your role instance";
});
});
쿠키 관리
버전 2.6.0부터 Azure Application Insights JavaScript SDK는 초기화 후 사용하지 않도록 설정하고 다시 사용하도록 설정할 수 있는 인스턴스 기반 쿠키 관리를 제공합니다.
disableCookiesUsage 또는 cookieCfg.enabled 구성을 사용하여 초기화하는 동안 쿠키를 사용하지 않도록 설정한 경우 setEnabled의 함수를 사용하여 쿠키를 다시 사용하도록 설정할 수 있습니다.
인스턴스 기반 쿠키 관리는 이전의 CoreUtils 전역 함수 disableCookies(), setCookie(), getCookie(), deleteCookie()를 대체합니다.
버전 2.6.0에서 도입된 트리 흔들림 개선 사항을 활용하려면 더 이상 전역 함수를 사용하지 않는 것이 좋습니다.
쿠키 구성
ICookieMgrConfig는 2.6.0에 추가된 인스턴스 기반 쿠키 관리를 위한 쿠키 구성입니다. 제공된 옵션을 사용하면 SDK에서 쿠키 사용을 사용하거나 사용하지 않도록 설정할 수 있습니다. 사용자 지정 쿠키 도메인 및 경로를 설정하고 쿠키 가져오기, 설정 및 삭제를 위한 함수를 사용자 지정할 수도 있습니다.
ICookieMgrConfig 옵션은 다음 표에 정의되어 있습니다.
| 이름 | 유형 | 기본값 | 설명 |
|---|---|---|---|
| 활성화됨 | 부울 | 맞다 | SDK의 현재 인스턴스는 이 부울을 사용하여 쿠키 사용을 활성화할지 여부를 나타냅니다. False인 경우 이 구성으로 초기화된 SDK의 인스턴스가 쿠키의 데이터를 저장하거나 읽지 않습니다. |
| 도메인 | 문자열 | null | 사용자 지정 쿠키 도메인입니다. 하위 도메인에서 Application Insights 쿠키를 공유하려는 경우에 유용합니다. 지정하지 않으면 루트 cookieDomain 값의 값이 사용됩니다. |
| 경로 | 문자열 | / | 쿠키에 사용할 경로를 지정합니다. 지정하지 않으면 루트 cookiePath 값의 값이 사용됩니다. |
| 쿠키 무시 | 문자열[] | 정의되지 않음 | 쿠키 이름을 무시하도록 지정하면 일치하는 쿠키 이름을 읽거나 쓰지 않습니다. 여전히 명시적으로 제거되거나 삭제될 수 있습니다.
blockedCookies 구성에서 이름을 반복할 필요가 없습니다. (v2.8.8 이상) |
| 차단된 쿠키 | 문자열[] | 정의되지 않음 | 절대 쓰지 않을 쿠키 이름을 지정합니다. 쿠키 이름을 만들거나 업데이트할 수 없지만 ignoreCookies에 포함되지 않는 한 계속 읽을 수 있습니다. 여전히 명시적으로 제거되거나 삭제될 수 있습니다. 제공되지 않으면 ignoreCookies의 동일한 목록으로 기본 설정됩니다. (v2.8.8 이상) |
| getCookie | (name: string) => string |
null | 명명된 쿠키 값을 가져오는 함수입니다. 지정되지 않으면 내부 쿠키 구문 분석/캐싱이 사용됩니다. |
| 쿠키설정 | (name: string, value: string) => void |
null | 쿠키를 추가하거나 업데이트하는 경우에만 호출되어 명명된 쿠키를 지정된 값을 사용하여 설정하는 함수입니다. |
| delCookie | (name: string, value: string) => void |
null | 쿠키를 추가 또는 제거할지 여부를 결정하기 위해 값을 구문 분석할 필요가 없도록 지정된 값을 사용하여 명명된 쿠키를 setCookie와 구분하여 삭제하는 함수입니다. 지정하지 않으면 내부 쿠키 구문 분석/캐싱이 사용됩니다. |
원본 맵
소스 맵 지원을 사용하면 예외 원격 분석의 축소된 호출 스택을 수정할 수 있는 기능으로 축소된 JavaScript 코드를 디버그할 수 있습니다.
- 예외 세부 정보 패널의 모든 현재 통합과 호환
- SDK 업그레이드 없이 Node.JS를 포함하여 모든 현재 및 미래의 JavaScript SDK를 지원합니다.
Blob Storage 계정에 대한 링크
Application Insights는 Azure Storage 계정 Blob 컨테이너에 대한 소스 맵의 업로드를 지원합니다. 소스 맵을 사용하여 엔드투엔드 트랜잭션 세부 정보 페이지에 있는 호출 스택을 축소 해제할 수 있습니다. 원본 맵을 사용하여 JavaScript SDK 또는 Node.js SDK에서 보낸 예외를 축소 해제할 수도 있습니다.
새 스토리지 계정 및 Blob 컨테이너 만들기
기존 스토리지 계정 또는 Blob 컨테이너가 이미 있는 경우 이 단계를 건너뛰어도 됩니다.
스토리지 계정에 Blob 컨테이너를 만듭니다. 공용 액세스 수준을 프라이빗으로 설정하여 소스 맵에 공개적으로 액세스할 수 없도록 합니다.
Blob 컨테이너에 소스 맵 푸시
구성된 Blob 컨테이너에 소스 맵을 자동으로 업로드하도록 구성하여 연속 배포 파이프라인을 스토리지 계정과 통합합니다.
소스 맵을 컴파일하고 배포된 것과 동일한 폴더 구조를 사용하여 Azure Blob Storage 컨테이너에 소스 맵을 업로드할 수 있습니다. 일반적인 사용 사례는 배포 폴더의 접두사로 버전을 추가하는 것입니다(예: 1.2.3/static/js/main.js).
sourcemaps라는 Azure Blob 컨테이너를 통해 축소 해제하면 파이프라인은 sourcemaps/1.2.3/static/js/main.js.map에 있는 소스 맵을 가져오려고 시도합니다.
Azure Pipelines를 통해 소스 맵 업로드(권장)
Azure Pipelines를 사용하여 애플리케이션을 지속적으로 빌드 및 배포하는 경우 Azure 파일 복사 작업을 파이프라인에 추가하여 소스 맵을 자동으로 업로드합니다.
소스 맵 스토리지 계정을 사용하여 Application Insights 리소스 구성
소스 맵 스토리지 계정으로 Application Insights 리소스를 구성하는 두 가지 옵션이 있습니다.
엔드투엔드 트랜잭션 세부 정보 탭
엔드투엔드 트랜잭션 세부 정보 탭에서 축소 해제를 선택합니다. 구성되지 않은 경우 리소스를 구성합니다.
- Azure Portal에서 축소된 예외의 세부 정보를 확인합니다.
- ‘축소 해제’를 선택합니다.
- 리소스가 구성되지 않은 경우 구성합니다.
속성 탭
Application Insights 리소스에 연결된 스토리지 계정 또는 Blob 컨테이너를 구성하거나 변경하려면 다음을 수행합니다.
Application Insights 리소스의 속성 탭으로 이동합니다.
소스 맵 Blob 컨테이너 변경을 선택합니다.
소스 맵 컨테이너로 다른 Blob 컨테이너를 선택합니다.
적용을 선택합니다.
축소되지 않은 호출 스택 보기
축소되지 않은 호출 스택을 보려면 Azure Portal에서 예외 원격 분석 항목을 선택하고, 호출 스택과 일치하는 원본 맵을 찾은 다음, 원본 맵을 Azure Portal의 호출 스택으로 끌어서 놓습니다. 원본 맵은 스택 프레임의 원본 파일과 이름이 동일해야 하지만 map 확장명이 있어야 합니다.
JavaScript 애플리케이션에 대한 원본 맵 지원과 관련된 문제가 발생하는 경우 JavaScript 애플리케이션에 대한 원본 맵 지원 문제 해결을 참조하세요.
트리 쉐이킹
트리 쉐이킹은 최종 JavaScript 번들에서 사용되지 않는 코드를 제거합니다.
트리 쉐이킹을 활용하려면 SDK의 필요한 구성 요소만 코드로 가져옵니다. 이렇게 하면 사용되지 않는 코드가 최종 번들에 포함되지 않으므로 크기가 줄어들고 성능이 향상됩니다.
트리 쉐이킹 개선 사항 및 권장 사항
버전 2.6.0에서는 트리 쉐이킹 알고리즘에 대한 지원을 개선하기 위해 이러한 정적 도우미 클래스의 내부 사용을 더 이상 사용하지 않고 제거했습니다. 이를 통해 npm 패키지는 사용하지 않는 코드를 안전하게 삭제할 수 있습니다.
CoreUtilsEventHelperUtilUrlHelperDateTimeUtilsConnectionStringParser
이제 함수가 모듈에서 최상위 루트로 내보내지므로 더 나은 트리 쉐이킹을 위해 코드를 더 쉽게 리팩터링할 수 있습니다.
정적 클래스는 내보낸 새 함수를 참조하는 const 개체로 변경되었으며 향후 변경 내용은 참조를 추가로 리팩터링할 계획입니다.
트리 쉐이킹 사용되지 않는 함수 및 교체
이 섹션은 사용되지 않는 함수를 사용하고 패키지 크기를 최적화하려는 경우에만 적용됩니다. 대체 함수를 사용하여 크기를 줄이고 모든 버전의 Internet Explorer를 지원하는 것이 좋습니다.
| Existing | 대체 기능 |
|---|---|
| CoreUtils | @microsoft/applicationinsights-core-js |
| CoreUtils._canUseCookies | 없음. 모든 CoreUtils 참조가 최종 코드에 포함되도록 하려면 이를 사용하지 마세요.appInsights.getCookieMgr().setEnabled(true/false)를 사용하여 값을 설정하고 appInsights.getCookieMgr().isEnabled()를 사용하여 값을 확인하도록 쿠키 처리를 리팩터링합니다. |
| CoreUtils.isTypeof | isTypeof |
| CoreUtils.isUndefined | isUndefined |
| CoreUtils.isNullOrUndefined | null이거나 정의되지 않은 |
| CoreUtils.hasOwnProperty | hasOwnProperty |
| CoreUtils.isFunction | isFunction |
| CoreUtils.isObject | isObject |
| CoreUtils.isDate | isDate |
| CoreUtils.isArray | isArray |
| CoreUtils.isError | isError |
| CoreUtils.isString | isString |
| CoreUtils.isNumber | isNumber |
| CoreUtils.isBoolean | isBoolean |
| CoreUtils.toISOString | toISOString 또는 getISOString |
| CoreUtils.arrForEach | arrForEach |
| CoreUtils.arrIndexOf | arrIndexOf |
| CoreUtils.arrMap | arrMap |
| CoreUtils.arrReduce | arrReduce |
| CoreUtils.strTrim | strTrim (문자열의 앞뒤 공백을 제거하는 함수) |
| CoreUtils.objCreate | objCreateFn |
| CoreUtils.objKeys | objKeys |
| CoreUtils.objDefineAccessors | objDefineAccessors |
| CoreUtils 클래스의 addEventHandler 메서드 | 이벤트 처리기 추가 |
| CoreUtils.dateNow | dateNow |
| CoreUtils.isIE | isIE |
| 코어유틸스.쿠키비활성화 | disableCookies 둘 중 하나를 참조하면 이전 버전과의 호환성을 위해 CoreUtils가 참조됩니다. appInsights.getCookieMgr().setEnabled(false)를 사용하도록 쿠키 처리를 리팩터링 |
| CoreUtils.newGuid | 새 GUID 생성 |
| CoreUtils.perfNow | perfNow |
| CoreUtils.newId | 새로운아이디 |
| CoreUtils.randomValue (랜덤 값 생성기) | 임의값 |
| CoreUtils.random32 | 랜덤32 |
| CoreUtils.mwcRandomSeed | mwc랜덤시드 |
| CoreUtils.mwcRandom32 | mwcRandom32 |
| CoreUtils.generateW3CId (W3C ID를 생성하는 기능) | generateW3CId (W3C ID 생성) |
| EventHelper | @microsoft/applicationinsights-core-js |
| EventHelper.Attach | attachEvent |
| EventHelper.AttachEvent | attachEvent |
| EventHelper.Detach | detachEvent |
| EventHelper.DetachEvent (이벤트 해제) | detachEvent |
| Util | @microsoft/applicationinsights-common-js |
| Util.NotSpecified | strNotSpecified |
| Util.createDomEvent (돔 이벤트 생성 기능) | 돔 이벤트 생성 |
| Util.disableStorage | utlDisableStorage |
| Util.isInternalApplicationInsightsEndpoint | isInternalApplicationInsightsEndpoint |
| Util.canUseLocalStorage (로컬 스토리지를 사용할 수 있는지 확인하는 함수) | utlCanUseLocalStorage |
| Util.getStorage | 로컬 스토리지 가져오기 (utlGetLocalStorage) |
| Util.setStorage (스토리지 설정 기능) | utlSet 지역 저장소 |
| Util.removeStorage | 저장소 제거 함수 (utlRemoveStorage) |
| Util.canUseSessionStorage | utlCanUseSessionStorage (세션 스토리지 사용 가능) |
| Util.getSessionStorageKeys (세션 저장소 키 가져오기) | utlGetSessionStorageKeys |
| Util.getSessionStorage | utlGetSessionStorage |
| Util.setSessionStorage (세션 저장소 설정) | utlSetSessionStorage (세션 스토리지를 설정하는 함수) |
| Util.removeSessionStorage | utlRemoveSessionStorage 세션 스토리지 제거 |
| Util.쿠키사용중지 | disableCookies 둘 중 하나를 참조하면 이전 버전과의 호환성을 위해 CoreUtils가 참조됩니다. appInsights.getCookieMgr().setEnabled(false)를 사용하도록 쿠키 처리를 리팩터링 |
| Util.canUseCookies | canUseCookies 둘 중 하나를 참조하면 이전 버전과의 호환성을 위해 CoreUtils가 참조됩니다. appInsights.getCookieMgr().isEnabled()를 사용하도록 쿠키 처리를 리팩터링 |
| Util.disallowsSameSiteNone | uaDisallowsSameSiteNone |
| Util.setCookie | coreSetCookie 참조하면 이전 버전과의 호환성을 위해 CoreUtils가 참조됩니다. appInsights.getCookieMgr().set(name: string, value: string)를 사용하도록 쿠키 처리를 리팩터링 |
| Util.stringToBoolOrDefault | stringToBoolOrDefault |
| Util.getCookie | coreGetCookie 참조하면 이전 버전과의 호환성을 위해 CoreUtils가 참조됩니다. appInsights.getCookieMgr().get(name: string)를 사용하도록 쿠키 처리를 리팩터링 |
| Util.deleteCookie (쿠키를 삭제하는 함수) | coreDeleteCookie (코어 쿠키 삭제) 참조하면 이전 버전과의 호환성을 위해 CoreUtils가 참조됩니다. appInsights.getCookieMgr().del(name: string, path?: string)를 사용하도록 쿠키 처리를 리팩터링 |
| Util.trim | strTrim (문자열의 앞뒤 공백을 제거하는 함수) |
| Util.newId | 새로운아이디 |
| Util.random32 (무작위 32비트 숫자를 생성하는 함수) | --- 대체하지 않고 코어 random32(true)를 사용하도록 코드를 리팩터링합니다. |
| Util.generateW3CId | generateW3CId (W3C ID 생성) |
| Util.isArray | isArray |
| Util.isError | isError |
| Util.isDate | isDate |
| Util.toISOStringForIE8 (IE8용 ISO 문자열 생성 함수) | toISOString |
| Util.getIEVersion | getIEVersion |
| Util.msToTimeSpan | msToTimeSpan |
| Util.isCrossOriginError | isCrossOriginError |
| Util.dump | dumpObj |
| Util.getExceptionName 예외 이름 가져오기 함수 | 예외 이름 가져오기 |
| Util.addEventHandler | attachEvent |
| Util.IsBeaconApiSupported | Beacon API 지원 여부 |
| Util.getExtension (확장자를 가져오는 기능) | getExtensionByName |
| UrlHelper | @microsoft/applicationinsights-common-js |
| UrlHelper.parseUrl (URL을 분석하는 함수) | urlParseUrl (URL을 분석하는 함수) |
| UrlHelper.getAbsoluteUrl (절대 경로 URL을 얻는 함수) | urlGetAbsoluteUrl (URL 절대 경로 얻기) |
| UrlHelper.getPathName (URL 경로 이름 가져오기) | urlGetPathName |
| UrlHelper.getCompeteUrl | urlGetCompleteUrl |
| UrlHelper.parseHost | urlParseHost |
| UrlHelper.parseFullHost | urlParseFullHost |
| DateTimeUtils | @microsoft/applicationinsights-common-js |
| DateTimeUtils.Now | dateTimeUtilsNow |
| DateTimeUtils.GetDuration | dateTimeUtilsDuration |
| ConnectionStringParser | @microsoft/applicationinsights-common-js |
| ConnectionStringParser.parse | parseConnectionString |
서비스 알림
서비스 알림은 원격 분석이 Application Insights로 중단 없이 흐르도록 도와주는 실행 가능한 권장 사항을 제공하기 위해 SDK에 기본 제공되는 기능입니다. Application Insights 내에서 알림을 예외 메시지로 볼 수 있습니다. SDK 설정에 따라 알림이 사용자와 관련이 있는지 확인하고 권장 사항의 긴급도에 따라 세부 정보를 조정합니다. 서비스 알림을 그대로 두는 것이 좋지만 구성을 통해 featureOptIn 옵트아웃할 수 있습니다.
현재 활성 알림이 전송되지 않습니다.
서비스 알림은 JavaScript SDK에서 관리되며, 이러한 알림을 제어하고 업데이트하기 위해 공용 JSON 파일을 정기적으로 폴링합니다. JavaScript SDK에서 수행한 폴링을 사용하지 않도록 설정하려면 featureOptIn 모드를 사용하지 않도록 설정합니다.
문제 해결
전용 문제 해결 문서를 참조하세요.
다음 단계
- FAQ(질문과 대답)를 검토하려면 JavaScript SDK 구성 FAQ를 참조하세요.
- 사용 현황 추적
- Azure 파일 복사 작업
- JavaScript SDK를 위한 Azure Monitor 데이터 유형 참조와 SDK 코드입니다.