Introdução ao Agente de Diagnóstico Java

Este artigo descreve como começar a usar o Java Diagnostic Agent. Ele também descreve a ferramenta de diagnóstico Java no plugin AKS para IntelliJ IDEA.

O Java Diagnostic Agent é um agente Java para solucionar problemas de um processo Java. Ele não precisa reconstruir, reimplantar ou reiniciar um aplicativo. Atualmente, ele suporta a adição de logs em torno de uma função em uma classe Java. Quando a função é chamada, o log é impresso junto com um cálculo do tempo total consumido pela função.

Pré-requisitos

Estabelecer encaminhamento de porta

Use o seguinte comando para estabelecer o reencaminhamento de porta para o serviço do agente:

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

Use a ferramenta de diagnóstico do Java no plug-in AKS para IntelliJ IDEA

Utilize a Ferramenta Java de Diagnóstico no plug-in do AKS para associar o Agente Java de Diagnóstico à aplicação Java em execução num contentor de um pod num cluster do Azure Kubernetes Service (AKS).

Depois de anexares o agente, podes resolver o problema adicionando logs à volta de uma função de classe. Use este registo para testar se a função está executada e para calcular o tempo total gasto na função. Essa análise pode ajudá-lo a localizar gargalos de desempenho em seu aplicativo.

O separador Diagnóstico mostra a configuração do plugin. Aqui, podes:

  • Configure a porta local que encaminha para o serviço de agente.
  • Veja os pods listados com kubeconfig em seu ambiente local.
  • Selecione Atualizar para atualizar a tabela de pods. Depois de mudares de cluster, atualiza a tabela para carregar os pods no novo cluster.

Captura de ecrã do separador Diagnóstico IntelliJ IDEA.

Anexar o agente

O contentor pod deve ter uma pasta /tmp e deve ter permissão de escrita para a pasta /tmp .

Para permitir a ligação do agente à JVM, não adicione -XX:+DisableAttachMechanism às opções da JVM.

O servidor de diagnóstico do backend encerra após 6 horas.

Para anexar o agente, selecione o pod ao qual pretende anexar o agente e, em seguida, selecione o contentor. Você só pode conectar o agente a um contêiner no pod. Em seguida, aguarde a conclusão do processo de anexo.

Captura de tela do IntelliJ IDEA que mostra a guia Diagnóstico com a caixa de diálogo Seleção de contêiner aberta.

Definir contentor ativo do pod

Depois de anexares o agente com sucesso, utiliza-o para resolver problemas.

Vários pods podem ter injetado o agente, por isso deve-se definir um pod como ativo. No IntelliJ IDEA, no separador de Diagnóstico, clique com o botão direito do rato num pod e, em seguida, selecione Selecionar como oativo.

Captura de ecrã da guia Diagnóstico do IntelliJ IDEA com um pod selecionado e o item de menu Selecionar como o ativo aparecendo.

Adicionar registo para uma função de classe

O log configurado é removido automaticamente após 30 minutos.

Você pode usar a ferramenta para adicionar registo nas funções de classe, mas não nas interfaces, construtores, etc.

Para adicionar registo a uma função, clique com o botão direito no editor e depois selecione Java Diagnóstico>Add AroundLog, como mostrado na captura de ecrã seguinte.

Captura de ecrã do IntelliJ IDEA que mostra o menu de contexto aberto para uma função com a opção de menu Add AroundLog realçada.

Neste exemplo, depois de adicionar o log, você pode chamar <host>/infor para ver uma saída semelhante ao exemplo a seguir antes e depois que a função for chamada:

===== 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

Remover todos os logs configurados

Para remover todos os registos que o agente adiciona, selecione Remover All AroundLogs.

Observação

Um contentor efémero no pod utiliza o agente Java de backend. Depois de o pod ser reiniciado, o agente será removido.

Solução de problemas

Pode ocorrer um tempo limite quando tenta anexar o agente a um pod em execução num nó que ainda não está ativado para esta funcionalidade. O timeout acontece porque o nó precisa primeiro de recuperar a imagem do agente, o que causa um atraso. Quando este atraso ocorrer, selecione Atualizar para verificar se o agente está ligado, ou tente ligá-lo novamente.

Se o anexo falhar, verifique o registo nomeado diagnostic-container-<hashcode> no recipiente efémero.

Você pode encontrar informações sobre as operações do plugin nos logs sob o contêiner pod chamado diag4j-agent-service-<hashcode>.

Próximo passo

Introdução ao componente Spring Boot Admin da Ferramenta de Diagnóstico Java (diag4j) no AKS