通过编程 API 设置自附加编辑

apm-agent-attach 设置允许通过代码附加代理,它具有以下属性

  • 应用程序中需要进行一行代码修改才能启动代理。
  • 不需要更改 JVM 选项。
  • 代理作为 Maven 或 Gradle 依赖项进行管理。这确保您能够控制每个应用程序使用的代理版本。
  • 允许对代理进行编程配置。

支持的环境编辑

在基于 HotSpot 的 JVM(如 OpenJDK 和 Oracle JDK)和 OpenJ9 上,Windows、Unix 和 Solaris 操作系统支持附加。

注意事项编辑

每个 JVM 只能有一个代理实例,并且只能有一个配置。因此,如果您将多个 Web 应用程序部署到同一个应用程序服务器,并在每个应用程序中调用 ElasticApmAttacher.attach(),则第一个 attach() 会获胜,第二个 attach() 将被忽略。这也意味着,如果您使用 elasticapm.properties 配置代理,则第一个附加的应用程序将决定配置。有关为每个部署使用不同的 `service.name` 的方法,请参阅 service_name 配置选项的默认值说明。

apm-agent-attach 工件对 JNA 有传递依赖关系,在使用 JDK 运行应用程序时,大多数情况下可以排除 JNA。但是,在以下情况下需要 JNA

  • 附加到 JRE 并且应用程序类路径上不存在其他 JNA 副本时
  • 附加到 JDK 失败并使用 JRE 附加策略作为回退时。

用法编辑

声明对 apm-agent-attach 工件的依赖关系。

pom.xml。

<dependency>
    <groupId>co.elastic.apm</groupId>
    <artifactId>apm-agent-attach</artifactId>
    <version>${elastic-apm.version}</version>
</dependency>

build.gradle。

compile "co.elastic.apm:apm-agent-attach:$elasticApmVersion"

public static void main(String[] args) 方法的第一行调用 ElasticApmAttacher.attach()

此示例演示了使用简单的 Spring Boot 应用程序使用 attach API 的方法

MyApplication.java。

import co.elastic.apm.attach.ElasticApmAttacher;
import org.springframework.boot.SpringApplication;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        ElasticApmAttacher.attach();
        SpringApplication.run(MyApplication.class, args);
    }
}

API 不限于 Spring Boot,也不需要 Spring Boot,它只是用于演示目的。

配置编辑

使用附加 API 时,推荐的配置代理方法是将配置添加到 src/main/resources/elasticapm.properties