本文介绍如何开始使用 Java 诊断代理。 它还介绍了适用于 IntelliJ IDEA 的 AKS 插件上的 Java 诊断工具。
Java 诊断代理是用于对 Java 进程进行故障排除的 Java 代理。 它不需要重新生成、重新部署或重启应用程序。 目前,它支持在 Java 类中围绕函数添加日志。 调用函数时,将输出日志以及函数消耗的总时间的计算。
先决条件
在群集中安装 diag4j。
Java LTS 版本 11、17 或 21。
IntelliJ IDEA 插件,通过设置>插件>从磁盘安装插件在本地安装。
用于故障排除的 Java 应用程序。 有关详细信息,请参阅 将 Spring Boot 应用程序部署到 Azure Kubernetes 服务。
建立端口转发
使用以下命令建立代理服务的端口转发:
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。
附加代理
Pod 容器必须具有 /tmp 文件夹,并且它必须具有 对 /tmp 文件夹的写入权限。
若要在 JVM 中启用附加代理程序,请勿将 -XX:+DisableAttachMechanism 添加到 JVM 选项中。
后端诊断服务器在 6 小时后关闭。
若要附加代理,请选择要将代理附加到的 Pod,然后选择容器。 只能将代理附加到 Pod 中的一个容器。 然后,等待附加过程完成。
设置活动 Pod 容器
成功附加代理后,请使用它进行故障排除。
多个 Pod 可能已注入代理,因此必须设置一个活动 Pod。 在 IntelliJ IDEA 的诊断选项卡上,右键单击一个 Pod,然后选择选择为活动项。
在类函数周围添加日志记录
配置后的日志会在 30 分钟后自动删除。
可以使用该工具在类函数周围添加日志记录,但不能添加接口、构造函数等。
若要将日志记录添加到函数,请在编辑器中右键单击它,然后选择 Java Diagnostic>Add 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 容器的日志中找到有关插件操作的信息。