Core Dumps erfassen


Verwenden Sie Core Dumps, um die Ursachen einer nicht reagierenden VM-Instanz zu analysieren.

Zum Erfassen von Core Dumps in Compute Engine müssen Sie Ihre VMs so konfigurieren, dass sie ein Non-Maskable Interrupt (NMI)-Signal erhalten, und dann einen SendDiagnosticInterrupt-Befehl ausführen, um eine Kernel Panic oder einen Bluescreen in Ihrem Betriebssystem auszulösen. Eine Kernel Panic oder ein Bluescreen startet eine Core-Dump-Erfassung durch das Gastbetriebssystem. Diese Core Dumps können dann zu Debugging-Zwecken verwendet werden, insbesondere bei Szenarien, die schwer zu reproduzieren sind, z. B. bei einem Kernel Freeze.

Hinweise

  • Das Senden von NMI-Signalen wird im standardmäßigen Queries API-Kontingent gezählt. Weitere Informationen finden Sie unter API-Ratenlimits.
  • Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben. Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud-Dienste und APIs überprüft. Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich so bei Compute Engine authentifizieren.

    Wählen Sie den Tab für die Verwendung der Beispiele auf dieser Seite aus:

    gcloud

    1. Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

      gcloud init
    2. Legen Sie eine Standardregion und -zone fest.

    REST

    Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.

      Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

      gcloud init

Erforderliche Rollen

Bitten Sie Ihren Administrator oder Ihr Dienstkonto, Ihrem Nutzer oder Dienstkonto für Ihr Projekt die IAM-Rolle Compute Instance Admin (Version 1) zu erteilen (roles/compute.instanceAdmin.v1), um sicherzustellen, dass Ihr Nutzer oder Dienstkonto über die erforderliche Berechtigung zum Senden von NMI-Signalen an eine VM verfügt. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Diese vordefinierte Rolle enthält die Berechtigung compute.instances.sendDiagnosticInterrupt, die zum Senden von NMI-Signalen an eine VM erforderlich ist.

Ihr Administrator kann Ihrem Nutzer oder Dienstkonto möglicherweise auch diese Berechtigung mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erteilen.

Überblick

Führen Sie die folgenden Schritte aus, um Core Dumps zur Fehlerbehebung bei einer nicht reagierenden VM oder einem Sicherheitsproblem zu verwenden:

  1. VM so konfigurieren, dass Core Dumps generiert werden
  2. NMI-Signal senden, um Core Dumps zu generieren
  3. Core Dumps prüfen

Beschränkungen

Bei VMs, für die Secure Boot aktiviert ist, müssen Sie Secure Boot deaktivieren, bevor Sie ein NMI-Signal senden. Eine Anleitung finden Sie unter Shielded VM-Optionen auf einer VM-Instanz ändern.

VM konfigurieren

Die Reaktion einer VM auf den Empfang eines NMI-Signals hängt von der Betriebssystemkonfiguration der VM ab.

Die wichtigsten Core-Dump-Logs werden von jedem Betriebssystem an einem anderen Speicherort geschrieben. Unter Ubuntu-Betriebssystemen wird die Crash-Dumpdatei beispielsweise standardmäßig unter /var/crash/ gespeichert.

Informationen zum Konfigurieren des Gastbetriebssystems zum Generieren eines Crash-Dump beim Empfangen eines NMI-Signals finden Sie in der Dokumentation für das unterstützte Betriebssystem.

Betriebssystem Links zur Anleitung Zusätzliche Hinweise
Ubuntu Ubuntu: Kernel-Crash-Dump Bei Linux-VMs müssen Sie den Kernel so konfigurieren, dass er abstürzt, wenn er das NMI-Signal empfängt.

Fügen Sie Ihrer Konfigurationsdatei Folgendes hinzu, um den Kernel für einen Absturz zu konfigurieren:

kernel.unknown_nmi_panic=1
SUSE Linux Enterprise Server (SLES) crashkernel-Speicher für die Kernel-Dump-Analyse konfigurieren
Red Hat Enterprise Linux (RHEL) Verwenden Sie die beiden folgenden Dokumente:
Container-Optimized OS (COS) Kernel-Crash-Dump auf GCE-COS-Instanzen aktivieren Nur COS 93 und höher unterstützen die kdump-Generierung mit NMI-Signal.
Windows Kernel- oder vollständigen Crash-Dump generieren

Windows-Client-VMs speichern keine Arbeitsspeicher-Dumpdateien, es sei denn, sie sind Mitglieder einer AD-Domain oder Folgendes ist wahr:

  • Die Registry setzt AlwaysKeepMemoryDump auf 1.
  • Der Speicher hat mehr als 25 GB freien Speicherplatz.

Weitere Informationen finden Sie unter Kernel-Dump-Speicher und Bereinigungsverhalten in Windows 7.

NMI zum Generieren von Core Dumps senden

Nachdem Sie die VM konfiguriert haben, können Sie das NMI-Signal mithilfe der Google Cloud CLI oder REST an die VM senden.

gcloud

Verwenden Sie zum Senden des NMI-Signals den Befehl instances send-diagnostic-interrupt.

gcloud compute instances send-diagnostic-interrupt VM_NAME \
    --zone=ZONE

Dabei gilt:

  • VM_NAME: Instanz-ID oder Name der VM, von der Sie Core Dumps erfassen möchten
  • ZONE: Zone, in der sich Ihre VM befindet

Die Ausgabe sieht etwa so aus:

<Empty Response>

Eine vollständige Liste der Ausgaben finden Sie im nächsten Abschnitt in diesem Dokument zu "NMI-Befehlsantworten".

REST

  1. Optional. Erstellen Sie einen API-Schlüssel, falls noch keiner verfügbar ist. Weitere Informationen zum Erstellen von API-Schlüsseln finden Sie unter API-Schlüssel erstellen.

  2. Stellen Sie zum Senden des NMI-Signals eine POST-Anfrage an die Methode sendDiagnosticInterrupt.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/sendDiagnosticInterrupt?key=API_KEY
    

    Verwenden Sie beispielsweise den Befehl curl so, um die Anfrage zu stellen:

    curl --request POST 'https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/sendDiagnosticInterrupt?key=API_KEY' \
      --header 'Authorization: Bearer $(gcloud auth print-access-token)' \
      --header 'Accept: application/json' \
      --compressed
    

    Dabei gilt:

    • PROJECT_ID ist die ID des Projekts, in dem die VM erstellt werden soll.
    • ZONE: Zone, in der sich Ihre VM befindet
    • VM_NAME: Instanz-ID oder Name der VM, von der Sie Core Dumps erfassen möchten
    • API_KEY: Ihr API-Schlüssel

    Die Ausgabe sieht etwa so aus:

    <Empty Response>

    Eine vollständige Liste der Ausgaben finden Sie im nächsten Abschnitt in diesem Dokument zu "NMI-Befehlsantworten".

NMI-Befehlsantworten

Eine der folgenden Antworten wird zurückgegeben, wenn Sie versuchen, ein NMI-Signal zu senden.

Status Text Hinweise
ERFOLGREICH <Empty Response> SUCCESS zeigt an, dass das NMI-Signal an das Betriebssystem gesendet wird. Es wird nicht garantiert, dass der Core Dump erfasst wird oder dass die VM heruntergefahren oder neu gestartet wird. Diese Verhaltensweisen werden durch die Betriebssystemkonfiguration bestimmt.
FEHLER UNSUPPORTED_OPERATION Dies tritt auf, wenn das Betriebssystem das NMI-Signal nicht empfängt. Dafür gibt es mehrere Gründe. Häufig wird die VM live migriert oder die VM ist nicht richtig für den Empfang von NMI-Signalen konfiguriert.
Das Problem können Sie so beheben:
  • Prüfen Sie, ob die VM ordnungsgemäß konfiguriert ist. Siehe VM konfigurieren.
  • Warten Sie und wiederholen Sie die SendDiagnosticInterrupt-Anfrage.
FEHLER Required 'compute.instances.sendDiagnosticInterrupt' permission for [..] Der Befehl ist fehlgeschlagen, weil der Nutzer, der die Anfrage stellt, nicht über ausreichende Berechtigungen verfügt.

Um dieses Problem zu beheben, können Sie dem Nutzer eine Rolle mit der Berechtigung compute.instances.sendDiagnosticInterrupt zuweisen.

Core Dumps prüfen

Prüfen Sie die Crash-Dumpdatei am konfigurierten oder Standardspeicherort für Ihr Betriebssystem.

Beispielsweise wird unter Ubuntu-Betriebssystemen die Crash-Dumpdatei standardmäßig unter /var/crash/ gespeichert.