Observability:设置 Elastic APM Java 代理 – 自动设置
2021年7月5日 | by mebius
在我之前的文章:
我详细地描述了如果使用手动的方式来部署 Elastic APM Java 代理来对 Java 应用进行应用性能监控。在今天的文章中,我们来介绍一下如何使用自动设置的方式来进行 APM。我将使用一个叫做 APM agent standalone JAR 来实现。在进行下面的实验之前,请先阅读我上面列举的两篇文章。我将以 “Observability:如何为 Java 应用进行 APM” 文章中的例子来进行。我将不描述如何安装及编译 Java 应用。
自动配置
注意:此安装方法处于测试阶段。
apm-agent-attach-cli.jar 是一个可执行的 Java 命令行程序,它将 Elastic APM Java 代理附加到特定的 JVM 或运行它的同一主机的所有 JVM。
这种安装方法不需要您更改应用程序服务器的配置,并且可以用来方便地tgcode检测特定主机上的所有 JVM。
支持的环境
在 Unix 操作系统(如 Linux 和 macOS)上,支持与基于 HotSpot 的 JVM(如 OpenJDK 和 Oracle JDK)和 OpenJ9 JVM 的附件。 运行附加程序的用户必须与运行目标 JVM 的用户相同,或者必须具有切换到该用户的权限。
在 Windows 上,仅支持基于 HotSpot 的 JVM。 运行附加程序的用户必须与运行目标 JVM 的用户相同。
目标 VM 不必与启动附加程序的 VM 相同。 这意味着可以使用 Java 7 运行附加程序并将代理附加到在 Java 11 下运行的应用程序。但是,VM 的类型必须相同:不可能从 HotSpot 附加到 J9 VM 基于虚拟机,反之亦然。
警告
在 OSGi 容器(包括大多数应用程序服务器)中使用时缓解 NoClassDefFoundError 的方法是实验性的。 1.18.0 之前的版本不支持 OSGi 容器。
下载
可以从 maven central 下载 attach 程序:maven central
注意:在 1.22.0 之前的版本中,你必须下载 apm-agent-attach 工件的独立 jar。
用法
将 Elastic APM Java 代理附加到与 –include-* / –exclude-* 发现规则匹配的所有正在运行的 JVM。 对于每个正在运行的 JVM,tgcode发现规则按照它们提供的顺序进行评估。 第一个匹配规则决定了结果。
- 如果第一个匹配规则是排除(exclude),则不会附加代理。
- 如果第一个匹配规则是包含(include),则将附加代理。
- 如果没有规则匹配,则不会附加代理。
示tgcode例:以下命令将代理附加到所有主类包含 MyApplication 或从名为 my-application.jar 的 jar 文件启动或已设置系统属性 -Delastic.apm.agent.attach=true 的 JVM,除非 JVM 在 root 用户下运行。 它还使附加程序连续运行,以便它在匹配发现规则的启动 JVM 上附加代理。 此外,它还应用了一些配置选项。
java -jar apm-agent-attach-cli.jar
--exclude-user root
--include-main MyApplication my-application.jar
--include-vmargs elastic.apm.agent.attach=true
--continuous
--config service_name=my-cool-service
--config server_url=http://localhost:8200
接下来,我们将以“Observability:如何为 Java 应用进行 APM” 的例子进行示范。
实践
我们首先按照文章“Observability:如何为 Java 应用进行 APM” 中的步骤进行安装。
- 启动 docker,并运行 Elasticsearch,Kibana 及 APM Sever
- 下载并编译 Java Demo 应用
我们按照如下的方式来运行 Java 应用:
$ pwd
/Users/liuxg/demos/apm/opbeans-java/opbeans
$ ls
elastic-apm-agent-1.24.0.jar pom.xml
mvnw src
mvnw.cmd target
$ java -jar ./target/opbeans-0.0.1-SNAPSHOT.jar
当我们启动 Java 应用后,我们可以在浏览器输入地址http://localhost:8080/
从上面,我们可以看出来我们的 Java 应用运行正常。
接下来,我们使用自动配置的方式来对这个 Java 应用进行 APM 监控。
我们首先进入到下载 apm-agent-attach-cli-1.24.0.jar 的文件目录下。我们在一个 terminal 中打入如下的命令:
sudo java -jar apm-agent-attach-cli-1.24.0.jar
--include-main opbeans-0.0.1-SNAPSHOT.jar
--include-vmargs elastic.apm.agent.attach=true
--continuous
--config service_name=opbeans-java
--config server_url=http://localhost:8200
你如果是调试自己的 Java 应用,你需要修改上面的 –include-main 里定义的包的名称。我们在网址http://localhost:8080/做一些点击的动作。这样可以生成一些 API 的请求。
我们打开 APM 应用:
这样,我们就可以看到 JAVA 应用的一些 APM 指标信息。关于如何分析这些应用,我在这里就不在赘述了。