Trace to profiles 상관관계 구성

Trace to profiles 상관관계 구성 (Configure trace to profiles correlation)

Trace to profiles 기능은 트레이스의 스팬에서 Grafana Pyroscope의 프로파일링 데이터로 직접 이동하게 해줘요. 구성되면 스팬 세부 정보 뷰에 "Profiles for this span" 버튼과 내장 플레임 그래프(flame graph)가 나타나죠. 이 기능을 통해 Grafana에서 트레이스와 프로파일을 연결해 서로 다른 신호를 상관관계로 분석할 수 있어요.

출처: 문서

본문

시작하기 전에

Note: 프로비저닝된 데이터 소스는 Grafana UI에서 수정할 수 없어요. Grafana Cloud Traces(사전 구성된 추적 데이터 소스)를 쓰면 설정은 읽기 전용이에요. trace to profiles를 구성하려면 데이터 소스를 복제하거나 자체 관리 인스턴스의 프로비저닝 파일을 업데이트하세요.

Trace to profiles는 Grafana Pyroscope 데이터 소스를 추적 데이터에 연결해요. 구성되면 Explore를 사용해 트레이스 스팬에서 프로파일 데이터로 쿼리를 실행할 수 있어요. 각 스팬은 쿼리에 연결되며, 태그를 구성하면 Grafana가 스팬 속성 값을 쿼리에 동적으로 삽입해요. 쿼리는 (스팬 시작 시간 - 60)에서 (스팬 종료 시간 + 60초) 시간 범위에 걸쳐 실행돼요. 연결된 프로파일이 있는 각 스팬 세부 정보 섹션에는 내장 플레임 그래프도 삽입되어, 현재 뷰를 떠나지 않고 각 스팬의 리소스 소비를 플레임 그래프로 볼 수 있어요.

trace to profiles 기능을 구성하는 방법은 두 가지예요:

  • 기본 쿼리를 사용하는 기본 구성.
  • 트레이스나 스팬의 변수를 보간할 수 있는 템플릿 언어를 사용하는 커스텀 쿼리 구성.

사용자 시작 전 준비

다음 세 가지 모두로 계측돼야 해요:

  1. 프로파일링: Pyroscope SDK 또는 Grafana Alloy가 프로파일 데이터를 Pyroscope로 전송.
  2. 추적: OpenTelemetry SDK가 트레이스 데이터를 Tempo로 전송.
  3. 스팬 프로파일링 브리지: 프로파일링 데이터를 트레이스 스팬과 연결하는 언어별 OpenTelemetry 통합 패키지. 이 패키지가 없으면 트레이스와 프로파일은 연결이 없는 독립 신호로 남아요.

기본 구성 사용

  1. 왼쪽 메뉴에서 Connections > Data sources를 선택해요.
  2. Data source 목록에서 구성된 Tempo 데이터 소스를 선택해요.
  3. Traces to profiles 섹션으로 스크롤해요.
  4. Data source 드롭다운에서 Pyroscope 데이터 소스를 선택해요.
  5. 선택: 쿼리에 사용할 태그를 하나 이상 추가해요. 비워두면 기본값인 service.nameservice.namespace가 사용돼요. 구성한 태그는 trace-to-profiles 스팬 링크가 나타나려면 스팬 속성 또는 리소스에 존재해야 해요. 태그 이름에 점이 있고 대상 데이터 소스가 라벨의 점을 허용하지 않으면 태그 새 이름을 구성할 수 있어요(예: service.nameservice_name으로 재매핑).
  6. 쿼리에 사용할 프로파일 타입을 선택해요. 드롭다운에서 옵션을 선택해요. 쿼리가 유효하려면 프로파일 타입 또는 앱을 선택해야 해요. 선택하지 않으면 Grafana가 데이터를 표시하지 않아요.
  7. Save and Test를 선택해요.

Pyroscope 데이터 소스를 구성했는데 프로파일 데이터가 없거나 "Profiles for this span" 버튼과 내장 플레임 그래프가 보이지 않으면, 스팬 태그에 pyroscope.profile.id 키-값 쌍이 존재하는지 확인하세요.

커스텀 쿼리 구성

  1. 왼쪽 메뉴에서 Connections > Data sources를 선택해요.
  2. 구성된 Tempo 데이터 소스를 선택해요.
  3. Traces to profiles 섹션으로 스크롤해요.
  4. Data source 드롭다운에서 Pyroscope 데이터 소스를 선택해요.
  5. 선택: 쿼리에 사용할 태그를 골라요. 비워두면 service.nameservice.namespace 기본값이 사용돼요. 이 태그들은 커스텀 쿼리에서 ${__tags} 변수로 쓸 수 있어요. 이 변수는 매핑된 태그를 데이터 소스에 적합한 문법의 목록으로 보간하며, 스팬에 있는 태그만 포함하고 없는 건 생략해요. 태그 이름도 구성할 수 있어요. 태그를 매핑하지 않아도 method="${__span.tags.method}"처럼 쿼리에서 어떤 태그든 쓸 수 있어요.
  6. 쿼리에 사용할 프로파일 타입을 선택해요.
  7. Use custom query를 켜 커스텀 쿼리를 입력해요.
  8. 프로파일 데이터를 쿼리하는 커스텀 쿼리를 지정해요. 다양한 변수를 사용해 현재 스팬에 맞는 쿼리를 만들 수 있어요. 모든 변수가 비어있지 않은 값으로 보간될 때만 링크가 표시되어 유효하지 않은 쿼리가 생성되는 것을 방지해요. 구성된 태그는 $__tags 키워드로 보간할 수 있어요.
  9. Save and Test를 선택해요.

구성 옵션

Setting name Description
Data source 대상 데이터 소스를 정의. Pyroscope [profiling] 데이터 소스를 선택할 수 있음.
Tags 프로파일 쿼리에 사용할 태그 정의. 기본: cluster, hostname, namespace, pod, service.name, service.namespace. 대상 데이터 소스가 허용하지 않으면 태그 이름을 바꿔 점을 제거할 수 있음. 예: http.status → http_status.
Profile type 쿼리에 사용할 프로파일 타입 정의.
Use custom query 보간이 있는 커스텀 쿼리 사용 토글.
Query 커스텀 쿼리 작성 입력. 스팬의 변수로 커스터마이즈하려면 변수 보간 사용.

프로비저닝

데이터 소스 YAML 파일의 tracesToProfiles 블록으로 trace to profiles 구성을 프로비저닝할 수 있어요. 모든 Tempo 설정을 포함한 전체 프로비저닝 YAML 예제는 "Provision the Tempo data source" 문서를 참고하세요.

통합 검증

  1. Explore를 열고 Tempo 데이터 소스를 선택해요.
  2. 트레이스를 로드하는 쿼리를 실행해요.
  3. 스팬을 펼쳐 "Profiles for this span" 버튼이 스팬 세부 정보에 나타나는지 확인해요.
  4. 버튼을 클릭해 프로파일 데이터가 있는 내장 플레임 그래프가 로드되는지 확인해요.

문제 해결

trace to profiles 링크가 나타나지 않거나 플레임 그래프가 비어 있으면 트러블슈팅 가이드의 "Trace to logs/metrics/profiles issues"를 참고하세요. 추가 진단 단계는 Pyroscope 문서의 "Troubleshoot trace to profiles"를 참고해요. 구성 필드가 회색으로 표시되면 데이터 소스가 프로비저닝된 것이므로 YAML로 구성을 업데이트하려면 Provisioning 섹션을 참고해요.

다음 단계

더 알아보기 (Learn more)