- 분포 모드 (항상 켜짐): 히트맵에서 선택한 영역이 없으면 현재 스팬 집합에 대한 각 속성의 값 분포가 표시됩니다. 지배적인 값이나 유난히 드문 값(cardinality 이상치)을 찾는 데 유용합니다.
- 비교 모드: 히트맵에서 사각형을 드래그해 내부의 스팬(선택 영역)과 외부의 모든 스팬(배경)을 비교합니다. 편차를 분리해 파악하는 데 유용합니다.
- 반복적 드릴다운: 막대를 클릭해 해당 값으로 필터링하거나 제외합니다. 그러면 필터링된 집합을 기준으로 히트맵이 다시 렌더링되므로, 원인이 분명해질 때까지 범위를 계속 좁혀갈 수 있습니다.
사전 요구사항
시작하기
- Data Source 드롭다운에서 트레이스를 담고 있는 소스를 선택합니다. 소스 이름은 임의로 지정할 수 있으며, 중요한 것은 해당 소스가 Trace 유형으로 구성되어 있어야 한다는 점입니다. Event Deltas 탭은 이런 소스에서만 활성화됩니다.
- Analysis Mode 섹션에서 Event Deltas 탭을 클릭합니다.
히트맵
- X축: 시간
- Y축: 숫자 값이며, 기본값은 밀리초 단위의 스팬 지속 시간(로그 스케일)입니다
분포 모드: 카디널리티 이상치
- 높은 값: 어떤 서비스, 엔드포인트, 상태 코드 또는 호스트가 스팬 집합의 대부분을 차지합니까? 대개 트래픽의 대부분을 처리하는 단일 테넌트, 버전 또는 경로를 드러냅니다.
- 낮은 값: 존재하지만 드물게 나타나는 값입니다. 전체 스팬 중
0.5%에만 나타나는 상태 코드나 거의 보이지 않는 호스트 하나가 가장 흥미로운 신호일 수 있습니다. 긴 꼬리 구간에는 회귀와 문제를 일으키는 주체가 숨어 있는 경우가 많습니다.
비교 모드: 정상 상태와의 차이
사용 사례 1: 회귀 전후 비교
SpanKind, SpanName, ScopeName은 각각 느린 Selection과 정상적인 Background 사이의 뚜렷한 주황색 대 녹색 분리를 나타냅니다. 이들을 함께 보면 변곡점에서 무엇이 바뀌었는지 분명하게 드러납니다.
이는 “무엇이 바뀌었는가?”를 묻고 싶을 때 적합한 형태입니다. 더 좁은 변형도 같은 워크플로를 사용합니다. 대체로 잠잠한 대역 안에 느린 스팬의 작은 덩어리가 있을 때(오른쪽 끝의 짧은 급증이나 안정적인 구간 한가운데의 군집)에는 그 군집만 둘러싸는 작은 상자를 대신 그리십시오. 형태가 바뀌면 질문도 바뀝니다. 세로 띠는 시간에 따라 무엇이 바뀌었는가 를 묻고, 작고 집중된 상자는 이 군집에는 무엇이 특별한가 를 묻습니다.
사용 사례 2: 느림과 빠름
반복적 드릴다운
- Filter: 이 값을 가진 스팬만 남깁니다
- Exclude: 이 값을 가진 스팬을 제외합니다
- Copy: 값을 클립보드에 복사합니다
빈도가 낮은 값을 묶은 집계된 Other (N) 버킷은 클릭할 수 없습니다. 해당 버킷 안의 특정 값으로 필터링하려면 search bar를 직접 사용하십시오.
히트맵 사용자 지정
| 매개변수 | 기본값 | 설명 |
|---|---|---|
| Scale | Log | Log는 넓은 지연 시간 범위를 다루는 데 적합하고, Linear는 좁고 균일한 분포에 더 적합합니다. |
| Value | (Duration)/1e6 | 응답 크기, 오류율, 사용자 지정 스팬 속성 등 임의의 숫자 표현식을 사용할 수 있습니다. |
| Count | count() | 색상을 결정하는 집계입니다. avg(), sum(), p95() 또는 countDistinct(field) 같은 표현식으로 바꿀 수 있습니다. |
- 지연 시간 범위가 좁을 때는 Scale을 Linear로 전환하십시오(예: 모든 스팬이 5~50 ms 사이에서 실행되는 서비스). Log 스케일은 데이터가 없는 상단 구간에 세로 범위를 낭비합니다.
- Y축에 Duration 이외의 값을 표시합니다. Value를
SpanAttributes.http.response.size로 설정하면 느리면서 큰 응답을 조사할 수 있습니다.if(StatusCode = 'Error', 1, 0)같은 표현식은 서비스 전반에서 시간에 따른 오류 빈도를 표시합니다. - count 이외의 값으로 색상을 지정합니다. Count를
p95(Duration)로 설정하면 각 버킷이 볼륨이 아니라 꼬리 지연 시간을 기준으로 색상화되어, count 기반 보기에서는 묻히는 드물지만 느린 구간을 드러낼 수 있습니다.countDistinct(TraceId)는 하나의 trace가 많은 스팬을 생성할 때 trace 볼륨과 스팬 볼륨을 구분해 줍니다.
효과적으로 사용하기 위한 팁
- 먼저 단일 서비스로 필터링하세요. 서비스마다 지연 시간이 크게 달라 여러 서비스를 섞으면 신호가 흐려집니다. 시작하기 전에 검색 창에서
ServiceName하나(또는 엔드포인트 하나)로 범위를 좁혀, 히트맵과 분포가 서로 비교 가능한 모집단을 반영하도록 하십시오. - 시각적 대비가 분명한 선택 영역을 고르세요. 비교 모드는 Selection 구간이 Background와 눈에 띄게 구분될 때 가장 효과적입니다. 예를 들어, 식별 가능한 시점부터 시작되는 성능 저하 구간이나, 전체 분포의 대부분과 뚜렷하게 분리된 느린 꼬리 구간이 여기에 해당합니다. 나머지 데이터와 많이 겹치는 선택 영역은 실제 편차보다 잡음을 더 드러내는 경향이 있습니다.
- 필터, 히트맵, 필터 순으로 반복하세요. 한 번의 선택만으로 원인을 찾아내는 경우는 드뭅니다. 첫 번째 비교를 가설로 보고, 가장 차이가 큰 값으로 필터링한 뒤 새 히트맵과 분포를 다시 확인하십시오. 보통 2
3번 반복하면 회귀의 범위를 12개의 속성으로 좁힐 수 있습니다. - 아직 선택 영역 없이 분포 모드를 사용하세요. 아직 시각적 대비가 보이지 않을 때(문제가 있다는 것은 알지만 히트맵이 균일해 보일 때) 특히 유용합니다. 오류 스팬만, 클라이언트 스팬만, 또는 특정 엔드포인트 하나만 포함하는 가설 기반 필터를 적용하고, 사각형을 그리기 전에 속성 분포를 통해 영향이 가장 큰 값을 먼저 파악하십시오.