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/

%title插图%num

从上面,我们可以看出来我们的 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 应用:

%title插图%num

%title插图%num

%title插图%num

这样,我们就可以看到 JAVA 应用的一些 APM 指标信息。关于如何分析这些应用,我在这里就不在赘述了。

文章来源于互联网:Observability:设置 Elastic APM Java 代理 – 自动设置