Menyiapkan aplikasi gRPC di Google Cloud dengan kemampuan observasi Microservice


Alat kemampuan observasi Microservice memberi Anda kemampuan untuk menginstrumentasikan aplikasi Anda untuk mengumpulkan dan menyajikan data telemetri di Cloud Monitoring, Cloud Logging, dan Cloud Trace dari workload gRPC yang di-deploy di Google Cloud dan di tempat lain. Kemampuan observasi Microservice berfungsi dengan semua deployment yang telah diberi izin untuk mengakses Monitoring, Logging, dan Trace dengan mengaktifkan Microservices API.

Dalam tutorial ini, Anda akan mempelajari cara menggunakan fitur kemampuan observasi Microservices dengan membangun aplikasi gRPC sederhana di Google Cloud menggunakan Compute Engine dan menginstrumentasikan aplikasi Anda dengan kemampuan observasi Microservice, serta melihatnya yang ditampilkan langsung di Monitoring dan Logging.

Tujuan

Pada level tinggi, Anda melakukan hal berikut.

  • Sebagai developer layanan, Anda dapat:

    • Membuat aplikasi gRPC dengan bahasa pilihan Anda (C++, Go, atau Java).
    • Ikut serta dalam aplikasi Anda dan kontrol plugin kemampuan observasi Microservice.
    • Men-deploy aplikasi di VM Compute Engine.
  • Sebagai operator layanan, Anda menggunakan data yang dikumpulkan dengan berbagai cara:

    • Melihat rekaman aktivitas di Trace.
    • Lihat metrik di dasbor pemantauan yang disebut Monitoring Microservices (gRPC).
    • Lihat metrik di Metrics Explorer.
    • Periksa entri log di Logs Explorer.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

Konsol

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Aktifkan API Compute Engine, and Microservices API.

    Mengaktifkan API

  5. Buat akun layanan:

    1. Di konsol Google Cloud, buka halaman Buat akun layanan.

      Buka Create service account
    2. Pilih project Anda.
    3. Di kolom Nama akun layanan, masukkan nama. Konsol Google Cloud akan mengisi kolom ID akun layanan berdasarkan nama ini.

      Di kolom Deskripsi akun layanan, masukkan sebuah deskripsi. Sebagai contoh, Service account for quickstart.

    4. Klik Buat dan lanjutkan.
    5. Berikan peran berikut ke akun layanan: Logging > Logs Viewer > Logs Writer, Monitoring > Monitoring Editor > Metrics Writer, Trace > Trace Admin > Trace Agent.

      Untuk memberikan peran, temukan daftar Pilih peran, lalu pilih peran.

      Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.

    6. Klik Lanjutkan.
    7. Di kotak Peran pengguna akun layanan, masukkan alamat email untuk Akun Google Anda.
    8. Klik Selesai untuk menyelesaikan pembuatan akun layanan.

  6. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  7. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  8. Aktifkan API Compute Engine, and Microservices API.

    Mengaktifkan API

  9. Buat akun layanan:

    1. Di konsol Google Cloud, buka halaman Buat akun layanan.

      Buka Create service account
    2. Pilih project Anda.
    3. Di kolom Nama akun layanan, masukkan nama. Konsol Google Cloud akan mengisi kolom ID akun layanan berdasarkan nama ini.

      Di kolom Deskripsi akun layanan, masukkan sebuah deskripsi. Sebagai contoh, Service account for quickstart.

    4. Klik Buat dan lanjutkan.
    5. Berikan peran berikut ke akun layanan: Logging > Logs Viewer > Logs Writer, Monitoring > Monitoring Editor > Metrics Writer, Trace > Trace Admin > Trace Agent.

      Untuk memberikan peran, temukan daftar Pilih peran, lalu pilih peran.

      Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.

    6. Klik Lanjutkan.
    7. Di kotak Peran pengguna akun layanan, masukkan alamat email untuk Akun Google Anda.
    8. Klik Selesai untuk menyelesaikan pembuatan akun layanan.

  10. Baca Ringkasan kemampuan observasi Microservice.
  11. Baca tentang dua variabel lingkungan yang didukung, tentukan mana yang akan digunakan, dan tentukan nilai yang diperlukan oleh variabel lingkungan.

cli

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Menginstal Google Cloud CLI.
  3. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  4. Buat atau pilih project Google Cloud.

    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk project Google Cloud yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  5. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  6. Aktifkan API Compute Engine, and Microservices API:

    gcloud services enable compute.googleapis.com microservices.googleapis.com
  7. Menyiapkan autentikasi:

    1. Buat akun layanan:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ganti SERVICE_ACCOUNT_NAME dengan nama untuk akun layanan.

    2. Memberikan peran ke akun layanan. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut: roles/logging.logWriter, roles/monitoring.metricWriter, roles/cloudtrace.agent:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      Ganti kode berikut:

      • SERVICE_ACCOUNT_NAME: nama dari akun layanan.
      • PROJECT_ID: project ID dimana Anda membuat akun layanan
      • ROLE: peran yang akan diberikan
    3. Memberi Akun Google Anda peran yang memungkinkan Anda menggunakan peran akun layanan dan tambahkan akun layanan tersebut ke resource lain:

      gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser

      Ganti kode berikut:

      • SERVICE_ACCOUNT_NAME: nama dari akun layanan.
      • PROJECT_ID: project ID dimana Anda membuat akun layanan
      • USER_EMAIL: alamat email untuk Akun Google Anda
  8. Menginstal Google Cloud CLI.
  9. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  10. Buat atau pilih project Google Cloud.

    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk project Google Cloud yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  11. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  12. Aktifkan API Compute Engine, and Microservices API:

    gcloud services enable compute.googleapis.com microservices.googleapis.com
  13. Menyiapkan autentikasi:

    1. Buat akun layanan:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ganti SERVICE_ACCOUNT_NAME dengan nama untuk akun layanan.

    2. Memberikan peran ke akun layanan. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut: roles/logging.logWriter, roles/monitoring.metricWriter, roles/cloudtrace.agent:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      Ganti kode berikut:

      • SERVICE_ACCOUNT_NAME: nama dari akun layanan.
      • PROJECT_ID: project ID dimana Anda membuat akun layanan
      • ROLE: peran yang akan diberikan
    3. Memberi Akun Google Anda peran yang memungkinkan Anda menggunakan peran akun layanan dan tambahkan akun layanan tersebut ke resource lain:

      gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser

      Ganti kode berikut:

      • SERVICE_ACCOUNT_NAME: nama dari akun layanan.
      • PROJECT_ID: project ID dimana Anda membuat akun layanan
      • USER_EMAIL: alamat email untuk Akun Google Anda
  14. Baca Ringkasan kemampuan observasi Microservice.
  15. Baca tentang dua variabel lingkungan yang didukung, tentukan mana yang akan digunakan, dan tentukan nilai yang diperlukan oleh variabel lingkungan.

Membuat dan terhubung ke VM Compute Engine

Gunakan petunjuk ini untuk membuat dan terhubung ke instance VM Compute Engine. Di VM, Anda men-deploy aplikasi, lalu menginstrumentasikan aplikasi dengan kemampuan observasi Microservice.

  1. Buat instance VM:

    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
    
  2. Hubungkan ke instance VM:

    gcloud compute ssh --project=$PROJECT_ID grpc-observability-vm
    

Men-deploy aplikasi Anda ke VM Compute Engine

Anda dapat men-deploy aplikasi pilihan Anda ke VM Compute Engine yang Anda buat di langkah sebelumnya, lalu melewati langkah ini, atau Anda dapat menggunakan contoh untuk melanjutkan petunjuk dalam bahasa pilihan Anda.

C++

  1. Setelah Anda terhubung ke instance VM, jalankan perintah berikut.

    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

  1. Pastikan Anda telah menginstal Go.

    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
    
  2. Clone contoh gRPC-Go.

    git clone https://github.com/grpc/grpc-go.git
    cd grpc-go/
    git checkout -b run-observability-example
    875c97a94dca8093bf01ff2fef490fbdd576373d
    

Java

  1. Setelah terhubung ke instance VM, pastikan Anda telah menginstal Java 8 atau yang lebih baru.

    sudo apt update
    sudo apt upgrade
    sudo apt install git
    sudo apt-get install -y openjdk-11-jdk-headless
    
  2. Clone repositori grpc-java.

    export EXAMPLES_VERSION=v1.54.1
    git clone -b $EXAMPLES_VERSION --single-branch --depth=1 \
    https://github.com/grpc/grpc-java.git
    

Membuat file konfigurasi Google Cloud Observability gRPC

Anda memerlukan file konfigurasi kemampuan observasi Google Cloud gRPC terpisah untuk mengaktifkan kemampuan observasi Microservice untuk server dan klien. Lokasi file ini diekspor sebagai GRPC_GCP_OBSERVABILITY_CONFIG_FILE pada langkah mendatang. Gunakan petunjuk berikut tentang cara menyiapkan berbagai parameter dalam file konfigurasi.

Contoh 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"
  }
}

Bagian berikut berisi petunjuk untuk mengaktifkan pengumpulan data di konfigurasi Anda untuk setiap komponen. Jika menggunakan contoh gRPC dalam tutorial ini, Anda dapat menggunakan konfigurasi ini sebagaimana adanya (setelah mengupdate your-project-here) atau menggunakannya sebagai template untuk aplikasi Anda, dan contoh yang menunjukkan informasi konfigurasi dalam variabel lingkungan.

Aktifkan metrik

Untuk mengaktifkan metrik, tambahkan objek cloud_monitoring ke konfigurasi dan tetapkan nilainya ke {}.

Untuk informasi selengkapnya tentang metrik, lihat Definisi metrik.

Aktifkan perekaman aktivitas

Untuk mengaktifkan perekaman aktivitas, lakukan langkah berikut:

  1. Tambahkan objek cloud_trace ke konfigurasi.
  2. Tetapkan cloud_trace.sampling_rate ke 0.5 yang akan melacak 50% RPC secara acak.

Jika Anda berencana mengaktifkan pelacakan di seluruh layanan, pastikan layanan tersebut mendukung penerapan konteks rekaman aktivitas yang diterima dari upstream (atau dimulai sendiri) ke downstream.

Untuk mengetahui informasi selengkapnya tentang pelacakan, lihat Definisi rekaman aktivitas.

Aktifkan logging

Untuk mengaktifkan logging, lakukan hal berikut:

  1. Tambahkan objek cloud_logging ke konfigurasi.
  2. Tambahkan pola ke salah satu atau kedua client_rpc_events dan server_rpc_events dengan menentukan kumpulan layanan atau metode yang Anda inginkan untuk menghasilkan logging peristiwa tingkat transpor dan jumlah byte yang akan dicatat ke dalam log untuk header dan pesan.

Untuk mengetahui informasi selengkapnya tentang logging, lihat Definisi data log.

Melengkapi aplikasi untuk plugin kemampuan observasi

Untuk melengkapi aplikasi agar dapat menggunakan plugin kemampuan observasi Microservice, gunakan petunjuk berikut untuk bahasa pilihan Anda.

C++

Anda dapat menggunakan C++ dengan kemampuan observasi Microservices pada gRPC C++ v1.54. Repositori contoh ada di GitHub.

  1. Dukungan kemampuan observasi hanya tersedia melalui sistem build Bazel. Tambahkan grpcpp_gcp_observability target sebagai dependensi.

  2. Mengaktifkan kemampuan observasi Microservices memerlukan dependensi tambahan (modul kemampuan observasi) dan perubahan kode berikut pada klien, server gRPC yang ada, atau keduanya:

    #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
    }
    

    Sebelum operasi gRPC apa pun, termasuk membuat saluran, server, atau kredensial, panggil perintah berikut:

    grpc::GcpObservability::Init();
    

    Tindakan ini akan menampilkan absl::StatusOr<GcpObservability> yang seharusnya disimpan. Status ini membantu menentukan apakah kemampuan observasi berhasil diinisialisasi atau tidak. Objek GcpObservability yang menyertainya mengontrol masa aktif kemampuan observasi, serta otomatis menutup dan menghapus data kemampuan observasi saat berada di luar cakupan.

Go

  1. Plugin kemampuan observasi microservice didukung untuk gRPC Go versi v1.54.0 dan yang lebih baru. Repositori contoh berada di GitHub.

Dengan modul Go, penggunaan kemampuan observasi Microservice memerlukan modul kemampuan observasi dan kode berikut:

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()
  
}

Panggilan observability.Start akan mengurai konfigurasi dari variabel lingkungan, membuat pengekspor yang sesuai, dan memasukkan logika pengumpulan ke koneksi klien dan server yang dibuat setelah panggilan. Panggilanobservability.End yang ditangguhkan akan membersihkan resource dan memastikan data yang di-buffer dihapus sebelum aplikasi ditutup.

Setelah kode aplikasi diupdate, jalankan perintah berikut untuk mengupdate file go.mod.

go mod tidy

Java

Untuk menggunakan kemampuan observasi Microservice dengan aplikasi Java, ubah build Anda agar menyertakan artefak grpc-gcp-observability. Gunakan gRPC versi 1.54.1 atau yang lebih baru.

Dalam cuplikan build di bagian alat build Gradle dan Maven, grpcVersion ditetapkan ke nilai 1.54.1.

Repositori contoh berada di GitHub.

  1. Agar berhasil melengkapi aplikasi Java untuk kemampuan observasi Microservice, tambahkan kode berikut ke main().
...
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();
...
}

Perhatikan bahwa Anda harus memanggil GcpObservability.grpcInit() sebelum saluran atau server gRPC dibuat. Fungsi GcpObservability.grpcInit() membaca konfigurasi kemampuan observasi Microservice dan menggunakannya untuk menyiapkan intersepsi dan tracer global yang diperlukan untuk logging, metrik, dan fitur rekaman aktivitas di setiap saluran dan server yang dibuat. GcpObservability.grpcInit() aman untuk thread dan harus dipanggil tepat satu kali. Metode ini menampilkan instance GcpObservability yang harus Anda simpan untuk memanggil close() nanti.

GcpObservability.close() membatalkan alokasi resource. Setiap saluran atau server yang dibuat setelahnya tidak melakukan pencatatan log.

GcpObservability mengimplementasikan java.lang.AutoCloseable, yang ditutup secara otomatis jika Anda menggunakan try-with-resource sebagai berikut:

...
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
...
}

Menggunakan alat build Gradle

Jika Anda menggunakan alat build Gradle, sertakan baris berikut:

def grpcVersion = '1.54.1'

...

dependencies {
...
implementation "io.grpc:grpc-gcp-observability:${grpcVersion}"
...
}

Menggunakan alat build Maven (pom.xml)

Jika Anda menggunakan alat build Maven, sertakan yang berikut ini:

<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>

Menjalankan aplikasi

Ikuti petunjuk di bagian ini hanya jika Anda menggunakan contoh gRPC untuk tutorial. Anda dapat mengubah perintah run untuk menargetkan biner aplikasi.

Jalankan Server

C++

  1. Membuat sesi SSH ke VM.
  2. Mengekspor variabel lingkungan. Gunakan langkah-langkah yang ditentukan di atas untuk membuat server_config.json.

      export GOOGLE_CLOUD_PROJECT=$PROJECT_ID
      export GRPC_GCP_OBSERVABILITY_CONFIG_FILE="$(pwd)/examples/cpp/gcp_observability/helloworld/server_config.json"
    
  3. Jalankan aplikasi server shell cd grpc tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_server

Go

  1. Membuat sesi SSH ke VM.
  2. Mengekspor variabel lingkungan. Gunakan langkah-langkah yang ditentukan di atas untuk membuat server_config.json.

    export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./server/serverConfig.json
    
  3. Jalankan aplikasi server shell go run ./server/main.go

Java

  1. Di direktori contoh, buka file README dan ikuti petunjuk dalam file tersebut.
  2. Jika petunjuknya memberi tahu Anda untuk membuka jendela terminal lain, berikan perintah ini: shell gcloud compute ssh --project=$PROJECT_ID grpc-observability-vm

Jalankan Klien

C++

  1. Membuat sesi SSH lain ke dalam VM.
  2. Mengekspor variabel lingkungan. Gunakan langkah-langkah yang ditentukan di atas untuk membuat file client_config.json.

      export GOOGLE_CLOUD_PROJECT=$PROJECT_ID
      export GRPC_GCP_OBSERVABILITY_CONFIG_FILE="$(pwd)/examples/cpp/gcp_observability/helloworld/client_config.json"
    
  3. Menjalankan aplikasi klien

    cd grpc
    tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_client
    

Go

  1. Membuat sesi SSH lain ke dalam VM.
  2. Mengekspor variabel lingkungan. Gunakan langkah-langkah yang ditentukan di atas untuk membuat file client_config.json. shell export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./client/clientConfig.json
  3. Menjalankan aplikasi klien

    cd grpc-go/examples/features/observability
    go run ./client/main.go
    

Java

  1. Di direktori contoh, buka file README dan ikuti petunjuk dalam file tersebut.
  2. Saat petunjuk memberi tahu Anda untuk membuka jendela terminal lain, berikan perintah ini: shell gcloud compute ssh --project=$PROJECT_ID grpc-observability-vm

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

    Menghapus project Google Cloud:

    gcloud projects delete PROJECT_ID

Menghapus resource satu per satu

  1. Hapus instance:
    gcloud compute instances delete INSTANCE_NAME

Langkah selanjutnya