Problemen met Java toepassingen in AKS oplossen met Azure SRE-agent

Gebruik Azure Hulpprogramma voor prestatiediagnose voor Java in Azure SRE-agent om JVM-prestatieproblemen in Azure Kubernetes Service (AKS) te onderzoeken. Het hulpprogramma verzamelt profileringsgegevens van een actieve Java workload en retourneert bevindingen die u helpen knelpunten te isoleren zonder de toepassing offline te halen.

Vereiste voorwaarden

  • Een Java-toepassing die wordt uitgevoerd in een AKS-cluster
  • Een Azure SRE Agent-omgeving die toegang heeft tot het doelcluster
  • Machtigingen voor het inspecteren van de workload en het uitvoeren van diagnostische gegevens via Azure SRE-agent
  • kubectl geïnstalleerd en geconfigureerd als u de annotatie vanaf de opdrachtregel wilt aanmaken

Ondersteunde diagnostische gegevens

Azure Hulpprogramma voor prestatiediagnose voor Java helpt bij het identificeren van problemen zoals:

  • Garbagecollection inefficiënties en lange pauzes
  • CPU-overgebruik of ondergebruik
  • I/O-zwaar gedrag dat van invloed is op reactietijd
  • Threadconflicten en synchronisatieknelpunten

Java-diagnostiek inschakelen

Als u diagnostische gegevens wilt inschakelen, labelt u de workload als een Java toepassing door de aantekening languageStack: java toe te voegen.

De annotatie toevoegen aan uw podspecificatie

Voeg de aantekening toe aan de metagegevens van de pod in uw workloaddefinitie:

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

De aantekening toevoegen met behulp van kubectl

Als de pod al wordt uitgevoerd, voegt u de aantekening toe vanaf de opdrachtregel:

kubectl annotate pod your-java-app languageStack=java

Wanneer u deze aantekening toevoegt, bevestigt u dat:

  • De pod voert een Java toepassing uit.
  • Azure SRE-agent kan Java diagnostische gegevens uitvoeren op de pod.

Opmerking

Het diagnostische proces is ontworpen om onderbrekingen te minimaliseren, maar Java Flight Recorder nog steeds wat overhead toevoegt. Valideer de ervaring in een niet-productieomgeving voordat u deze in productie gebruikt.

Wat gebeurt er tijdens een diagnostische uitvoering

Wanneer Azure SRE-agent een Java diagnostische uitvoering start, wordt het volgende uitgevoerd:

  1. Hiermee maakt u een tijdelijke container in de doel-pod.
  2. Koppelt de diagnostische container aan de Java-container.
  3. Verzamelt telemetrie met behulp van Java Flight Recorder (JFR).
  4. Analyseert de vastgelegde gegevens.
  5. Hiermee verwijdert u de diagnostische container nadat de uitvoering is voltooid.

Met dit proces blijft de toepassing online terwijl Azure SRE-agent de benodigde gegevens verzamelt.

Over tijdelijke containers

Kubernetes houdt een record bij van beëindigde kortstondige containers. Als u kubectl describe pod uitvoert, blijft u voltooide diagnostische containers zien na afloop van de uitvoering. Om ruis te verminderen, beperkt Azure SRE Agent diagnostiek tot vijf tijdelijke containers per pod.

Diagnostische gegevens voor Java aanvragen

U kunt handmatig diagnostische gegevens aanvragen of Azure SRE-agent deze kan activeren wanneer een waarschijnlijk prestatieprobleem wordt gedetecteerd.

Een handmatige diagnostische aanvraag uitvoeren

Open in Azure SRE Agent de chat-ervaring en geef de workloaddetails op voor de Java-service die u wilt controleren:

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

Neem de podnaam, containernaam, naamruimte en AKS-clusternaam op, zodat Azure SRE-agent de juiste workload kan instellen.

Een aangepaste subagent maken voor Java diagnostische gegevens

Als uw team een speciale diagnostische workflow wil, maakt u een aangepaste subagent waarmee verzoeken worden gerouteerd naar de Java-diagnosetool.

De subagent configureren

  1. Open Sub-Agent Builder in Azure SRE-agent.
  2. Selecteer Nieuwe subagent maken.
  3. Stel de configuratie in voor de hulpprogramma's en het handoff-gedrag van uw voorkeur.

Voorbeeldconfiguratie:

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

De subagent gebruiken

Nadat u de subagent hebt gemaakt, kunt u een aanvraag naar de agent doorsturen via 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

De subagent start de Java diagnostische werkstroom en retourneert bevindingen met aanbevolen volgende stappen.

Diagnostische gegevens delegeren vanuit waarschuwingen

U kunt ook waarschuwingsgestuurde onderzoeken doorsturen naar de subagent, zodat de Azure SRE-agent een Java-diagnostische sessie kan starten als onderdeel van een geautomatiseerde reactiestroom.

Diagnostische resultaten interpreteren

Wanneer de analyse is voltooid, retourneert Azure SRE-agent resultaten zoals:

  • Hoofdoorzaakidentificatie voor het belangrijkste knelpunt
  • Diagnostische inzichten , zoals GC-onderbrekingstijden of wachttijden voor threads
  • Aanbevelingen voor herstel

Gebruik de resultaten om het volgende te doen:

  • JVM-argumenten of de grootte van de heap aanpassen
  • Toepassingscodepaden optimaliseren
  • AKS-resources opschalen
  • Bewaking en waarschuwingen verbeteren

Volgende stappen