Не удается увидеть данные трассировки в zipkin

Я новичок в zipkin и храбром API для распространения трассировки. Я установил сервер zipkin на моем локальном хосте, который прослушивает порт 9411. Я выполнил функцию ниже, но на моем сервере zipkin нет данных трассировки. Может ли кто-нибудь указать, что мне не хватает?

public static void main(String[] args) {
    Sender sender = OkHttpSender.create("http://localhost:9411/api/v1/spans");
    Reporter reporter = AsyncReporter.builder(sender).build();

    // Now, create a tracer with the service name you want to see in Zipkin.
    Tracer tracer = Tracer.newBuilder()
            .localServiceName("my-service")
            .reporter(reporter)
            .build();
    Span twoPhase = tracer.newTrace().name("twoPhase").start();
    try {
        Span prepare = tracer.newChild(twoPhase.context()).name("prepare").start();
        try {
            System.out.print("prepare");
        } finally {
            prepare.finish();
        }
        Span commit = tracer.newChild(twoPhase.context()).name("commit").start();
        try {
            System.out.print("commit");
        } finally {
            commit.finish();
        }
    } finally {
        twoPhase.finish();
    }
}

person Junyi Shi    schedule 26.03.2017    source источник


Ответы (1)


Похоже, проблема в сроках.

Если мы добавим некоторую задержку, например, между дочерними элементами, например,

Thread.sleep(1);

Между

Span prepare = tracer.newChild(twoPhase.context()).name("prepare").start();
try {                                                                
    System.out.print("prepare");                                     
} finally {                                                          
    prepare.finish();                                                
}                                                                    
Thread.sleep(1); // <<<                                                                                                                                                         
Span commit = tracer.newChild(twoPhase.context()).name("commit").start();
try {                                                                
    System.out.print("commit");                                      
} finally {                                                          
    commit.finish();                                                 
}

Затем мы видим промежутки:

пролеты

Я сталкивался с чем-то подобным раньше, когда Zipkin сбрасывал интервалы, которым я (по ошибке) назначал неправильные временные метки.

Для справки и простоты воспроизведения: я создал проект для воспроизведения этой проблемы. / "исправить".

person Matheus Santana    schedule 23.03.2018