Logbasierte Messwerte verwenden

Auf dieser Seite werden die Grundlagen der Ausgabe von Logs zur Erstellung von Verfügbarkeits- und Latenz-SLIs erläutert. Außerdem finden Sie Implementierungsbeispiele zum Definieren von SLOs mithilfe von logbasierten Messwerten.

Mit Datenelementen in Logeinträgen können Sie SLIs (Service Level Indicators) erstellen und vorhandene Lognutzlasten nutzen. Es ist auch möglich, vorhandenenen Diensten das Logging hinzuzufügen. Dies ist gegebenenfalls einfacher, als Messwertinstrumente zu erstellen.

Logs und Messwerte

Logs erfassen Datensätze, die als Logeinträge bezeichnet werden und bestimmte Ereignisse beschreiben, die in Computersystemen stattfinden. Logs werden nach Code, von den Plattformdiensten, auf denen der Code ausgeführt wird (z. B. Dataflow), und von der Infrastruktur geschrieben, von der die Plattform abhängt (z. B. Compute Engine-Instanzen).

Da Logs in modernen Systemen von auf ein Laufwerk geschriebenen Texteinträgen abstammen (und manchmal noch Textdateien sind), stellt ein Logeintrag eine Zeile in einer Logdatei dar und kann als Quanteneinheit des Logging betrachtet werden.

Ein Logeintrag umfasst mindestens zwei Elemente:

  • Einen Zeitstempel, der angibt, wann das Ereignis eingetreten ist oder wann es in das Logging-System aufgenommen wurde.
  • Die Textnutzlast, entweder unstrukturierte Textdaten oder strukturierte Daten, meist in JSON.

Logs können auch zugehörige Metadaten enthalten, vor allem, wenn sie in Cloud Logging aufgenommen werden. Solche Metadaten können die Ressource, die das Log schreibt, den Lognamen sowie einen Schweregrad pro Eintrag umfassen.

Logs

Logs werden für zwei Hauptzwecke verwendet:

  • Ereignislogs beschreiben bestimmte Ereignisse, die im System stattfinden. Sie können Ereignislogs verwenden, um Nachrichten auszugeben, die Nutzer darüber informieren, dass alles gut funktioniert ("Aufgabe erfolgreich abgeschlossen") oder Informationen liefern, wenn etwas nicht funktioniert ("Ausnahme vom Server empfangen").
  • Transaktionslogs beschreiben die Details der von einem System oder einer Komponente verarbeiteten Transaktionen. Beispiel: Ein Load-Balancer protokolliert jede eingehende Anfrage, egal, ob sie erfolgreich abgeschlossen wurde oder nicht. Außerdem werden weitere Informationen aufgenommen, darunter die angeforderte URL, der HTTP-Antwortcode und eventuell Details wie das Back-End, über das die Anfrage gesendet wurde.

Messwerte

Im Gegensatz zu Logs beschreiben Messwerte in der Regel keine bestimmten Ereignisse. Messwerte werden eher verwendet, um den Zustand eines Systems im Zeitverlauf darzustellen. Ein Messwert besteht aus einer Reihe von Datenpunkten, die etwas aus Ihrem System messen. Jeder Datenpunkt enthält einen Zeitstempel und einen numerischen Wert.

Den Messwerten können auch Metadaten zugeordnet sein. Die Reihe der Datenpunkte, die als Zeitachse bezeichnet wird, kann Informationen wie den Messwertnamen, eine Beschreibung und oftmals Labels enthalten, die angeben, welche Ressource die Daten schreiben. Informationen zum Monitoring-Messwertmodell finden Sie unter Messwerte, Zeitachsen und Ressourcen.

Logbasierte Messwerte

Logbasierte Messwerte sind aus Logeinträgen erstellte Messwerte. Dazu werden Informationen aus Logeinträgen extrahiert und in Zeitachsendaten umgewandelt. Cloud Logging bietet Mechanismen zur Erstellung von zwei Messwertarten aus Logeinträgen:

  • Zählermesswerte, mit denen die Logeinträge gezählt werden, die einem bestimmten Filter entsprechen. Beispielsweise können Sie mit einem Zählermesswert die Anzahl der im Log erfassten Anfragen oder Fehler erfassen.

  • Verteilungsmesswerte, die reguläre Ausdrücke verwenden, um die Nutzlast in den einzelnen Logeinträgen zu parsen und numerische Werte als Verteilung zu extrahieren.

Weitere Informationen zu logbasierten Messwerten in Cloud Logging finden Sie unter Logbasierte Messwerte verwenden.

Logbasierte Messwerte als SLIs verwenden

Mit logbasierten Messwerten können Sie Daten aus Logs in eine Form extrahieren, die zum Erstellen von SLIs in Monitoring verwendet werden kann:

  • Sie können logbasierte Messwerte für Zähler verwenden, um anfragebasierte Verfügbarkeits-SLIs auszudrücken.

  • Sie können logbasierte Ablaufmesswerte verwenden, um anfragebasierte Latenz-SLIs auszudrücken.

Beispiel für Logeinträge

Die Stack Doctor-Anwendung ist ein Beispiel für einen instrumentierten Dienst, der Logeinträge mit Informationen über alle Anfragen, Fehler und Latenzen an den Dienst ausgibt. Der Code für den Dienst ist im GitHub-Repository stack-doctor verfügbar.

Der Dienst generiert Cloud Logging-Logeinträge im Log projects/stack-doctor/logs/bunyan_log. Der Logeintrag für jeden Ereignistyp enthält einen anderen message-Wert. Die Logeinträge für verschiedene Ereignistypen sehen so aus:

  • Bei allen Anfragen:

    {
      "insertId": "..........iTRVT5MOK2VOsVe31bzrTD",
      "jsonPayload": {
        "pid": 81846,
        "time": "Mon Aug 31 2020 20:30:49 GMT-0700 (Pacific Daylight Time)",
        "hostname": "<hostname>",
        "level": 30,
        "message": "request made",
        "v": 0,
        "name": "sli-log"
      },
        "resource": {
        "type": "global",
        "labels": {
          "project_id": "stack-doctor"
        }
      },
      "timestamp": "2020-09-01T03:30:49.263999938Z",
      "severity": "INFO",
      "logName": "projects/stack-doctor/logs/bunyan_log",
      "receiveTimestamp": "2020-09-01T03:30:50.003471183Z"
    }
    
  • Bei erfolgreichen Anfragen:

    {
      "insertId": "..........qTRVT5MOK2VOsVe31bzrTD",
      "jsonPayload": {
        "name": "sli-log",
        "v": 0,
        "pid": 81846,
        "level": 30,
        "hostname": "<hostname>",
        "time": "Mon Aug 31 2020 20:30:49 GMT-0700 (Pacific Daylight Time)",
        "message": "success!"
      },
      "resource": {
        "type": "global",
        "labels": {
          "project_id": "stack-doctor"
        }
      },
      "timestamp": "2020-09-01T03:30:49.874000072Z",
      "severity": "INFO",
      "logName": "projects/stack-doctor/logs/bunyan_log",
      "receiveTimestamp": "2020-09-01T03:30:50.201547371Z"
    }
    
  • Bei abgeschlossenen Anfragen:

    {
      "insertId": "..........mTRVT5MOK2VOsVe31bzrTD",
      "jsonPayload": {
        "time": "Mon Aug 31 2020 20:30:49 GMT-0700 (Pacific Daylight Time)",
        "level": 30,
        "name": "sli-log",
        "message": "slept for 606 ms",
        "hostname": "<hostname>",
        "pid": 81846,
        "v": 0
      },
      "resource": {
        "type": "global",
        "labels": {
          "project_id": "stack-doctor"
        }
      },
      "timestamp": "2020-09-01T03:30:49.874000072Z",
      "severity": "INFO",
      "logName": "projects/stack-doctor/logs/bunyan_log",
      "receiveTimestamp": "2020-09-01T03:30:50.201547371Z"
    }
    
  • Bei Fehlern:

    {
      "insertId": "..........DTRVT5MOK2VOsVe31bzrTD",
      "jsonPayload": {
        "hostname": "<hostname>",
        "level": 50,
        "pid": 81846,
        "message": "failure!",
        "name": "sli-log",
        "time": "Mon Aug 31 2020 20:30:44 GMT-0700 (Pacific Daylight Time)",
        "v": 0
      },
      "resource": {
        "type": "global",
        "labels": {
          "project_id": "stack-doctor"
        }
      },
      "timestamp": "2020-09-01T03:30:44.414999961Z",
      "severity": "ERROR",
      "logName": "projects/stack-doctor/logs/bunyan_log",
      "receiveTimestamp": "2020-09-01T03:30:46.182157077Z"
    }
    

Basierend auf diesen Einträgen können Sie logbasierte Messwerte erstellen, um alle Anfragen zu zählen, Fehler zu zählen und die Latenz von Anfragen zu verfolgen. Anschließend können Sie mithilfe der logbasierten Messwerte Verfügbarkeits- und Latenz-SLIs erstellen.

Logbasierte Messwerte für SLIs erstellen

Um SLIs für logbasierte Messwerte zu erstellen, müssen Sie zuerst die logbasierten Messwerte erstellen.

  • Verwenden Sie für Verfügbarkeits-SLIs für Anforderungs- und Fehlerzmengen logbasierter Zählermesswerte.
  • Verwenden Sie für Latenz-SLIs logbasierte Verteilungsmesswerte.

Nachdem Sie Ihre logbasierten Messwerte erstellt haben, können Sie sie in Monitoring finden, indem Sie im Metrics Explorer nach ihnen suchen. In Monitoring haben logbasierte Messwerte das Präfix logging.googleapis.com/user.

Messwerte für Verfügbarkeits-SLIs

Sie geben einen anfragebasierten Verfügbarkeits-SLI in der Cloud Monitoring API an, indem Sie mit der Struktur TimeSeriesRatio ein Verhältnis von „guten” oder „schlechten” Anfragen zu den gesamten Anfragen festlegen. Dieses Verhältnis wird im Feld goodTotalRatio einer RequestBasedSli-Struktur verwendet.

Sie müssen logbasierte Zählermesswerte erstellen, mit denen dieses Verhältnis erstellt werden kann. Sie müssen mindestens zwei der folgenden Elemente erstellen:

  1. Ein Messwert, mit dem alle Ereignisse gezählt werden. Verwenden Sie diesen Messwert im totalServiceFilter des Verhältnisses.

    Für das Beispiel „Stack-Doctor“ können Sie einen logbasierten Messwert erstellen, um Logeinträge zu zählen, in denen der Nachrichtenstring „Anfrage gestellt“ erscheint.

  2. Verwenden Sie diesen Messwert im badServiceFilter des Verhältnisses, um "schlechte" Ereignisse zu zählen.

    Für das Beispiel "Stack-Doctor" können Sie einen logbasierten Messwert erstellen, um Logeinträge zu zählen, in denen der Nachrichtenstring "Fehlgeschlagen!" erscheint.

  3. Verwenden Sie diesen Messwert im goodServiceFilter des Verhältnisses, um "gute" Ereignisse zu zählen.

    Für das Beispiel "Stack-Doctor" können Sie einen logbasierten Messwert erstellen, um Logeinträge zu zählen, in denen der Nachrichtenstring "Erfolg!" erscheint.

Der für dieses Beispiel beschriebene SLI basiert auf einem Messwert für die Gesamtzahl der Anfragen mit dem Namen log_based_total_requests und einem Messwert für Fehler mit dem Namen log_based_errors.

Sie können logbasierte Messwerte mithilfe der Google Cloud Console, der Cloud Logging API oder der Google Cloud CLI erstellen. Gehen Sie so vor, um logbasierte Messwerte mit der Console zu erstellen:

  1. Wählen Sie in der Console Logging und anschließend Logbasierte Messwerte aus.

    Weiter zu logbasierten Messwerten

    Die Seite der logbasierten Messwerte zeigt eine Tabelle mit benutzerdefinierten Messwerten und eine Tabelle mit systemdefinierten Messwerten.

  2. Klicken Sie über der Tabelle mit den benutzerdefinierten Messwerten auf Messwert erstellen.

  3. Wählen Sie im Bereich Messwerttyp die Option Zähler aus.

  4. Geben Sie im Bereich Details einen Namen für den neuen Messwert ein. Geben Sie für das Beispiel „stack-doctor“ log_based_total_requests oder log_based_errors ein.

    Die anderen Felder in diesem Beispiel können Sie ignorieren.

  5. Erstellen Sie im Bereich Filterauswahl eine Abfrage, mit der nur die Logeinträge abgerufen werden, die Sie mit Ihrem Messwert zählen möchten.

    Für das Beispiel "Stack-Doctor" kann die log_based_total_requests-Abfrage Folgendes enthalten:

    resource.type="global"
    logName="projects/stack-doctor/logs/bunyan_log"
    jsonPayload.message="request made"
    

    Durch die logs_based_errors-Abfrage wird der Nachrichtenstring geändert:

    resource.type="global"
    logName="projects/stack-doctor/logs/bunyan_log"
    jsonPayload.message="failure!"
    
  6. Klicken Sie auf Vorschau der Logs anzeigen, um den Filter zu prüfen und ggf. anzupassen.

  7. Ignorieren Sie den Bereich Labels für dieses Beispiel.

  8. Klicken Sie auf Messwert erstellen, um den Vorgang abzuschließen.

Weitere Informationen zum Erstellen logbasierter Zählermesswerte finden Sie unter Zählermesswert erstellen.

Messwerte für Latenz-SLIs

Sie geben einen anfragebasierten Latenz-SLI in der Cloud Monitoring API mithilfe einer DistributionCut-Struktur an, die im Feld distributionCut einer RequestBasedSli-Struktur verwendet wird. Sie müssen einen logbasierten Verteilungsmesswert erstellen, um einen Latenz-SLI zu erstellen. In diesem Beispiel wird ein logbasierter Verteilungsmesswert mit dem Namen log_based_latency. erstellt.

Sie können logbasierte Messwerte mithilfe der Google Cloud Console, der Cloud Logging API oder der Google Cloud CLI erstellen. Gehen Sie so vor, um logbasierte Verteilungs-Messwerte mit der Console zu erstellen:

  1. Wählen Sie in der Console Logging und anschließend Logbasierte Messwerte aus.

    Weiter zu logbasierten Messwerten

    Die Seite der logbasierten Messwerte zeigt eine Tabelle mit benutzerdefinierten Messwerten und eine Tabelle mit systemdefinierten Messwerten.

  2. Klicken Sie über der Tabelle mit den benutzerdefinierten Messwerten auf Messwert erstellen.

  3. Wählen Sie im Bereich Messwerttyp die Option Verteilung aus.

  4. Geben Sie im Bereich Details einen Namen für den neuen Messwert ein. Geben Sie für das Beispiel „stack-doctor“ oder log_based_latency ein.

    Die anderen Felder in diesem Beispiel können Sie ignorieren.

  5. Erstellen Sie im Bereich Filterauswahl eine Abfrage, mit der nur die Logeinträge abgerufen werden, die Sie mit Ihrem Messwert zählen möchten.

    Für das Beispiel "Stack-Doctor" kann die log_based_latency-Abfrage Folgendes enthalten:

    resource.type="global"
    logName="projects/stack-doctor/logs/bunyan_log"
    jsonPayload.message="slept for"
    

    Geben Sie folgende Felder für die Filterabfrage an:

    • Feldname: json.message
    • Regulärer Ausdruck: \s(\d*)\s

      Der Nachrichtenstring für abgeschlossene Anfragen hat das Format „slept for n ms“. Der reguläre Ausdruck extrahiert den Latenzwert n aus dem String.

  6. Ignorieren Sie den Bereich Labels für dieses Beispiel.

  7. Klicken Sie auf Messwert erstellen, um den Vorgang abzuschließen.

Weitere Informationen zum Erstellen von logbasierten Verteilungsmesswerten finden Sie unter Verteilungsmesswerte erstellen.

Verfügbarkeits-SLIs

In Cloud Monitoring geben Sie anfragebasierte Verfügbarkeits-SLIs mit einer TimeSeriesRatio-Struktur an. Das folgende Beispiel zeigt ein SLO, das die Messwerte log_based_total_requests und log_based_errors im Verhältnis verwendet. Dieses SLO erwartet, dass das Verhältnis von „guten“ Anfragen zu den Gesamtanfragen mindestens 98 % in einem rollierenden Zeitraum von 24 Stunden beträgt:

{
 "serviceLevelIndicator": {
   "requestBased": {
     "goodTotalRatio": {
       "totalServiceFilter":
         "metric.type=\"logging.googleapis.com/user/log_based_total_requests\"
          resource.type=\"global\"",
       "badServiceFilter":
         "metric.type=\"logging.googleapis.com/user/log_based_errors\"
          resource.type=\"global\""
     }
   }
 },
 "goal": 0.98,
 "rollingPeriod": "86400s",
 "displayName": "Log-Based Availability"
}

Latenz-SLIs

In Cloud Monitoring geben Sie anfragebasierte Latenz-SLIs mit einer DistributionCut-Struktur an. Folgendes Beispiel zeigt ein SLO, das den Messwert log_based_latency verwendet und erwartet, dass 98 % der Anfragen innerhalb eines rollierenden 24-Stunden-Zeitraums unter 500 ms liegen:

{
  "serviceLevelIndicator": {
    "requestBased": {
      "distributionCut": {
        "distributionFilter":
          "metric.type=\"logging.googleapis.com/user/log_based_latency\"
          resource.type=\"global\"",
        "range": {
          "min": 0,
          "max": 500
        }
      }
    }
  },
  "goal": 0.98,
  "rollingPeriod": "86400s",
  "displayName": "98% requests under 500 ms"
}

Weitere Informationen