Tempo에서 Service Graph 그리는 법

Alli_Eunbi·2023년 8월 31일
0


Tempo의 Metric Generator

메트릭 생성기(metrics-generator)는 Tempo의 선택적인 구성 요소입니다.
기본 helm 차트에 추가해야 합니다.

  • 작동 방식
  1. Metric Generator는 수집한 trace에서 metric data를 생성합니다.
  2. Distributor는 수신된 Span을 Ingester와 metric-generator 양쪽에 모두 기록합니다.
  3. metric-generator는 Span을 처리하고 Prometheus remote-write 프로토콜을 사용하여 Prometheus 데이터 소스에 메트릭을 기록합니다.

개요

Metrics-generator는 Tempo의 ingest 경로에서 사용 가능한 데이터를 활용하여 trace에서 메트릭을 생성하여 추가 가치를 제공합니다.

메트릭 생성기는 내부적으로 일련의 process들을 실행합니다. 각 프로세서는 Span을 수집하고 메트릭을 생성합니다. 각 프로세서는 각각 다른 메트릭 정보들을 생성합니다.

현재 다음과 같은 프로세서를 사용할 수 있습니다:

  • 서비스 그래프
  • Span 메트릭

서비스 그래프

서비스 그래프는 분산 시스템 내의 서비스 간 관계를 나타내는 것입니다.

이 서비스 그래프 프로세서는 trace를 분석하여 서비스 간의 관계를 나타내는 map을 작성하며 엣지(edge)를 찾는 것을 목표로 합니다.

edge란 부모-자식 관계인 Span으로, 두 서비스 간의 점프(예: 요청)를 나타냅니다. 요청의 양과 지속 시간은 메트릭으로 기록되며, 이를 사용하여 그래프를 나타냅니다.

Span 메트릭

Span 메트릭 프로세서는 Span에서 RED(Request, Error, Duration) 메트릭을 유도합니다.

Span 메트릭 프로세서는 각 차원 조합별로 Span의 총 개수와 지속 시간을 계산합니다. 차원은 서비스 이름, 작업, Span 종류, 상태 코드 및 Span에 있는 태그 또는 속성일 수 있습니다. 사용 가능한 차원이 많을수록 생성된 메트릭의 카디널리티가 높아집니다.


**Remote writing metrics**

메트릭 생성기는 주기적으로 메트릭을 remote_write 엔드포인트로 보내는 Prometheus 에이전트를 실행합니다. remote_write 엔드포인트는 구성 가능하며, Prometheus 호환 엔드포인트일 수 있습니다. 쓰기 간격은 metrics_generator.registry.collection_interval을 통해 제어할 수 있습니다.

멀티 테넌시가 활성화된 경우 메트릭 생성기는 remote-write 엔드포인트로 원본 요청의 X-Scope-OrgID 헤더를 전달합니다.


Metric Generator 설정

tempo의 values.yaml 에서 아래와 같이 설정을 진행합니다.

metricsGenerator:
  enabled: true
  config:
    storage:
      remote_write:
        - url: http://prom-kube-prometheus-stack-prometheus.monitoring:9090/api/v1/write
          send_exemplars: false
global_overrides:
  metrics_generator_processors:
    - service-graphs

Prometheus 설정

prometheus:
	enableFeatures:
     - remote-write-receiver
	enableRemoteWriteReceiver: true

Grafana Datasource 설정

grafana:
additional_datasource:
- name: Tempo
      type: tempo
      uid:
      url: http://tempo-query-frontend-discovery.tempo:3100
      access: proxy
      basicAuth: false
      jsonData:
        serviceMap:
          datasourceUid: 'prometheus'

// 여기 아래의 nodeGraph 설정이 true로 되어 있어야 함.
        nodeGraph:
          enabled: true
profile
BACKEND

3개의 댓글

comment-user-thumbnail
2023년 12월 11일

질문 남깁니다!
따로 참고하신 자료가 있으신가요 ??

1개의 답글