slog-Paket von Go in die Standardausgabe geschrieben werden. Wenn Sie mit dieser Instrumentierung experimentieren möchten, können Sie die Go-Beispielanwendung herunterladen und ausführen. Sie generiert Log-, Messwert- und Trace-Daten und exportiert sie in IhrGoogle Cloud -Projekt.
Informationen zum Instrumentierungsansatz
Wenn Sie einen OpenTelemetry-Collector verwenden, instrumentieren Sie Ihre Anwendung mit dem SDK und dem In-Process-OTLP-Exporter des SDK. Diese Instrumentierung ist herstellerunabhängig. Außerdem stellen Sie einen OpenTelemetry-Collector bereit, der Telemetriedaten vom In-Process-Exporter empfängt und diese dann in Ihr Google Cloud -Projekt exportiert. Weitere Informationen zu Collectors finden Sie unter Von Google entwickelter OpenTelemetry Collector.
Wir empfehlen, einen OpenTelemetry-Collector zum Exportieren Ihrer Telemetriedaten zu verwenden, wenn Ihre Umgebung die Verwendung eines Collectors unterstützt. In einigen Umgebungen müssen Sie einen prozessinternen Exporter verwenden, der Daten direkt an IhrGoogle Cloud -Projekt sendet. Informationen zur In-Process-Instrumentierung finden Sie unter Vom Trace-Exporter zum OTLP-Endpunkt migrieren.
Weitere Informationen zur Instrumentierung finden Sie in den folgenden Dokumenten:
Kontext
Der Kontext von OpenTelemetry ist ein Mechanismus, mit dem Werte im Ausführungsumfang über APIs innerhalb eines Prozesses übertragen werden. Eine wichtige Verwendung des Kontexts besteht darin, den aktuell aktiven Span zu übertragen, damit er geändert oder als übergeordnetes Element neuer Spans referenziert werden kann, wenn diese erstellt werden. Zusammenfassung:
Kontext bezieht sich auf den Mechanismus, mit dem Werte im Ausführungsbereich, einschließlich des aktuellen aktiven Spans, über APIs innerhalb eines Prozesses weitergegeben werden.
Der Span-Kontext ist ein unveränderliches Objekt für jeden Span, das die Trace-ID, die Span-ID sowie Flags und den Status für den Trace enthält.
Propagation ist der Mechanismus, mit dem Kontext zwischen Diensten und Prozessen verschoben wird.
Die context.Context der Go-Standardbibliothek überträgt auch Werte mit eingeschränktem Bereich über API-Grenzen hinweg. In der Regel empfangen Handler-Funktionen auf einem Server einen eingehenden Context und leiten ihn über die Aufrufkette an alle Clients weiter, die ausgehende Anfragen stellen.
Die Go-Standardbibliothek context.Context wird als Implementierung des OpenTelemetry-Kontexts in Go verwendet.
Hinweis
-
Installieren Sie die Google Cloud CLI.
-
Konfigurieren Sie die gcloud CLI für die Verwendung Ihrer föderierten Identität.
Weitere Informationen finden Sie unter Mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Google Cloud -Projekt erstellen oder auswählen.
Erforderliche Rollen zum Auswählen oder Erstellen eines Projekts
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Project Creator“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Informationen zum Zuweisen von Rollen
-
Erstellen Sie ein Projekt in Google Cloud :
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud -Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Projekt Google Cloud aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud -Projekt aktiviert ist.
Aktivieren Sie die Cloud Logging, Cloud Monitoring, Cloud Trace und Telemetry APIs, falls sie noch nicht aktiviert sind:
Erforderliche Rollen zum Aktivieren von APIs
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Inhaberrolle (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollengcloud services enable logging.googleapis.com
monitoring.googleapis.com cloudtrace.googleapis.com telemetry.googleapis.com -
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie benötigen, damit die Beispielanwendung Log-, Messwert- und Trace-Daten schreiben kann:
- Log-Autor (
roles/logging.logWriter) für Ihr Projekt - Monitoring-Messwert-Autor (
roles/monitoring.metricWriter) für Ihr Projekt - Cloud Telemetry Traces Writer (
roles/telemetry.tracesWriter) für Ihr Projekt - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) für Ihr Kontingentprojekt
Diese Berechtigungen reichen aus, wenn Sie das Beispiel in Cloud Shell, auf Google Cloud -Ressourcen oder in einer lokalen Entwicklungsumgebung ausführen. Informationen zum Konfigurieren eines Kontingentprojekts finden Sie unter Kontingentprojekt festlegen.
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Aufrufen Ihrer Log-, Messwert- und Trace-Daten benötigen:
- Loganzeige (
roles/logging.viewer) - Monitoring-Betrachter (
roles/monitoring.viewer) - Cloud Trace User (
roles/cloudtrace.user)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
- Log-Autor (
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 strukturierte JSON-Logs in die Standardausgabe geschrieben werden, wie in den folgenden Abschnitten dieses Dokuments beschrieben:
- Hauptfunktion konfigurieren
- OpenTelemetry konfigurieren
- Strukturiertes Logging konfigurieren
- Instrumentierung zum HTTP-Server hinzufügen
- Trace-Spans mit Logs und Messwerten verknüpfen
- Instrumentierung zum HTTP-Client hinzufügen
- Strukturierte Logs schreiben
main-Funktion konfigurieren
Wenn Sie die Anwendung so konfigurieren möchten, dass strukturierte Logs geschrieben und Messwerte und Trace-Daten mit OpenTelemetry erfasst werden, aktualisieren Sie die Funktion main, um das Go-Paket für strukturiertes Logging (slog) und OpenTelemetry zu konfigurieren.
Das folgende Codebeispiel zeigt eine main-Funktion, die zwei Hilfsfunktionen aufruft: setupLogging() und setupOpenTelemetry(). Diese Hilfsfunktionen konfigurieren das Logging-Paket und OpenTelemetry.
Wenn Sie das vollständige Beispiel sehen möchten, wählen Sie in der Symbolleiste des Beispiels das GitHub-Logo aus.
Nachdem Sie das Logging-Paket konfiguriert haben, müssen Sie den Go-Context an den Logger übergeben, um Ihre Logs mit Ihren Trace-Daten zu verknüpfen. Weitere Informationen finden Sie im Abschnitt Strukturierte Logs schreiben in diesem Dokument.
OpenTelemetry konfigurieren
Wenn Sie Traces und Messwerte mit dem OTLP-Protokoll erfassen und exportieren möchten, konfigurieren Sie die globalen Instanzen TracerProvider und MeterProvider.
Das folgende Codebeispiel zeigt die Funktion setupOpenTelemetry, die von der Funktion main aufgerufen wird:
Im vorherigen Codebeispiel wird der globale TextMapPropagator 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.
Damit alle ausstehenden Telemetriedaten geleert und Verbindungen ordnungsgemäß geschlossen werden, gibt die Funktion setupOpenTelemetry eine Funktion namens shutdown zurück, die diese Aktionen ausführt.
Strukturiertes Logging konfigurieren
Wenn Sie die Trace-Informationen in die JSON-formatierten Logs aufnehmen möchten, die in die Standardausgabe geschrieben werden, konfigurieren Sie das Go-Paket für strukturiertes Logging, slog.
Das folgende Codebeispiel zeigt die Funktion setupLogging, die von der Funktion main aufgerufen wird:
Der vorherige Code ruft die Funktion handlerWithSpanContext auf, die Informationen aus der Instanz Context extrahiert und diese Informationen als Attribute einem Log hinzufügt. 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 innerhalb des Trace, das dem Logeintrag zugeordnet ist.logging.googleapis.com/trace_sampled: Der Wert dieses Felds musstrueoderfalsesein.
Weitere Informationen zu diesen Feldern finden Sie in der LogEntry-Struktur.
HTTP-Server instrumentieren
Verwenden Sie OpenTelemetry, um den vom HTTP-Server verarbeiteten Anfragen Trace- und Messwertinstrumente hinzuzufügen. Im folgenden Beispiel wird der Handler otelhttp verwendet, um den Kontext weiterzugeben und Trace- und Messwertdaten zu erfassen:
Im vorherigen Code verwendet der otelhttp-Handler die globalen Instanzen TracerProvider, MeterProvider und TextMapPropagator. Die Funktion setupOpenTelemetry konfiguriert diese Instanzen.
Trace-Spans mit Logs und Messwerten verknüpfen
Wenn Sie Server- und Client-Spans verknüpfen und Messwerte und Logs zuordnen möchten, übergeben Sie die Go-Context-Instanz an die HTTP-Anfrage und an den Logger.
Das folgende Beispiel zeigt einen Routen-Handler, der die Go-Context-Instanz extrahiert und dann an den Logger und die callSingle-Funktion übergibt, die eine ausgehende HTTP-Anfrage stellt:
Im vorherigen Code ruft der Funktionsaufruf r.Context() den Go-Context aus der HTTP-Anfrage ab.
Instrumentierung zum HTTP-Client hinzufügen
Rufen Sie die Funktion otelhttp.Get auf, um den Trace-Kontext in ausgehende HTTP-Anfragen einzufügen und Trace- und Messwertinstrumentierung hinzuzufügen.
Im folgenden Beispiel führt die Funktion callSingle diese Aktion aus:
Im vorherigen Code verwendet der otelhttp-Handler die globalen Instanzen TracerProvider, MeterProvider und TextMapPropagator. Die Funktion setupOpenTelemetry konfiguriert diese Instanzen.
Strukturierte Logs schreiben
Verwenden Sie das strukturierte Logging-Paket von Go, slog, und übergeben Sie die Go-Context-Instanz an den Logger, um strukturierte Logs zu schreiben, die mit einem Trace verknüpft sind.
Die Go-Context-Instanz ist erforderlich, wenn Sie ein Log mit einem Span verknüpfen möchten.
Die folgende Anweisung zeigt beispielsweise, wie die Methode InfoContext für slog aufgerufen wird, und veranschaulicht, wie das Feld subRequests zur JSON-Instanz hinzugefügt wird:
slog.InfoContext(r.Context(), "handle /multi request", slog.Int("subRequests", subRequests))
Beispielanwendung ausführen, die für die Erfassung von Telemetriedaten konfiguriert ist
Die Instrumentierung in der Beispiel-App verwendet anbieterneutrale Formate wie JSON für Logdaten und OTLP für Messwert- und Trace-Daten. Der OpenTelemetry-Collector sendet Log- und Messwertdaten mithilfe von Google-Exportern an Ihr Projekt. Die Trace-Daten werden mithilfe der Telemetry API, die OTLP verwendet, an Ihr Projekt gesendet.
Der Lastgenerator in der Anwendung gibt Anfragen an die Routen der Anwendung aus.
Anwendung herunterladen und bereitstellen
So führen Sie das Beispiel aus:
-
Aktivieren Sie Cloud Shell in der Google Cloud Console.
Unten in der Google Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.
Klonen Sie das Repository:
git clone https://github.com/GoogleCloudPlatform/golang-samplesWechseln Sie in das OpenTelemetry-Verzeichnis:
cd golang-samples/opentelemetry/instrumentationErstellen Sie das Beispiel und führen Sie es aus:
docker compose up --abort-on-container-exitWenn Sie Cloud Shell nicht ausführen, führen Sie die Anwendung mit der Umgebungsvariable
GOOGLE_APPLICATION_CREDENTIALSaus, die auf eine Datei mit Anmeldedaten verweist. Standardanmeldedaten für Anwendungen stellt eine Datei mit Anmeldedaten unter$HOME/.config/gcloud/application_default_credentials.jsonbereit.# 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/histogramzeichnet die Dauer von Serveranfragen auf und speichert die Ergebnisse in einem Histogramm.Prometheus/http_client_duration_milliseconds/histogramzeichnet die Dauer von Clientanfragen auf und speichert die Ergebnisse in einem Histogramm.Prometheus/http_server_response_size_bytes_total/counterzeichnet die Länge der Antwortgröße für die HTTP-Routen/multiund/singleauf. Die Messungen für diesen Messwert sind kumulativ. Das bedeutet, dass jeder Wert die Gesamtzahl seit Beginn der Erfassung von Werten darstellt.
-
Rufen Sie in der Google Cloud Console das leaderboard auf der Seite des Metrics Explorer auf:
Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift Monitoring ist.
- Wählen Sie in der Symbolleiste der Google Cloud Console Ihr Projekt von Google Cloud aus. Wählen Sie für App Hub-Konfigurationen das App Hub-Hostprojekt oder das Verwaltungsprojekt des für Anwendungsverwaltung konfigurierten Ordners aus.
- Maximieren Sie im Element Messwert das Menü Messwert auswählen, geben Sie
http_serverin 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 Übernehmen.
Verwenden Sie das Element Filter, um Filter hinzuzufügen, mit denen Zeitreihen aus den Abfrageergebnissen entfernt werden.
- 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/multiund/singleaufrufen 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
Es kann einige Minuten dauern, bis die Trace-Daten verfügbar sind. Wenn Ihr Projekt beispielsweise Trace-Daten empfängt, muss Google Cloud Observability möglicherweise eine Datenbank erstellen, um diese Daten zu speichern. Das Erstellen der Datenbank kann einige Minuten dauern. Während dieser Zeit sind keine Trace-Daten verfügbar.
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 Tabellenbereich der Seite eine Zeile mit dem Span-Namen
/multiaus. Wählen Sie im Gantt-Diagramm im Bereich Trace-Details den Span mit der Bezeichnung
/multiaus.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 der Seite 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 das und die Seite Log-Explorer auf:
Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift Logging ist.
Suchen Sie ein Log mit der Beschreibung
handle /multi request.Erweitern Sie den Logeintrag, um die Details des Logs aufzurufen. Im Feld
jsonPayloadgibt es einen Eintrag mit der BezeichnungsubRequests. Dieser Eintrag wurde durch eine Anweisung in der FunktionhandleMultihinzugefügt.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.
Ihre Logdaten sind möglicherweise einige Minuten vor Ihren Trace-Daten verfügbar. Wenn beim Aufrufen von Trace-Daten ein Fehler auftritt, entweder beim Suchen nach einem Trace anhand der ID oder beim Ausführen der Schritte in dieser Aufgabe, warten Sie ein oder zwei Minuten und versuchen Sie es dann noch einmal.
Weitere Informationen zur Verwendung des Log-Explorers finden Sie unter Logs mit dem Log-Explorer ansehen.