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: {[{:14250   0 }]  }","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();

    List greetings = Arrays.asList("Hi", "Hello", "Hallo", "Konnichiha", "Salut", "Greetings");
    Random rand = new Random();

    int randomNum = rand.nextInt(greetings.size());

    span.finish();

    return greetings.get(randomNum);
}