如何在 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 我放在上面的文档,它会告诉你如何附加标签。
当发件人发送 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 我放在上面的文档,它会告诉你如何附加标签。