Java 诊断代理入门

本文介绍如何开始使用 Java 诊断代理。 它还介绍了适用于 IntelliJ IDEA 的 AKS 插件上的 Java 诊断工具。

Java 诊断代理是用于对 Java 进程进行故障排除的 Java 代理。 它不需要重新生成、重新部署或重启应用程序。 目前,它支持在 Java 类中围绕函数添加日志。 调用函数时,将输出日志以及函数消耗的总时间的计算。

先决条件

建立端口转发

使用以下命令建立代理服务的端口转发:

kubectl port-forward svc/diag4j-agent-service -n <namespace> <port>:8080

在用于 IntelliJ IDEA 的 AKS 插件上使用 Java 诊断工具

使用 AKS 插件上的Java诊断工具将Java诊断代理附加到在 Azure Kubernetes 服务 (AKS) 群集上的 pod 容器中运行的Java应用程序。

附加代理后,可以通过在类函数周围添加日志进行故障排除。 使用此日志测试是否执行函数并计算函数中花费的总时间。 此分析可帮助查找应用程序中的性能瓶颈。

诊断 ”选项卡显示插件配置。 在这里,你可以:

  • 配置转发到代理服务的本地端口。
  • 查看在本地环境中以 kubeconfig 列出的 Pod。
  • 选择 刷新 以刷新 Pod 表。 切换集群后,刷新表格以加载新集群中的 Pod。

IntelliJ IDEA 诊断选项卡的屏幕截图。

附加代理

Pod 容器必须具有 /tmp 文件夹,并且它必须具有 对 /tmp 文件夹的写入权限。

若要在 JVM 中启用附加代理程序,请勿将 -XX:+DisableAttachMechanism 添加到 JVM 选项中。

后端诊断服务器在 6 小时后关闭。

若要附加代理,请选择要将代理附加到的 Pod,然后选择容器。 只能将代理附加到 Pod 中的一个容器。 然后,等待附加过程完成。

IntelliJ IDEA 的屏幕截图,显示了“诊断”选项卡,其中“容器选择”对话框是打开状态。

设置活动 Pod 容器

成功附加代理后,请使用它进行故障排除。

多个 Pod 可能已注入代理,因此必须设置一个活动 Pod。 在 IntelliJ IDEA 的诊断选项卡上,右键单击一个 Pod,然后选择选择为活动项

IntelliJ IDEA“诊断”选项卡的屏幕截图,其中选中了一个 Pod,并显示“选择为活动项”菜单项。

在类函数周围添加日志记录

配置后的日志会在 30 分钟后自动删除。

可以使用该工具在类函数周围添加日志记录,但不能添加接口、构造函数等。

若要将日志记录添加到函数,请在编辑器中右键单击它,然后选择 Java Diagnostic>Add AroundLog,如以下屏幕截图所示。

IntelliJ IDEA 的屏幕截图,其中显示了为函数打开的上下文菜单,其中突出显示了“添加 AroundLog”菜单选项。

在此示例中,添加日志记录后,可以调用 <host>/infor 来查看类似于以下示例的输出,以及调用函数之后的输出:

===== START ===== Method: updateInformation Start Time: 2024-12-12T07:37:55.404107848Z
Done with the validation
Done with the DB access
Done with the data filtering
===== END ===== Method: updateInformation End Time: 2024-12-12T07:37:55.404316940Z Total Time: 0 milliseconds

删除所有配置的日志

若要删除代理添加的所有日志,请选择“ 删除所有 AroundLogs”。

注意

Pod 中的临时容器使用后端Java代理。 Pod 重启后,将删除代理。

故障 排除

当你尝试将代理附加到运行在尚未启用此功能的节点上的 Pod 时,可能会超时。 发生超时是因为节点首先需要检索代理映像,这会导致延迟。 发生此延迟时,请选择 “刷新 ”以检查代理是否已附加,或尝试再次附加代理。

如果附件失败,请检查临时容器中命名 diagnostic-container-<hashcode> 的日志。

可以在名为 diag4j-agent-service-<hashcode>的 Pod 容器的日志中找到有关插件操作的信息。

下一步

在 AKS 上使用 Java 诊断工具(diag4j)的 Spring Boot Admin 组件入门