Sie können manuell instrumentierte Java-, Go-, Python- und Node.js-Anwendungen von einem Trace-Exporter von Google Cloud zu einem prozessinternen OpenTelemetry-OTLP-Exporter migrieren. Der OTLP-Exporter sendet Trace-Daten direkt an die Telemetrie (OTLP) API in Ihrem Google Cloud -Projekt. Dazu werden unterstützte Exportprotokolle (gRPC oder http/protobuf) verwendet.
Bei dieser Konfiguration werden nur Trace-Daten exportiert. Sie gilt nur für prozessinterne Exporteure. Wenn Ihre Anwendung einen OpenTelemetry-Collector verwendet, finden Sie weitere Informationen unter Collector-basierte Instrumentierungsbeispiele und Von Google erstellter OpenTelemetry-Collector.
Warum Sie migrieren sollten
Die OpenTelemetry SDKs generieren Log-, Messwert- und Trace-Daten in einem Format, das im Allgemeinen mit den Proto-Dateien des OpenTelemetry-Protokolls übereinstimmt. Felder können jedoch vor dem Speichern von einem OpenTelemetry-spezifischen Datentyp in einen JSON-Datentyp konvertiert werden.
Wenn eine Anwendung diese Daten mithilfe eines Google Cloud -Exporters in ein Google Cloud -Projekt exportiert, führt dieser Exporter die folgenden Schritte aus:
- Die aufgezeichneten Daten werden vom OTLP-Format in ein proprietäres Format umgewandelt, das von der Cloud Logging API, der Cloud Monitoring API oder der Cloud Trace API definiert wird.
- Die transformierten Daten werden an die entsprechende API gesendet und dann in Ihrem Google Cloud -Projekt gespeichert.
Für Trace-Daten empfehlen wir, Ihre Anwendung so zu migrieren, dass die Telemetry (OTLP) API zum Exportieren von Daten verwendet wird, da für diesen Export keine Datentransformation erforderlich ist. Die Datentransformation kann zu einem Verlust einiger Daten führen. Beispielsweise kann das proprietäre Format niedrigere Limits für bestimmte Felder haben oder einige OTLP-Felder werden möglicherweise nicht einem Feld im proprietären Format zugeordnet.
Verfügbare Beispiele
Die auf dieser Seite genannten Beispielanwendungen sind auf GitHub verfügbar. Die meisten Anwendungen sind so konfiguriert, dass Trace-Daten mithilfe von gRPC exportiert werden. Das bedeutet, dass sie protobuf-codierte Daten im gRPC-Wire-Format über HTTP/2-Verbindungen senden. Beispielcode wird auch für Anwendungen bereitgestellt, die so konfiguriert sind, dass Trace-Daten als protobuf-codierte Daten über HTTP-Verbindungen exportiert werden:
-
Die Beispielanwendung ist so konfiguriert, dass Traces als protobuf-codierte Daten über HTTP-Verbindungen exportiert werden. Wenn Sie gRPC verwenden möchten, ist die Instrumentierung in diesem Beispiel anwendbar. Sie müssen jedoch die Systemattribute ändern, die das Autokonfigurationsmodul verwendet. In der Beispielanwendung wird der Exporter
http/protobufangegeben. Wenn Sie gRPC verwenden möchten, ändern Sie diese Einstellung ingrpc.Wir empfehlen, dass Ihre Java-Anwendungen, wie die Beispielanwendung, das OpenTelemetry SDK Autoconfigure-Modul verwenden, um das SDK zu konfigurieren.
Go-Anwendung, die gRPC verwendet und Go-Anwendung, die HTTP verwendet
Es gibt zwei Go-Repositories. In einem Repository verwendet die Beispielanwendung gRPC. Das Beispiel im anderen Repository verwendet protobuf-codierte Daten über HTTP-Verbindungen.
-
Dieses Repository enthält zwei Beispiele, eines für gRPC und eines, das protobuf-codierte Daten über HTTP-Verbindungen verwendet.
-
Dieses Repository enthält zwei Beispiele, eines für gRPC und eines, das protobuf-codierte Daten über HTTP-Verbindungen verwendet.
Hinweis
Bevor Sie Ihre Anwendung migrieren, um Trace-Daten an den OTLP-Endpunkt zu senden, aktivieren Sie die Telemetry API und prüfen Sie, ob Ihnen die erforderlichen IAM-Rollen (Identity and Access Management) zugewiesen wurden. Möglicherweise müssen Sie einem Dienstkonto auch IAM-Rollen zuweisen.
Abrechnung und Telemetry API aktivieren
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie einfach ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Telemetry, Cloud Logging, Cloud Monitoring, and Cloud Trace APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Telemetry, Cloud Logging, Cloud Monitoring, and Cloud Trace APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
Berechtigungen konfigurieren
-
Damit das von Ihrer Anwendung verwendete Dienstkonto die erforderlichen Berechtigungen zum Schreiben von Log-, Messwert- und Trace-Daten hat, bitten Sie Ihren Administrator, dem von Ihrer Anwendung verwendeten Dienstkonto die folgenden IAM-Rollen zuzuweisen:
- 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
Informationen zum Konfigurieren eines Kontingentprojekts finden Sie unter Kontingentprojekt festlegen.
Informationen zu Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) finden Sie unter Funktionsweise von Standardanmeldedaten für Anwendungen und Standardanmeldedaten für Anwendungen (ADC) für eine lokale Entwicklungsumgebung einrichten.
- Log-Autor (
-
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.
- Loganzeige (
Migrationsanleitung für die manuelle Instrumentierung
In diesem Abschnitt wird beschrieben, wie Sie Ihre Anwendung so ändern, dass Ihre Trace-Daten mithilfe der Telemetry API an Ihr Google Cloud -Projekt gesendet werden.
Abhängigkeiten hinzufügen
Als Erstes müssen Sie in Ihrer Anwendung Abhängigkeiten für den OTLP-Trace-Exporter von OpenTelemetry hinzufügen. Wählen Sie die für Ihre Anwendung und Ihr Build-System geeigneten Abhängigkeitsversionen aus.
Java
Fügen Sie für eine Java-Anwendung im build.gradle-Skript die folgenden Abhängigkeiten hinzu:
Go
In diesem Abschnitt werden die Änderungen beschrieben, die Sie an Ihren Abhängigkeiten vornehmen müssen, wenn Sie gRPC für den Export verwenden. Wenn Sie protobuf-codierte Daten über HTTP-Verbindungen für den Export verwenden, fügen Sie das Paket otlptracehttp als Abhängigkeit hinzu. Weitere Informationen finden Sie unter Go-Anwendung, die HTTP verwendet.
Aktualisieren Sie für eine Go-Anwendung, die gRPC für den Export verwendet, die Datei go.mod, um die folgende Abhängigkeit einzuschließen:
Python
In diesem Abschnitt werden die Änderungen beschrieben, die Sie an Ihren Abhängigkeiten vornehmen müssen, wenn Sie gRPC für den Export verwenden. Wenn Sie protobuf-codierte Daten über HTTP-Verbindungen für den Export verwenden, fügen Sie das Paket opentelemetry-exporter-otlp-proto-http als Anforderung hinzu. Weitere Informationen finden Sie im Python-Repository.
Installieren Sie für eine Python-Anwendung, die gRPC für den Export verwendet, die folgenden Abhängigkeiten oder aktualisieren Sie die Datei requirements.txt:
Node.js
In diesem Abschnitt werden die Änderungen beschrieben, die Sie an Ihren Abhängigkeiten vornehmen müssen, wenn Sie gRPC für den Export verwenden. Wenn Sie protobuf-codierte Daten über HTTP-Verbindungen für den Export verwenden, fügen Sie das Paket @opentelemetry/exporter-trace-otlp-proto als Abhängigkeit hinzu. Weitere Informationen finden Sie unter Node.js-Anwendung.
Fügen Sie für eine Node.js-Anwendung, die Trace-Daten mit gRPC exportiert, die folgenden Abhängigkeiten hinzu:
"@opentelemetry/exporter-trace-otlp-grpc": "0.221.0",
"@grpc/grpc-js": "1.14.4"
Ersetzen Sie die Verwendung von Google Cloud -Exportern durch OTLP-Exporter.
Aktualisieren Sie Ihren Anwendungscode so, dass das OpenTelemetry SDK so konfiguriert ist, dass die OpenTelemetry-OTLP-Exporter anstelle eines Google Cloud Trace-Exporters verwendet werden. Die erforderlichen Änderungen sind sprachspezifisch.
Java
Gehen Sie bei einer Java-Anwendung so vor:
Fügen Sie die folgenden Importanweisungen hinzu:
Aktualisieren Sie den Anwendungscode, um das OpenTelemetry SDK Autoconfigure-Modul zum Konfigurieren des SDK zu verwenden:
Konfigurieren Sie die Systemeigenschaften, die das Autokonfigurationsmodul zur Laufzeit verwendet. Dieses Modul verwendet diese Properties, um das SDK zu bootstrappen. Sie können auch Umgebungsvariablen anstelle von Systemeigenschaften verwenden. Weitere Informationen finden Sie unter Umgebungsvariablen und Systemeigenschaften.
In der Beispielanwendung werden die Systemattribute im Skript
build.gradledefiniert:Übergeben Sie die Konfiguration außerdem als JVM-Argumente:
Wenn Sie Trace-Daten lieber mit gRPC exportieren möchten, legen Sie das OTLP-Protokoll auf
grpcstatt aufhttp/protobuffest.
Go
In diesem Abschnitt werden die Änderungen beschrieben, die Sie vornehmen müssen, wenn Sie gRPC für den Export verwenden. Wenn Sie protobuf-codierte Daten über HTTP-Verbindungen für den Export verwenden, müssen Sie das Paket otlptracehttp importieren und den Exporter mit den entsprechenden Optionen konfigurieren. Weitere Informationen finden Sie unter Go-Anwendung, die HTTP verwendet.
Fügen Sie für eine Go-Anwendung, die gRPC für den Export verwendet, die folgenden Importanweisungen hinzu:
Aktualisieren Sie außerdem den Initialisierungscode, um den TraceProvider mit dem gRPC-Exporter zu konfigurieren:
Python
In diesem Abschnitt werden die Änderungen beschrieben, die Sie vornehmen müssen, wenn Sie gRPC für den Export verwenden. Wenn Sie protobuf-codierte Daten über HTTP-Verbindungen für den Export verwenden, müssen Sie das Paket opentelemetry.exporter.otlp.proto.http importieren und den Exporter mit den entsprechenden Optionen konfigurieren. Weitere Informationen finden Sie im Python-Repository.
Fügen Sie für eine Python-Anwendung, die gRPC für den Export verwendet, die folgenden Importe hinzu:
Aktualisieren Sie außerdem den Initialisierungscode, um den TraceProvider mit dem gRPC-Exporter zu konfigurieren:
Node.js
In diesem Abschnitt werden die Änderungen beschrieben, die Sie vornehmen müssen, wenn Sie gRPC für den Export verwenden. Wenn Sie protobuf-codierte Daten über HTTP-Verbindungen für den Export verwenden, importieren Sie das Paket @opentelemetry/exporter-trace-otlp-proto.
Weitere Informationen finden Sie unter Node.js-Anwendung.
Fügen Sie für eine Node.js-Anwendung, die gRPC für den Export verwendet, die folgenden Importe hinzu:
Aktualisieren Sie außerdem den Initialisierungscode, um den TraceProvider mit dem gRPC-Exporter zu konfigurieren:
Authentifizierung konfigurieren
Mit den vorherigen Änderungen an der OpenTelemetry SDK-Konfiguration ist Ihre Anwendung so konfiguriert, dass Traces mit den OpenTelemetry-OTLP-Exportern entweder über gRPC oder HTTP exportiert werden. Als Nächstes müssen Sie die Exporter so konfigurieren, dass diese Traces an Ihr Google Cloud -Projekt gesendet werden.
So konfigurieren Sie die Authentifizierung:
- Authentifizierungsheader für die Exportaufrufe konfigurieren
- Konfigurieren Sie die erforderlichen OpenTelemetry-Ressourcenattribute und OTLP-Header.
- Exporter-Endpunkt konfigurieren.
In diesem Abschnitt werden die einzelnen Schritte im Detail beschrieben.
Authentifizierungsheader für die Exportaufrufe konfigurieren
Wenn Sie den Exporter mit Ihren Google Cloud-Standardanmeldedaten für Anwendungen konfigurieren möchten, fügen Sie eine sprachspezifische Google Auth-Bibliothek hinzu.
Java
Für eine Java-Anwendung, die das OpenTelemetry SDK Autoconfigure-Modul verwendet, empfehlen wir, auch die Google Cloud Authentication Extension zu verwenden.
Go
Aktualisieren Sie für eine Go-Anwendung, die gRPC für den Export verwendet, die Datei go.mod, um die folgende Abhängigkeit einzuschließen:
Aktualisieren Sie für eine Go-Anwendung, die HTTP für den Export verwendet, die Datei go.mod, um die folgende Abhängigkeit einzufügen:
Python
Fügen Sie für eine Python-Anwendung die folgenden Abhängigkeiten zur Datei requirements.txt hinzu:
Node.js
Fügen Sie für eine Node.js-Anwendung die folgende Abhängigkeit hinzu:
"google-auth-library": "10.5.0"
Aktualisieren Sie als Nächstes den Anwendungscode, der den OTLP-Span-Exporter erstellt, sodass die aus der Bibliothek abgerufenen Autorisierungstokens den Headern hinzugefügt werden. Dieser Schritt ist sprachspezifisch, die Implementierung ist jedoch für alle Sprachen ähnlich.
Java
Wenn Sie eine Java-Anwendung haben, die das OpenTelemetry SDK Autoconfigure-Modul und die Google Cloud Authentication Extension verwendet, müssen Sie während der Initialisierung Ihrer Anwendung keine besonderen Schritte ausführen. Das Modul „autoconfigure“ führt automatisch die Schritte aus, die zum Konfigurieren von Standardanmeldedaten für Anwendungen erforderlich sind.
Go
In diesem Abschnitt werden die Änderungen beschrieben, die Sie vornehmen müssen, wenn Sie gRPC für den Export verwenden. Wenn Sie protobuf-codierte Daten über HTTP-Verbindungen für den Export verwenden, müssen Sie das Paket otlptracehttp importieren und den Exporter als otlptracehttp-Objekt konfigurieren. Weitere Informationen finden Sie unter Go-Anwendung, die HTTP verwendet.
Fügen Sie für eine Go-Anwendung, die gRPC für den Export verwendet, die folgenden Importanweisungen hinzu:
Aktualisieren Sie außerdem den Initialisierungscode, um die Standardanmeldedaten für Anwendungen zu konfigurieren, bevor Sie den gRPC-Exporter instanziieren:
Python
In diesem Abschnitt werden die Änderungen beschrieben, die Sie vornehmen müssen, wenn Sie gRPC für den Export verwenden. Wenn Sie protobuf-codierte Daten über HTTP-Verbindungen für den Export verwenden, verwenden Sie die Standardanmeldedaten. Sie müssen diese Anmeldedaten auch übergeben, wenn Sie die BatchSpanProcessor instanziieren. Weitere Informationen finden Sie im Python-Repository.
Fügen Sie für eine Python-Anwendung, die gRPC für den Export verwendet, die folgenden Importe hinzu:
Aktualisieren Sie außerdem den Initialisierungscode, um die Standardanmeldedaten für Anwendungen zu konfigurieren, bevor Sie den gRPC-Exporter instanziieren:
Node.js
In diesem Abschnitt werden die Änderungen beschrieben, die Sie vornehmen müssen, wenn Sie gRPC für den Export verwenden. Wenn Sie protobuf-codierte Daten über HTTP-Verbindungen für den Export verwenden, unterscheiden sich die erforderlichen Änderungen geringfügig von den hier beschriebenen.
Weitere Informationen finden Sie in der Datei app-http-proto-export.ts, die in der Node.js-Anwendung enthalten ist.
Fügen Sie für eine Node.js-Anwendung, die gRPC für den Export verwendet, die folgenden Importe hinzu:
Aktualisieren Sie außerdem den Initialisierungscode, um die Standardanmeldedaten für Anwendungen zu konfigurieren, bevor Sie den gRPC-Exporter instanziieren:
Erforderliche OpenTelemetry-Ressourcenattribute konfigurieren
Fügen Sie der Umgebungsvariablen OTEL_RESOURCE_ATTRIBUTES das Schlüssel/Wert-Paar hinzu, das Ihr Projekt angibt. Verwenden Sie als Schlüssel gcp.project_id.
Verwenden Sie als Wert die ID Ihres Google Cloud -Projekts.
Beispiel:
export OTEL_RESOURCE_ATTRIBUTES="gcp.project_id=PROJECT_ID"
Wenn Sie Java verwenden und Ihre Anwendung so konfigurieren, dass sie die Google Cloud-Authentifizierungserweiterung verwendet, wie es in der Java-Beispielanwendung der Fall ist, müssen Sie die Projekt-ID nicht als Teil der OpenTelemetry-Ressourcenattribute festlegen. Das Festlegen dieses Attributs ist jedoch nicht schädlich.
Weitere Informationen zu OpenTelemetry-Umgebungsvariablen finden Sie unter Allgemeine SDK-Konfiguration.
Kontingentprojekt-ID festlegen
Das Kontingentprojekt ist das Google Cloud -Projekt, in dem Ihre Nutzung von API-Anfragen erfasst wird. Da die Telemetry API eine clientbasierte API ist, hängt es von der Authentifizierungsmethode ab, ob das Kontingentprojekt automatisch identifiziert wird. Sie müssen beispielsweise das Kontingentprojekt nicht angeben, wenn Sie ein Dienstkonto zur Authentifizierung verwenden. Sie müssen jedoch das Kontingentprojekt angeben, wenn Nutzeranmeldedaten für die Authentifizierung verwendet werden.
Sie können ein Kontingentprojekt mithilfe einer Umgebungsvariablen festlegen. Informationen dazu, welche Umgebungsvariable für Ihre Programmiersprache festgelegt werden muss, finden Sie unter Kontingentprojekt mit einer Umgebungsvariablen festlegen.
In Go können Sie das Kontingentprojekt beispielsweise so festlegen:
export GOOGLE_CLOUD_QUOTA_PROJECT="QUOTA_PROJECT_ID"
Informationen zur Behebung von Authentifizierungsfehlern finden Sie unter Nutzeranmeldedaten funktionieren nicht.
Exporter-Endpunkt konfigurieren
Legen Sie den Wert der Umgebungsvariablen OTEL_EXPORTER_OTLP_ENDPOINT auf den OTLP-Endpunkt für Google Cloudfest.
Beispiel:
export OTEL_EXPORTER_OTLP_ENDPOINT=https://telemetry.googleapis.com
Wenn Sie Java und das Autokonfigurationsmodul verwenden, können Sie den Exporter-Endpunkt mithilfe von Systemeigenschaften festlegen, wie es in der Java-Beispielanwendung der Fall ist. Sie müssen die Umgebungsvariable für den Exporter für diese Konfiguration nicht festlegen.
Weitere Informationen zu OpenTelemetry-Umgebungsvariablen finden Sie unter Allgemeine SDK-Konfiguration.