问题标签 [apm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1183 浏览

java - Classpath problems while Instrumenting Springboot application

I have a springboot application which I'm trying to instrument using bytebuddy. I'm running into classpath issues which I'm not able to understand.

Firstly, the following is other literature on this:

https://github.com/raphw/byte-buddy/issues/473

https://github.com/raphw/byte-buddy/issues/87

Unable to instrument apache httpclient using javaagent for spring boot uber jar application

https://github.com/raphw/byte-buddy/issues/109

https://github.com/raphw/byte-buddy/issues/473

https://github.com/raphw/byte-buddy/issues/489

https://github.com/spring-projects/spring-boot/issues/4868

https://github.com/alibaba/transmittable-thread-local/issues/161

Problem is that Spring-boot bundles the application into one uber-jar, which contains other jars inside it

spring-boot-jar

A thing to note here is, that if I run the application using IntelliJ, it doesn't use the uber-jar and runs via main class with a bunch of jars as classpath arguments.

Due to this difference, When running via uber-jar(java -jar target/demo-0.0.1-SNAPSHOT.jar), some classes are not available at the time the Agent runs. The classes are loadable at the time of application main, as spring-boot uses its own classloader, which is created at some time b/w agent and application main methods.

I'll describe the behaviour at various points of time below:

At time of PreMain of Agent

  • Thread.currentThread().getContextClassLoader() = Launcher$AppClassLoader
  • Agent.class.classLoader = Launcher$AppClassLoader
  • Class.forName("org.springframework.web.servlet.HandlerAdapter") => ClassNotFoundException
  • Class.forName("javax.servlet.http.HttpServletRequest") => ClassNotFoundException

Both spring and javax classes are not loaded as they are not directly in the classpath as per the App Classloader. It's part of an inner jar, something like app.jar!/BOOT-INF/lib/some.jar App Classloader won't be able to load this.

At time of Main of Application Class

  • Thread.currentThread().getContextClassLoader() = org.springframework.boot.loader.LaunchedURLClassLoader
  • DemoApplication.class.classloader = same as above
  • Class.forName("org.springframework.web.servlet.HandlerAdapter") => loads successfully
  • Same for javax class, loads successfully.

After loading, Class.forName("javax.servlet.http.HttpServletRequest").classLoader is also the same LaunchedURLClassLoader.

At the time of builder.visit call (when bytebuddy is modifying the class definitions)

Code:

I have two classes, SpringBootInterceptor (which contains the intercept method) and SpringBootInterceptorOne (which contains the entry and exit method)

The function intercept() is called in the premain path.

The function visit is called when the type is actually attempted to load. At that point bytebuddy tris to intercept those methods and modify bytecode.

In the current version of this code, the function intercept() throws ClassNotFoundException and interception doesn't happen.

So, I tried to change the code, to the following:

Here, basically loading the class lazily. Helper functions from datadog:

https://github.com/DataDog/dd-trace-java/blob/master/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ByteBuddyElementMatchers.java

After doing this, the intercept function doesn't fail, but the visit() function behaves strangely:

At this point,

  • Thread.currentThread().getContextClassLoader() => LaunchedURLClassLoader
  • SpringBootInterceptor.class.getClassLoader() = null
  • Typing SpringBootInterceptor.class in the debugger window doesn't fail, but
  • Class.forName("my.package.name.SpringBootInterceptorOne") => NoClassDefFound

Next, I tried the following:

This causes the interceptor to be "installed". The entry and exit methods are called okay. But casting the arguments to proper types gives error for the types of the arguments

Here is SpringBootInterceptorOne for reference:

UPDATE:

As per the advice offered in an answer, I tried the following:

It again throws Error:

0 投票
1 回答
384 浏览

npm - 无法安装任何带有 npm 错误的原子包

无法在 atom 上安装任何软件包。错误是

我试图清理缓存的 npm 并重新安装 npm。它没有用。

0 投票
2 回答
1164 浏览

apm - 弹性云 APM 服务器 - 队列已满

我在 Kubernetes 集群中运行了许多 Java 微服务。它们都是向我们弹性云集群中的 APM 服务器发送数据的 APM 代理。

一切正常,但突然每个微服务都收到日志中显示的以下错误。

在此处输入图像描述

我尝试重新启动集群,增加硬件功率,并尝试按照提示进行操作,但没有成功。

Obs:磁盘几乎是空的,内存使用还可以。一切都在 7.5.2 版本中

0 投票
1 回答
278 浏览

elasticsearch - 在弹性 APM 中,@CaptureTransaction 是否为外部调用创建一个新选项卡

对于下面的代码,我想创建一个新选项卡来存储所有外部方法调用并进行聚合,但我没有得到任何这样的结果。

0 投票
0 回答
1376 浏览

elasticsearch - APM 服务器仍未连接到 Elasticsearch

我已经安装了 Elastic search、kibana 和 logstash(所有版本 7.5.2)

在此之后,我安装了 Kibana(7.5.2) 并将 apm-server.yml 配置为带有 xpack 监控的 elasticsearch 输出。服务 apm-server 运行良好。我也可以在 KibanaStack monitoring页面中看到 APM 应用程序。

但是当我去https://kibana_server:5601/app/kibana#/home/tutorial/apm并点击Check APM Server status我得到如下:

APM 服务器仍未连接到 Elasticsearch

apm-server.yml

有没有人遇到过类似的问题。请指教。让我知道是否需要任何其他详细信息。

0 投票
1 回答
1206 浏览

java - 用于 ElasticSearch 与 APM Java 代理的 Spring Boot Micrometer

我有一个 Spring Boot REST 应用程序。我使用许多 Spring 库:Spring Data REST、HATEOAS、Spring JPA、Hibernate、Redis、ElasticSearch...

我想跟踪我的应用程序的指标,我做了一项研究以找到最好的工具来做到这一点。在尝试了 Micrometer+DataDog 之后,因为我已经使用了 ElasticSearch,所以我确实尝试了APM Java Agent,我发现我在 Kibana Dashboard 中获得的数据量令人印象深刻。我可以看到我的端点并调查时间花在哪里(Mysql 查询和其他东西)。

我还没有尝试过 Micrometer+ElasticSearch,但从文档来看,它似乎收集了更少的开箱即用数据。

我想知道您的建议以及您认为收集生产应用程序指标的最佳工具。

0 投票
1 回答
373 浏览

asp.net - 如何使用 Elastic APM 深入了解 ASP.NET MVC 应用程序中的堆栈跟踪?

我正在使用 Elastic APM 代理 ( https://www.elastic.co/guide/en/apm/agent/dotnet/current/index.html ) 来检测 ASP.NET MVC 应用程序。我添加了 nuget 包并在 web.config 中添加了模块条目。我能够在 Kibana APM 选项卡中获取数据,并很好地显示每次调用所花费的时间。(见下面的截图)。 示例截图

Mu 问题是:如何在每个调用中深入了解堆栈空间中的时间花在哪里?有什么我想念的吗?

0 投票
1 回答
361 浏览

elasticsearch - Elastic APM 代理 KIbana UI 事务不适用

我们新引入了弹性 APM 来监控应用程序性能。部署后,我们遇到了 Kibana APM UI 的问题,它没有显示少数服务的任何事务。

在此处输入图像描述

我们在 APM 指数中有数据,但在 Kibana APM 仪表板 UI 中没有显示交易,我们得到 Avg.response time N/A 和 Trans.per minute 为 0。

APM-Server 7.6.1 弹性代理 - 1.15.0 ELK 堆栈 - 7.6.1

请帮助我确定问题所在。

提前致谢。

0 投票
1 回答
355 浏览

spring-boot - Elastic:如何在 Elastic APM 代理/APM 服务器中启用对元数据(如容器 ID)的自动检测?

我已经设置了一个带有 elasticsearch、filebeat、kibana 和 apm 服务器的弹性堆栈,以及一个带有 apm java 代理的 spring-boot-application,并在 docker compose 文件中开始了我的设置。我已启用仪表板,并且可以看到有关应用程序中进程的跟踪。但我无法过滤容器 id,因为没有 id。如何启用我的堆栈 apm 服务器/apm 代理以接收有关容器 id、pod id 等的元数据。

例如,我在哪里可以为 apm 服务器/apm 代理启用元数据以接收容器 ID。

0 投票
1 回答
993 浏览

spring-boot - 从 Spring Boot 应用程序属性调用 Elastic APM 属性

我尝试在 Spring Boot 中实现基于配置文件的应用程序,这显然适用于 Spring Boot。但是当我尝试为弹性搜索 APM 实现它时,它不起作用。

根据这里:我们可以用 elastic.apm 前缀描述属性:

但它不起作用。当我用 elasticapm.properties 调用它时,它可以工作。

你有什么建议吗?