代理(版本 0.17.0 和 1.0.1)是向我的 Java 应用程序添加跟踪信息的opentelemetry-javaagent-all
起点。自动仪表工作得很好。
我的某些应用程序无法自动检测。对于应用程序的这一部分,我首先@WithSpan
在代码中的有趣位置添加注释。
@WithSpan
我现在通过简单的注释达到了看似可能的极限。但是,我的应用程序底层的框架允许我注册要在某些点调用的回调——例如,我可以提供在客户端连接/断开连接时通知的处理程序。
我认为我需要的是在Foo.onConnect()
调用时启动一个新的 Span,并将其设置为Span
与每个请求对应的 s 的父级。
public class Foo {
void onConnect() {
// called when a client connects to my app
// Here I want to create a Span that will be the parent of the Span created in
// Foo.processEachRequest().
}
@WithSpan
public void processEachRequest() {
// works, but since it is called for each request... each span is in a separate Trace
}
void onDisconnect() {
// called when the client disconnects from my app
// Here I can end the parent Span.
}
}
其他想法 - 没有成功:
1 - 显而易见的解决方案是向@WithSpan
底层框架添加注释。由于各种原因,这不会是一个切实可行的前进方向。
2 - 下一个选择可能是寻找一种方法来告诉 javaagent 我的底层框架中的方法。(New Relic 代理可以做这样的事情。)无论如何,这似乎不是开放遥测代理的一个特性。
所以,我只剩下寻找一种使用回调的方法来做到这一点,如上所述。有没有办法做到这一点?