如何在 Spring Cloud Sleuth 中标记跨度子树?或者,如何细分走线?

How to tag a subtree of spans in Spring Cloud Sleuth? Or, how to sub-divide traces?

当发件人发送 post 时,我需要通知多个订阅者。在这种情况下,“发件人发送 post”是一个 HTTP post 并创建一个 trace.

我的目标:在查看我的日志时,我会知道“创建此日志通知的方法是哪个订阅者”。

我天真的想法:对于“通知订阅者 A”、“通知订阅者 B”等中的每一个,它们都是 span 的子树。如果我可以将 tag 赋给这些跨度子树中的每一个,那么我就完成了。

但是,我不知道该怎么做。或者,还有其他方法可以实现我的目标吗?

谢谢!

如果我理解你在这里试图实现的目标,那是 Sleuth 的默认行为,请查看跟踪跨度和父子跨度关系的 docs

您唯一需要做的就是在每次通知订阅者时创建一个新的 Span。有多种方法可以做到这一点,请参阅文档(例如:tracer.withSpan, @NewSpan)。

这是一个假想的例子:

@GetMapping("/something") // Sleuth has already created a span for your endpoint
public void something() {
    subscribers.forEach(subscriber -> notify(subscriber, new Event("foo")));
}

@NewSpan // This does the trick
public void notify(Subscriber subscriber, Event event) {
    subscriber.notify(event);
}

如果你想标记你的 span,请检查 link 我放在上面的文档,它会告诉你如何附加标签。