작업하면서 배우는 것들

Axios 사용 시 Zipkin 로그 트레이싱을 위한 wrapAxios

Jungsoomin :) 2020. 12. 23. 14:59

Spring Cloud Sleuth + Zipkin 사용 시 postman 등의 확장 프로그램 에서는 로그 기록이 Zipkin 으로 보내지지만, Axios 사용 시 로그 기록이 Zipkin 으로 보내지지 않는 점에 대한 해결을 기술

 

axios 호출시 zipkin에 로그가 남지 않는 상태로 exportable 속성이 false 이다.

 

Axios 를 하나의 서비스로 Wrapping 시키는 방법을 제공하는데, 이 의존이 zipkin-axios 이다. 

 

더이상 관리되지 않아 github.com/uschmann/zipkin-instrumentation-axios 에 zipkin-instrumentation-axios 로 버전 업이 됬다는데, 사용법은 동일해서 다행이다.

 

zipkin-instrumentation-axios 를 사용해본 결과 zipkin 이랑 충돌이 나서, 이 부분은 공부를 해봐야겠다.

 

일단 과정으로 넘어간다.

 

Axios 를 랩핑하기위한 wrapAxios 생성에 필요한 의존들 이다.

npm i --save zipkin

npm i --save zipkin-axios

npm i --save zipkin-transport-http

 

 

zipkin-axios.js

import Axios from "axios";
import wrapAxios from 'zipkin-axios'
import {HttpLogger} from 'zipkin-transport-http'
import {Tracer,ExplicitContext,BatchRecorder} from "zipkin";

const ctxImpl = new ExplicitContext();
const recorder = new BatchRecorder({
  logger: new HttpLogger({
  	// 서비스를 등록할 Zipkin 서버의 엔드포인트를 정하는 듯
    endpoint: `http://localhost:9411/api/v1/spans`
  })
});

const tracer = new Tracer({ctxImpl,recorder});

// axios 에 tracer , 등록할 서비스 이름을 가지고 wrapAxios 를 만든다.
export const zipkinAxios = wrapAxios(Axios,{tracer,serviceName:'my-zipkin-axios'});

 

이후에는 Axios 호출 하듯 사용하면 된다.

 

여러 wrapAxios 를 만들 수 있는 듯 하며. 만든 서비스는 Zipkin에 등록된다.

 

 

Zipkin 에 뜨지않던 Axios 호출이 export 되어 찍히기 시작한다.

 

 

서버 단의 Sleuth 도 exportable 속성을 true 로 잡고 있다.