1. 설치
https://www.jaegertracing.io/download/ 에서 다운로드 받는다.
테스트 환경은 맥이어서 macOS용 tar.gz 파일을 받았다.
jaeger-1.20.0-darwin-amd64.tar.gz
다운로드 받은 파일의 압축을 풀고,
x jaeger-1.20.0-darwin-amd64/ x jaeger-1.20.0-darwin-amd64/jaeger-collector x jaeger-1.20.0-darwin-amd64/jaeger-ingester x jaeger-1.20.0-darwin-amd64/jaeger-query x jaeger-1.20.0-darwin-amd64/jaeger-all-in-one x jaeger-1.20.0-darwin-amd64/example-hotrod x jaeger-1.20.0-darwin-amd64/jaeger-agent
2. 실행
일단 테스트가 목적이니 jaeger-all-in-one 실행했다.
./jaeger-all-in-one 2020/11/15 20:55:21 maxprocs: Leaving GOMAXPROCS=4: CPU quota undefined {"level":"info","ts":1605441321.844507,"caller":"flags/service.go:116","msg":"Mounting metrics handler on admin server","route":"/metrics"} {"level":"info","ts":1605441321.8448472,"caller":"flags/admin.go:120","msg":"Mounting health check on admin server","route":"/"} {"level":"info","ts":1605441321.844992,"caller":"flags/admin.go:126","msg":"Starting admin HTTP server","http-addr":":14269"} {"level":"info","ts":1605441321.845026,"caller":"flags/admin.go:112","msg":"Admin server started","http.host-port":"[::]:14269","health-status":"unavailable"} {"level":"info","ts":1605441321.847017,"caller":"memory/factory.go:61","msg":"Memory storage initialized","configuration":{"MaxTraces":0}} {"level":"info","ts":1605441321.847293,"caller":"static/strategy_store.go:145","msg":"No sampling strategies provided, using defaults"} {"level":"info","ts":1605441321.854553,"caller":"server/grpc.go:76","msg":"Starting jaeger-collector gRPC server","grpc.host-port":":14250"} {"level":"info","ts":1605441321.8545868,"caller":"server/http.go:44","msg":"Starting jaeger-collector HTTP server","http host-port":":14268"} {"level":"info","ts":1605441321.8549912,"caller":"server/zipkin.go:48","msg":"Listening for Zipkin HTTP traffic","zipkin host-port":":0"} {"level":"info","ts":1605441321.869828,"caller":"grpc/builder.go:67","msg":"Agent requested insecure grpc connection to collector(s)"} {"level":"info","ts":1605441321.8699038,"caller":"이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다..1/clientconn.go:243","msg":"parsed scheme: \"\"","system":"grpc","grpc_log":true} {"level":"info","ts":1605441321.869923,"caller":"이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다..1/clientconn.go:249","msg":"scheme \"\" not registered, fallback to default scheme","system":"grpc","grpc_log":true} {"level":"info","ts":1605441321.869958,"caller":"이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다..1/resolver_conn_wrapper.go:143","msg":"ccResolverWrapper: sending update to cc: {[{:142500 }] }","system":"grpc","grpc_log":true} {"level":"info","ts":1605441321.8699672,"caller":"이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다..1/clientconn.go:667","msg":"ClientConn switching balancer to \"round_robin\"","system":"grpc","grpc_log":true} {"level":"info","ts":1605441321.869972,"caller":"이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다..1/clientconn.go:682","msg":"Channel switches to new LB policy \"round_robin\"","system":"grpc","grpc_log":true} {"level":"info","ts":1605441321.8700118,"caller":"이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다..1/clientconn.go:1056","msg":"Subchannel Connectivity change to CONNECTING","system":"grpc","grpc_log":true} {"level":"info","ts":1605441321.870047,"caller":"이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다..1/clientconn.go:417","msg":"Channel Connectivity change to CONNECTING","system":"grpc","grpc_log":true} {"level":"info","ts":1605441321.870065,"caller":"grpc/builder.go:101","msg":"Checking connection to collector"} {"level":"info","ts":1605441321.87007,"caller":"grpc/builder.go:104","msg":"Agent collector connection state change","dialTarget":":14250","status":"CONNECTING"} {"level":"info","ts":1605441321.87006,"caller":"이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다..1/clientconn.go:1193","msg":"Subchannel picks a new address \":14250\" to connect","system":"grpc","grpc_log":true} {"level":"info","ts":1605441321.8705091,"caller":"이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다..1/clientconn.go:1056","msg":"Subchannel Connectivity change to READY","system":"grpc","grpc_log":true} {"level":"info","ts":1605441321.87052,"caller":"command-line-arguments/main.go:212","msg":"Starting agent"} {"level":"info","ts":1605441321.8705611,"caller":"querysvc/query_service.go:137","msg":"Archive storage not created","reason":"archive storage not supported"} {"level":"info","ts":1605441321.870563,"caller":"base/balancer.go:200","msg":"roundrobinPicker: newPicker called with info: {map[0xc00003b620:{{:14250 0 }}]}","system":"grpc","grpc_log":true} {"level":"info","ts":1605441321.87057,"caller":"app/flags.go:143","msg":"Archive storage not initialized"} {"level":"info","ts":1605441321.8705752,"caller":"이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다..1/clientconn.go:417","msg":"Channel Connectivity change to READY","system":"grpc","grpc_log":true} {"level":"info","ts":1605441321.87058,"caller":"grpc/builder.go:104","msg":"Agent collector connection state change","dialTarget":":14250","status":"READY"} {"level":"info","ts":1605441321.870602,"caller":"app/agent.go:69","msg":"Starting jaeger-agent HTTP server","http-port":5778} {"level":"info","ts":1605441321.870912,"caller":"app/server.go:163","msg":"Query server started","port":16686,"addr":":16686"} {"level":"info","ts":1605441321.870956,"caller":"healthcheck/handler.go:128","msg":"Health Check state change","status":"ready"} {"level":"info","ts":1605441321.870962,"caller":"app/server.go:208","msg":"Starting HTTP server","port":16686,"addr":":16686"} {"level":"info","ts":1605441321.870968,"caller":"app/server.go:232","msg":"Starting CMUX server","port":16686,"addr":":16686"} {"level":"info","ts":1605441321.870975,"caller":"app/server.go:221","msg":"Starting GRPC server","port":16686,"addr":":16686"}
all-in-one은 query, collector, agent가 모두 포함되어 있는 것이다.
3. 애플리케이션 설정
3.1. application.properties
opentracing.jaeger.udp-sender.host=localhost opentracing.jaeger.udp-sender.port=6831 opentracing.jaeger.enabled=true opentracing.jaeger.service-name=greet-svc
3.2. 코드 설정
public String greet() { Span span = tracer.buildSpan("GET /v1/greet").start(); Listgreetings = Arrays.asList("Hi", "Hello", "Hallo", "Konnichiha", "Salut", "Greetings"); Random rand = new Random(); int randomNum = rand.nextInt(greetings.size()); span.finish(); return greetings.get(randomNum); }