我是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();
    }
}

最佳答案

这似乎是一个时间问题。

例如,如果我们添加一些延迟,则子级之间跨执行

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();
}

然后我们来看看跨度:

instrumentation - zipkin中看不到跟踪数据-LMLPHP

在Zipkin放弃跨度之前,我曾经遇到过类似的事情,我(错误地)为之分配了错误的时间戳。

为了便于参考和复制:我已经设置了project来复制此问题/“修复”。

关于instrumentation - zipkin中看不到跟踪数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43025795/

10-10 04:28