# 말 그대로 데이터를 쌓아두면 트레이싱 할 수 있는데, 이게 분산되어 있다~ㅋ
# 백엔드로 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
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명의 소비자에서 차를 보내는 상황을 데모로 만든것이다.
# 예제 실행
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
# 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