Problembehandlung bei Java Anwendungen auf AKS mit Azure SRE-Agent

Verwenden Sie Azure Leistungsdiagnosetool für Java in Azure SRE Agent, um JVM-Leistungsprobleme in Azure Kubernetes Service (AKS) zu untersuchen. Das Tool sammelt Profilerstellungsdaten aus einer ausgeführten Java Workload und gibt Ergebnisse zurück, die Ihnen helfen, Engpässe zu isolieren, ohne die Anwendung offline zu schalten.

Voraussetzungen

  • Eine Java Anwendung, die in einem AKS-Cluster ausgeführt wird
  • Eine Azure SRE-Agent-Umgebung, die auf den Zielcluster zugreifen kann
  • Berechtigungen zum Überprüfen der Workload und Ausführen der Diagnose über Azure SRE-Agent
  • kubectl installiert und konfiguriert, wenn Sie die Annotation von der Befehlszeile aus hinzufügen möchten

Unterstützte Diagnose

Azure Leistungsdiagnosetool für Java hilft bei der Identifizierung von Problemen wie:

  • Ineffizienzen bei der Garbage Collection und lange Pausen
  • CPU-Übernutzung oder -unternutzung
  • E/A-intensive Aktivität, die sich auf die Reaktionszeit auswirkt
  • Thread-Konflikte und Synchronisierungsengpässe

Aktivieren Java Diagnose

Um die Diagnose zu aktivieren, bezeichnen Sie die Arbeitsauslastung als Java Anwendung, indem Sie die languageStack: java Anmerkung hinzufügen.

Fügen Sie die Annotation zu Ihrer Pod-Spezifikation hinzu.

Fügen Sie die Annotation zu den Pod-Metadaten in der Workload-Definition hinzu.

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

Hinzufügen der Anmerkung mithilfe von kubectl

Wenn der Pod bereits ausgeführt wird, fügen Sie die Anmerkung über die Befehlszeile hinzu:

kubectl annotate pod your-java-app languageStack=java

Wenn Sie diese Anmerkung hinzufügen, bestätigen Sie Folgendes:

  • Der Pod führt eine Java Anwendung aus.
  • Azure SRE-Agent kann Java Diagnose für den Pod ausführen.

Note

Der Diagnoseprozess wurde entwickelt, um Unterbrechungen zu minimieren, aber Java Flugrekorder fügt trotzdem mehr Aufwand hinzu. Überprüfen Sie die Erfahrung in einer Nichtproduktionsumgebung, bevor Sie sie in der Produktion verwenden.

Was während einer Diagnoseausführung geschieht

Wenn Azure SRE-Agent eine Java Diagnoseausführung startet, wird folgendes ausgeführt:

  1. Erstellt einen temporären Container im Zielpod.
  2. Fügt den Diagnosecontainer an den Java-Container an.
  3. Erfasst Telemetrie mithilfe von Java Flight Recorder (JFR).
  4. Analysiert die erfassten Daten.
  5. Entfernt den Diagnosecontainer nach Abschluss der Ausführung.

Dieser Vorgang hält die Anwendung online, während Azure SRE-Agent die benötigten Daten sammelt.

Informationen zu kurzlebigen Containern

Kubernetes erfasst beendete temporäre Container. Wenn Sie kubectl describe pod ausführen, werden weiterhin abgeschlossene Diagnosecontainer angezeigt, nachdem die Ausführung abgeschlossen ist. Um Rauschen zu reduzieren, schränkt Azure SRE-Agent die Diagnose auf fünf ephemerale Container pro Pod ein.

Java-Diagnose anfordern

Sie können die Diagnose manuell anfordern, oder Azure SRE-Agent sie auslösen kann, wenn ein wahrscheinliches Leistungsproblem erkannt wird.

Ausführen einer manuellen Diagnoseanforderung

Öffnen Sie in Azure SRE-Agent die Chaterfahrung, und stellen Sie die Arbeitsauslastungsdetails für den Java Dienst bereit, den Sie überprüfen möchten:

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

Fügen Sie den Podnamen, den Containernamen, den Namespace und den AKS-Clusternamen ein, damit Azure SRE-Agent auf die richtige Workload abzielen kann.

Erstellen eines benutzerdefinierten Unter-Agents für Java Diagnose

Wenn Ihr Team einen dedizierten Diagnoseworkflow verwenden möchte, erstellen Sie einen benutzerdefinierten Unter-Agent, der Anforderungen an das Java Diagnosetool weitergibt.

Konfigurieren des Unter-Agents

  1. Öffnen Sie in Azure SRE-Agent Sub-Agent Builder.
  2. Wählen Sie "Neuen Unter-Agent erstellen" aus.
  3. Fügen Sie die Konfiguration für die gewünschten Tools und das Übergabeverhalten hinzu.

Beispielkonfiguration:

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

Verwenden des Unter-Agents

Nachdem Sie den Unter-Agent erstellt haben, können Sie eine Anforderung an ihn aus dem Chat weiterleiten:

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

Der Unter-Agent startet den Java Diagnoseworkflow und gibt Ergebnisse mit empfohlenen nächsten Schritten zurück.

Diagnosen von Warnungen delegieren

Sie können warnungsgesteuerte Untersuchungen auch an den Unter-Agent weiterleiten, damit Azure SRE-Agent eine Java Diagnoseausführung als Teil eines automatisierten Antwortflusses starten kann.

Interpretieren von Diagnoseergebnissen

Nach Abschluss der Analyse gibt Azure SRE-Agent Ergebnisse wie:

  • Identifizierung der Ursache für den Hauptengpass
  • Diagnoseeinblicke wie GC-Pausenzeiten oder Thread-Wartezeiten
  • Empfehlungen zur Behebung

Verwenden Sie die Ergebnisse für Folgendes:

  • Anpassen der JVM-Argumente oder Heapgröße
  • Optimieren von Anwendungscodepfaden
  • Skalieren von AKS-Ressourcen
  • Verbessern der Überwachung und Warnung

Nächste Schritte