Résoudre les problèmes liés aux applications Java sur AKS avec Azure agent SRE

Utilisez Azure Outil diagnostics de performances pour Java dans Azure Agent SRE pour examiner les problèmes de performances de JVM dans Azure Kubernetes Service (AKS). L’outil collecte des données de profilage à partir d’une charge de travail Java en cours d’exécution et retourne des résultats qui vous aident à isoler les goulots d’étranglement sans mettre l’application hors connexion.

Prerequisites

  • Application Java s’exécutant dans un cluster AKS
  • Environnement de l’agent SRE Azure qui peut accéder au cluster cible
  • Autorisations d’inspection de la charge de travail et d’exécution des diagnostics via Azure Agent SRE
  • kubectl installé et configuré si vous souhaitez ajouter l’annotation à partir de la ligne de commande

Diagnostics pris en charge par le système

Outil de diagnostic de performance Azure pour Java permet d’identifier les problèmes tels que :

  • Inefficacités du processus de garbage collection et pauses longues
  • Surutilisation ou sous-utilisation du processeur
  • Comportement intensif en opérations E/S impactant le temps de réponse
  • Contention de threads et goulots d’étranglement de synchronisation

Activer les diagnostics Java

Pour activer les diagnostics, étiquetez la charge de travail en tant qu’application Java en ajoutant l’annotation languageStack: java.

Ajouter l’annotation à la spécification de votre pod

Ajoutez l’annotation aux métadonnées de pod dans votre définition de charge de travail :

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

Ajouter l’annotation à l’aide de kubectl

Si le pod est déjà en cours d’exécution, ajoutez l’annotation à partir de la ligne de commande :

kubectl annotate pod your-java-app languageStack=java

Lorsque vous ajoutez cette annotation, vous confirmez que :

  • Le pod exécute une application Java.
  • Azure Agent SRE peut exécuter des diagnostics Java sur le pod.

Note

Le processus de diagnostic est conçu pour réduire les interruptions, mais Java Enregistreur de vol ajoute encore une certaine surcharge. Validez l’expérience dans un environnement hors production avant de l’utiliser en production.

Que se passe-t-il pendant une exécution de diagnostics

Quand Azure agent SRE démarre une exécution de diagnostics Java, elle :

  1. Crée un conteneur éphémère dans le pod cible.
  2. Attache le conteneur de diagnostic au conteneur Java.
  3. Collecte les données de télémétrie à l’aide de Java Flight Recorder (JFR).
  4. Analyse les données capturées.
  5. Supprime le conteneur de diagnostic une fois l’exécution terminée.

Ce processus conserve l’application en ligne pendant que Azure agent SRE collecte les données dont elle a besoin.

À propos des conteneurs éphémères

Kubernetes conserve un enregistrement des conteneurs éphémères arrêtés. Si vous exécutez kubectl describe pod, vous continuez à voir les conteneurs de diagnostic terminés une fois l’exécution terminée. Pour réduire le bruit, l'agent SRE Azure limite les diagnostics à cinq conteneurs éphémères par pod.

Demander des diagnostics Java

Vous pouvez demander manuellement des diagnostics ou Azure Agent SRE peut les déclencher lorsqu’il détecte un problème de performances probable.

Exécuter une demande de diagnostic manuelle

Dans Azure Agent SRE, ouvrez l’expérience de conversation et fournissez les détails de la charge de travail pour le service Java que vous souhaitez inspecter :

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

Incluez le nom du pod, le nom du conteneur, l’espace de noms et le nom du cluster AKS afin que Azure agent SRE puisse cibler la charge de travail appropriée.

Créer un sous-agent personnalisé pour Java diagnostics

Si votre équipe souhaite un flux de travail de diagnostic dédié, créez un sous-agent personnalisé qui route les requêtes vers l’outil de diagnostics Java.

Configurer le sous-agent

  1. Dans Azure Agent SRE, ouvrez Sub-Agent Builder.
  2. Sélectionnez Créer un sous-agent.
  3. Ajoutez la configuration pour les outils et le comportement de transfert souhaité.

Exemple de configuration :

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

Utiliser le sous-agent

Une fois que vous avez créé le sous-agent, vous pouvez diriger une demande vers celle-ci à partir de la conversation :

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

Le sous-agent démarre le flux de travail de diagnostic Java et retourne les résultats avec les étapes suivantes recommandées.

Déléguer des diagnostics à partir d’alertes

Vous pouvez également acheminer les enquêtes pilotées par les alertes vers le sous-agent afin que l'agent SRE Azure puisse démarrer une opération de diagnostic Java dans le cadre d’un flux de réponse automatisé.

Interpréter les résultats de diagnostic

Une fois l’analyse terminée, Azure Agent SRE retourne des résultats tels que :

  • Identification de la cause racine du goulot d’étranglement principal
  • Informations de diagnostic, tels que les temps de pause GC ou les temps d’attente de thread
  • Recommandations pour la correction

Utilisez les résultats pour :

  • Ajuster les arguments JVM ou la taille du tas
  • Optimiser les chemins de code d’application
  • Mettre à l’échelle les ressources AKS
  • Améliorer la surveillance et les alertes

Étapes suivantes