使用 OTEL Java 代理,如何在不使用 @WithSpan 的情况下创建新的 Context

问题描述

opentelemetry-javaagent-all 代理(版本 0.17.0 和 1.0.1)一直是向我的 Java 应用程序添加跟踪信息的起点。自动检测效果很好。

我的某些应用程序无法自动检测。对于应用程序的这一部分,我首先在代码中有趣的地方添加了 @WithSpan 注释。

我现在已经达到了使用简单 @WithSpan 注释似乎可能达到的极限。但是,我的应用程序底层的框架允许我注册要在某些点调用的回调——例如我可以提供在客户端连接/断开连接时收到通知的处理程序。

我认为我需要的是在调用 Foo.onConnect() 时启动一个新的 Span,并将其设置为与每个请求对应的 Span 的父级。

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 代理可以做这样的事情。)无论如何,今天这似乎不是开放遥测代理的功能。

因此,我需要寻找一种使用回调来完成此操作的方法,如上所述。 有没有办法做到这一点?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)