设置代理编辑

可以通过三种不同的方式来设置 Elastic APM Java 代理

  1. 使用 -javaagent 标志进行手动设置
    使用 -javaagent JVM 选项手动设置和配置代理。无需更改应用程序代码,但需要重启应用程序。
  2. 使用 apm-agent-attach-cli.jar 进行自动设置
    自动设置代理,无需更改 JVM 或应用程序服务器的配置。无需更改应用程序代码或 JVM 选项,允许附加到正在运行的 JVM。
  3. 通过编程 API 设置来自动附加
    通过一行代码更改和额外的 apm-agent-attach 依赖项来设置代理。无需修改 JVM 选项,代理工件嵌入在打包的应用程序二进制文件中。

配置编辑

设置代理后,请参阅配置指南,了解如何配置 Elastic APM。

与 APM 服务器进行 SSL/TLS 通信编辑

如果在 APM 服务器上启用了SSL/TLS 通信,请务必查看SSL 设置指南

监控 AWS Lambda 函数(实验性)编辑

在我们的Lambda 设置指南中了解如何设置 AWS Lambda 函数跟踪。

在启用安全管理器的情况下使用编辑

代理应该可以在启用了 SecurityManager 的 JVM 上按预期工作,前提是它被授予了 java.security.AllPermission 权限。确保将以下代码段添加到有效的* 策略中(将占位符替换为代理 jar 的实际路径**)

grant codeBase "file:</path/to/elastic-apm-agent.jar>" {
    permission java.security.AllPermission;
};

如果在验证上述 grant 代码段已有效应用后看到 java.lang.SecurityException 异常(例如 - java.security.AccessControlException),请在我们的 GitHub 存储库 中提交一个问题,并提供描述和完整的堆栈跟踪。

* 可以让多个策略文件同时对单个 JVM 生效。可以将上述策略条目添加到现有策略中,也可以通过 java.security.policy 系统属性追加。有关更多详细信息,请参阅 文档

** 您可以利用 属性扩展 功能来指定代理 jar 路径。

支持的技术编辑

请查看支持的技术,详细了解 Elastic APM 代理是否支持自动检测您的应用程序正在使用的技术。

引导检查编辑

在某些情况下,代理需要在几乎任何初始化过程发生之前就做出中止的决定,例如,当它附加到不支持的 JVM 版本时。此决定基于我们所说的“引导检查”。如果任何引导检查失败,代理将向标准错误流记录错误并中止。可以通过将 elastic.apm.disable_bootstrap_checks 系统属性或 ELASTIC_APM_DISABLE_BOOTSTRAP_CHECKS 环境变量设置为 true 来禁用引导检查。

JVM 过滤编辑

在某些情况下,用户可能会为检测其 Java 进程而设置过宽的网络,例如在运行许多 JVM 的主机/容器上全局设置 JAVA_TOOL_OPTIONS 环境变量时。在这种情况下,用户可能希望排除对某些 JVM 进行检测,或者在必要时明确允许。为此,我们提供了以下引导配置选项

系统属性名称 环境变量名称 描述

elastic.apm.bootstrap_allowlist

ELASTIC_APM_BOOTSTRAP_ALLOWLIST

如果设置,代理将在命令与提供的列表中的某个模式匹配的 JVM 上启用

elastic.apm.bootstrap_exclude_list

ELASTIC_APM_BOOTSTRAP_EXCLUDE_LIST

如果设置,代理将在包含列表中提供的某个名称的系统属性的 JVM 上禁用

allowlist 选项需要一个逗号分隔的通配符模式列表。此类模式可能包含通配符 (*),它们可以匹配零个或多个字符。示例:foo\*bar\*baz\*, \*foo\*。默认情况下,匹配不区分大小写。在元素前面加上 (?-i)} 可以使匹配区分大小写。这些模式将与存储在 sun.java.command 系统属性中的 JVM 命令进行匹配。

一些例子

  1. 仅允许在 Tomcat 和专有 Java 应用程序上附加 JVM
    -Delastic.apm.bootstrap_allowlist=*org.apache.catalina.startup.Bootstrap*,my.cool.app.*
  2. 在设置某些自定义系统属性时禁用
    -Delastic.apm.bootstrap_exclude_list=custom.property.1,custom.property.2