Elastic Observability의 APM 상관 관계: 트랜잭션 속도가 느리거나 실패한 원인이 될 수 있는 사항의 자동 식별

blog-thumbnail-apm-waterfall.png

DevOps 엔지니어 또는 SRE는 최종 사용자와 잠재적으로 회사의 재무 목표에 영향을 미치는 복잡한 문제, 즉 간헐적으로 발생하거나 애플리케이션 트래픽의 특정 부분에만 발생하는 불가사의한 애플리케이션 성능 문제를 조사해야 하는 경우가 많습니다. 수백 또는 수천 개의 트랜잭션과 범위를 꼼꼼히 살펴서 추려내는 작업은 지루하고 수동적이며 시간이 많이 소요되는 상당한 분량의 조사 작업이 될 수 있습니다. 클라우드 네이티브 또는 분산 마이크로서비스 배포로 인해 더욱 복잡하게 되어 근본 원인 파악 시간은 늘어납니다. 

복잡해 보이는 문제를 설명하는 데 도움이 될 수 있는 일반적인 패턴을 신속하게 파악하여 이를 이해하고 근본 원인 분석 및 해결을 가속화할 수 있는 기반을 마련할 수 있다면 정말 멋지지 않을까요? 

Elastic Observability APM 상관 관계의 이점

Elastic APM 상관 관계 기능은 대기 시간이 길거나 또는 잘못된 트랜잭션과 상관 관계가 있으며 전체 서비스 성능에 가장 큰 영향을 미치는 APM 데이터 세트의 속성을 자동으로 표시합니다.

APM 문제에 대한 조사 워크플로우는 일반적으로 APM 보기의 트랜잭션 탭에서 시작됩니다. 관심이 있는 것이 대기 시간이 긴 트랜잭션이든 실패한 트랜잭션이든 간에, 해당 특정 트랜잭션 그룹의 대기 시간 분포 차트에서 이상값을 시각화하는 것으로 시작합니다. 대기 시간이 긴 트랜잭션은 차트 오른쪽에 나타나고 대기 시간 및 실패한 트랜잭션 레이블은 영향의 정도를 나타냅니다. 또한 차트의 95번째 백분위수 주석은 실제 이상값을 시각적으로 구분하는 데 도움이 됩니다.

다음 단계에서는 데이터에서 이러한 이상값과 가장 상관 관계가 높은 속성 및 요인을 찾고 전체 데이터 집합에서 영향을 받은 하위 그룹으로 조사 범위를 좁히게 됩니다. 즉, 느리거나 잘못된 트랜잭션에서 불균형하게 나타나는 속성을 찾는 것입니다. 이러한 속성에는 서비스 버전, 정보 위치, 장치 유형, 인프라 식별자, 가용성 영역, OS, 프런트 엔드 서비스의 클라이언트 유형 등과 같은 레이블, 태그, 추적 속성 및 메타데이터와 수많은 기타 속성이 포함됩니다. 비정상적인 트랜잭션을 그 속성의 관점에서 설명할 수 있도록 하는 것이 목적입니다. 예를 들어, "대기 시간이 긴 거의 모든 트랜잭션이 Kubernetes pod x에서 발생하고 있다” 또는 "shoppingCartVolumeHigh 레이블 및 서비스 버전 a.b가 있는 트랜잭션이 실패하고 있다”고 말할 수 있습니다.

성능 이상값을 설명하는 데 도움이 될 수 있는 특정 속성을 확인하기 위해 이러한 모든 속성을(수백 개가 될 수도 있는데) 수동으로 검토해야 한다고 가정해 보세요!

Elastic Observability는 대기 시간이 길고 오류가 많은 속성을 전체 트랜잭션 세트와 자동으로 비교하고 차선의 트랜잭션에서 "지나치게 자주 발생하는" 태그 및 메타데이터를 식별합니다. 즉, 전체 트랜잭션 집합에서보다 차선의 트랜잭션에서 훨씬 더 일반적인 요소를 식별합니다. 그런 다음 상관 관계를 제공할 뿐만 아니라 가장 높은 상관 관계 속성을 먼저 제시합니다. 상관 관계 값(0~1.00 범위, 여기서 1.00은 완벽한 상관 관계를 나타냄)을 사용하면 일치하는 범위를 빠르게 알아내는 데 도움이 됩니다. 속성을 클릭하면 해당 속성을 포함하는 트랜잭션이 색상으로 구분되어 분포도 내에 표시되며 중첩을 더욱 시각화할 수 있습니다.

이러한 상관 관계 요인을 식별하여, 이제 이러한 트랜잭션에만 초점을 좁힐 수 있습니다. 필터 "+" 또는 "-" 버튼을 클릭하여 이 속성 값을 가진 트랜잭션만 선택하거나 이러한 트랜잭션을 제외하고 관심 있는 트랜잭션을 자세히 검토하세요. 대기 시간에 대한 일반적인 다음 단계에서는 식별된 상관 속성을 포함하는 대기 시간이 긴 트랜잭션에 대한 추적 샘플을 살펴보고, 추적에서 잘못을 초래한 원인인 느린 함수 호출을 찾아내서 ‘아, 이거였구나!’하고 깨닫게 됩니다.

근본 원인이 확인되면, 롤백, 소프트웨어 패치 또는 업그레이드와 같은 메커니즘을 통해 교정 및 복구 프로세스를 시작할 수 있습니다.

다음은 실패한 트랜잭션의 시나리오를 살펴보겠습니다. 아래 예제에서는 ‘checkoutService’의 ‘/hipstershop.CheckoutService/PlaceOrder’ 트랜잭션 그룹에서 실패한 트랜잭션 비율이 높게 나타나고 있습니다.

실패한 트랜잭션 상관 관계 기능은 아래 그림에서 남미 사용자의 실패한 트랜잭션을 보여줍니다.

필터 "+"를 클릭하면 트랜잭션의 이 특정 하위 집합에 초점을 맞출 수 있으며 오류가 있는 트랜잭션의 예가 표시됩니다.

‘View related error(관련 오류 보기)’를 클릭하면 사용자가 관련 오류 세부 정보 페이지(아래 표시)로 리디렉션되며, 여기서 이 엔드포인트와 관련된 다양한 유형의 오류가 강조 표시됩니다. 오류 발생에 대한 스택 추적도 향상된 디버깅 정보를 제공하는 데 사용할 수 있습니다.

위의 예를 통해 APM 상관 관계 기능이 느리거나 잘못된 트랜잭션 그룹을 좁히는 측면에서 사용자를 위해 어려운 일을 대신해준다는 것을 알 수 있습니다. 따라서 평균 탐지 시간과 문제 해결 시간이 크게 단축됩니다.

상관 관계를 지원하는 데 필요한 입력 및 데이터

APM 상관 관계 기능은 모집단의 일부에만 영향을 미치는 문제를 통해 근본 원인 분석 속도를 크게 높일 수 있습니다. 애플리케이션, 서비스, 트랜잭션, 인프라 및 클라이언트를 설명하는 메타데이터가 많을수록, 분석이 풍부해지고 차선의 트랜잭션을 명확하게 설명하는 속성을 찾을 확률이 높아집니다. 상관 관계 기능은 데이터에 있는 모든 필드와 레이블을 사용합니다.

개요 페이지의 "통합 추가" 워크플로우를 사용하여 환경에 배포된 다양한 애플리케이션, 인프라 및 종속성에 대한 에이전트 기능 및/또는 데이터 수집을 추가하세요. 클라우드 기반 Kubernetes와 같은 클라우드 네이티브 환경과 Lambda와 같은 서버리스 기술을 포함하는 여러 기술과 기본적으로 통합할 수도 있습니다. 다양한 원격 측정 소스를 식별한 후에는 Logstash를 통해 또는 APM 에이전트를 통해 직접 수신 데이터를 더욱 풍부하게 만들 수 있습니다. 또한 Elastic은 OpenTelemetry 데이터에 대한 포괄적인 기본 지원(결과적으로 수동 계측도 지원)과 완벽하게 통합됩니다. 

클라이언트 쪽 정보는 실제 사용자 모니터링(RUM) 데이터를 통해 가져올 수 있습니다. 분산 추적은 Elastic RUM 에이전트를 사용할 때 기본적으로 활성화되며, 교차 출처 요청 및 tracestate의 전파에 대한 추적은 distributedTracingOrigins 구성 옵션을 설정하여 쉽게 구성할 수 있습니다. 이러한 방식으로 APM과 결합하면, RUM은 브라우저 버전, 클라이언트 OS 및 사용자 컨텍스트와 같은 풍부한 클라이언트 쪽 정보를 추가하고 모든 해당 데이터는 자동으로 상관 관계 결정에 포함됩니다. 

이 데이터가 Elastic에 유입되면, APM 상관 관계가 작동하여 명확하고 분명한 조사 인사이트를 제공하며 많은 상황에서 근본 원인을 파악하는 시간을 단축할 수 있습니다. 

APM 상관 관계로 근본 원인 파악 시간을 크게 단축할 수 있는 상황

그 정의를 보면 거의 알 수 있듯이, 일련의 정해진 복잡한 문제가 있어 특정 기능이 이에 대한 모든 답변을 확실하게 제공할 수 있는 상황이란 없습니다. 결국, 많은 APM 문제들이 복잡하다고 여겨지는 이유는 바로 조사에 여러 가지 불확실한 것들이 개입되기 때문입니다. 그렇지 않으면 몇 가지 알려진 문제만으로도 무엇을 찾아야 하는지 정확히 알 수 있을 것이고 이러한 문제들은 더 이상 복잡하지 않을 테니까요! 

그러나 많은 복잡한 조사에서 APM 상관 관계는 배포의 특정 영역으로 빠르게 초점을 좁히고 근본 원인을 확인하거나 검증하기 위해 조사 툴킷의 중요한 부분이 될 수 있습니다. 핵심적으로 고려해야 할 사항은 이런 것입니다. 이 문제가 전체 배포에 영향을 미치는가? 아니면 일부 하위 모집단에만 영향을 미치는가? 예를 들어, 모든 트랜잭션이 긴 대기 시간으로 인해 어려움을 겪고 있다고 보는가? 또는 일부 트랜잭션은 대기 시간이 긴 것으로 나타나지만 다른 트랜잭션은 예상 범위 내에서 실행되는 것처럼 보이는가? 문제가 널리 퍼지지 않은 것으로 보이는 경우, 속성의 하위 집합이 관심 있는 트랜잭션의 속성을 나타내는 데 도움이 될 수 있는지 확인하기 위해 APM 상관 관계 기능을 사용하는 것을 고려해 보셔야 합니다. 이러한 속성을 사용하면, 보다 작고 관리하기 쉬운 트랜잭션 집합으로 필터링하고 해당 트랜잭션의 추적을 확인하여 근본 원인을 밝히거나 트랜잭션 성능 문제의 원인이 되는 인프라 종속성을 볼 수 있습니다. 

APM 상관 관계가 특히 효과적인 예는 다음과 같은 상황입니다.

하드웨어 성능 문제: 특히 특정 하드웨어에 의해 특정 부하가 서비스되고 있는 부하 분산 사례에서, 하드웨어 성능 저하로 인해 특정 사용자 그룹 또는 애플리케이션의 특정 부분이 더 느린 대기 시간을 경험할 수 있습니다. APM 상관 관계는 레이블과 식별자를 통해 하드웨어의 특정 인스턴스를 신속하게 격리하도록 지원할 수 있습니다.

사용된 입력 데이터:

  • 배포된 추적에서 수집된 APM 에이전트의 글로벌 레이블
  • Elastic Agent 또는 metricbeat의 인프라 메트릭(APM 상관 관계 기능을 활용한 후 조사를 계속할 수 있도록)

하이퍼스케일러 테넌트 또는 멀티 클라우드 배포 관련 문제: 하이퍼스케일러는 애플리케이션 배포에 또 다른 복잡성 계층을 추가합니다. 멀티 클라우드 및 하이브리드 클라우드 배포는 점점 더 보편화되고 있습니다. 애플리케이션의 일부에만 영향을 미치는 문제를 해결할 때, 하이퍼스케일러 레이블 및 태그(예: 클라우드 메타데이터)를 사용하면 해당 문제에 연결된 인스턴스, 클라우드 서비스 제공자, 지역 또는 가용성 영역을 탐지하는 데 도움이 됩니다. Elastic Java APM 에이전트를 사용하면 구성 변수를 사용하여 클라우드 서비스 제공자를 자동으로 탐지할 수 있습니다.

사용된 입력 데이터(APM 에이전트에 의해 자동으로 수집됨): 

  • 클라우드 가용성 영역
  • 클라우드 지역

지리적 또는 사용자 그룹별 문제: 특정 지리적 위치 또는 사용자 그룹을 식별하는 태그는 APM 상관 관계를 통해 표면화될 수 있으며 사용자 세그먼트를 격리하고 이러한 트랜잭션만 연구하는 데 사용할 수 있습니다. 예를 들어, Elastic Java APM 에이전트는 이 기능에서 사용되는 글로벌 레이블을 지원하므로, 추가 컨텍스트를 제공하고 모집단의 하위 집합을 식별하는 데 도움이 될 수 있습니다. Java APM 에이전트와 같은 Elastic APM 에이전트는 모든 이벤트에 추가 메타 정보를 추가하는 데 사용할 수 있는 글로벌 레이블 구성을 지원합니다. 글로벌 레이블은 트랜잭션, 메트릭 및 오류에 추가됩니다. 마찬가지로, Java APM Agent API를 사용하면 지리적 또는 사용자 그룹 정보를 추출하는 데 사용할 수 있는 트랜잭션을 수동으로 계측할 수 있습니다. 이러한 레이블은 근본 원인 분석, 가설 검증 등을 가속화할 수 있는 서비스에서 중요하거나 새로운 클래스/방법에 초점을 맞추는 데 도움이 될 수 있습니다. 

사용된 입력 데이터:

  • 클라우드 메타데이터(APM 에이전트에 의해 자동으로 수집됨)
  • 이벤트에 메타 정보를 선택적으로 추가하는 글로벌 레이블
  • 수동 계측을 통해 추가된 모든 데이터

카나리 배포 또는 기타 부분적인 배포 관련 문제: 엔터프라이즈 애플리케이션 배포, 특히 SaaS 제공 애플리케이션에서 여러 버전의 소프트웨어가 동시에 실행되는 경우는 드물지 않습니다. 카나리 롤아웃 또는 A/B 테스트 전략은 동시 다중 버전 배포의 예입니다. 애플리케이션의 특정 버전이 잘못 작동하는 경우, APM 상관 관계는 오류 버전을 버블업하여 문제의 범위를 좁히고 근본 원인을 보다 신속하게 파악하도록 하는 데 도움이 될 수 있습니다. 서비스 버전은 자동 탐지를 통해 또는 Elastic Java APM 에이전트와 같은 환경 변수를 사용하여 구성할 수 있습니다.

사용된 입력 데이터:

  • 자동 탐지 또는 APM 에이전트를 통한 서비스 버전

클라이언트 쪽 문제: 특정 브라우저 버전 또는 장치 유형과 같은 클라이언트 쪽 표시기는 추가 분석, 해결 및 교정을 위한 귀중한 근본 원인 정보를 제공함으로써 범위와 잠재적 원인을 즉시 좁히는 데 도움이 됩니다.

사용된 입력 데이터:

  • 브라우저 및 OS 버전, 장치 세부 정보, 네트워크 유형 등 Elastic RUM 에이전트를 통해 자동으로 수집되는 클라이언트 데이터 

서드파티 서비스 제공자의 문제: 인증 서비스 제공자와 같은 서드파티 서비스 제공자를 이용하는 시나리오에서는, APM 상관 관계가 특정 서비스 제공자와 관련된 문제를 신속하게 식별하는 데 도움이 됩니다. 이 작업은 SDK(Elastic 또는 OTel)를 사용해 사용자 정의 레이블을 추가하여 인증 서비스 제공자를 식별할 수 있습니다. 사용자 정의 레이블은 자동 계측만으로는 근본 원인 분석을 용이하게 하기 위해 필요한 관련 컨텍스트를 제공하기에 충분하지 않은 유사한 다른 시나리오에서 유용할 수 있습니다.

사용된 입력 데이터:

  • Elastic 또는 OTel SDK를 통해 추가된 사용자 정의 레이블
  • 글로벌 레이블

… 그리고 더 많은 사용 사례에서 효과적입니다. 상관 관계는 서비스의 다른 부분은 원활하게 실행되는 것으로 보이지만 서비스의  일부에 영향을 미치는 복잡한 문제에 대해 잘 작동합니다.

반대로, APM 상관 관계가 최상의 결과를 산출하지 못할 수도 있는 특정 상황이 있습니다. 예를 들어 특정 소규모 하위 모집단 또는 세그먼트와 달리 애플리케이션 서비스 전반에서 발생하는 만연한 문제가 있습니다. 이러한 상황에서는, 다양한 태그, 레이블 또는 표시기가 차선의 트랜잭션과 높은 상관 관계를 보일 수 있으므로 추가 조사를 진행하기 위한 가치를 거의 제공하지 않습니다. 마지막으로, 관련 데이터가 없거나 설명자와 레이블이 충분하지 않으면 상관 관계가 전혀 탐지되지 않을 수 있습니다. 상관 관계를 지원하는 입력 및 데이터에 대한 이전 섹션을 참조하세요.    

그러나 대부분의 APM 조사에서 APM 상관 관계 기능은 조사 범위를 특정 트랜잭션 그룹으로 빠르게 좁히는 데 도움이 될 수 있는 강력한 도구입니다. 대부분의 경우, 이러한 상관 관계 트랜잭션은 근본 원인을 신속하게 파악하여   조사 시간을 크게 단축합니다. 

즐겁게 문제를 해결하시기 바랍니다! 

추가 리소스 및 정보

APM 상관 관계 기능은 일반적으로 7.15부터 정식 버전으로 제공됩니다. 이 기능에 대한 릴리즈 노트를 검토하려면 여기를 클릭하세요.

APM 상관 관계 기능에 대한 사용자 안내서 및 설명서는 여기에서 확인하실 수 있습니다.