트레이스 쿼리 (Trace Queries)
Trace Queries에 대해 알아봐요. 여러 스팬의 속성과 트레이스 구조 내에서 그 스팬들 사이의 관계를 기반으로 전체 트레이스를 찾을 수 있게 해 줘요.
출처: 문서
본문
개요 (Overview)
Trace Queries를 사용하면 여러 스팬의 속성과 트레이스 구조 내에서 그 스팬들 사이의 관계를 기반으로 전체 트레이스를 찾을 수 있어요. 트레이스 쿼리를 만들려면 두 개 이상의 스팬 쿼리를 정의한 다음, 각 스팬 쿼리가 반환하는 스팬들이 검색 대상 트레이스 구조 내에서 갖는 관계를 지정해요.
Trace Query explorer에서 트레이스를 검색, 필터링, 그룹화, 시각화할 수 있어요.
구조 기반 트레이스 쿼리를 사용하면 다음과 같은 질문에 답할 수 있어요:
- 어떤 트레이스가 두 서비스 사이의 종속성을 포함하나요 (
service A가service B로 다운스트림 호출을 하나요)? - 어떤 API 엔드포인트가 오류가 있는 백엔드 서비스의 영향을 받나요?
Trace Queries를 사용해 조사를 가속화하고 관련 트레이스를 찾아보세요.
트레이스 쿼리 편집기 (Trace query editor)
{% image source="https://docs.dd-static.net/images/tracing/trace_queries/trace_query_editor.daba8723b654f496cb72b12e38b1c97d.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/tracing/trace_queries/trace_query_editor.daba8723b654f496cb72b12e38b1c97d.png?auto=format&fit=max&w=850&dpr=2 2x" alt="Trace Query editor" /%}
트레이스 쿼리는 두 개 이상의 스팬 쿼리로 구성되며, 트레이스 쿼리 연산자로 연결돼요.
스팬 쿼리 (Span queries)
스팬 쿼리 구문을 사용해 특정 환경, 서비스 또는 엔드포인트의 스팬을 쿼리해요. 자동 완성 제안을 사용해 패싯과 최근 쿼리를 확인해요.
Add another span query를 클릭해 스팬 쿼리를 추가하고 트레이스 쿼리 문에서 사용해요.
트레이스 쿼리 연산자 (Trace query operators)
a, b, c 등으로 표시된 여러 스팬 쿼리를 Traces matching 필드에서 트레이스 쿼리로 결합해요. 각 스팬 쿼리를 나타내는 문자 사이에 연산자를 사용해요:
{% image source="https://docs.dd-static.net/images/tracing/trace_queries/traces_matching.70dcd85a1656eb9e5b0e35b1d40e4041.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/tracing/trace_queries/traces_matching.70dcd85a1656eb9e5b0e35b1d40e4041.png?auto=format&fit=max&w=850&dpr=2 2x" alt="Span queries combined into a trace query" /%}
| 연산자 (Operator) | 설명 (Description) | 예시 (Example) |
|---|---|---|
&& |
그리고 (And): 두 스팬이 모두 트레이스에 있음 | web-store 서비스의 스팬과 payments-go 서비스의 스팬을 모두 포함하는 트레이스:service:web-store && service:payments-go |
| ` | ` | |
-> |
간접 관계 (Indirect relationship): 왼쪽 쿼리와 일치하는 스팬이 오른쪽 쿼리와 일치하는 스팬의 업스트림에 있는 트레이스 | checkoutservice 서비스가 quoteservice 서비스의 업스트림에 있는 트레이스:service:checkoutservice -> service:quoteservice |
=> |
직접 관계 (Direct relationship): 왼쪽 쿼리와 일치하는 스팬이 오른쪽 쿼리와 일치하는 스팬의 직접 부모인 트레이스 | checkoutservice 서비스가 shippingservice 서비스를 직접 호출하는 트레이스:service:checkoutservice => service:shippingservice |
NOT |
제외 (Exclusion): 쿼리와 일치하는 스팬을 포함하지 않는 트레이스 | web-store 서비스의 스팬을 포함하지만 payments-go 서비스의 스팬을 포함하지 않는 트레이스:service:web-store && NOT(service:payments-go) |
트레이스 수준 필터 (Trace-level filters)
Where 문에서 스팬 수나 트레이스의 종단 간(엔드투엔드) 지속 시간 같은 트레이스 수준 속성에 필터를 적용해 결과 트레이스 집합을 더 필터링해요:
{% image source="https://docs.dd-static.net/images/tracing/trace_queries/where_statement.bdbce3f65e1f7282aea6db3bff5204c8.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/tracing/trace_queries/where_statement.bdbce3f65e1f7282aea6db3bff5204c8.png?auto=format&fit=max&w=850&dpr=2 2x" alt="Trace-level filters example" /%}
| 필터 (Filter) | 설명 (Description) | 예시 (Example) |
|---|---|---|
span_count(a) |
스팬의 발생 횟수 | mongo 데이터베이스에 대한 호출이 10회 이상인 트레이스:- queryA:service:web-store-mongo @db.statement:"SELECT * FROM stores- Traces matching:a- Where:span_count(a):>10 |
total_span_count |
트레이스의 스팬 수 | 1000개가 넘는 스팬을 포함하는 트레이스:Wheretotal_span_count:>1000 |
trace_duration |
종단 간 트레이스 지속 시간 | 종단 간 실행 시간이 5초가 넘는 트레이스:Where:trace_duration:>5s |
플로우 맵 (Flow Map)
{% image source="https://docs.dd-static.net/images/tracing/trace_queries/trace_flow_map.d05ebd5306ff35a55d07968b909fbb0b.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/tracing/trace_queries/trace_flow_map.d05ebd5306ff35a55d07968b909fbb0b.png?auto=format&fit=max&w=850&dpr=2 2x" alt="Trace Flow Map" /%}
Flow Map은 Trace Query와 일치하는 결과 트레이스에서 요청 경로와 서비스 종속성을 이해하도록 도와줘요. 맵을 사용해 오류 경로, 특이한 서비스 종속성, 또는 데이터베이스로의 비정상적으로 높은 요청률을 식별해요.
참고: Flow Map은 수집된 트래픽의 샘플로 구동돼요.
스팬 쿼리와 일치하는 서비스 노드는 강조 표시되어 쿼리 조건이 트레이스의 어느 부분을 대상으로 하는지 보여줘요.
단일 서비스에 대한 더 많은 정보를 얻으려면 서비스 노드 위에 마우스를 올려 요청률과 오류율 메트릭을 확인해요. 두 서비스 간 요청률과 오류율 메트릭을 보려면 두 서비스를 연결하는 엣지 위에 마우스를 올려요.
특정 서비스에 대한 종속성을 포함하지 않는 트레이스를 필터링하려면 맵에서 서비스 노드를 클릭해요.
트레이스 목록 (Trace list)
{% image source="https://docs.dd-static.net/images/tracing/trace_queries/trace_list.ab883f1d0c092510922c052699a17a13.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/tracing/trace_queries/trace_list.ab883f1d0c092510922c052699a17a13.png?auto=format&fit=max&w=850&dpr=2 2x" alt="Trace List" /%}
Trace list는 쿼리와 일치하고 선택한 시간 범위 내에 있는 최대 50개의 샘플 트레이스를 보여줘요. Latency Breakdown 위에 마우스를 올려 요청 실행 중 시간이 어디서(어느 서비스에서) 소비되는지 파악해요.
참고: 테이블에 표시되는 정보는 트레이스 루트 스팬의 속성이며, 지속 시간을 포함하는데 이는 트레이스의 종단 간 지속 시간을 나타내지 않아요.
분석 (Analytics)
Timeseries, Top List 또는 Table 같은 다른 시각화 중 하나를 선택해 시간에 따른 결과를 하나 이상의 차원으로 그룹화해 집계해요. 집계 옵션에 대한 자세한 내용은 스팬 시각화 (Span Visualizations)를 읽어보세요.
이러한 집계 옵션 외에도 스팬을 집계할 스팬 쿼리(a, b, c 등)를 선택해야 해요. 집계 옵션에서 사용하는 태그와 속성의 스팬과 일치하는 쿼리를 선택하세요.
예를 들어 web-store 서비스의 스팬(쿼리 a)과 일부 오류가 있는 payments-go 서비스의 스팬(쿼리 b)을 포함하는 트레이스를 쿼리하고, @merchant.tier로 그룹화된 스팬 수를 시각화한다면 merchant.tier는 web-store 서비스가 아니라 payments-go 서비스의 스팬 속성이 아니므로 쿼리 a의 스팬을 사용해요.
{% image source="https://docs.dd-static.net/images/tracing/trace_queries/timeseries_using_spans_from.c9facacd18ce707894388705c608314e.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/tracing/trace_queries/timeseries_using_spans_from.c9facacd18ce707894388705c608314e.png?auto=format&fit=max&w=850&dpr=2 2x" alt="Timeseries view" /%}
Trace Queries가 데이터를 가져오는 방법 (How Trace Queries source data)
Trace Queries는 지능형 보존 필터 (intelligent retention filter)와 트레이스 수준 보존 필터 (trace-level retention filters)로 인덱싱된 트레이스에서 실행돼요.
{% image source="https://docs.dd-static.net/images/tracing/trace_queries/trace_queries_base_data.2fc2b2e527928ffd4af20fcb9cd5c75c.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/tracing/trace_queries/trace_queries_base_data.2fc2b2e527928ffd4af20fcb9cd5c75c.png?auto=format&fit=max&w=850&dpr=2 2x" alt="Flow showing where trace retention filters apply in the processing pipeline" /%}
지능형 보존 필터는 기본적으로 활성화되어 있으며 다음을 포함해요:
- 균일 샘플링 (Flat sampling): 수집된 RUM 세션의 1%와 상관된 모든 트레이스와 수집된 스팬의 균일한 1% 샘플을 유지해 프론트엔드 세션과 백엔드 트레이스 간의 상관 관계를 보장해요.
- 다양성 샘플링 (Diversity sampling): 환경, 서비스, 작업, 리소스 전반의 가시성을 유지하기 위해 다양한 트레이스 집합을 유지해요.
균일 샘플링과 다양성 샘플링 모두 전체 트레이스를 캡처하므로, 트레이스 내의 모든 스팬이 인덱싱되어 Trace Queries에서 정확한 결과를 보장해요.
트레이스 수준 보존 필터는 구성 가능해요. 필터 쿼리를 사용해 어떤 태그나 속성으로 스팬을 대상으로 하고 가장 중요한 트레이스를 유지해요. 트레이스 비율을 설정하면 필터가 트레이스의 모든 스팬을 유지하므로 Trace Queries에서 해당 트레이스를 쿼리할 수 있어요.
더 알아보기 (Learn more)
도움이 되는 추가 문서, 링크, 아티클이에요: