问题描述
我最近开始探索 Skywalking 作为 APM 工具。
我对查看应用层的方法/函数所花费的时间很感兴趣。基本上是 JAVA 应用程序的一种工具。使用 Skywalking,我只得到 3 个具有一个根函数和两个 DB 执行函数的跨度(方法)。我尝试添加属性
'plugin.jdkthreading.threading_class_prefixes=${THREADING_CLASS_PREFIX=my.package}'
但这确实有效。我仍然只能在仪表板中看到 API 被命中的 3 个跨度。在 Profile 功能下,我可以获得线程堆栈。但我只对热点方法感兴趣。我在配置中遗漏了什么吗?
我希望对以特定模式开头的类进行检测并在跟踪中捕获。我怎样才能做到这一点?或者我可以从其他任何开源 APM 工具开始吗?
解决方法
使用plugin.jdkthreading.threading_class_prefixes=${THREADING_CLASS_PREFIX:my.package}
时,请务必将jdk-threading-plugin
文件夹下的optional-plugins
移动到plugins
文件夹中,因为jdk-threading-plugin
默认是禁用的,您需要将其移至 plugins
以启用它。
就热点方法而言,您有两种方法:
-
使用基于 XML 的配置来检测您的方法,https://github.com/apache/skywalking/blob/2dcf27b79940d60a2e2f19cc7ba9eb9730a463a6/docs/en/setup/service-agent/java-agent/Customize-enhance-trace.md#L1
-
使用
api-toolkit-trace
SDK 以编程方式检测您的方法,如下所示:
@Trace
@Tag(key = "tag1",value = "arg[0]")
@Tag(key = "tag2",value = "arg[1]")
@Tag(key = "username",value = "returnedObj.username")
@Tag(key = "age",value = "returnedObj.age")
public User methodYouWantToTrace(String param1,String param2) {
// ActiveSpan.setOperationName("Customize your own operation name,if this is an entry span,this would be an endpoint name");
// ...
}