In diesem Dokument wird beschrieben, wie Sie eine JavaScript-Anwendung in Node.js ändern, um Trace- und Messwertdaten mit dem Open-Source-Framework OpenTelemetry zu erfassen und strukturierte JSON-Logs in das Standard-Out-Format zu schreiben. Dieses Dokument enthält auch Informationen zu einer Node.js-Beispielanwendung, die Sie installieren und ausführen können. Die Anwendung verwendet das Web-Framework Fastify und ist so konfiguriert, dass Messwerte, Traces und Logs generiert werden.
Manuelle und automatische Instrumentierung
Für diese Sprache definiert OpenTelemetry die automatische Instrumentierung als die Methode, Telemetriedaten aus Bibliotheken und Frameworks zu erfassen, ohne Codeänderungen vorzunehmen. Sie müssen jedoch Module installieren und Umgebungsvariablen festlegen.
In diesem Dokument werden keine automatischen Informationen beschrieben. Weitere Informationen zu diesem Thema finden Sie unter Automatische Instrumentierung für Knoten.
Allgemeine Informationen finden Sie unter OpenTelemetry-Instrumentierung für Knoten.
Hinweise
Enable the Cloud Logging, Cloud Monitoring, and Cloud Trace APIs.
Anwendung für die Erfassung von Traces, Messwerten und Logs instrumentieren
Führen Sie die folgenden Schritte aus, um Ihre Anwendung so zu instrumentieren, dass Trace- und Messwertdaten erfasst und strukturiertes JSON in die Standardausgabe geschrieben wird, wie in den folgenden Abschnitten dieses Dokuments beschrieben:
- OpenTelemetry konfigurieren
- Anwendung so konfigurieren, dass die OpenTelemetry-Konfiguration vorab geladen wird
- Strukturiertes Logging konfigurieren
- Strukturierte Logs schreiben
OpenTelemetry konfigurieren
Die Standardkonfiguration für das OpenTelemetry Node.js SDK exportiert Traces mithilfe des OTLP-Protokolls. Außerdem wird OpenTelemetry so konfiguriert, dass das Format W3C Trace Context zur Weitergabe von Trace-Kontext verwendet wird. Diese Konfiguration gewährleistet, dass Spans die richtige hierarchische Beziehung in einem Trace haben.
Das folgende Codebeispiel zeigt ein JavaScript-Modul zum Einrichten von OpenTelemetry:
Im vorherigen Codebeispiel wird OpenTelemetry so konfiguriert, dass Messwerte mithilfe des OTLP-Protokolls exportiert werden. Außerdem wird das Paket @opentelemetry/auto-instrumentations-node
verwendet, um alle verfügbaren Node.js-Instrumentierungen zu konfigurieren.
Damit alle ausstehenden Telemetriedaten geleert und Verbindungen vor dem Herunterfahren der Anwendung ordnungsgemäß geschlossen werden, ruft der SIGTERM
-Handler shutdown
auf.
Weitere Informationen und Konfigurationsoptionen finden Sie unter Automatische OpenTelemetry-Node.js-Instrumentierung.
Anwendung so konfigurieren, dass die OpenTelemetry-Konfiguration vorab geladen wird
Wenn Sie die Anwendung so konfigurieren möchten, dass strukturierte Logs geschrieben und Messwerte und Trace-Daten mit OpenTelemetry erfasst werden, aktualisieren Sie den Aufruf Ihrer Anwendung so, dass das Instrumentierungsmodul mit Node.js --require
-Flag vorab geladen wird. Mit dem Flag --require
wird sichergestellt, dass OpenTelemetry initialisiert wird, bevor Ihre Anwendung gestartet wird. Weitere Informationen finden Sie unter Erste Schritte mit OpenTelemetry Node.js.
Das folgende Codebeispiel zeigt ein Dockerfile, das das Flag --require
übergibt:
Strukturiertes Logging konfigurieren
Wenn Sie die Trace-Informationen in die JSON-formatierten Logs aufnehmen möchten, die in die Standardausgabe geschrieben werden, konfigurieren Sie Ihre Anwendung so, dass strukturierte Logs im JSON-Format ausgegeben werden.
Fastify verwendet das Pino-Log-Framework und stellt in jedem Anfrage-Handler einen Logger bereit. Das folgende Codebeispiel zeigt ein Pino-LoggerOptions
-Objekt, das die Anwendung für die Ausgabe strukturierter JSON-Logs konfiguriert:
Die vorherige Konfiguration extrahiert Informationen zum aktiven Span aus der Lognachricht und fügt diese Informationen dann als Attribute dem strukturierten JSON-Log hinzu. Mit diesen Attributen können Sie dann ein Log mit einem Trace korrelieren:
logging.googleapis.com/trace
: Der Ressourcenname des Trace, das mit dem Logeintrag verknüpft ist.logging.googleapis.com/spanId
: Die Span-ID mit dem Trace, das dem Logeintrag zugeordnet ist.logging.googleapis.com/trace_sampled
: Der Wert dieses Felds musstrue
oderfalse
sein.
Weitere Informationen zu diesen Feldern finden Sie in der LogEntry
-Struktur.
Wenn Sie die Pino-Konfiguration mit Fastify verwenden möchten, übergeben Sie beim Erstellen der Fastify-Anwendung das Logger-Konfigurationsobjekt:
Strukturierte Logs schreiben
Verwenden Sie den von Fastify bereitgestellten Pino-Logger, um strukturierte Logs zu schreiben, die mit einem Trace verknüpft sind. Die folgende Anweisung zeigt beispielsweise, wie die Methode Logger.info()
aufgerufen wird:
request.log.info({subRequests}, 'handle /multi request');
OpenTelemetry füllt die Pino-Logeinträge automatisch mit dem Span-Kontext des aktuellen aktiven Spans im OpenTelemetry-Kontext. Dieser Span-Kontext wird dann in die JSON-Logs eingefügt, wie unter Strukturiertes Logging konfigurieren beschrieben.
Beispielanwendung ausführen, die für die Erfassung von Telemetriedaten konfiguriert ist
Die Beispielanwendung verwendet anbieterneutrale Formate, einschließlich JSON für Logs und OTLP für Messwerte und Traces sowie das Fastify-Framework. In diesem Beispiel wird die OpenTelemetry-Collector
verwendet, die mit Google-Exportern konfiguriert wurde, um die Telemetrie an Google Cloud weiterzuleiten. Die Anwendung hat zwei Endpunkte:
Der
/multi
-Endpunkt wird von derhandleMulti
-Funktion verarbeitet. Der Lastgenerator in der Anwendung gibt Anfragen an den Endpunkt/multi
aus. Wenn dieser Endpunkt eine Anfrage empfängt, sendet er zwischen drei und sieben Anfragen an den Endpunkt/single
auf dem lokalen Server.Der
/single
-Endpunkt wird von derhandleSingle
-Funktion verarbeitet. Wenn dieser Endpunkt eine Anfrage empfängt, wechselt er für eine kurze Verzögerung in den Ruhemodus und antwortet dann mit einem String.
Anwendung herunterladen und bereitstellen
So führen Sie das Beispiel aus:
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Klonen Sie das Repository:
git clone https://github.com/GoogleCloudPlatform/opentelemetry-operations-js
Gehen Sie zum Beispielverzeichnis:
cd opentelemetry-operations-js/samples/instrumentation-quickstart
Erstellen Sie das Beispiel und führen Sie es aus:
docker compose up --abort-on-container-exit
Wenn Sie Cloud Shell nicht ausführen, führen Sie die Anwendung mit der Umgebungsvariable
GOOGLE_APPLICATION_CREDENTIALS
aus, die auf eine Datei mit Anmeldedaten verweist. Standardanmeldedaten für Anwendungen stellt eine Datei mit Anmeldedaten unter$HOME/.config/gcloud/application_default_credentials.json
bereit.# Set environment variables export GOOGLE_CLOUD_PROJECT="PROJECT_ID" export GOOGLE_APPLICATION_CREDENTIALS="$HOME/.config/gcloud/application_default_credentials.json" export USERID="$(id -u)" # Run docker compose -f docker-compose.yaml -f docker-compose.creds.yaml up --abort-on-container-exit
Messwerte ansehen
Die OpenTelemetry-Instrumentierung in der Beispielanwendung generiert Prometheus-Messwerte, die Sie mit dem Metrics Explorer aufrufen können:
Prometheus/http_server_duration_milliseconds/histogram
zeichnet die Dauer von Serveranfragen auf und speichert die Ergebnisse in einem Histogramm.Prometheus/http_client_duration_milliseconds/histogram
zeichnet die Dauer von Clientanfragen auf und speichert die Ergebnisse in einem Histogramm.
-
Rufen Sie in der Google Cloud Console die Seite leaderboard Metrics Explorer auf.
Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift Monitoring ist.
- Maximieren Sie im Element Messwert das Menü Messwert auswählen, geben Sie
http_server
in die Filterleiste ein und wählen Sie dann über die Untermenüs einen bestimmten Ressourcentyp und Messwert aus:- Wählen Sie im Menü Aktive Ressourcen die Option Prometheus-Ziel aus.
- Wählen Sie im Menü Aktive Messwertkategorien die Option Http aus.
- Wählen Sie im Menü Aktive Messwerte einen Messwert aus.
- Klicken Sie auf Anwenden.
- Konfigurieren Sie, wie die Daten angezeigt werden.
Wenn die Messungen für einen Messwert kumulativ sind, normalisiert Metrics Explorer die gemessenen Daten automatisch nach dem Ausrichtungszeitraum. Dadurch wird im Diagramm eine Rate angezeigt. Weitere Informationen finden Sie unter Arten, Typen und Umwandlungen.
Wenn ganzzahlige oder doppelte Werte gemessen werden, z. B. mit den beiden
counter
-Messwerten, summiert der Metrics Explorer automatisch alle Zeitachsen. Wenn Sie die Daten für die HTTP-Routen/multi
und/single
aufrufen möchten, legen Sie im ersten Menü des Eintrags Aggregation die Option Keine fest.Weitere Informationen zum Konfigurieren eines Diagramms finden Sie unter Messwerte bei Verwendung von Metrics Explorer auswählen.
Traces ansehen
So rufen Sie Ihre Trace-Daten auf:
-
Rufen Sie in der Google Cloud Console die Seite Trace Explorer auf:
Sie können diese Seite auch über die Suchleiste finden.
- Wählen Sie im Streudiagramm einen Trace mit dem URI
/multi
aus. Wählen Sie im Gantt-Diagramm im Bereich Trace-Details den Span mit der Bezeichnung
/multi
aus.Ein Steuerfeld mit Informationen zur HTTP-Anfrage wird geöffnet. Zu diesen Details gehören die Methode, der Statuscode, die Anzahl der Byte und der User-Agent des Aufrufers.
Wählen Sie den Tab Logs und Ereignisse aus, um die mit diesem Trace verknüpften Logs aufzurufen.
Auf dem Tab werden einzelne Logs angezeigt. Maximieren Sie den Logeintrag, um die Details anzusehen. Sie können auch auf Logs ansehen klicken und das Log mit dem Log-Explorer aufrufen.
Weitere Informationen zur Verwendung von Cloud Trace-Explorer finden Sie unter Traces suchen und untersuchen.
Logs ansehen
Im Log-Explorer können Sie Ihre Logs prüfen und sich auch die zugehörigen Traces ansehen, sofern vorhanden.
-
Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf.
Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift Monitoring ist.
Suchen Sie ein Log mit der Beschreibung
handle /multi request
.Erweitern Sie den Logeintrag, um die Details des Logs aufzurufen.
Klicken Sie auf Traces für einen Logeintrag mit der Nachricht "handle /multi request" und wählen Sie dann Trace-Details anzeigen aus.
Der Bereich Trace-Details wird geöffnet und zeigt den ausgewählten Trace an.
Weitere Informationen zur Verwendung des Log-Explorers finden Sie unter Logs mit dem Log-Explorer ansehen.
Nächste Schritte
- OpenTelemetry
- OTLP-Übersicht
- Strukturiertes Logging
- Fehlerbehebung für Managed Service for Prometheus
- Fehlerbehebung für Cloud Trace