2023. 6. 26. 15:21ㆍCloud Native
- 목차
Jaeger ?
2015년 Uber에서 공개한 분산 서비스 간 transaction을 추적하는 open source software 입니다.
OpenTracing 표준을 지원하도록 설계 되었습니다.
MSA 환경에서 여러 service들을 모니터링하여 문제를 해결하는데 사용됩니다.
Tracing spec.
tracing에는 다음의 사양들이 존재합니다.
- OpenTracing
- CNCF project로 현재 deprecated
- OpenTracing API 표 준에 맞게 직접 library를 구현해야 함
- OpenCensus
- Google의 open source community project
- 개발자가 app을 계측하고 backend로 telemetry data를 다양한 언어를 통해 전송
- OpenTelemetry (Otel)
- OpenTracing + OpenCensus project의 통합
- trace, metric, log와 같은 원격 측정 데이터를 기기, 생성, 수집 및 내보내기 위한 공금 업체-중립 오픈 소스 관찰 framework
분산 추적?
MS간의 복잡한 상호 작용에서 이벤트 전체를 파악하는 방법입니다. MSA 환경에서는 요청에 대해 여러개의 서비스들이 서로다른 서버상에서 구동될 수 있습니다. 이때 어떤 문제가 발생했을 시 어디서 어떻게 문제가 발생했는지를 파악하려면 이들을 모두 추적할 수 있는 방법이 필요합니다.
이런 경우 분산 추적이 사용됩니다. 서비스 메쉬의 일부로 실행되는 분산 추적은 마이크로서비스를 관리하고 관찰할 수 있는 방법입니다.
Jaeger는 분산 추적을 사용해 다양한 마이크로서비스의 요청 경로를 추적하기에 실제 요청의 흐름을 시각적으로 확인할 수 있습니다.
Jaeger 구성요소
- Jaeger client
- 분산 추적을 위한 OpenTracing API의 언어별 구현
- Jaeger Agent
- 사용자 datagram protocol로 전송된 span을 수신하는 network daemon
- 일반적으로 Kubenetes와 같은 container 환경에서 sidecar로서 구현됨
- Jaeger Collector
- span을 수신하여 대기열에 배치
- Query
- storage에서 추적을 검색하는 서비스
- Jaeger Console
- 추적 데이터를 시각화하는 사용자 interface
span
분산 추적에서 추적의 기본이 되는 단위 block
실행되는 작업 단위
e.g., HTTP request, call to DB
Span은 다음과 같은 정보를 포함
- Span name
- operation name
- Start/Finish timestamp
- Span tags, logs
- key:value로 저장
- Span context
- trace에서 각 span을 구분할 수 있는 정보 제공
- span id, trace id
trace
trace는 시스템 전반에서 데이터/실행 경로를 나타냄
여러 span이 하나의 trace를 구성
instrumentation
span 생성 방식 2가지
1) Auto instrumentation
OpenTelemetry에서 여러 app용 lib을 제공하는 경우 이를 사용하면 자동으로 span을 생성함
2) Manual instrumentation
그렇지 않은 경우 app에서 직접 수동으로 Span을 생성해서 개발
Sampling 방식
1) Head-based sampling
Jaeger-client의 맨 앞단에서 sampling rule을 결정
2) Tail-based sampling
collector에서 sampling 수행
Architecture
1. directo-to-storage
2. Kafka as intermediate buffer
Jaeger Docker 구동
Jaeger의 모든 것을 포함한 docker image를 실행
$ docker run-d -p06831:6831/udp-p16686:16686 jaegertracing/all-in-one:latest
이후 "http://localhost:16686에 접속
Hot R.O.D sample 실행
$ git clone https://github.com/jaegertracing/jaeger
$ cd jaeger/examples/hotrod
$ go run ./main.go all
이후 "http://localhost:16686에 접속
HostORD에서 제공하는 버튼들을 눌러 요청을 만들면, Jaeger에서 API에 대한 trace를 볼 수 있습니다.
'Cloud Native' 카테고리의 다른 글
Fluent-bit (0) | 2023.08.14 |
---|---|
REST client on vscode (0) | 2023.06.27 |
Docker image의 deploy를 위한 특정 library에 대한 의존성 관리 (0) | 2023.06.20 |
RabbitMQ, AMQP (0) | 2023.06.07 |
CSR (Certificate Signing Request), SSC (Self Signed Certificate) (0) | 2023.01.19 |