Application Insights로 웹앱 및 서비스 심층 진단

이 문서에서는 Application Insights가 DevOps 주기에 어떻게 적합한지 설명합니다.

Application Insights가 필요한 이유는 무엇일까요?

Application Insights는 실행 중인 웹앱을 모니터링합니다. 오류 및 성능 문제에 대해 알려주고 고객이 앱을 사용하는 방법을 분석하는 데 도움이 됩니다. ASP.NET, Java EE 및 Node.js 같은 플랫폼에서 실행되는 앱에서 작동합니다. 클라우드 또는 온-프레미스에서 호스트됩니다.

웹앱을 배달하는 복잡성의 측면을 보여 주는 이미지입니다.

실행되는 동안 최신 애플리케이션을 모니터링하는 것이 중요합니다. 고객이 실패하기 전에 오류를 감지하려고 합니다. 또한 속도를 늦추거나 사용자에게 불편을 주는 성능 문제를 검색하고 수정하려고 합니다. 시스템이 만족도에 맞게 수행되는 경우 사용자가 수행하는 작업을 알고 싶을 수도 있습니다. 예를 들어 최신 기능을 사용하고 있나요? 잘 사용하고 있는지 궁금할 것입니다.

최신 웹 애플리케이션은 지속적인 업데이트 주기로 개발됩니다.

  • 새 기능 또는 향상된 기능을 릴리스합니다.
  • 사용자에게 얼마나 잘 작동하는지 관찰합니다.
  • 해당 지식을 기반으로 다음 개발 증분을 계획합니다.

이 주기의 핵심 부분은 관찰 단계입니다. Application Insights는 웹 애플리케이션의 성능과 사용을 모니터링하는 도구를 제공합니다.

이 프로세스에서 가장 중요한 점은 진단입니다. 애플리케이션이 실패하면 비즈니스가 손실됩니다. 모니터링 프레임워크의 주요 역할은 다음과 같습니다.

  • 오류를 안정적으로 검색합니다.
  • 즉시 알립니다.
  • 문제를 진단하는 데 필요한 정보를 제공합니다.

Application Insights는 이러한 작업을 수행합니다.

버그는 어디에서 발생할까요?

일반적으로, 웹 시스템 오류는 구성 문제나 여러 구성 요소 간의 잘못된 상호 작용에서 발생합니다. 라이브 사이트 인시던트 문제를 해결할 때 첫 번째 작업은 문제의 궤적을 식별하는 것입니다. 어떤 구성 요소 또는 관계가 원인인가요?

더 간단한 시대에 컴퓨터 프로그램이 한 컴퓨터에서 실행되었습니다. 개발자는 배송하기 전에 철저히 테스트했으며 배송 후 다시 보거나 생각하지 않았습니다. 사용자는 몇 년 동안 잔여 버그를 참아야 했습니다.

이 과정은 이제 크게 다릅니다. 앱에는 실행할 다양한 디바이스가 있으며 각 디바이스에서 정확히 동일한 동작을 보장하기 어려울 수 있습니다. 클라우드에서 앱을 호스팅하면 버그를 빠르게 해결할 수 있습니다. 그러나 그것은 또한 지속적인 경쟁과 자주 간격으로 새로운 기능에 대한 기대가 있다는 것을 의미합니다.

이러한 조건에서 버그 수에 대한 확고한 제어를 유지하는 유일한 방법은 자동화된 단위 테스트입니다. 모든 배달에서 모든 것을 수동으로 다시 테스트하는 것은 불가능합니다. 이제 단위 테스트는 빌드 과정에서 일반화되었습니다. Xamarin Test Cloud와 같은 도구는 여러 브라우저 버전에서 자동 UI 테스트를 제공합니다. 이러한 테스트 체계를 사용하면 앱에서 발견되는 버그 비율을 최소한으로 유지할 수 있습니다.

일반적인 웹 애플리케이션에는 여러 라이브 구성 요소가 있습니다. 클라이언트(브라우저 또는 디바이스 앱) 및 웹 서버와 함께 상당한 백 엔드 처리가 있을 수 있습니다. 아마도 백 엔드는 구성 요소의 파이프라인 또는 공동 작업 조각의 느슨한 컬렉션일 수 있습니다. 그들 중 많은 사람들이 당신의 통제에 있지 않습니다. 사용자가 의존하는 외부 서비스입니다.

이러한 구성에서는 라이브 시스템 자체를 제외한 모든 가능한 오류 모드를 테스트하거나 예측하기는 어렵고 비용도 많이 듭니다.

질문

다음은 웹 시스템을 개발할 때 질문할 몇 가지 질문입니다.

  • 앱이 충돌하고 있나요?
  • 정확히 무슨 일이 일어났는가? 요청에 실패한 경우 요청이 어떻게 도착했는지 알고 싶을 것입니다. 이벤트의 추적이 필요합니다.
  • 앱이 충분히 빠르나요? 일반적 요청에 대해 응답하는 데 얼마나 걸리는가?
  • 서버가 부하를 처리할 수 있는가? 요청 속도가 증가할 경우, 응답 시간이 일정하게 유지되는가?
  • 앱에서 호출하는 REST API, 데이터베이스 및 기타 구성 요소와 같은 종속성은 얼마나 반응합니까? 특히 시스템이 느리거나, 구성 요소인가요, 아니면 다른 사용자로부터 느린 응답을 받고 있나요?
  • 앱이 위쪽 또는 아래쪽인가요? 전 세계에서 앱을 볼 수 있는가? 중지되는지 알아야 합니다.
  • 근본 원인은 무엇인가요? 구성 요소의 오류 또는 종속성인가요? 통신 문제인가?
  • 얼마나 많은 사용자가 영향을 받습니까? 해결해야 할 문제가 두 개 이상 있는 경우 가장 중요한 것은 무엇인가요?

Application Insights란?

Application Insights의 기본 워크플로를 보여 주는 이미지입니다.

  1. Application Insights는 앱이 실행되는 동안 이를 계측하고 원격 분석을 전송합니다. Application Insights SDK를 앱에 빌드하거나 런타임에 계측을 적용할 수 있습니다. 이전 메서드는 일반 모듈에 고유한 원격 분석을 추가할 수 있으므로 더 유연합니다.
  2. 원격 분석은 저장 및 처리되는 Application Insights 포털로 전송됩니다. Application Insights는 Azure에서 호스트되지만 Azure 앱뿐만 아니라 모든 웹앱을 모니터링할 수 있습니다.
  3. 원격 분석은 이벤트 차트와 표 형태로 표시됩니다.

원격 분석에는 두 가지 주요 유형(집계 및 원시 인스턴스)이 있습니다.

  • 인스턴스 데이터에는 웹앱에서 받은 요청 보고서가 포함될 수 있습니다. Application Insights 포털에서 검색 도구를 사용하여 요청의 세부 정보를 찾고 검사할 수 있습니다. 인스턴스에는 앱이 요청에 응답하는 데 걸린 시간 및 요청된 URL 및 클라이언트의 대략적 위치와 같은 데이터가 포함될 수 있습니다.
  • 집계된 데이터에는 요청 속도를 응답 시간과 비교할 수 있도록 단위 시간당 이벤트 수가 포함됩니다. 또한 요청 응답 시간과 같은 메트릭의 평균도 포함합니다.

데이터의 주요 범주는 다음과 같습니다.

  • URL, 응답 시간 및 성공 또는 실패에 대한 데이터를 사용하여 앱에 대한 요청(일반적으로 HTTP 요청)입니다.
  • URI, 응답 시간 및 성공과 함께 앱에서 수행한 REST 및 SQL 호출과 같은 종속성
  • 스택 추적을 포함한 예외.
  • 사용자의 브라우저에서 제공되는 페이지 보기 데이터입니다.
  • 직접 작성하는 성능 카운터 및 메트릭과 같은 메트릭.
  • 비즈니스 이벤트를 추적하는 데 사용할 수 있는 사용자 지정 이벤트입니다.
  • 디버깅에 사용하는 로그 추적.

사례 연구: 레알 마드리드 FC

Real Madrid Football Club 의 웹 서비스는 전 세계 4억 5,000만 명의 팬에게 서비스를 제공합니다. 팬들은 웹 브라우저와 클럽의 모바일 앱을 통해 액세스합니다. 팬들은 티켓을 예약하고 결과, 플레이어 및 예정된 게임에 대한 정보 및 비디오 클립에 액세스할 수도 있습니다. 득점한 골 수와 같은 필터를 사용하여 검색할 수 있습니다. 또한, 소셜 미디어에도 링크되어 있습니다. 사용자 환경은 고도로 개인 설정되었으며 팬의 참여를 유도하는 양방향 통신으로 설계되었습니다.

솔루션 은 Azure의 서비스 및 애플리케이션 시스템입니다. 확장성은 핵심 요구 사항입니다. 트래픽은 가변적이며 일치 중 및 주변 볼륨에 도달할 수 있습니다.

Real Madrid에게는 시스템 성능을 모니터링하는 것이 매우 중요합니다. Application Insights는 안정적이고 높은 수준의 서비스를 보장하기 위해 시스템 전체에서 포괄적인 보기를 제공합니다.

이 클럽은 또한 팬들이 어디에 있는지(스페인에 있는 3%에 불과함), 플레이어에 대한 관심, 역사적 결과 및 다가오는 게임에 대한 관심, 경기 결과에 어떻게 대응하는지에 대한 심층적인 이해를 얻습니다.

이 원격 분석 데이터의 대부분은 추가된 코드 없이 자동으로 수집되므로 솔루션이 간소화되고 운영 복잡성이 줄어듭니다. Application Insights는 Real Madrid 대신 매달 38억 개의 원격 분석 지점을 처리합니다.

Real Madrid는 Power BI 모듈을 사용하여 원격 분석을 봅니다.

Application Insights 원격 분석의 Power BI 보기를 보여 주는 스크린샷

스마트 감지

사전 진단은 최신 기능입니다. 사용자가 특별한 구성을 하지 않아도 Application Insights가 앱에서 실패율이 비정상적으로 증가하는 것을 자동으로 감지하고 알립니다. 가끔 발생하는 오류의 배경을 무시할 수 있을 만큼 똑똑하고 요청 증가에 비례하는 상승도 있습니다.

예를 들어 사용하는 서비스 중 하나에서 오류가 발생할 수 있습니다. 또는 배포한 새 빌드가 잘 작동하지 않을 수 있습니다. 전자 메일을 보는 즉시 알 수 있습니다. 다른 앱을 트리거할 수 있도록 웹후크도 있습니다.

또한, 이 기능은 매일 심층적으로 원격 분석을 분석하여 발견하기 어려운 비정상적인 성능 패턴을 찾아냅니다. 예를 들어 특정 지리적 영역 또는 특정 브라우저 버전과 관련된 성능 저하를 찾을 수 있습니다.

두 경우 모두 경고는 발견된 증상을 알려줍니다. 또한 관련 예외 보고서와 같이 문제를 진단하는 데 필요한 데이터를 제공합니다.

사전 진단의 이메일을 보여 주는 스크린샷

고객 Samtec은 "최근 기능 컷오버 중에 리소스 한도에 도달하여 시간 제한을 일으키는 규모가 작은 데이터베이스를 발견했습니다. 이 문제를 분류하는 즉시 사전 감지 경고가 나왔습니다. 제품 광고에 나왔던 대로 거의 실시간에 가까운 속도였습니다. 이 경고는 Azure 플랫폼 경고와 더불어 문제를 즉시 해결하도록 도와주었습니다. 총 가동 중지 시간 <10분"

라이브 메트릭 스트림

최신 빌드를 배포하는 작업은 많은 걱정을 수반하는 경험일 수 있습니다. 문제가 있는 경우 필요한 경우 철회할 수 있도록 해당 문제에 대해 즉시 알고 싶습니다. 라이브 메트릭 스트림은 약 1초의 대기 시간으로 주요 메트릭을 제공합니다.

라이브 메트릭을 보여 주는 스크린샷

이를 통해 오류 또는 예외 샘플을 즉시 검사할 수 있습니다.

라이브 오류 이벤트를 보여 주는 스크린샷

애플리케이션 맵

애플리케이션 맵은 애플리케이션 토폴로지를 자동으로 검색합니다. 분산 환경에서 성능 병목 상태 및 문제가 있는 흐름을 쉽게 식별할 수 있도록 맵 위에 성능 정보를 배치합니다. 애플리케이션 맵을 사용하면 Azure 서비스에 대한 애플리케이션 종속성을 검색할 수 있습니다.

코드 관련 또는 종속성 관련 여부를 이해하여 문제를 심사할 수 있습니다. 한 곳에서 관련 진단 환경을 드릴할 수 있습니다. 예를 들어 SQL 계층의 성능 저하로 인해 애플리케이션이 실패할 수 있습니다. 애플리케이션 맵을 사용하면 즉시 보고 SQL Index Advisor 또는 Query Insights 환경을 드릴할 수 있습니다.

애플리케이션 맵을 보여 주는 스크린샷

Application Insights Log Analytics

Log Analytics를 사용하면 강력한 SQL과 유사한 언어로 임의 쿼리를 작성할 수 있습니다. 다양한 관점이 연결되면 전체 앱 스택에서 진단이 쉬워집니다. 그런 다음, 서비스 성능과 비즈니스 메트릭 및 고객 환경의 상관 관계를 지정하기 위해 올바른 질문을 할 수 있습니다.

포털에 저장된 모든 원격 분석 인스턴스와 메트릭 원시 데이터를 쿼리할 수 있습니다. 언어에는 필터, 조인, 집계 및 기타 연산자가 포함됩니다. 필드 계산과 통계 분석도 수행할 수 있습니다. 테이블 형식 및 그래픽 시각화를 사용할 수 있습니다.

분석 쿼리 및 결과 차트를 보여 주는 스크린샷

예를 들어, 다음과 같은 작업이 간편합니다.

  • 애플리케이션의 요청 성능 데이터를 고객 계층별로 분할하여 환경을 이해합니다.
  • 라이브 사이트 검사 시 특정 오류 코드 또는 사용자 지정 이벤트 이름을 검색합니다.
  • 특정 고객의 앱 사용을 자세히 살펴보고 어떤 식으로 기능을 습득하고 적용하는지 이해합니다.
  • 특정 사용자의 세션 및 응답 시간을 추적하여 지원 팀과 운영 팀이 즉시 고객 지원을 제공하도록 합니다.
  • 자주 사용되는 앱 기능을 파악하여 기능 우선순위 질문에 답합니다.

고객 DNN은 "Application Insights는 필요에 따라 데이터를 결합, 정렬, 쿼리 및 필터링할 수 있는 수식의 누락된 부분을 제공했습니다. 우리 팀은 자신의 창의력과 경험을 활용하여 강력한 쿼리 언어로 데이터를 찾아낼 수 있었고, 그 덕분에 통찰력을 얻고 미처 알지 못했던 문제를 찾아서 해결하였습니다. '만약...'이라는 질문에서 흥미로운 답이 수없이 나올 수 있습니다."

개발 도구 통합

Application Insights는 개발 도구와 통합됩니다.

Application Insights 구성

Visual Studio 및 Eclipse에는 개발 중인 프로젝트에 대해 올바른 SDK 패키지를 구성하는 도구가 있습니다. Application Insights를 추가하는 메뉴 명령이 있습니다.

Log4N, NLog 또는 System.Diagnostics.Trace와 같은 추적 로깅 프레임워크를 사용하는 경우 추적을 요청, 종속성 호출 및 예외와 쉽게 상호 연결할 수 있도록 다른 원격 분석과 함께 Application Insights에 로그를 보내는 옵션이 제공됩니다.

Visual Studio에서 원격 분석 검색

기능을 개발하고 디버그할 때 Visual Studio에서 직접 원격 분석을 보고 검색할 수 있습니다. 웹 포털에서와 동일한 검색 기능을 사용할 수 있습니다.

Application Insights에서 예외를 기록할 때 Visual Studio에서 데이터 포인트를 보고 관련 코드로 바로 이동할 수 있습니다.

Visual Studio 검색을 보여 주는 스크린샷

디버깅하는 동안 개발 컴퓨터에서 원격 분석을 유지할 수 있습니다. 포털로 보내지 않고 Visual Studio에서 볼 수 있습니다. 이 로컬 옵션은 디버깅과 프로덕션 원격 분석이 섞이지 않도록 방지합니다.

작업 항목

경고가 발생한 경우 Application Insights는 자동으로 사용자의 작업 추적 시스템에서 작업 항목을 만듭니다.