Stackdriver Logging und Stackdriver Trace für Cloud Functions verwenden

1. Einführung

In diesem Codelab lernen Sie, wie Sie die Logging- und Monitoring-Tools nutzen, die allen Entwicklern zur Verfügung stehen, die mit Cloud Functions arbeiten. Die Tools sind in jeder Cloud Functions-Funktion enthalten, die Sie in allen unterstützten Sprachen bereitstellen, und ermöglichen Ihnen, beim Schreiben und Betreiben von serverlosem Code produktiver zu arbeiten.

5815064fec87444b.png

Sie verwenden eine durch HTTP ausgelöste Cloud Functions-Funktion, aber alles, was Sie lernen, gilt auch für andere Sprachen und Cloud Functions-Funktionen, die durch andere Ereignisse ausgelöst werden.

2. Einrichtung und Anforderungen

Umgebung für das selbstbestimmte Lernen einrichten

  1. Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder G Suite-Konto haben, müssen Sie ein Konto erstellen.

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Notieren Sie sich die Projekt-ID, also den projektübergreifend nur einmal vorkommenden Namen eines Google Cloud-Projekts. Der oben angegebene Name ist bereits vergeben und kann leider nicht mehr verwendet werden. Sie wird in diesem Codelab später als PROJECT_ID bezeichnet.

  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen nutzen zu können.

Dieses Codelab sollte möglichst wenig kosten. Folgen Sie der Anleitung im Abschnitt „Bereinigen“, . Hier erfahren Sie, wie Sie Ressourcen herunterfahren, damit Ihnen über dieses Tutorial hinaus keine Kosten entstehen. Neue Google Cloud-Nutzer können an einem kostenlosen Testzeitraum mit 300$Guthaben teilnehmen.

Cloud Shell

Sie können Cloud Functions und die zugehörigen Logging- und Monitoring-Funktionen per Fernzugriff von Ihrem Laptop aus nutzen. Dazu verwenden Sie Cloud Shell, eine Befehlszeilenumgebung, die in Google Cloud ausgeführt wird.

Diese Debian-basierte virtuelle Maschine verfügt über alle erforderlichen Entwicklungstools. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und wird in Google Cloud ausgeführt. Dadurch werden die Netzwerkleistung und die Authentifizierung erheblich verbessert. Für dieses Codelab benötigen Sie also nur einen Browser – ja, er funktioniert auf Chromebooks.

  1. Klicken Sie einfach auf Cloud Shell aktivieren fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q, um Cloud Shell über die Cloud Console zu aktivieren. Die Bereitstellung und Verbindung mit der Umgebung dauert einen Moment.

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 2017-06-14 at 10.13.43 PM.png

Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und dass das Projekt bereits auf Ihre PROJECT_ID eingestellt ist.

gcloud auth list

Befehlsausgabe

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Befehlsausgabe

[core]
project = <PROJECT_ID>

Sollte das Projekt aus irgendeinem Grund nicht eingerichtet sein, geben Sie einfach den folgenden Befehl ein:

gcloud config set project <PROJECT_ID>

Du suchst dein Gerät (PROJECT_ID)? Sehen Sie nach, welche ID Sie bei den Einrichtungsschritten verwendet haben, oder rufen Sie sie im Dashboard der Cloud Console auf:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell legt außerdem standardmäßig einige Umgebungsvariablen fest, die bei der Ausführung zukünftiger Befehle nützlich sein können.

echo $GOOGLE_CLOUD_PROJECT

Befehlsausgabe

<PROJECT_ID>
  1. Legen Sie schließlich die Standardzone und die Projektkonfiguration fest.
gcloud config set compute/zone us-central1-f

Sie können verschiedene Zonen auswählen. Weitere Informationen finden Sie unter Regionen und Zonen.

3. Einfache Cloud Functions-Funktion bereitstellen

Damit etwas überwacht werden kann, erstellen Sie einen "Hello, World"- Cloud Functions-Funktion Klicken Sie im linken Menü der Google Cloud Console auf Cloud Functions und dann auf Funktion erstellen.

23c13aa20af602aa7.png

Geben Sie „hello-monitor“ ein als Namen Ihrer neuen Cloud Functions-Funktion ein.

fa6816c96d6d5b94.png

Behalten Sie alle Standardeinstellungen für den Quellcode bei. Sie können jedoch bei Bedarf eine andere Sprache/Laufzeit auswählen.

7aadf164450484e.png

Klicken Sie abschließend auf Erstellen.

dc74cd21000d6c91.png

Ihre Cloud Functions-Funktion sollte mit einem grünen Häkchen daneben angezeigt werden, was bedeutet, dass sie aufgerufen werden kann.

5363a34eb001d5ed.png

4. Cloud Functions-Funktion testen und Traffic mit einem Load Generator senden

Nachdem die Cloud Functions-Funktion nun erfolgreich bereitgestellt wurde, testen Sie sie über die Befehlszeile.

Geben Sie zuerst in Cloud Shell den folgenden Befehl aus:

$ gcloud functions describe hello-monitor

Dadurch sollte eine Beschreibung der Cloud Functions-Funktion zurückgegeben werden, einschließlich einer URL für httpsTrigger. Dies ist der HTTP(S)-Endpunkt zum Aufrufen der Cloud Functions-Funktion. Es sollte so aussehen: https://<region>-<project-id>.cloudfunctions.net/hello-monitor.

Das Auslösen der Cloud Functions-Funktion sollte jetzt so einfach sein wie der Befehl curl für diese URL.

$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor
Hello World!

Verwenden Sie jetzt Vegeta, ein einfaches Tool für HTTP-Lasttests. Geben Sie zur Installation von Cloud Shell einfach den folgenden Befehl ein :

$ go get -u github.com/tsenart/vegeta

Verwenden Sie den folgenden Befehl, um Traffic an Ihre Cloud Functions-Funktion zu senden (fünf Anfragen pro Sekunde für einige Minuten):

$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \
   | vegeta attack -rate=5 -duration=120s \
   > results.bin

5. Logs durchgehen

Klicken Sie in der Detailansicht der Cloud Functions-Funktion auf Logs ansehen.

b24157fd3376e6a8.png

Dadurch sollten Sie zum Stackdriver Logging-Abschnitt Ihres Projekts gelangen, in dem nur Ihre Cloud Functions-Logs angezeigt werden.

5a36fa75d2fb0165.png

Alle Anfragen an Ihre Cloud Functions-Funktion sollten den Statuscode 200 zurückgeben.

Beim Ansehen der Logs haben Sie folgende Möglichkeiten:

  • Filtern Sie nach Logebene. In diesem Fall haben alle Logs die Ebene debug.
  • Wählen Sie einen bestimmten Zeitraum aus (relativ oder absolut).
  • Aktiviere das Protokollstreaming (mit Wiedergabe 751a4600016f34a7.png am oberen Bildschirmrand).
  • Kopieren Sie einen Link zum Protokolleintrag (zur Freigabe für Teammitglieder).
  • Zeigt einen Logeintrag im Ressourcenkontext.
  • Pinnen Sie einen Logeintrag an (als visueller Hinweis).
  • Sie können Logs nach BigQuery, Cloud Storage oder Pub/Sub exportieren oder sie einfach als JSON- oder CSV-Dateien herunterladen.

6. Funktion aktualisieren

Rufen Sie in der Cloud Console die Ansicht Funktionsdetails auf und beobachten Sie den Anstieg, den Sie mit Ihrem Lasttester in Bezug auf die Anzahl der Aufrufe pro Sekunde und deren Ausführungszeit erstellt haben.

aaee3159bbe395d3.png 7ed347101da5eca0.png

Ein weiteres Tool zur Beobachtung von Latenz und RPC-Aufrufen ist Stackdriver Trace. Bevor Sie es verwenden können, müssen Sie jedoch einige Änderungen an Cloud Functions vornehmen. Gehen Sie so vor:

  1. Fügen Sie das lebensrettende node-emoji-Paket als Abhängigkeit hinzu.
  2. Aktualisieren Sie den Funktionscode, um das Knoten-Emoji-Modul zu verwenden und eine gewisse Latenz einzuführen.
  3. Fügen Sie eine Umgebungsvariable hinzu, um Stackdriver Trace für Cloud Functions zu aktivieren.

Klicken Sie unter Funktionsdetails auf Bearbeiten, um die Funktion zu ändern.

39b0f8f98b18a6c0.png

Fügen Sie der Datei package.json eine Abhängigkeit für das Paket node-emoji hinzu.

{
  "name": "sample-http",
  "version": "0.0.1",
  "dependencies": {
    "node-emoji": "^1.8.1"
  }
}

Bearbeiten Sie die eigentliche Funktion, indem Sie den Inhalt von index.js wie folgt ändern:

const emoji = require('node-emoji');

exports.helloWorld = (req, res) => {
  let message = req.query.message || req.body.message || 'Hello World!';

  // add some latency, functions are too quick!
  setTimeout(function() {
     message += emoji.random().emoji;  
     res.status(200).send(message);
  }, (3 * 100));  // 300ms
  
};

Dadurch wird der von der Cloud Functions-Funktion zurückgegebenen Nachricht ein zufälliges Emoji hinzugefügt, nachdem sie für 300 Millisekunden pausiert wurde.

Fügen Sie abschließend eine Cloud Functions-Umgebungsvariable namens GOOGLE_CLOUD_TRACE_ENABLED hinzu und setzen Sie sie so auf true:

9205bd277b76aa21.png

Klicken Sie auf Speichern.

Kehren Sie zu Cloud Shell zurück und rufen Sie den Befehl auf, um die neu bereitgestellte Cloud Functions-Funktion zu laden:

$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \
   | vegeta attack -rate=5 -duration=120s \
   > results.bin

Jetzt können Sie sich die Liste der Traces ansehen, die ohne weitere Einrichtungsanforderungen und ohne spezifische Tracing-Bibliothek in Ihrem Code erstellt wurden.

7. Aktualisierte Cloud Functions-Funktion verfolgen

Rufen Sie im Menü auf der linken Seite unter Stackdriver Trace die Trace-Liste auf.

576373f38cad6f8.png

Sie sollten einen Screenshot ähnlich dem folgenden sehen:

44a36b758b49f88f.png

Hier sollte offensichtlich sein, dass die in Ihrer Cloud Functions-Funktion eingeführte Latenz tatsächlich bei 300 Millisekunden gemessen wird.

Jeder Punkt im Diagramm ist eine Anfrage, für die Sie detaillierte Informationen wie den Zeitstempel, die HTTP-Methode und den HTTP-Status, die zugehörigen Labels, einen Link zum entsprechenden Logeintrag und alle nachfolgenden RPC-Aufrufe der Cloud Functions-Funktion aufrufen können.

5815064fec87444b.png

Wenn Sie die Grafik vergrößern möchten, klicken Sie einfach auf die Grafik und ziehen Sie sie. Benutzerdefinierten Zeitbereich in der Trace-Grafik auswählen

Klicken Sie oben auf der Seite auf Zoom rückgängig machen, um herauszuzoomen.

Da Sie eine einzelne Cloud Functions-Funktion bereitgestellt haben, zeigt das Diagramm nur GET-Anfragen für den hello-monitor-URI. Sie können Traces jedoch nach HTTP-Methode (GET, POST, DELETE) nach HTTP-Status (2XX, 3XX) oder mithilfe des Anfragefilters filtern.

Gehen Sie im Menü auf der linken Seite zu Übersicht:

e920cfca2a50899e.png

Auf dieser Übersichtsseite finden Sie aktuelle Traces und andere Statistiken.

ef5a45647967d275.png

Sie haben auch die Möglichkeit, benutzerdefinierte Berichte auf der Grundlage einer Kombination aus URI-Anfragefilter, HTTP-Methode, HTTP-Status und Zeitraum zu erstellen. Sie können die generierten Werte sogar mit einer Zeitreferenz vergleichen.

5bd34e9d13b47fb6.png

Wenn Sie die richtigen Zeiträume mit genügend Datenpunkten eingerichtet haben, können Sie einen Bericht erstellen, in dem die wichtige Latenzverschiebung zwischen der ersten und der neuen Cloud Functions-Funktion aufgezeigt wird.

2cc0e9a3212b91bb.png

2e7b1ebf2f0a2b4f.png

Mit einem solchen benutzerdefinierten Bericht können Sie feststellen, wann ein Leistungsproblem aufgetreten ist, und einen Service Level Indicator (SLI) verfolgen, wie z. B. die Anfragelatenz von Endnutzern.

8. Zeit, die Ressourcen zu bereinigen

Damit sind wir am Ende des Codelab angelangt.

Cloud Functions und Stackdriver-Tools sind serverlose Plattformen, für die keine Kosten anfallen, wenn sie nicht verwendet werden. Dennoch sollten Sie die Cloud Functions-Funktion löschen. Wählen Sie einfach hello-monitor in der Übersicht unter Cloud Functions aus und klicken Sie auf Löschen.

aceb633cf70a4a27.png

9. Nächste Schritte

Hier finden Sie weiterführende Informationen:

/