Java 无代码应用程序监视 Azure Monitor Application Insights

备注

若要查找旧的 2.x 文档,请转到此处

Java 无代码应用程序监视只是为了简化操作 - 无需更改代码,只需更改几个配置即可启用 Java 代理。

Java 代理可在任何环境中正常工作,并允许你监视所有 Java 应用程序。 换句话说,无论你是在 VM 上、本地、AKS 中还是在 Windows、Linux 上运行 Java 应用,不管什么位置,Application Insights Java 代理都可以监视你的应用。

不再需要将 Application Insights Java 2.x SDK 添加到你的应用程序,因为 Application Insights Java 3.x 代理会自动收集请求、依赖项并自行记录所有内容。

你仍可以从应用程序发送自定义遥测。 3.x 代理会跟踪它并将它与所有自动收集的遥测数据相关联。

3.x 代理支持 Java 8 及更高版本。

快速入门

1.下载代理

警告

如果要从 3.0 预览版升级

请仔细检查所有的配置选项,因为除了文件名本身全部变为小写外,json 结构也已完全改变。

警告

如果要从 3.0.x 升级

操作名称和请求遥测名称现在将以 http 方法(GETPOST 等)作为前缀。 如果自定义仪表板或警报依赖于以前的无前缀值,则这可能会影响它们。 如需更多详细信息,请参阅 3.1.0 发行说明

下载 applicationinsights-agent-3.1.1.jar

2.将 JVM 指向该代理

-javaagent:path/to/applicationinsights-agent-3.1.1.jar 添加到应用程序的 JVM 参数。

有关配置应用程序的 JVM 参数的帮助,请参阅更新 JVM 参数的技巧

3.将代理指向 Application Insights 资源

如果还没有 Application Insights 资源,可以按照资源创建指南中的步骤创建一个新资源。

通过设置环境变量,将代理指向 Application Insights 资源:

APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=...

另一种方法是创建一个名为 applicationinsights.json 的配置文件,并将其置于 applicationinsights-agent-3.1.1.jar 所在的目录中,该文件包含以下内容:

{
  "connectionString": "InstrumentationKey=..."
}

可以在 Application Insights 资源中找到连接字符串:

Application Insights 连接字符串

4.就这么简单!

现在启动应用程序,并访问 Azure 门户中的 Application Insights 资源以查看监视数据。

备注

监视数据可能需要几分钟时间才能在门户中显示。

配置选项

applicationinsights.json 文件中,还可以配置以下内容:

  • 云角色名称
  • 云角色实例
  • 采样
  • JMX 指标
  • 自定义维度
  • 遥测处理器(预览版)
  • 自动收集的日志记录
  • 自动收集的 Micrometer 指标(包括 Spring Boot Actuator 指标)
  • 检测信号
  • HTTP 代理
  • 自我诊断

如需完整的详细信息,请参阅配置选项

自动收集的请求

  • JMS 使用者
  • Kafka 使用者
  • Netty/WebFlux
  • Servlet
  • Spring 计划

自动收集的依赖项

自动收集的依赖项和下游分布式跟踪传播:

  • Apache HttpClient 和 HttpAsyncClient
  • gRPC
  • java.net.HttpURLConnection
  • JMS
  • Kafka
  • Netty 客户端
  • OkHttp

自动收集的依赖项(无下游分布式跟踪传播):

  • Cassandra
  • JDBC
  • MongoDB(异步和同步)
  • Redis(Lettuce 和 Jedis)

自动收集的日志

  • java.util.logging
  • Log4j(包含 MDC 属性)
  • SLF4J/Logback(包含 MDC 属性)

自动收集的指标

  • Micrometer(包括 Spring Boot Actuator 指标)
  • JMX 指标

Azure SDK(预览版)

请参阅配置选项以启用此预览功能,并自动收集这些 Azure SDK 所发出的遥测数据:

从应用程序发送自定义遥测

我们在 Application Insights Java 3.x 中的目标是让你能够使用标准 API 发送自定义遥测。

到目前为止,我们支持 Micrometer、热门的日志记录框架和 Application Insights Java 2.x SDK。 Application Insights Java 3.x 会自动捕获通过这些 API 发送的遥测,并将其与自动收集的遥测相关联。

支持的自定义遥测

下表显示了当前支持的自定义遥测类型,你可以使用它们对 Java 3.x 代理进行补充。 总而言之,通过 Micrometer 可以支持自定义指标,通过记录框架可以启用自定义异常和跟踪,通过 Application Insights Java 2.x SDK 可以支持任何类型的自定义遥测。

Micrometer Log4j、logback、JUL 2.x SDK
自定义事件
自定义指标
依赖项
异常
页面视图
请求
跟踪

我们目前不打算发布带有 Application Insights 3.x 的 SDK。

Application Insights Java 3.x 已在侦听发送到 Application Insights Java 2.x SDK 的遥测。 对于现有 2.x 用户来说,此功能是升级过程中的一个重要部分。在 OpenTelemetry API 正式发布之前,它填补了我们在自定义遥测支持方面的一个重要空白。

使用 Micrometer 发送自定义指标

将 Micrometer 添加到应用程序:

<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-core</artifactId>
  <version>1.6.1</version>
</dependency>

使用 Micrometer 全局注册表来创建计量:

static final Counter counter = Metrics.counter("test_counter");

并使用它来记录指标:

counter.increment();

使用你喜爱的日志记录框架发送自定义跟踪和异常

系统自动检测 Log4j、Logback 和 java.util.logging,通过这些日志记录框架执行的日志记录会作为跟踪和异常遥测自动收集。

默认情况下,仅当在 INFO 级别或更高级别执行日志记录时,才收集该日志记录。 有关如何更改此级别的信息,请参阅配置选项

如果要将自定义维度附加到日志,可以使用 Log4j 1.2 MDCLog4j 2 MDCLogback MDC,Application Insights Java 3.x 会自动捕获这些 MDC 属性作为跟踪和异常遥测的自定义维度。

使用 2.x SDK 发送自定义遥测

applicationinsights-core-2.6.3.jar 添加到应用程序(Application Insights Java 3.x 支持所有 2.x 版本,但如果你可以选择,最好使用最新版本):

<dependency>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>applicationinsights-core</artifactId>
  <version>2.6.3</version>
</dependency>

创建 TelemetryClient:

static final TelemetryClient telemetryClient = new TelemetryClient();

并使用它发送自定义遥测:

事件
telemetryClient.trackEvent("WinGame");
指标
telemetryClient.trackMetric("queueLength", 42.0);
依赖项
boolean success = false;
long startTime = System.currentTimeMillis();
try {
    success = dependency.call();
} finally {
    long endTime = System.currentTimeMillis();
    RemoteDependencyTelemetry telemetry = new RemoteDependencyTelemetry();
    telemetry.setSuccess(success);
    telemetry.setTimestamp(new Date(startTime));
    telemetry.setDuration(new Duration(endTime - startTime));
    telemetryClient.trackDependency(telemetry);
}
日志
telemetryClient.trackTrace(message, SeverityLevel.Warning, properties);
异常
try {
    ...
} catch (Exception e) {
    telemetryClient.trackException(e);
}

使用 2.x SDK 添加请求自定义维度

备注

此功能仅在 3.0.2 及更高版本中提供

applicationinsights-web-2.6.3.jar 添加到应用程序(Application Insights Java 3.x 支持所有 2.x 版本,但如果你可以选择,最好使用最新版本):

<dependency>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>applicationinsights-web</artifactId>
  <version>2.6.3</version>
</dependency>

并在代码中添加自定义维度:

import com.microsoft.applicationinsights.web.internal.ThreadContext;

RequestTelemetry requestTelemetry = ThreadContext.getRequestTelemetryContext().getHttpRequestTelemetry();
requestTelemetry.getProperties().put("mydimension", "myvalue");

使用 2.x SDK 设置请求遥测 user_Id

备注

此功能仅在 3.0.2 及更高版本中提供

applicationinsights-web-2.6.3.jar 添加到应用程序(Application Insights Java 3.x 支持所有 2.x 版本,但如果你可以选择,最好使用最新版本):

<dependency>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>applicationinsights-web</artifactId>
  <version>2.6.3</version>
</dependency>

并在代码中设置 user_Id

import com.microsoft.applicationinsights.web.internal.ThreadContext;

RequestTelemetry requestTelemetry = ThreadContext.getRequestTelemetryContext().getHttpRequestTelemetry();
requestTelemetry.getContext().getUser().setId("myuser");

使用 2.x SDK 替代请求遥测名称

备注

此功能仅在 3.0.2 及更高版本中提供

applicationinsights-web-2.6.3.jar 添加到应用程序(Application Insights Java 3.x 支持所有 2.x 版本,但如果你可以选择,最好使用最新版本):

<dependency>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>applicationinsights-web</artifactId>
  <version>2.6.3</version>
</dependency>

并在代码中设置名称:

import com.microsoft.applicationinsights.web.internal.ThreadContext;

RequestTelemetry requestTelemetry = ThreadContext.getRequestTelemetryContext().getHttpRequestTelemetry();
requestTelemetry.setName("myname");

使用 2.x SDK 获取请求遥测 ID 和操作 ID

备注

此功能仅在 3.0.3 及更高版本中提供

applicationinsights-web-2.6.3.jar 添加到应用程序(Application Insights Java 3.x 支持所有 2.x 版本,但如果你可以选择,最好使用最新版本):

<dependency>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>applicationinsights-web</artifactId>
  <version>2.6.3</version>
</dependency>

并在代码中获取请求遥测 ID 和操作 ID:

import com.microsoft.applicationinsights.web.internal.ThreadContext;

RequestTelemetry requestTelemetry = ThreadContext.getRequestTelemetryContext().getHttpRequestTelemetry();
String requestId = requestTelemetry.getId();
String operationId = requestTelemetry.getContext().getOperation().getId();