프로파일 데이터 쿼리
프로파일 데이터 쿼리 (Query profile data)
오픈소스 Grafana Profiles Drilldown 앱이나 내장 Pyroscope 데이터 소스 쿼리 에디터로 프로파일 데이터를 쿼리할 수 있어요. 또한 Grafana 대시보드에 플레임 그래프 패널을 임베드할 수도 있어요.
출처: 문서
본문
Profiles Drilldown
Grafana Profiles Drilldown은 오픈소스 연속 프로파일링 플랫폼인 Pyroscope와 원활하게 통합되도록 설계된 네이티브 Grafana 애플리케이션이에요. 쿼리 없는 부드러운 경험으로 프로파일링 데이터를 탐색·분석하게 해줘요. Grafana Cloud나 자신의 Grafana 인스턴스에서 사용할 수 있어요.
이용 사례
프로파일링 데이터를 보고, 분석하고, 비교하는 여러 가지 모드가 있어요. 주요 이용 사례는 다음과 같아요: 특정 서비스의 성능 문제 조사(반응적), 전반적 병목·리소스 핫스팟 발견(능동적). Profiles Drilldown은 능동적·반응적 이용 사례를 특별히 지원하는 직관적인 인터페이스를 제공해요. 모든 서비스가 어떻게 작동하는지에 대한 전체적인 뷰와, 더 표적화된 근본 원인 분석을 위한 드릴다운 기능을 모두 얻을 수 있어요. 프로파일을 분석하고 로그·메트릭·트레이싱 같은 다른 전통적 신호로는 얻을 수 없는 인사이트를 제공하는 편리한 플랫폼이에요.
Pyroscope 쿼리 에디터
Pyroscope 데이터 소스 쿼리 에디터는 프로파일 유형 선택기, 라벨 선택기, 접히는 옵션에 접근할 수 있게 해줘요. Profiles Drilldown처럼 쿼리 에디터도 데이터를 시각화하는 플레임 그래프를 제공해요.
라벨 선택기 구문
라벨 선택기는 Prometheus와 유사한 구문을 사용해요. 하나 이상의 라벨 매처를 콤마로 구분해 중괄호로 감싸요. 각 매처는 라벨 이름, 연산자, 큰따옴표 값으로 구성돼요.
| 연산자 | 설명 |
|---|---|
= |
값과 정확히 일치하는 라벨 선택 |
!= |
값과 일치하지 않는 라벨 선택 |
=~ |
정규식과 일치하는 라벨 선택 |
!~ |
정규식과 일치하지 않는 라벨 선택 |
일반적인 라벨 선택기 예시:
{service_name="my-service"}
{service_name="my-service", namespace="production"}
{service_name=~"cart.*"}
{service_name="checkout", namespace!="staging"}
라벨 선택기를 비워 두거나 {}로 설정하면 라벨로 필터링하지 않고 선택한 프로파일 유형의 모든 프로파일을 쿼리해요.
쿼리 옵션
| 옵션 | 설명 |
|---|---|
| Query Type | 쿼리가 반환하는 데이터 유형 설정: 플레임 그래프 데이터는 Profile, 타임시리즈 데이터는 Metric, 또는 Both. Both는 Explore에서만 선택 가능. 대시보드 패널은 하나의 시각화만 허용 |
| Group by | 라벨 하나 이상으로 메트릭 데이터를 그룹화. Group by 라벨이 없으면 메트릭 데이터가 모든 라벨에 걸쳐 단일 타임시리즈로 집계. 메트릭 데이터에만 적용되며 프로파일 결과는 변경하지 않음 |
| Limit | Group by 설정 시 반환되는 최대 타임시리즈 수 설정. 반환되는 시리즈는 항상 기간 동안 총 집계 데이터의 내림차순 값으로 정렬. 프로파일 쿼리에는 적용 안 됨 |
| Span ID | 프로파일을 검색할 스팬 ID 설정. 특정 트레이스 스팬과 연관된 프로파일을 볼 수 있음. Trace to profiles 지원. 예: 64f170a95f537095 |
| Max Nodes | 플레임 그래프에 렌더링되는 최대 노드 수 설정. 값이 낮을수록 작은 노드를 집계해 큰 프로파일의 성능이 향상. 기본값은 16384 |
| Annotations | 샘플링·스로틀링 이벤트 같은 프로파일링 애노테이션을 타임시리즈 결과에 포함. Pyroscope가 서비스 수집을 줄이거나 제한한 시점 식별에 사용 |
Exemplars
profilesExemplars 기능이 활성화되면 Options 섹션에 Exemplars 토글이 나타나요. Exemplar는 개별 프로파일 샘플을 메트릭 그래프의 포인트에 연결해, 타임시리즈의 스파이크에서 그것을 생성한 특정 프로파일로 이동할 수 있게 해줘요. 이 기능은 일반 공개이며 기본으로 활성화돼 있어요.
Heatmap
profilesHeatmap 기능이 활성화되면 Heatmap 토글이 나타나요. 히트맵은 시간에 따른 프로파일 샘플의 분포를 시각화해 많은 프로파일에서 패턴과 이상치를 발견하는 데 도움을 줘요. Heatmap 활성화 시 Heatmap Type 옵션으로 샘플 집계 방식을 선택할 수 있어요.
참고: profilesHeatmap 기능은 실험적이에요. 실험적 기능은 변경될 수 있고 향후 릴리스에서 제거될 수 있어요. profilesHeatmap 기능 토글로 활성화하세요.
UTF-8 라벨 이름
pyroscopeUTF8LabelNames 기능이 활성화되면 라벨 선택기가 UTF-8 라벨 이름을 지원해요. 점 같은 문자를 포함하는 라벨 이름은 큰따옴표로 감싸세요, 예: {"k8s.namespace"="production"}. 이 기능은 공개 미리보기이며 기본으로 활성화돼 있어요.
쿼리 예시
서비스의 높은 CPU 사용량 조사 — process_cpu:cpu:nanoseconds:cpu:nanoseconds 프로파일 유형을 선택하고 영향을 받는 서비스로 필터링:
{service_name="checkout"}
Explore에서 Query Type을 Both로 설정하면 CPU 플레임 그래프와 CPU 사용량 타임시리즈를 나란히 볼 수 있어요.
환경 간 메모리 할당 비교 — memory:alloc_space:bytes:space:bytes 프로파일 유형을 선택하고 Query Type을 Metric, Group by를 namespace로 설정:
{service_name="cart"}
메트릭 그래프가 네임스페이스별 별도 타임시리즈를 보여줘 production과 staging 같은 환경 간 할당 동작을 비교할 수 있어요.
Goroutine 증가 분석 — goroutine:goroutine:count:goroutine:count 프로파일 유형을 선택해 goroutine 수와 생성 위치 확인:
{service_name=~"api.*"}
특정 트레이스 스팬의 프로파일 보기 — 프로파일 유형을 선택하고 Query Type을 Profile로, Span ID 필드에 스팬 ID(예: 64f170a95f537095)를 입력. 플레임 그래프가 그 스팬과 연관된 프로파일 데이터만 보여줘요. 이 예시는 Trace to profiles를 지원해요.
프로파일 쿼리 결과
프로파일은 플레임 그래프로 시각화할 수 있어요. Pyroscope는 선택한 시간 범위에 걸쳐 집계된 프로파일을 반환해요. 플레임 그래프의 절대 값은 시간 범위가 커질수록 커지지만 상대 값은 의미 있게 유지돼요. 시간 범위를 확대해 단일 스크레이프 간격까지 더 높은 세분도의 프로파일을 얻을 수 있어요.
메트릭 쿼리 결과
메트릭 결과는 선택한 프로파일 유형의 시간에 따른 집계 합계 값을 나타내요. 이로써 스크레이프된 프로파일 값의 스파이크를 빠르게 보고 특정 시간 범위로 확대할 수 있어요.