GuanceCloud / dd-trace-java

Datadog APM client for Java
https://docs.datadoghq.com/tracing/languages/java
Apache License 2.0
9 stars 3 forks source link

支持 Pyroscope Profiling #48

Closed lrwh closed 9 months ago

lrwh commented 1 year ago

背景

async-profiler 的优点在于,支持低版本的 jdk(>=1.6),而 ddtrace 的相关 profiler 都需要1.8.3××以上版本。使得很多需求客户无法接入。

Pyroscope是 grafana 开源的、基于 async-profiler 二次开发的 Profling 框架。

pyroscope-javaPyroscope 开源的 java 版本的 Profling 框架。

需求

希望 ddtrace 能够支持 Pyroscope 以便支持更低版本的 jdk。

lrwh commented 1 year ago

Ddtrace 修改了 async-profiler 源码,并在 async-profiler 基础上新加了一些 native 方法,使得链路和profiler能够串联起来。即将相关tag注入到 profiler 内部。

public boolean recordTraceRoot(long rootSpanId, String endpoint, int sizeLimit) {
    return recordTrace0(rootSpanId, endpoint, sizeLimit);
}
private static native boolean recordTrace0(long rootSpanId, String endpoint, int sizeLimit);

Pyroscope 也是基于 async-profiler 源码二开,但并未做这方面的调整,无法直接将相关tag注入进 profiler 内部。 另一个思路是,我们可以在上传profiling信息时加入当前的span信息,dk这边接收到对于的信息进行解析存储,也可以实现profling数据与ddtrace链路关联,具体能否实现,还看dk这边是否能够存储这些tag

lrwh commented 1 year ago

由于 ddtrace 是用jdk11编译的,最低支持jdk8,所以只能兼容jdk8及以上的版本

lrwh commented 1 year ago

相关代码已提交至 https://github.com/GuanceCloud/dd-trace-java/tree/guance_lr_profiler

lrwh commented 9 months ago

由于没有得到很好的支持,所以先close,后期有需求再打开