Mit Tools zur Beobachtbarkeit von Mikrodiensten können Sie Ihre Anwendungen instrumentieren, um Telemetriedaten in Cloud Monitoring, Cloud Logging und Cloud Trace zu erfassen und zu präsentieren, die von gRPC-Arbeitslasten stammen, die in Google Cloud und an anderen Orten bereitgestellt werden. Die Beobachtbarkeit von Mikrodiensten funktioniert mit jeder Bereitstellung, der durch Aktivieren der Microservices API Zugriff auf Monitoring, Logging, und Trace gewährt wurde.
In dieser Anleitung erfahren Sie, wie Sie Features für die Beobachtbarkeit von Mikrodiensten nutzen, indem Sie eine einfache gRPC-Anwendung in Google Cloud mit Compute Engine erstellen und Ihre Anwendung mit Beobachtbarkeit für Mikrodienste instrumentieren und sie live in Monitoring and Logging anzeigen.
Compute Engine-VM erstellen und Verbindung zu dieser herstellen
Folgen Sie dieser Anleitung, um eine Compute Engine-VM-Instanz zu erstellen und eine Verbindung zu ihr herzustellen. Auf der VM stellen Sie Ihre Anwendung bereit und instrumentieren sie dann mit der Beobachtbarkeit von Mikrodiensten.
Erstellen Sie eine VM-Instanz:
gcloud compute instances create grpc-observability-vm \ --image-family=debian-11 \ --image-project=debian-cloud \ --service-account=SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com
Verbindung zur VM-Instanz herstellen
gcloud compute ssh --project=$PROJECT_ID grpc-observability-vm
Anwendung auf der Compute Engine-VM bereitstellen
Sie können entweder eine Anwendung Ihrer Wahl auf der Compute Engine-VM bereitstellen, die Sie im vorherigen Schritt erstellt haben, und diesen Schritt überspringen, oder Sie können ein Beispiel verwenden, um mit der Anleitung in Ihrer bevorzugten Sprache fortzufahren.
C++
Nachdem Sie eine Verbindung zur VM-Instanz hergestellt haben, führen Sie den folgenden Befehl aus.
sudo apt-get update -y sudo apt-get install -y git build-essential clang git clone -b v1.54.0 https://github.com/grpc/grpc.git --depth=1
Go
Prüfen Sie, ob Go installiert ist.
sudo apt-get install -y git sudo apt install wget wget https://go.dev/dl/go1.20.2.linux-amd64.tar.gz sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf \ go1.20.2.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin
Klonen Sie die
gRPC-Go
-Beispiele.git clone https://github.com/grpc/grpc-go.git cd grpc-go/ git checkout -b run-observability-example 875c97a94dca8093bf01ff2fef490fbdd576373d
Java
Nachdem Sie eine Verbindung zur VM-Instanz hergestellt haben, prüfen Sie, ob Java 8 oder höher installiert ist.
sudo apt update sudo apt upgrade sudo apt install git sudo apt-get install -y openjdk-11-jdk-headless
Klonen Sie das
grpc-java
-Repository.export EXAMPLES_VERSION=v1.54.1 git clone -b $EXAMPLES_VERSION --single-branch --depth=1 \ https://github.com/grpc/grpc-java.git
gRPC Google Cloud Observability-Konfigurationsdatei erstellen
Sie benötigen eine separate gRPC Google Cloud Observability-Konfigurationsdatei, um die Beobachtbarkeit von Mikrodiensten für Server und Client zu aktivieren. Der Speicherort dieser Datei wird in den nächsten Schritten als GRPC_GCP_OBSERVABILITY_CONFIG_FILE
exportiert. Folgen Sie der Anleitung unten, um die verschiedenen Parameter in der Konfigurationsdatei einzurichten.
Beispiel GRPC_GCP_OBSERVABILITY_CONFIG_FILE
{
"project_id": "your-project-here",
"cloud_logging": {
"client_rpc_events": [
{
"methods": ["google.pubsub.v1.Subscriber/Acknowledge", "google.pubsub.v1.Publisher/CreateTopic"],
"exclude": true,
},
{
"methods": ["google.pubsub.v1.Subscriber/*", "google.pubsub.v1.Publisher/*"],
"max_metadata_bytes": 4096,
"max_message_bytes": 4096,
}],
"server_rpc_events": [{
"methods": ["*"],
"max_metadata_bytes": 4096,
"max_message_bytes": 4096
}],
},
"cloud_monitoring": {},
"cloud_trace": {
"sampling_rate": 0.5,
}
"labels": {
"SOURCE_VERSION": "J2e1Cf",
"SERVICE_NAME": "payment-service-1Cf",
"DATA_CENTER": "us-west1-a"
}
}
In den folgenden Abschnitten finden Sie eine Anleitung zum Aktivieren der Datenerfassung in Ihrer Konfiguration für die einzelnen Komponenten. Wenn Sie das gRPC-Beispiel in dieser Anleitung verwendet haben, können Sie diese Konfiguration unverändert verwenden (nachdem your-project-here
aktualisiert) oder dies als Vorlage für Ihre Anwendung und ein Beispiel für die Konfigurationsinformationen in einer Umgebungsvariablen verwenden.
Messwerte aktivieren
Fügen Sie zum Aktivieren von Messwerten das Objekt cloud_monitoring
zur Konfiguration hinzu und setzen Sie den Wert auf {}
.
Weitere Informationen zu Messwerten finden Sie unter Messwertdefinitionen.
Tracing aktivieren
So aktivieren Sie Tracing:
- Fügen Sie das Objekt
cloud_trace
zur Konfiguration hinzu. - Legen Sie
cloud_trace.sampling_rate
auf0.5
fest, um 50% der RPCs nach dem Zufallsprinzip zu verfolgen.
Wenn Sie das Tracing über Dienste hinweg aktivieren möchten, müssen Sie dafür sorgen, dass die Dienste die Weitergabe von Trace-Kontext vom vorgelagerten (oder selbst gestarteten) zum nachgelagerten Dienst unterstützen.
Weitere Informationen zum Tracing finden Sie unter Trace-Definitionen.
Logging aktivieren
So aktivieren Sie das Logging:
- Fügen Sie das Objekt
cloud_logging
zur Konfiguration hinzu. - Fügen Sie ein Muster entweder zu
client_rpc_events
, zuserver_rpc_events
oder zu beiden hinzu, um die Dienste oder Methoden anzugeben, für die Sie ein Ereignis-Logging auf Transportebene generieren möchten und die Anzahl der zu protokollierenden Byte für Header und Nachrichten.
Weitere Informationen zum Logging finden Sie unter Logeinträge.
Anwendungen für das Beobachtbarkeits-Plug-in instrumentieren
Verwenden Sie die folgende Anleitung für Ihre bevorzugte Sprache, um Ihre Anwendungen so zu instrumentieren, dass sie das Mikrodienste-Beobachtbarkeits-Plug-in verwenden können.
C++
Sie können C++ mit der Beobachtbarkeit von Mikrodiensten ab gRPC C++ v1.54 verwenden. Das Beispiel-Repository befindet sich auf GitHub.
Die Unterstützung für die Beobachtbarkeit ist nur über das Bazel-Build-System verfügbar. Fügen Sie das Ziel
grpcpp_gcp_observability
als Abhängigkeit hinzu.Die Aktivierung der Beobachtbarkeit von Mikrodiensten erfordert eine zusätzliche Abhängigkeit (ein Beobachtbarkeitsmodul) und die folgenden Codeänderungen an vorhandenen gRPC-Clients, -Servern oder beidem:
#include <grpcpp/ext/gcp_observability.h> int main(int argc, char** argv) { auto observability = grpc::GcpObservability::Init(); assert(observability.ok()); … // Observability data flushed when object goes out of scope }
Rufen Sie vor allen gRPC-Vorgängen, einschließlich des Erstellens eines Kanals, Servers oder Anmeldedaten, Folgendes auf:
grpc::GcpObservability::Init();
Es wird
absl::StatusOr<GcpObservability>
zurückgegeben, das gespeichert werden sollte. Der Status hilft bei der Feststellung, ob die Beobachtbarkeit erfolgreich initialisiert wurde. Das zugehörigeGcpObservability
-Objekt steuert die Lebensdauer der Beobachtbarkeit und schließt und entfernt Daten zur Beobachtbarkeit automatisch, wenn sie außerhalb des Gültigkeitsbereichs liegen.
Go
- Plug-ins für Beobachtbarkeit von Mikrodiensten werden in gRPC Go-Versionen
v1.54.0
und höher unterstützt. Das Beispiel-Repository befindet sich auf GitHub.
Wenn Sie die Beobachtbarkeit von Mikrodiensten aktivieren, sind für das Go-Modul ein Beobachtbarkeitsmodul und der folgende Code erforderlich:
import "google.golang.org/grpc/gcp/observability"
func main() {
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
if err := observability.Start(ctx); err != nil {
log.Warning("Unable to start gRPC observability:", err)
}
defer observability.End()
…
}
Der Aufruf observability.Start
parst die Konfiguration aus Umgebungsvariablen, erstellt entsprechend Exporter und fügt eine Erfassungslogik in Clientverbindungen und Server ein, die nach dem Aufruf erstellt werden. Der zurückgestellte Aufruf observability.End
bereinigt Ressourcen und stellt sicher, dass die Daten im Zwischenspeicher gelöscht werden, bevor die Anwendung geschlossen wird.
Führen Sie nach dem Aktualisieren des Anwendungscodes den folgenden Befehl aus, um die Datei go.mod
zu aktualisieren.
go mod tidy
Java
Um die Beobachtbarkeit von Mikrodiensten für Java-Anwendungen zu verwenden, ändern Sie den Build so, dass das Artefakt grpc-gcp-observability
enthalten ist. Verwenden Sie die gRPC-Version 1.54.1 oder höher.
In den Build-Snippets in den Abschnitten der Gradle- und Maven-Build-Tools ist grpcVersion
auf den Wert 1.54.1 festgelegt.
Das Beispiel-Repository befindet sich auf GitHub.
- Fügen Sie den folgenden Code zu
main()
hinzu, um Ihre Java-Anwendungen für die Beobachtbarkeit von Mikrodiensten zu instrumentieren.
...
import io.grpc.gcp.observability.GcpObservability;
...
// Main application class
...
public static void main(String[] args) {
...
// call GcpObservability.grpcInit() to initialize & get observability
GcpObservability observability = GcpObservability.grpcInit();
...
// call close() on the observability instance to shutdown observability
observability.close();
...
}
Sie müssen GcpObservability.grpcInit()
aufrufen, bevor gRPC-Kanäle oder -Server erstellt werden. Die Funktion GcpObservability.grpcInit()
liest die Konfiguration der Mikrodienst-Beobachtbarkeit und verwendet sie, um die globalen Interceptor und Tracer einzurichten, die für die Logging-, Messwert- und Trace-Funktionalität in jedem erstellten Kanal und Server erforderlich sind. GcpObservability.grpcInit()
ist threadsicher und muss genau einmal aufgerufen werden. Die Funktion gibt eine Instanz von GcpObservability
zurück, die Sie speichern müssen, um später close()
aufrufen zu können.
GcpObservability.close()
hebt die Zuweisung von Ressourcen auf. Kanäle, die danach erstellt werden, führen kein Logging durch.
GcpObservability
implementiert java.lang.AutoCloseable
, das automatisch geschlossen wird, wenn Sie try-with-resource
s so verwenden:
...
import io.grpc.gcp.observability.GcpObservability;
...
// Main application class
...
public static void main(String[] args) {
...
// call GcpObservability.grpcInit() to initialize & get observability
try (GcpObservability observability = GcpObservability.grpcInit()) {
...
} // observability.close() called implicitly
...
}
Gradle-Build-Tool verwenden
Wenn Sie das Gradle-Build-Tool verwenden, geben Sie Folgendes an:
def grpcVersion = '1.54.1'
...
dependencies {
...
implementation "io.grpc:grpc-gcp-observability:${grpcVersion}"
...
}
Maven-Build-Tool (pom.xml) verwenden
Wenn Sie das Maven-Build-Tool verwenden, geben Sie Folgendes an:
<properties>
...
<grpc.version>1.54.1</grpc.version>
...
</properties>
...
<dependencies>
...
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-gcp-observability</artifactId>
<version>${grpc.version}</version>
</dependency>
...
</dependencies>
Führen Sie Ihre Anwendung aus
Folgen Sie der Anleitung in diesem Abschnitt nur, wenn Sie das gRPC-Beispiel für das Tutorial verwendet haben. Sie können den Befehl run
so ändern, dass er auf das Binärprogramm Ihrer Anwendung ausgerichtet ist.
Run Server
C++
- Erstellen Sie eine SSH-Sitzung zur VM.
Umgebungsvariablen exportieren Erstellen Sie
server_config.json
anhand der oben beschriebenen Schritte.export GOOGLE_CLOUD_PROJECT=$PROJECT_ID export GRPC_GCP_OBSERVABILITY_CONFIG_FILE="$(pwd)/examples/cpp/gcp_observability/helloworld/server_config.json"
Serveranwendung ausführen
shell cd grpc tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_server
Go
- Erstellen Sie eine SSH-Sitzung zur VM.
Umgebungsvariablen exportieren Erstellen Sie
server_config.json
anhand der oben beschriebenen Schritte.export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./server/serverConfig.json
Serveranwendung ausführen
shell go run ./server/main.go
Java
- Öffnen Sie im Verzeichnis „examples“ die README-Datei und folgen Sie der Anleitung in der Datei.
- Wenn Sie aufgefordert werden, ein weiteres Terminalfenster zu öffnen, führen Sie diesen Befehl aus:
shell gcloud compute ssh --project=$PROJECT_ID grpc-observability-vm
Run Client
C++
- Erstellen Sie eine weitere SSH-Sitzung in der VM.
Umgebungsvariablen exportieren Führen Sie die oben beschriebenen Schritte aus, um die Datei
client_config.json
zu erstellen.export GOOGLE_CLOUD_PROJECT=$PROJECT_ID export GRPC_GCP_OBSERVABILITY_CONFIG_FILE="$(pwd)/examples/cpp/gcp_observability/helloworld/client_config.json"
Clientanwendung ausführen
cd grpc tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_client
Go
- Erstellen Sie eine weitere SSH-Sitzung in der VM.
- Umgebungsvariablen exportieren Folgen Sie der Anleitung oben, um die Datei
client_config.json
zu erstellen.shell export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./client/clientConfig.json
Clientanwendung ausführen
cd grpc-go/examples/features/observability go run ./client/main.go
Java
- Öffnen Sie im Verzeichnis „examples“ die README-Datei und folgen Sie der Anleitung in der Datei.
- Wenn Sie aufgefordert werden, ein weiteres Terminalfenster zu öffnen, geben Sie diesen Befehl ein:
shell gcloud compute ssh --project=$PROJECT_ID grpc-observability-vm