使用 Java 代理 API 进行监控
一般来说,APM Insight Java Agent 会监控 常用的框架和库。
使用 Java 代理 API,您可以跟踪自定义指标以监控特定于您的应用程序的参数。这有助于上下文调试。
Java 代理 API 允许您注释要监视的方法。此外,您可以为您的方法和组件提供自定义名称,以便更轻松地识别和排除故障。
要求:
在通过 Java 代理 API 进行监控之前,请确保满足以下要求:
- 您正在运行 Java 1.6 及更高版本。
- 您已经下载了与 Java 代理 zip 文件绑定在一起的 API JAR (Java ARchieved) 文件 (apminsight-javaagent-api.jar)。(您可以从您的 Site24x7 帐户下载 Java 代理。)
- API Jar 文件在您的应用程序的构建路径中可用,并与您的应用程序绑定在一起(首选位置:WEB-INF/lib)。
- Maven 用户,要将 Java 代理 API 工件作为依赖项添加到您的项目中,请按照此处提到的说明进行操作
用法:
您可以使用 Java 代理 API
1. 使用 Java 代理 API 的自定义检测:
除了应用程序框架中定义的默认类和方法外,您还可以使用自定义检测来监控您自己的应用程序特定方法和类。
自定义检测可以通过 Java 代理 API 或使用配置文件来完成。
Java 代理 API 为您提供注释以检测您的方法和类。
2. 使用 Java 代理 API(3.5 版)跟踪异常:
尽管您可以在代理的帮助下跟踪异常,但 Java 代理 API 为监控/调试目的提供了更多可见性和自定义选项。
通常,代理会捕获已记录或未捕获的异常。在大多数情况下,开发人员倾向于捕获异常并在代码中处理它们而不传播它们。可以使用此 API 跟踪此类异常。使用 Java 代理 API,您可以提供自定义消息和实际的可抛出异常对象,并在异常发生时跟踪它们。
您可以在应用程序代码中添加 API 以提供错误消息和异常。然后由代理跟踪并与其各自的事务相关联。
您可以在 APM Insight 的异常选项卡下查看这些异常。
语法:
CustomTracker.trackException(String message, Throwable throwable)
CustomTracker.trackException(Throwable throwable)
示例输入:
示例输出:
您还可以使用 Java 代理 API 来监视方法级别内的特定代码块。要监视代码块,请将代码块包含在CustomTracker的新对象中并停止方法。
您可以将名称、组件和异常与块相关联。截至目前,名称仅支持空格、连字符、下划线和字母数字字符。块名称最多可包含 64 个字符,而组件名称限制为 32 个字符。
创建一个新的 CustomTracker 对象标记要监控的块的起点;使用<trackerObj>.stop()方法标记块的结尾。如果块中有异常,可以将异常对象传递给stop方法;这会自动将异常与相应的块及其事务相关联。
语法:
CustomTracker tracker = new CustomTracker("block__name");
CustomTracker tracker = new CustomTracker("block_name", "component_name");
tracker.stop();
tracker.stop(exceptionObj);
示例:
CustomTracker tracker = new CustomTracker("operation_"+opId);
try {
// some operations
tracker.stop();
}
catch (NumberFormatException nfe) {
tracker.stop(nfe);
// some rescue operations
}
示例输出:
要为跟踪赋予上下文意义,您可以添加其他参数来帮助您识别事务跟踪的上下文。
上下文指标可以是任何东西,会话 ID、用户 ID 或某些方法参数,它们可以帮助您识别有关事务跟踪的特定信息。
一个事务跟踪最多可以添加 10 个参数,这些参数可以在 Trace Summary 下查看
要添加自定义参数,请遵循以下语法:
语法:
CustomTracker.addParameter("key", value);
Key - 参数的名称
Value - 值的参数。它可以是任何类型,内部代理使用 Object.toString() 将它们转换为字符串
示例:
....
{
....
CustomTracker.addParameter("User ID", user_id);
....
}
Output:
如果您想为事务定义一个唯一名称以便于跟踪和识别,您可以使用我们的代理 API。
语法
CustomTracker.setTransactionName("name");
name - 事务的所需名称
例子:
....
{
....
CustomTracker.setTransactionName("reseller/search");
....
}
输出: