Jaeger 설치 및 구성!!

 회사에서 분산아키텍처를 구성하고 있습니다. 분산 서비스 요청 트레이싱의 복잡도가 증가함에 따라, 각 서버간의 요청관계가 복잡해질수록 장애 및 병목지점을 찾기 어려운 문제점들이 생긴다고 합니다. 제가 다니고 있는 회사는 지금 MSA로 전환을 하면서 이런 문제점을 겪고 있진 않으나 전 회사인 블록체인쪽에서도 유사한 문제들이 많이 발생하여 어려움을 겪을때가 있었습니다. 하여 저는 여러 선배님들의 자문을 얻어 어떤 오픈소스를 활용하여 구성하는 것이 좋을까? 라고 물어봤었던 적이 있었습니다. 많은 분들이 다양한 링크들(?)을 주면서 jaeger이라는 오픈소스를 추천하였습니다. 왜 오픈소스를 하냐고 말하는사람들이 있을 것입니다.. 이유는.... 돈.....비용...ㅠㅠㅠㅠㅠㅠㅠ 아무튼 그렇게 해서 jaeger을 설치하고 구성하는 블로그를 작성하게 되었습니다.

또한, 공식 홈페이지에서 도커로 구축하는 방법은 있으나, 도커보다는 소스로 jaeger이 어떻게 돌고 싶은지 알고싶어 이렇게 설치하게 되었습니다. 귀찮으신 분들은 docker로 후딱 설치하시기 바랍니다.

 

Jaeger란 ?

Dapper 와 OpenZipkin에서 영감을 얻은 Jaeger 는 Uber Technologies에서 오픈소스로 출시 한 분산 추적시스템 입니다. 다음을 포함하여 마이크로 서비스 기반 분산 시스템을 모니터링하고 문제를 해결하는데 적합한 오픈소스입니다.

  • 분산 컨텍스트 전파
  • 분산 트랜잭션 모니터링
  • 근본 원인 분석
  • 서비스 의존성 분석
  • 성능 / 지연 시간 최적화

기술사양

전제조건

  • go 1.11 버전 이상
  • git
  • nodejs 8 이상
  • yarn
  • npm
  • centos7 서버

1단계: Golang 설치하기

먼저 리눅스 OS의 버전을 확인합니다.

  - cat /etc/os-release

[OS 버전확인]

yum을 사용하여 wget을 설치하여 주세요.

  - yum install -y wget

[wget 설치]

저는 1.11이상 버전은 golang 1.14버전을 셋업 하도록 하겠습니다.

먼저 wget을 이용하여 go 패키지를 다운로드 받습니다.

  - wget https://dl.google.com/go/go1.14.3.linux-amd64.tar.gz

[go lang 패키지 다운]

잘 받아졌다면 /usr/local에 압축을 풀어줍니다.

  - sudo tar -C /usr/local -xzf go1.14.3.linux-amd64.tar.gz

 

다음으로 go의 환경 변수를 설정해 주기 위하여 경로를 이동 하도록 하겠습니다.

  - cd /usr/local/go

  - GOPATH=`pwd`

  - echo $GOPATH

gopath의 환경변수를 설정하였다면 bin을 path 로 지정해줘야 합니다.

  -  export PATH=$PATH:$GOPATH/bin

pwd다음으로 source 명령으로 적용 시켜 준 뒤 go의 버전을 확인해주세요

  - source ~/.bash_profile

2단계: Jaeger 필요 패키지 설치

Go lang이 성공적으로 설치 되었으면 Jaeger을 구동하는데 필요한 패키지들을 설치하여 줍니다. 사실 저는 이부분을 굉장히 삽질을 많이했습니다. 공식홈페이지가 너무 불친절하여 블로그를 여기저기 찾아 해맸습니다.

먼저 노드를 설치하도록 하겠습니다.

  - curl -sL https://rpm.nodesource.com/setup_8.x | bash -

이렇게 실행을 하면 필요한 노드나 yarn을 깔려고 얘기를 해줄겁니다 그대로 설치를 해주면 됩니다.

  - yum install -y git nodejs npm

  - npm install -g yarn

  - go get -u github.com/mjibson/esc

  - go get github.com/securego/gosec/cmd/gosec

[패키지 설치]

스페이스 하나 떄문에 오타가 많이 났었다. 잘 안되면 공식홈페이지 가서 복사해서 붙여넣으세요 ㅠ_ㅠ

이제 jaeger을 사용하기 위한 사이드 패키지(?)들은 설치가 끝났습니다. 후 심호흡 한번 하시고 가시죠.. 이제 부터 공식 홈페이지에 나와있는 메뉴얼 대로 설치를 진행하면됩니다.

 

3단계: Jaeger 설치하기

jaeger을 공식홈페이지에서 git을 이용하여 다운받아서 사용하게 되어있습니다. git clone을 이용하여 jaeger을 다운로드 받아주도록 합니다.

  - git clone https://github.com/jaegertracing/jaeger.git jaeger 

[jaeger 패키지 설치]

  - cd /jaeger

설치전에 CONTRIBUTING.md 파일을 꼭읽자. 저는 이걸 안읽어서 앞에 내용을 찾아도 찾아도 안나오는 거였습니다. 저처럼 메뉴얼 잘 안보는 사람들은 이런 오픈소스는 메뉴얼 잘 읽는 사람들에 비해 현저하게 삽질을 많이 합니다. 이걸 하면서 참 자기 반성을 많이 하게 됬습니다. 저 내용을 보게 되면 몇가지 설치를 해야 정상적으로 jaeger이 셋업이 완료가 됩니다. 꼭 읽어 보시기 바랍니다. 뭐... 사실 제가 여기에 쓴다고 안보시면 나중에 습관이 되어 무섭게 다가옵니다.ㅠ

 

  - git submodule update --init --recursive
  - make install-tools
  - make build-ui

주르륵 뜰 것이다. 설치가 여기까지 아무런 에러 문구를 보지 못하였다면, 여러분은 jaeger을 source로 구현하는데 성공한 것입니다. 축하드립니다.

 

  - go run -tags ui ./cmd/all-in-one/main.go

 

 

마치며

저는 go 변수가 꼬여서..ㅠ_ㅠ 다 해놓고도 몇번을 고생하였습니다. esc나 다른 녀석들이 이상한대 받아져서 처음부터 다시하길 여러번...ㅠ 차후에는 환경변수가 안꼬이도록 작업을 해야겠습니다. 이건 테스트니까.. 참 다행이라고 생각됩니다. 이번거는 다른 블로그와 다르게 이 블로그에서 80프로 이상의 도움은 얻을 수 있으나... 나머지 20 프로는 엔지니어의 역량을 발휘하여주세요. 저도 이렇게 한게 사실 정답인지 모릅니다. 그럼 이번 포스팅을 마치도록 하겠습니다.

 

참고자료

linuxer.name/2020/05/linux-jaeger-setup/

https://www.jaegertracing.io/docs/1.18/getting-started/

https://www.jaegertracing.io/docs/1.18/operator/

댓글

이 블로그의 인기 게시물

AWS 용어

AML 체계란 무엇인가?

Cisco 명령어 정리