기본 콘텐츠로 건너뛰기

라벨이 Trace인 게시물 표시

[OpenCensus - Trace] Opencensus를 이용한 gRPC Trace 와 Metrics 처리하기

Opencensus를 이용한 gRPC Global Tracing Overview Opencensus를 사용해서 시스템의 추적 및 매트릭을 수집하고 선택한 백엔드로 내보내 분산 시스템에 대한 관찰성을 제공할 수 있다. 간단하게 gRPC 상에서 추적을 검증하기 위한 용도이므로 단순히 바이트를 포함하는 페이로드를 받아서 대문자 처리를 하는 서비스를 대상으로 검토해 보도록 한다. Requirements go : Download and install - The Go Programming Language 를 통해 설치 gRPC $ go get -u google.golang.org/grpc Protocol Buffer v3 : Quick start – gRPC 문서의 내용에 따라서 Releases · protocolbuffers/protobuf · GitHub 에서 바이너리를 받을 수 있다. # linux apt or apt-get $ apt install -y protobuf-compiler $ protoc --verion # 버전 3+ 확인 # Mac Homebrew $ brew install protobuf $ protoc --version # 버전 3+ 확인 Go 용 protoc 플러그인 $ go get -u github.com/golang/protobuf/protoc-gen-go Creating our gRPC Service 추적을 활성화하기 위해서는 다음과 같은 패키지가 필요하다. Opencensus gRPC 지원 : go.opencensus.io/plugin/ocgrpc Opencensus Trace 지원 : go.opencensus.io/trace 매트릭을 활성화하기 위해서는 다음과 같은 패키지가 필요하다. 서버 핸들러 : go.opencensus.io/plugin/ocgrpc.SserverHandler 클라이언트 핸들러 : go.opencensus.io/plugin/ocgrpc.ClientHandler 서

[Opencensus - Trace] Opencensus를 활용하는 Trace 정리

Trace 정리 Tracing (이하 트레이싱) 추적은 응용 프로그램을 구성하는 다른 서비스에 의해 처리되는 단일 사용자 요청의 진행과정을 추적하는 것이다. 진행 과정의 각 작업은 Span 으로 부르며, 각 스팬에는 단계에 소요된 시간 (대기 시간), 상태, 시간 이벤트, 속성, 링크를 포함하여 작업을 나타낼 수 있는 메타 데이터가 포함된다. 이 추적 정보를 활용해서 애플리케이션의 오류 및 대기 시간 문제를 디버깅 할 수 있다. Trace (이하 추적) 추적은 스팬 트리로 구성된다. 즉, 작업의 흐름 경로를 보여주는 관찰 가능한 신호의 집합이다. 추적 자체는 고유한 16바이트 시퀀스로 표현되는 TraceID 로 식별된다. 트레이싱을 통해서 수집된 추적 정보는 다음과 같이 표현된다. 위의 그림에서와 같이 여러 단계의 작업(스팬)이 호출된 것을 확인할 수 있다. auth: 사용자 인증 여부 검사 cache.Get: 캐시 검증 mysql.Query: 캐시에 존재하지 않아 DB 조회 cache.Put: DB 조회결과 캐시 처리 Exporting (이하 내보내기) 수집된 추적 정보를 다양한 분석을 위해서 여러 가지 백엔드들에 대한 내보내기를 구성해서 처리할 수 있다. 다양한 내보내기 목록등은 Opencensus 를 참고하면 된다. Span (이하 스팬) 스팬은 추적의 단일 작업을 나타낸다. 주로 HTTP 요청, RPC (원격 프로시저 호출: Remote Procedure Call), 데이터베이스 쿼리 또는 코드가 사용자 코드에서 사용하는 경로 등을 나타낸다. 스팬은 트리 구조를 이루기 때문에 상위 스팬의 존재여부에 따라서 상위 스팬과 하위 스팬으로 나뉜다. 각 스팬은 SpanID 로 식별된다. SpanID 와 옵션 바이트들을 합쳐서 Span Context 라고 한다. 동일 프로세스 내에서 스팬 컨텍스트는 컨텍스트 객체로 전달된다. 프로세스 경계를 넘어서면 프로토콜 헤더로 직렬화 된다. 따라서 수신 측은 스팬 컨텍스트를 읽고 하