Application Insights 이해

완료됨

Application Insights는 Azure Monitor의 확장이며 애플리케이션 성능 모니터링(APM이라고도 함) 기능을 제공합니다. APM 도구는 다음과 같은 방법으로 개발, 테스트 및 프로덕션으로 애플리케이션을 모니터링하는 데 유용합니다.

  • 애플리케이션의 성능을 사전에 파악합니다.
  • 애플리케이션 실행 데이터를 사후에 검토하여 인시던트의 원인을 확인합니다.

Application Insights는 애플리케이션 활동 및 상태를 설명하는 메트릭 및 애플리케이션 원격 분석 데이터를 수집하는 것 외에도 애플리케이션 추적 로깅 데이터를 수집하고 저장할 때도 사용할 수 있습니다.

로그 추적이 다른 원격 분석과 연결되어 활동에 대해 자세히 볼 수 있습니다. 기존 앱에 추적 로깅을 추가하려면 로그에 대한 대상만 제공해야 합니다. 로깅 프레임워크를 변경할 필요가 거의 없습니다.

Screenshot of the Application Insights dashboard, displaying categories of metrics collected for web app usage.

Application Insights에서 모니터링하는 항목

Application Insights는 추적 로깅 데이터뿐만 아니라 애플리케이션 활동 및 상태를 설명하는 메트릭 및 애플리케이션 원격 분석 데이터를 수집합니다.

  • 요청 속도, 응답 시간 및 실패율 - 하루 중 어떤 시간에, 어떤 사용자 위치에서, 어떤 페이지가 가장 인기 있는지 파악합니다. 어떤 페이지가 가장 성능이 우수한지 확인합니다. 요청이 많을 때 응답 시간과 실패율이 높으면 리소스에 문제가 있을 수 있습니다.
  • 종속성 횟수, 응답 시간 및 실패율 - 외부 서비스로 인해 속도가 느려지는지 여부를 결정합니다.
  • 예외 - 집계된 통계를 분석하거나 특정 인스턴스를 선택하여 스택 추적 및 관련 요청을 자세히 분석합니다. 서버 및 브라우저 예외가 전부 보고됩니다.
  • 페이지 보기 및 로드 성능 - 사용자의 브라우저에서 보고합니다.
  • 웹 페이지의 AJAX 호출 - 속도, 응답 시간 및 실패율입니다.
  • 사용자 및 세션 수.
  • Windows 또는 Linux 서버 컴퓨터의 성능 카운터 - CPU, 메모리, 네트워크 사용량 등.
  • Docker 또는 Azure의 호스트 진단.
  • 앱의 추적 로그를 진단하여 추적 이벤트를 요청과 상호 연관시킬 수 있습니다.
  • 판매된 품목, 승리한 게임 등의 비즈니스 이벤트를 추적하기 위해 개발자가 직접 클라이언트 또는 서버 코드로 작성하는 사용자 지정 이벤트 및 메트릭.

다음과 같은 여러 가지 방법으로 앱 성능 모니터링 및 분석을 시작할 수 있습니다.

  • 런타임 시 - 서버에서 웹앱을 계측합니다. 이미 배포된 애플리케이션에 적합합니다. 코드에 대한 업데이트를 방지합니다.
  • 개발 시 - 코드에 Application Insights를 추가합니다. 원격 분석 컬렉션을 사용자 지정하고 원격 분석을 더 많이 전송할 수 있습니다.
  • 페이지 보기, AJAX 및 기타 클라이언트 쪽 원격 분석에 대해 웹 페이지를 계측 합니다.
  • Visual Studio App Center와 통합하여 모바일 앱 사용을 분석 합니다.
  • 가용성 테스트 -서버에서 정기적으로 웹 사이트를 ping합니다.

메트릭 유형

Application Insights 로그 기반 메트릭을 사용하여 모니터링되는 앱의 상태를 분석하고, 강력한 대시보드를 만들고, 경고를 구성할 수 있습니다. 두 종류의 메트릭이 있습니다.

  • 뒤에 있는 로그 기반 메트릭은 저장된 이벤트에서 Kusto 쿼리로 변환됩니다.
  • 표준 메트릭은 미리 집계된 시계열로 저장됩니다.

‘표준 메트릭’은 수집 중에 미리 집계되므로 쿼리 시 성능이 향상됩니다. 표준 메트릭은 대시보드 및 실시간 경고를 위한 더 효과적인 선택입니다. ‘로그 기반 메트릭’에는 더 많은 차원이 있으며 이로 인해 데이터 분석 및 임시 진단을 위한 우수한 옵션이 됩니다. 메트릭 탐색기에서 로그 기반 및 표준 메트릭 사이를 전환하려면 네임스페이스 선택기를 사용합니다.

로그 기반 메트릭

개발자는 SDK를 사용하여 이러한 이벤트를 수동으로 내보내거나(명시적으로 SDK를 호출하는 코드 작성) 자동 계측의 자동 이벤트 수집을 사용할 수 있습니다. 두 경우 모두 Application Insights 백 엔드가 모든 수집된 이벤트를 로그로 저장하고, 로그의 이벤트 기반 데이터를 시각화하기 위해 Azure Portal의 Application Insights 블레이드가 분석 및 진단 도구 역할을 합니다.

일련의 이벤트 전체를 유지하기 위해 로그를 사용하면 뛰어난 분석 및 진단 값을 제공할 수 있습니다. 예를 들어, 특정 URL에 대한 정확한 요청 수와, 이러한 호출을 수행한 고유 사용자 수를 파악할 수 있습니다. 또는 사용자 세션에 대한 예외와 종속성 호출을 포함하여 상세 진단 추적을 얻을 수 있습니다. 이러한 정보 유형이 있으면 애플리케이션 상태 및 사용에 대한 가시성이 크게 향상되어 앱 문제 진단에 필요한 시간을 줄일 수 있습니다.

동시에, 많은 원격 분석 데이터를 생성하는 애플리케이션의 경우 전체 이벤트 집합을 수집하는 것이 실용적이지 못하거나 심지어 불가능할 수 있습니다. 이벤트 규모가 너무 큰 상황에서는 Application Insights가 샘플링, 필터링처럼 수집 및 저장되는 이벤트 수를 줄이는 여러 원격 분석 데이터 규모 절감 기법을 구현합니다. 그렇지만 저장된 이벤트 수가 줄면 그 뒤의 메트릭 정확도도 낮아지기 때문에 로그에 저장된 이벤트의 쿼리 시간 집계를 수행해야 합니다.

사전 집계 메트릭

미리 집계된 메트릭은 많은 속성이 있는 개별 이벤트로 저장되지 않습니다. 대신 사전 집계 시계열로 저장되며 키 차원만 있습니다. 이 때문에 쿼리 시간에서는 새 메트릭이 우수합니다. 데이터 검색이 빨라지고 컴퓨팅 능력이 적게 필요하기 때문입니다. 메트릭 차원에 대한 거의 실시간 경고, 응답성이 더 우수한 대시보드 등, 새로운 시나리오가 가능해집니다.

현재 SDK(.NET용 Application Insights 2.7 SDK 이상)에서는 수집 중에 메트릭을 사전 집계합니다. 이는 기본적으로 전송되는 표준 메트릭에 적용되므로 정확도가 샘플링 또는 필터링의 영향을 받지 않습니다. 또한 GetMetric을 사용하여 전송되는 사용자 지정 메트릭에도 적용되므로 데이터 수집량이 줄고 비용이 절감됩니다.

사전 집계를 구현하지 않는 SDK의 경우, Application Insights 백 엔드가 Application Insights 이벤트 수집 엔드포인트에서 수신한 이벤트를 집계하여 지속적으로 새 메트릭을 입력합니다. 실제 전송되는 데이터 규모는 줄지 않지만 사전 집계 메트릭을 사용할 수 있고, 수집 중에 메트릭을 사전 집계하지 않는 SDK에서 거의 실시간에 근접한 차원 경고 지원과 성능 향상을 경험할 수 있습니다.

컬렉션 엔드포인트는 수집 샘플링 이전에 사전 집계를 수행하므로, 애플리케이션에 사용 중인 SDK 버전에 관계없이 수집 샘플링이 사전 집계 메트릭의 정확도에 영향을 미치지 않습니다.