Resolver problemas de aplicações Java no AKS com o Azure SRE Agent

Utilize a Ferramenta de Diagnóstico de Desempenho do Azure para Java no Agente SRE do Azure para investigar problemas de desempenho da JVM no Serviço de Kubernetes do Azure (AKS). A ferramenta recolhe dados de perfil de uma carga de trabalho Java em execução e devolve resultados que ajudam a isolar gargalos sem desligar a aplicação.

Pré-requisitos

  • Uma aplicação Java a correr num cluster AKS
  • Um ambiente Azure SRE Agent que pode aceder ao cluster alvo
  • Permissões para inspecionar a carga de trabalho e executar diagnósticos através do Azure SRE Agent
  • kubectl instalado e configurado se quiseres adicionar a anotação da linha de comandos

Diagnósticos suportados

A Ferramenta de Diagnóstico de Desempenho do Azure para Java ajuda a identificar problemas tais como:

  • Ineficiências na recolha de lixo e longas pausas
  • Uso excessivo ou subuso do CPU
  • Comportamento de uso intensivo de I/O que afeta o tempo de resposta
  • Gargalos de contenção e sincronização de threads

Ativar diagnósticos Java

Para permitir diagnósticos, rotule a carga de trabalho como uma aplicação Java adicionando a anotação languageStack: java.

Adicione a anotação à especificação do seu pod

Adicione a anotação aos metadados do pod na definição da sua carga de trabalho:

apiVersion: v1
kind: Pod
metadata:
  name: your-java-app
  annotations:
    languageStack: java
spec:
  containers:
    - name: app
      image: your-java-app:latest

Adicione a anotação usando kubectl

Se o pod já estiver em execução, adicione a anotação a partir da linha de comandos.

kubectl annotate pod your-java-app languageStack=java

Quando adiciona esta anotação, confirma que:

  • O pod está a correr uma aplicação Java.
  • O Azure SRE Agent pode executar diagnósticos Java contra o pod.

Note

O processo de diagnóstico foi concebido para minimizar as perturbações, mas o Java Flight Recorder ainda acrescenta alguma sobrecarga. Valida a experiência num ambiente não produtivo antes de a usares em produção.

O que acontece durante uma execução de diagnóstico

Quando o Azure SRE Agent inicia uma execução de diagnóstico Java, ele:

  1. Cria um recipiente efémero no pod alvo.
  2. Anexa o contentor de diagnóstico ao contentor Java.
  3. Recolhe telemetria utilizando o Java Flight Recorder (JFR).
  4. Analisa os dados recolhidos.
  5. Remove o contentor de diagnóstico depois de a execução terminar.

Este processo mantém a candidatura online enquanto o Azure SRE Agent recolhe os dados necessários.

Sobre contentores efémeros

A Kubernetes mantém um registo dos contentores efémeros terminados. Se executar kubectl describe pod, continua a ver os contentores de diagnóstico concluídos após o fim da execução. Para reduzir o ruído, o Azure SRE Agent limita os diagnósticos a cinco contentores efémeros por pod.

Solicitar diagnóstico Java

Podes pedir diagnósticos manualmente, ou o Azure SRE Agent pode ativá-los quando detetar um provável problema de desempenho.

Execute um pedido de diagnóstico manual

No Azure SRE Agent, abra a experiência de chat e forneça os detalhes da carga de trabalho do serviço Java que pretende inspecionar:

Analyze the performance of:
pod: my-petclinic-app
container: spring-petclinic-rest
namespace: production
aks instance: my-aks-cluster

Inclua o nome do pod, nome do contentor, espaço de nomes e nome do cluster AKS para que o Azure SRE Agent possa direcionar a carga de trabalho correta.

Criar um subagente personalizado para diagnósticos Java

Se a sua equipa quiser um fluxo de trabalho dedicado ao diagnóstico, crie um subagente personalizado que encaminhe os pedidos para a ferramenta de diagnóstico Java.

Configurar o subagente

  1. No Azure SRE Agent, abra o Sub-Agent Builder.
  2. Selecionar Criar Novo Subagente.
  3. Adicione a configuração das ferramentas e o comportamento de transferência que deseja.

Exemplo de configuração:

api_version: azuresre.ai/v1
kind: AgentConfiguration
spec:
  name: AKSDiagnosticAgent
  system_prompt: >-
    Take the details of a diagnostic analysis to be performed on an AKS container
    and hand off to the appropriate diagnostic tool. If you need to find the resource
    to diagnose, use the SearchResourceByName and ListResourcesByType tools.
  tools:
    - GetCPUAnalysis
    - GetMemoryAnalysis
    - SearchResourceByName
    - ListResourcesByType
    - AnalyzeJavaAppInAKSContainer
  handoff_description: >-
    Use this agent when the user requests an AKS diagnostic analysis or when the
    investigation requires a Java diagnostics run.
agent_type: Autonomous

Usar o subagente

Depois de criar o subagente, pode encaminhar um pedido a partir do chat:

/agent AKSDiagnosticAgent I am having a performance issue in:
pod: illuminate-test-petclinic
container: spring-petclinic-rest
namespace: illuminate-test
aks instance: jeg-aks

O subagente inicia o fluxo de trabalho de diagnóstico Java e devolve os resultados com os próximos passos recomendados.

Delegar diagnósticos nos alertas

Também pode encaminhar investigações orientadas por alertas para o subagente, para que o Azure SRE Agent possa iniciar um diagnóstico em Java como parte de um fluxo de resposta automatizado.

Interpretar os resultados de diagnóstico

Quando a análise termina, o Azure SRE Agent devolve resultados como:

  • Identificação da causa raiz do principal gargalo
  • Informações de diagnóstico, como tempos de pausa do GC ou tempos de espera de threads
  • Recomendações para remediação

Use os resultados para:

  • Ajustar os argumentos da JVM ou o tamanho do heap
  • Otimizar os caminhos do código da aplicação
  • Dimensionar recursos AKS
  • Melhorar a monitorização e o alerta

Passos seguintes