Service Graph 및 Service Graph view

Service Graph 및 Service Graph view (Tempo)

Service Graph은 분산 시스템에서 서비스 간 관계를 시각적으로 표현한 것이에요. 각 노드(node)는 API나 데이터베이스 같은 서비스를, 각 엣지(edge)는 서비스 간의 요청을 나타냅니다. 이를 통해 성능 문제를 감지하고 서비스 간 오류·지연 추세를 추적하며, 원인이 된 트레이스로 이동할 수 있어요.

출처: Service Graph and Service Graph view

본문

Service Graph은 RED 메트릭을 기반으로 구축돼요. RED는 두 가지 핵심 신호에 집중하는 모니터링 방법론이에요.

  • Rate: 초당 요청 수
  • Errors: 초당 실패한 요청 수
  • Duration: 지연 분포(예: p50, p95, p99)

Service graph 데이터는 트레이스에서 메트릭 파이프라인을 거쳐 Grafana로 흐릅니다.

  1. 애플리케이션이 Tempo에 트레이스를 보내요.
  2. Tempo metrics generator 또는 Grafana Alloy가 트레이스를 처리하고 service graph 메트릭을 Prometheus 호환 백엔드에 써요.
  3. Grafana는 링크된 Prometheus 데이터 소스에서 그 메트릭을 읽고 그래프를 렌더링해요.

시작하기 전에 (Before you begin)

Service Graph을 사용하려면 다음이 필요해요.

  • Grafana Alloy 또는 Tempo metrics-generator에 구성된 service graph 메트릭 생성. 이것 없이는 service graph 데이터가 존재하지 않아요.
  • 생성된 메트릭을 받는 Grafana의 Prometheus 데이터 소스.
  • Tempo 데이터 소스 설정의 Service graph 아래에 링크된 Prometheus 데이터 소스. 자세한 내용은 Additional settings 또는 YAML 구성용 프로비저닝 문서를 참고하세요.

Service Graph 쿼리를 실행하고 빈 결과를 보면 이 페이지의 Troubleshoot를 참고하세요.

동작 방식 (How it works)

metrics generator 또는 Alloy는 OpenTelemetry semantic conventions를 사용해 요청을 나타내는 트레이스 스팬의 부모-자식 관계를 검사해요. 다음 메트릭을 Prometheus 백엔드에 씁니다.

  • traces_service_graph_request_total: 두 서비스 간 총 요청 수(counter).
  • traces_service_graph_request_failed_total: 두 서비스 간 실패한 요청 수(counter).
  • traces_service_graph_request_server_seconds: 서버가 관찰한 응답 시간(histogram).
  • traces_service_graph_request_client_seconds: 클라이언트가 관찰한 응답 시간(histogram).

Grafana는 링크된 Prometheus 데이터 소스에서 이러한 메트릭을 읽어 노드 그래프를 렌더링하고 요청 속도, 오류 속도, 응답 시간을 계산해요. 라벨, 가상 노드, 추가 메트릭을 포함한 전체 메트릭 참조는 Tempo 문서의 Service graphs를 참고하세요.

Service Graph 표시하기 (Display the Service Graph)

  1. Explore로 이동해요.
  2. Tempo 데이터 소스를 선택해요.
  3. Service Graph 쿼리 유형을 선택해요.
  4. 쿼리를 실행해요.
  5. (선택) 서비스 이름으로 필터링해요.

그래프의 각 원(circle)은 서비스를 나타내요. 원 안의 숫자는 응답 시간과 초당 요청 수를 나타내요. 각 원의 색상은 성공·실패 요청의 비율을 보여 줘요.

색상 의미
Green Success (성공)
Red Fault (장애)
Yellow Errors (오류)
Purple Throttled responses (스로틀된 응답)

각 원의 색 혼합은 각 상태의 비율을 보여 줘요. 대부분 초록색 원은 건강한 트래픽을, 눈에 띄는 빨강·노랑·보라 호는 각각 장애·오류·스로틀링을 나타내요.

서비스를 클릭하면 트레이스, 메트릭, 관련 보기로 빠르게 이동하는 링크가 있는 컨텍스트 메뉴가 열려요. 그래프 레이아웃 탐색·줌·상호작용에 대한 자세한 내용은 Node graph panel 문서를 참고하세요.

높은 오류율을 가진 서비스를 조사하려면 TraceQL을 사용해요.

{ resource.service.name = "" && status = error }

<your-service>를 Service Graph 노드에 표시된 이름으로 바꾸세요. Service Graph 관찰에서 실행할 수 있는 더 많은 쿼리는 TraceQL 쿼리 예시를 참고하세요.

Service Graph view

Service Graph view는 노드 그래프 옆에 RED 메트릭(rate, error rate, duration)의 테이블을 표시해요. 테이블은 노드 그래프와 다른 메트릭 집합을 사용해요.

  • traces_spanmetrics_calls_total: Rate 및 error rate 열.
  • traces_spanmetrics_duration_seconds_bucket: Duration 열.

이러한 span 메트릭은 링크된 Prometheus 데이터 소스에 있어야 해요. Tempo 또는 Alloy 구성에서 span 메트릭 생성이 활성화되어야 해요. 자세한 내용은 Tempo 문서의 서비스 그래프 활성화를 참고하세요.

Service Graph view를 열려면 Display the Service Graph와 같은 단계를 따르세요. 쿼리를 실행하면 노드 그래프 옆에 테이블이 나타나요.

  • rate, error rate, duration 열의 행을 클릭하면 해당 행의 span 이름이 쿼리에 자동 설정된 Prometheus 쿼리가 열려요.
  • links 열의 행을 클릭하면 해당 행의 span 이름이 쿼리에 자동 설정된 Tempo 쿼리가 열려요.

TraceQL로 동일한 데이터를 프로그래밍 방식으로 쿼리할 수도 있어요. Service Graph 관찰을 쿼리로 변환하는 방법은 TraceQL 쿼리 예시를 참고하세요.

트러블슈팅 (Troubleshoot)

Service Graph이 데이터를 표시하지 않거나, 테이블이 비어 있거나, 높은 카디널리티 경고가 보이면 트러블슈팅 가이드의 service graph 문제를 참고하세요.

다음 단계 (Next steps)

더 알아보기 (Learn more)