Solución de problemas de aplicaciones de Java en AKS con Azure agente de SRE

Utilice la herramienta de diagnóstico de rendimiento de Azure para Java en el agente SRE de Azure para investigar problemas de rendimiento de JVM en Azure Kubernetes Service (AKS). La herramienta recopila datos de generación de perfiles de una carga de trabajo de Java en ejecución y devuelve resultados que le ayudan a aislar cuellos de botella sin desconectar la aplicación.

Prerrequisitos

  • Una aplicación de Java que se ejecuta en un clúster de AKS
  • Un entorno del agente de SRE de Azure que puede acceder al clúster de destino
  • Permisos para inspeccionar la carga de trabajo y ejecutar diagnósticos mediante Azure agente de SRE
  • kubectl instalado y configurado si desea agregar la anotación desde la línea de comandos

Diagnósticos compatibles

Azure Herramienta de diagnóstico de rendimiento para Java ayuda a identificar problemas como:

  • Ineficiencias de recolección de basura y pausas largas
  • Uso excesivo de CPU o uso bajo
  • Comportamiento intensivo de E/S que afecta al tiempo de respuesta
  • Conflicto entre subprocesos y cuellos de botella en la sincronización

Habilitación de diagnósticos de Java

Para habilitar los diagnósticos, etiquete la carga de trabajo como una aplicación de Java agregando la anotación languageStack: java.

Añade la anotación a la especificación del pod

Agregue la anotación a los metadatos del pod en la definición de su carga de trabajo.

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

Adición de la anotación mediante kubectl

Si el pod ya se está ejecutando, agregue la anotación desde la línea de comandos:

kubectl annotate pod your-java-app languageStack=java

Al agregar esta anotación, confirme que:

  • El pod ejecuta una aplicación de Java.
  • Azure SRE Agent puede ejecutar diagnósticos de Java en el pod.

Note

El proceso de diagnóstico está diseñado para minimizar la interrupción, pero Java Flight Recorder sigue añadiendo cierta sobrecarga. Valide la experiencia en un entorno que no sea de producción antes de usarla en producción.

Qué ocurre durante una ejecución de diagnóstico

Cuando el agente de SRE de Azure inicia una ejecución de diagnóstico de Java, hace lo siguiente:

  1. Crea un contenedor efímero en el pod de destino.
  2. Asocia el contenedor de diagnóstico al contenedor de Java.
  3. Recopila datos de telemetría mediante Java Flight Recorder (JFR).
  4. Analiza los datos capturados.
  5. Elimina el contenedor de diagnóstico después de que se complete la ejecución.

Este proceso mantiene la aplicación en línea mientras Azure agente de SRE recopila los datos que necesita.

Acerca de los contenedores efímeros

Kubernetes mantiene un registro de contenedores efímeros terminados. Si ejecuta kubectl describe pod, seguirá viendo los contenedores de diagnóstico completados una vez finalizada la ejecución. Para reducir el ruido, Azure SRE Agent limita los diagnósticos a cinco contenedores efímeros por pod.

Solicitud de diagnóstico de Java

Puede solicitar diagnósticos manualmente o Azure agente SRE puede desencadenarlos cuando detecta un problema de rendimiento probable.

Ejecución de una solicitud de diagnóstico manual

En Azure agente de SRE, abra la experiencia de chat y proporcione los detalles de la carga de trabajo para el servicio Java que desea inspeccionar:

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

Incluya el nombre del pod, el nombre del contenedor, el espacio de nombres y el nombre del clúster de AKS para que Azure agente de SRE pueda tener como destino la carga de trabajo correcta.

Creación de un subagente personalizado para diagnóstico de Java

Si el equipo quiere un flujo de trabajo de diagnóstico dedicado, cree un subagente personalizado que enrute las solicitudes a la herramienta de diagnóstico de Java.

Configuración del subagente

  1. En Azure SRE Agent, abra Sub-Agent Builder.
  2. Seleccione Crear nuevo subagente.
  3. Agregue la configuración de las herramientas y el comportamiento de entrega que desee.

Configuración de ejemplo:

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

Uso del subagente

Después de crear el subagente, puede dirigirle una solicitud desde el 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

El subagente inicia el flujo de trabajo de diagnóstico de Java y devuelve los resultados con los pasos siguientes recomendados.

Delegar el diagnóstico de alertas

También puede dirigir las investigaciones impulsadas por alertas al subagente para que el Agente de SRE de Azure pueda iniciar una ejecución de diagnósticos de Java como parte de un flujo de respuesta automatizado.

Interpretación de los resultados de diagnóstico

Cuando finalice el análisis, Azure agente de SRE devuelve resultados como:

  • Identificación de la causa raíz del cuello de botella principal
  • Información de diagnóstico , como tiempos de pausa de GC o tiempos de espera de subprocesos
  • Recomendaciones para la corrección

Use los resultados para:

  • Ajustar los argumentos de JVM o el tamaño del montón
  • Optimizar las rutas de acceso del código de la aplicación
  • Escalado de recursos de AKS
  • Mejora de la supervisión y las alertas

Pasos siguientes