Logging für Systemdiagnosen

Wenn sich der Systemstatus eines Endpunkts ändert, können Sie Logs von Systemdiagnosen für das Load-Balancing abrufen. Mit den Systemdiagnose-Logs können Sie Folgendes:

  • Live-Debugging und Fehlerbehebung für den Systemstatus des Endpunkts vornehmen
  • Sie erhalten einen Einblick in den Systemstatus des Endpunkts
  • Die Logs erfüllen Prüfungs- und Compliance-Zwecke

Mit Systemdiagnosen werden Informationen zur Änderung des Systemzustands in Logging erfasst. Sie aktivieren oder deaktivieren das Logging für jede Systemdiagnose.

Damit Systemdiagnose-Logs in Logging angezeigt werden, dürfen keine Logs ausgeschlossen werden, die sich auf Systemdiagnosen beziehen. Eine Anleitung zum Prüfen, ob die Logs GCE Instance Group und Network Endpoint Group zulässig sind, finden Sie unter Ausgeschlossene Ressourcentypen ansehen.

Beschränkungen

  • Logs werden nur bei Änderungen des Systemzustands von Endpunkten generiert.
  • Legacy-Systemdiagnosen werden nicht unterstützt.
  • Zielpools werden nicht unterstützt.

Logging aktivieren und deaktivieren

Logging für eine neue Systemdiagnose aktivieren

Console

  1. Rufen Sie in der Google Cloud Console die Seite "Systemdiagnose" auf.
    Zur Seite "Systemdiagnose"
  2. Klicken Sie auf Systemdiagnose erstellen.
  3. Legen Sie für das Optionsfeld Logs den Wert Ein fest.
  4. Fahren Sie mit der Einrichtung der Systemdiagnose fort.

gcloud

gcloud beta compute health-checks create PROTOCOL HEALTH_CHECK_NAME \
   --enable-logging \
 ... other values

Dabei gilt:

  • --enable-logging aktiviert das Logging für diese Systemdiagnose.

Logging für eine vorhandene Systemdiagnose aktivieren

Console

  1. Rufen Sie in der Google Cloud Console die Seite "Systemdiagnose" auf.
    Zur Seite "Systemdiagnose"
  2. Klicken Sie auf den Namen Ihrer Systemdiagnose.
  3. Klicken Sie auf Bearbeiten.
  4. Legen Sie für das Optionsfeld Logs den Wert Ein fest.
  5. Klicken Sie auf Speichern.

gcloud

gcloud beta compute health-checks update PROTOCOL HEALTH_CHECK_NAME \
    --enable-logging

Dabei gilt:

  • --enable-logging aktiviert das Logging für diese Systemdiagnose.

Logging für eine vorhandene Systemdiagnose deaktivieren oder ändern

Console

  1. Rufen Sie in der Google Cloud Console die Seite "Systemdiagnose" auf.
    Zur Seite "Systemdiagnose"
  2. Klicken Sie auf den Namen Ihrer Systemdiagnose.
  3. Klicken Sie auf Bearbeiten.
  4. Legen Sie für das Optionsfeld Logs den Wert Aus fest.
  5. Klicken Sie auf Speichern.

gcloud

Logging vollständig deaktivieren

gcloud beta compute health-checks update PROTOCOL HEALTH_CHECK_NAME \
    --no-enable-logging

Dabei gilt:

  • --no-enable-logging deaktiviert das Logging für diese Systemdiagnose.

Logs ansehen

Um Logs anzuzeigen, öffnen Sie die Loganzeige.

Systemdiagnose-Logs werden nach Instanzgruppe oder Netzwerk-Endpunktgruppe indexiert.

Wenn Sie alle Logs einsehen möchten, wählen Sie im ersten Drop-down-Menü je nach Back-End-Typ GCE-Instanzgruppe oder Netzwerk-Endpunktgruppe aus.

Alternativ können Sie die Loganzeige öffnen und Folgendes in das Feld Nach Label oder Textsuche filtern einfügen: Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"

Sie können auch spezifischere Suchanfragen stellen, um Logs abzurufen. Der folgende Filter zeigt beispielsweise alle Logs für eine angegebene IP-Adresse einer Back-End-Instanz an:

  logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"
jsonPayload.healthCheckProbeResult.ipAddress="IP_ADDRESS"

Boolesche Logfelder erscheinen normalerweise nur, wenn sie den Wert true haben. Wenn ein boolesches Feld einen Wert false hat, erscheint dieses Feld nicht im Log.

Für Logfelder wird eine UTF-8-Codierung erzwungen. Zeichen, bei denen es sich nicht um UTF-8-Zeichen handelt, werden durch Fragezeichen ersetzt.

Sie können den Export von logbasierten Messwerten für Systemdiagnosen von Load-Balancern konfigurieren.

Inhalt der Logs

Logeinträge von Systemdiagnosen enthalten Informationen, die für das Monitoring und die Fehlerbehebung zum jeweiligen Status von Endpunkten hilfreich sind. Folgende Informationen sind in Ihnen enthalten:

  • Allgemeine Informationen, die in den meisten Logs angezeigt werden, wie z. B. Wichtigkeit, Projekt-ID, Projektnummer und Zeitstempel
  • Felder für Systemdiagnosen, die in den folgenden Tabellen beschrieben werden

Status der Systemdiagnose

Systemdiagnosen generieren ein Log, wenn ein Endpunkt den Status wechselt. Das Verhalten des Load-Balancers ändert sich aber aufgrund eines geänderten Status nicht zwangsläufig. Wenn für einen Endpunkt UNHEALTHY gilt, weil der Server die falsche Antwort zurückgibt, dann aber gar nicht mehr antwortet, sendet die Systemdiagnose ein Log mit dem neuen Status TIMEOUT. Das Load-Balancing stuft den Endpunkt aber weiterhin als fehlerhaft ein.

Ausführlicher Status der Systemdiagnose Bedeutung Grundzustand
HEALTHY Der Endpunkt ist erreichbar. Der Endpunkt entspricht den Anforderungen, die in der Systemdiagnose definiert sind. HEALTHY
UNHEALTHY Der Endpunkt ist erreichbar, entspricht aber nicht den in der Systemdiagnose definierten Anforderungen. UNHEALTHY
DRAINING Der Endpunkt wird per Drain beendet. Die bestehenden Verbindungen zum Endpunkt können zwar abgeschlossen werden, die neuen Verbindungen werden jedoch abgelehnt. Der Endpunkt wird als HEALTHY betrachtet. HEALTHY
TIMEOUT Der Endpunkt ist nicht erreichbar. Je nach Typ der Systemdiagnose kann entweder keine Verbindung zum Endpunkt hergestellt werden oder der Server hat nicht innerhalb des angegebenen Zeitlimits geantwortet. Der Endpunkt wird als UNHEALTHY betrachtet. UNHEALTHY
UNKNOWN Das System zur Systemdiagnose erkennt den Endpunkt, sein Zustand ist jedoch nicht bekannt. Der Endpunkt wird als UNHEALTHY betrachtet. UNHEALTHY

Sie können über die Cloud Logging API mit den Logs interagieren. Die Logging API ermöglicht das interaktive Filtern von Logs mit bestimmten festgelegten Feldern und das Exportieren übereinstimmender Logs für Cloud Logging, Cloud Storage, BigQuery oder Pub/Sub. Weitere Informationen zur Cloud Logging API finden Sie unter Logs ansehen.

Logeinträge von Systemdiagnosen

In LogEntry jsonPayload wird das Feld healthCheckProbeResult mit folgenden Informationen eingetragen:

Felder
ipAddress string Die primäre interne IP-Adresse, die der primären Netzwerkschnittstelle jeder Back-End-VM zugeordnet ist. Dies ist ein für Nutzer lesbarer String.
healthCheckProtocol HealthCheckProtocol Das Systemdiagnoseprotokoll, das für die Systemdiagnose des Endpunkts verwendet wird, wie TCP, HTTP, HTTPS usw.
healthState HealthState Aktueller Systemstatus des Endpunkts: HEALTHY oder UNHEALTHY.
previousHealthState HealthState Der vorherige Systemstatus des Endpunkts: HEALTHY oder UNHEALTHY.
detailedHealthState DetailedHealthState Aktueller ausführlicher Systemstatus des Endpunkts. Eine Liste der möglichen Status finden Sie unter Status der Systemdiagnose.
previousDetailedHealthState DetailedHealthState Vorheriger ausführlicher Systemstatus des Endpunkts. Eine Liste der möglichen Status finden Sie unter Status der Systemdiagnose.
probeRequest string Bei HTTP, HTTPS und HTTP2 ist dies der URL-Anfragepfad (Feld requestPath in der Ressourcenkonfiguration). Bei TCP/SSL ist dies der konfigurierte optionale String, der gesendet wird, sobald die Verbindung für die Systemdiagnose hergestellt wurde (Feld request in der Ressourcenkonfiguration).
probeCompletionTimestamp Timestamp Zeitstempel für den Abschluss der Prüfung.
connectLatency Duration Zeitaufwand für die Einrichtung der Verbindung für verbindungsorientierte Systemdiagnoseprotokolle: TCP, SSL, HTTP, HTTPS, HTTP/2.
responseLatency Duration Latenz zwischen Anfrage und Antwort, gemessen vom Prober.
probeResultText string Beschreibender Text zum Prüfergebnis, z. B. "Zeitüberschreitung bei der Verbindung" oder "HTTP-Antwort: Bad Gateway" o. Ä. oder das Feld ist leer.
probeSourceIp string Die IP-Adresse, von der die Prüfung zur Systemdiagnose gesendet wurde.
targetIp string IP-Adresse, die das Ziel der Prüfung ist. Dies kann sich von ipAddress unterscheiden. Die Ziel-IP-Adresse der Prüfung hängt vom Typ des Load-Balancers ab:
  • Bei internen TCP/UDP-Load-Balancern und Netzwerk-Load-Balancern ist das Ziel von Systemdiagnose-Paketen die IP-Adresse der Weiterleitungsregel des Load-Balancers.
  • Bei externen HTTP(S)-Load-Balancern, TCP-Proxy-Load-Balancern und SSL-Proxy-Load-Balancern, die Instanzgruppen als Back-Ends verwenden, haben die Systemdiagnosepakete die primäre interne IP-Adresse als Ziel, die der primären Netzwerkschnittstelle jeder Back-End-VM zugeordnet ist.
  • Bei externen HTTP(S)-Load-Balancern, TCP-Proxy-Load-Balancern und SSL-Proxy-Load-Balancern, die Gruppen von Netzwerkendpunkten als Back-Ends nutzen, haben die Systemdiagnosepakete die IP-Adresse des Endpunkts als Ziel. Dies kann entweder eine primäre oder eine sekundäre (Alias-)IP-Adresse sein.
targetPort int Der Port, der das Ziel der Prüfung war. Das kann der Standardport der Prüfung sein oder der Port, den Sie beim Erstellen der Systemdiagnose angegeben haben.

Beispielfilter

Alle Ergebnisse der Systemdiagnose für eine bestimmte Instanzgruppe

logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"  AND
resource.type="gce_instance_group" AND
resource.labels.instance_group_name="INSTANCE_GROUP_NAME"

Alle Ergebnisse der Systemdiagnose für eine bestimmte NEG

logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"  AND
resource.type="gce_network_endpoint_group" AND
resource.labels.network_endpoint_group_id="ENDPOINT_GROUP_ID"

Alle Änderungen der Systemdiagnose für die IP-Adresse 10.128.15.201 der Back-End-Instanz

logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"
jsonPayload.healthCheckProbeResult.ipAddress="10.128.15.201"

Alle Endpunkte, die zuvor den Status HEALTHY hatten, aber jetzt TIMEOUT haben

logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"
jsonPayload.healthCheckProbeResult.previousDetailedHealthState="HEALTHY"
jsonPayload.healthCheckProbeResult.detailedHealthState="TIMEOUT"

Systemdiagnose-Logs aus einem bestimmten Zeitraum suchen

logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"
timestamp>"2019-02-14T02:20:00.0Z"
timestamp<"2019-02-14T03:30:00.0Z"

Weitere Informationen