jaeger

# jaeger(예거, 사냥꾼이라는 뜻) 분산 트레이싱(추적) 시스템이다.
# 말 그대로 데이터를 쌓아두면 트레이싱 할 수 있는데, 이게 분산되어 있다~ㅋ
# 백엔드로 cassandra(3.4이상) 와 elasticsearch(5.x/6.x) 를 지원한다.
# 테스트를 위해 in-memory 형태도 지원된다.

# 도커 이지미가 있어 쉽게 jaeger 서버를 띄울 수 있다.
docker run -d -e \
  COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
  -p 5775:5775/udp \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 14268:14268 \
  -p 9411:9411 \
  jaegertracing/all-in-one:latest

# jaeger 서버 UI 확인
http://127.0.0.1:16686

# jaeger 테스트
# GOPATH 에 jaeger 설치
mkdir -p $GOPATH/src/github.com/jaegertracing
cd $GOPATH/src/github.com/jaegertracing
git clone https://github.com/jaegertracing/jaeger.git
cd jaeger
make install

# Hot R.O.D (Ride on Demand)
# 차대여 서비스로 4명의 소비자에서 차를 보내는 상황을 데모로 만든것이다. 
# 예제 실행
cd examples/hotrod
go run ./main.go

# 확인
# 4개의 버튼을 여러번 눌러보자.
# jaeger 로 요청이 들어간다.
http://127.0.0.1:8080

# 데모 시나리오는 다음과 같다.
# 요청을 받는다.
HTTP request received {"service": "frontend", "method": "GET", "url": "/dispatch?customer=731&nonse=0.4182822942803712"}

# 차를 필요로한 사람(소비자) 정보를 파악한다.
Getting customer {"service": "frontend", "component": "customer_client", "customer_id": "731"}
HTTP request received {"service": "customer", "method": "GET", "url": "/customer?customer=731"}
Loading customer {"service": "customer", "component": "mysql", "customer_id": "731"}

# 소비자 위치를 파악한다.
Found customer {"service": "frontend", "customer": {"ID":"731","Name":"Japanese Deserts","Location":"728,326"}}
Finding nearest drivers {"service": "frontend", "component": "driver_client", "location": "728,326"}
Searching for nearby drivers {"service": "driver", "location": "728,326"}

# 소비자 근처 가장 가까운 운전사를 찾는다.
Found drivers {"service": "driver", "drivers": ["T707319C", "T760429C", "T776669C", "T715333C", "T790304C", "T783086C", "T736627C", "T787928C", "T708521C", "T720511C"]}
redis timeout {"service": "driver", "driver_id": "T707319C", "error": "redis timeout"}
Search successful {"service": "driver", "num_drivers": 10}

# 경로를 찾는다.
Finding route {"service": "frontend", "component": "route_client", "pickup": "59,53", "dropoff": "728,326"}
Finding route {"service": "frontend", "component": "route_client", "pickup": "488,978", "dropoff": "728,326"}
Finding route {"service": "frontend", "component": "route_client", "pickup": "920,213", "dropoff": "728,326"}

# 위 데모 요청은 jaeger UI (127.0.0.1:16686)에서 트레이싱 된다.
serach -> find traces -> service(frontend) , operation(all) -> find traces

# 참고
https://github.com/jaegertracing/jaeger
https://jaegertracing.netlify.com/docs/
https://medium.com/opentracing/take-opentracing-for-a-hotrod-ride-f6e3141f7941

comments:

댓글 쓰기