Menggunakan rekaman aktivitas sisi klien

Halaman ini menjelaskan cara mengaktifkan trace sisi klien dengan OpenTelemetry saat Anda menggunakan library klien Cloud Storage untuk berinteraksi dengan Cloud Storage. Anda dapat mengumpulkan dan melihat data trace menggunakan library klien Cloud Storage yang didukung berikut:

Ringkasan

Dengan mengaktifkan trace di library klien Cloud Storage, Anda dapat memantau performa, menemukan masalah latensi, dan melakukan proses debug dengan cepat untuk permintaan Cloud Storage. Trace memungkinkan Anda melihat urutan permintaan yang telah selesai, sehingga memberikan tampilan mendetail tentang cara permintaan diterima, dikelola, dan direspons oleh Cloud Storage. Satu trace terdiri dari beberapa span, yang merupakan data mendetail dan diberi stempel waktu dari setiap fungsi atau operasi yang dilakukan aplikasi Anda selama permintaan Cloud Storage.

Manfaat

Mengumpulkan dan menyebarkan data trace memberikan manfaat berikut untuk aplikasi Anda:

  • Visibilitas performa yang ditingkatkan: karena data trace dibuat hampir real-time saat Cloud Storage menyelesaikan setiap permintaan yang Anda buat, Anda dapat dengan cepat mengidentifikasi bottleneck dalam performa dan mendeteksi masalah latensi.

  • Penanganan error: Anda dapat menentukan tempat timbulnya masalah, mempercepat analisis akar masalah, dan mengurangi periode nonaktif menggunakan informasi tentang setiap permintaan Cloud Storage yang disediakan dalam trace.

Cara kerja trace sisi klien

Bagian berikut memberikan gambaran mendetail tentang cara kerja pengumpulan trace.

Cara kerja pengumpulan trace dengan OpenTelemetry

Library klien Cloud Storage mendukung pengumpulan data trace menggunakan OpenTelemetry SDK untuk menyiapkan komponen berikut yang diperlukan untuk mengumpulkan dan menyebarkan data trace:

  • Penyedia trace: digunakan oleh library klien Cloud Storage, penyedia trace bertanggung jawab untuk membuat dan mengelola sistem pelacakan, termasuk membuat dan mengelola trace dan span di aplikasi Anda.

  • Pengekspor trace: digunakan oleh OpenTelemetry SDK, pengekspor trace bertanggung jawab untuk mengirim data trace ke platform kemampuan observasi backend seperti Cloud Trace, tempat Anda dapat menganalisis dan memvisualisasikan data trace. Untuk mempelajari lebih lanjut pengekspor trace, lihat Cara kerja pengekspor trace.

Cara kerja pengekspor trace

Mengonfigurasi trace menggunakan SDK OpenTelemetry mencakup pemilihan backend kemampuan observasi untuk mengekspor data ke tempat data tersebut dianalisis, disimpan, dan divisualisasikan. Meskipun Anda dapat mengekspor data trace ke backend kemampuan observasi pilihan Anda, sebaiknya gunakan Cloud Trace, yang dapat diakses menggunakan konsol Google Cloud dan menyediakan integrasi dengan layanan Google Cloud lainnya.

Setelah penyedia trace dan pengekspor trace dikonfigurasi dan diaktifkan, Anda dapat melihat data trace hampir secara real-time karena trace dan span dibuat untuk setiap permintaan Cloud Storage.

Dengan menggunakan Cloud Trace Explorer di konsolGoogle Cloud , Anda dapat melihat setiap trace yang berisi hal berikut:

  • Tampilan tingkat tinggi dari permintaan Cloud Storage secara menyeluruh.

  • Beberapa span, dengan setiap span mencatat satu operasi yang diberi stempel waktu dalam permintaan Cloud Storage yang dilakukan.

Untuk membaca lebih lanjut tentang trace dan span, lihat dokumentasi OpenTelemetry tentang trace dan span.

Harga

Data rekaman aktivitas dapat dikenai biaya. Biaya didasarkan pada jumlah span trace yang diserap dan dipindai oleh Cloud Trace. Untuk mempelajari lebih lanjut span trace yang dapat dikenai biaya dan contoh harga, lihat Biaya Cloud Trace.

Sebelum memulai

Sebelum dapat mengumpulkan trace untuk penggunaan Cloud Storage API, Anda harus menyelesaikan langkah-langkah berikut:

  1. Instal library klien Cloud Storage.

  2. Siapkan autentikasi.

  3. Aktifkan Cloud Trace API, jika belum diaktifkan.

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

    Mengaktifkan API

  4. Aktifkan Cloud Storage API.

    Mengaktifkan API

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan guna menulis trace ke Cloud Trace, minta administrator untuk memberi Anda peran IAM Cloud Trace Agent (roles/cloudtrace.agent) pada project yang digunakan oleh klien.

Peran yang telah ditetapkan ini berisi izin cloudtrace.traces.patch, yang diperlukan untuk menulis trace ke Cloud Trace.

Anda mungkin juga bisa mendapatkan izin ini dengan peran bawaan, atau Anda dapat membuat peran khusus untuk memberikan izin tertentu. Untuk mengetahui petunjuk cara memberikan peran pada project, lihat Memberikan atau mencabut peran. Untuk mengetahui informasi selengkapnya tentang peran Cloud Trace Agent, lihat dokumentasi Identity and Access Management (IAM).

Mengonfigurasi pelacakan untuk aplikasi Anda

Gunakan petunjuk berikut untuk mengonfigurasi pelacakan dan mulai mengumpulkan data trace menggunakan library klien Cloud Storage:

C++

  1. Instal versi berikut:

    • Library klien C++ versi v2.16.0 atau yang lebih baru

    • C++ versi 14 atau yang lebih baru

  2. Untuk mengaktifkan instrumentasi pelacakan OpenTelemetry di library klien C++, perbarui konfigurasi sistem build untuk CMake atau Bazel.

  3. Buat instance klien Cloud Storage dengan trace OpenTelemetry diaktifkan.

    #include "google/cloud/opentelemetry/configure_basic_tracing.h"
    #include "google/cloud/storage/client.h"
    #include "google/cloud/opentelemetry_options.h"
    #include <iostream>
    
    int main(int argc, char* argv[]) {
      if (argc != 3) {
        std::cerr << "Usage: " << argv[0] << " <bucket-name> <project-id>\n";
        return 1;
      }
      std::string const bucket_name = argv[1];
      std::string const project_id = argv[2];
    
      // Create aliases to make the code easier to read.
      namespace gc = ::google::cloud;
      namespace gcs = ::google::cloud::storage;
    
      // Instantiate a basic tracing configuration which exports traces to Cloud
      // Trace. By default, spans are sent in batches and always sampled.
      auto project = gc::Project(project_id);
      auto configuration = gc::otel::ConfigureBasicTracing(project);
    
      // Create a client with OpenTelemetry tracing enabled.
      auto options = gc::Options{}.set<gc::OpenTelemetryTracingOption>(true);
      auto client = gcs::Client(options);
    
      auto writer = client.WriteObject(bucket_name, "quickstart.txt");
      writer << "Hello World!";
      writer.Close();
      if (!writer.metadata()) {
        std::cerr << "Error creating object: " << writer.metadata().status()
                  << "\n";
        return 1;
      }
      std::cout << "Successfully created object: " << *writer.metadata() << "\n";
    
      auto reader = client.ReadObject(bucket_name, "quickstart.txt");
      if (!reader) {
        std::cerr << "Error reading object: " << reader.status() << "\n";
        return 1;
      }
    
      std::string contents{std::istreambuf_iterator<char>{reader}, {}};
      std::cout << contents << "\n";
    
      // The basic tracing configuration object goes out of scope. The collected
      // spans are flushed to Cloud Trace.
    
      return 0;
    }

Java

  1. Instal versi library klien Java Cloud Storage berikut:

    • com.google.cloud:google-cloud-storage:2.47.0 atau yang lebih baru

    • com.google.cloud:libraries-bom:26.53.0 atau yang lebih baru

  2. Instal pengekspor Cloud Trace untuk OpenTelemetry. Anda juga dapat menggunakan pengekspor pilihan Anda.

  3. Instal propagator Cloud Trace.

  4. Buat instance klien Cloud Storage dengan trace OpenTelemetry diaktifkan.

    public class QuickstartOpenTelemetrySample {
      public static void main(String... args) throws Exception {
        SpanExporter spanExporter = TraceExporter.createWithDefaultConfiguration();
        TextMapPropagator propagators =
            TextMapPropagator.composite(
                W3CTraceContextPropagator.getInstance(),
                new XCloudTraceContextPropagator(/* oneway= */ true));
    
        OpenTelemetrySdk openTelemetry =
            OpenTelemetrySdk.builder()
                .setPropagators(ContextPropagators.create(propagators))
                .setTracerProvider(
                    SdkTracerProvider.builder()
                        // Sample Rate is set to alwaysOn
                        // It is recommended to sample based on a ratio for standard use ie.
                        // .setSampler(Sampler.traceIdRatioBased(0.2)) // sample only 20% of trace ids
                        .setSampler(Sampler.alwaysOn())
                        .addSpanProcessor(BatchSpanProcessor.builder(spanExporter).build())
                        .build())
                .build();
        StorageOptions options = StorageOptions.newBuilder().setOpenTelemetry(openTelemetry).build();
        Storage storage = options.getService();
        System.out.println("Created an instance of storage with OpenTelemetry configured");
      }
    }

Python

  1. Instal library klien Python Cloud Storage:

    pip install google-cloud-storage[tracing]>=2.18.0
  2. Instal pengekspor dan propagator Cloud Trace. Anda juga dapat menggunakan pengekspor apa pun pilihan Anda.

    pip install opentelemetry-exporter-gcp-trace opentelemetry-propagator-gcp
  3. Instal instrumentasi permintaan OpenTelemetry untuk melacak permintaan HTTP yang mendasarinya.

    pip install opentelemetry-instrumentation-requests
  4. Tetapkan variabel lingkungan untuk mengaktifkan pelacakan secara selektif bagi klien penyimpanan Python:

    export ENABLE_GCS_PYTHON_CLIENT_OTEL_TRACES=True
  5. Konfigurasikan pengekspor trace dan penyedia trace.

    
    from opentelemetry import trace
    from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
    from opentelemetry.resourcedetector.gcp_resource_detector import (
        GoogleCloudResourceDetector,
    )
    from opentelemetry.sdk.trace import TracerProvider
    from opentelemetry.sdk.trace.export import BatchSpanProcessor
    from opentelemetry.sdk.trace.sampling import ALWAYS_ON
    # Optional: Enable traces emitted from the requests HTTP library.
    from opentelemetry.instrumentation.requests import RequestsInstrumentor
    
    from google.cloud import storage
    
    # The ID of your GCS bucket
    # bucket_name = "your-bucket-name"
    # The ID of your GCS object
    # blob_name = "your-object-name"
    # The contents to upload to the file
    # data = "The quick brown fox jumps over the lazy dog."
    
    # In this sample, we use Google Cloud Trace to export the OpenTelemetry
    # traces: https://cloud.google.com/trace/docs/setup/python-ot
    # Choose and configure the exporter for your environment.
    
    tracer_provider = TracerProvider(
        # Sampling is set to ALWAYS_ON.
        # It is recommended to sample based on a ratio to control trace ingestion volume,
        # for instance, sampler=TraceIdRatioBased(0.2)
        sampler=ALWAYS_ON,
        resource=GoogleCloudResourceDetector().detect(),
    )
    
    # Export to Google Cloud Trace.
    tracer_provider.add_span_processor(BatchSpanProcessor(CloudTraceSpanExporter()))
    trace.set_tracer_provider(tracer_provider)
    
    # Optional: Enable traces emitted from the requests HTTP library.
    RequestsInstrumentor().instrument(tracer_provider=tracer_provider)
    
    # Get the tracer and create a new root span.
    tracer = tracer_provider.get_tracer("My App")
    with tracer.start_as_current_span("trace-quickstart"):
        # Instantiate a storage client and perform a write and read workload.
        storage_client = storage.Client()
        bucket = storage_client.bucket(bucket_name)
        blob = bucket.blob(blob_name)
        blob.upload_from_string(data)
        print(f"{blob_name} uploaded to {bucket_name}.")
    
        blob.download_as_bytes()
        print("Downloaded storage object {} from bucket {}.".format(blob_name, bucket_name))
    

Rust

  1. Tambahkan library klien Rust Cloud Storage serta crate tracing dan OpenTelemetry ke file manifes Cargo.toml Anda:

    cargo add google-cloud-storage opentelemetry opentelemetry_sdk opentelemetry-otlp tracing tracing-opentelemetry tracing-subscriber
  2. Konfigurasikan struct SdkTracerProvider OpenTelemetry dengan pengekspor OTLP (misalnya, mengirim span ke OpenTelemetry Collector atau Telemetry API), daftarkan pelanggan tracing, dan bangun klien Storage dengan metode .with_tracing() diaktifkan:

    use google_cloud_storage::client::Storage;
    use opentelemetry::trace::TracerProvider as _;
    use tracing_subscriber::Registry;
    use tracing_subscriber::layer::SubscriberExt;
    
    pub async fn sample(bucket_id: &str) -> anyhow::Result<()> {
        const NAME: &str = "enable-otel-tracing.txt";
    
        // Create an OTLP exporter to send spans to an OpenTelemetry Collector
        // running on localhost (the default).
        let exporter = opentelemetry_otlp::SpanExporter::builder()
            .with_tonic()
            .build()?;
        let provider = opentelemetry_sdk::trace::SdkTracerProvider::builder()
            .with_batch_exporter(exporter)
            .build();
        let tracer = provider.tracer("storage-quickstart");
    
        // Create a tracing layer and register the subscriber for the current scope.
        // In an application's `main`, use `tracing::subscriber::set_global_default` instead.
        let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);
        let subscriber = Registry::default().with(telemetry);
        let _guard = tracing::subscriber::set_default(subscriber);
    
        // Build a Storage client with client-side tracing enabled.
        let client = Storage::builder().with_tracing().build().await?;
    
        let object = client
            .write_object(
                format!("projects/_/buckets/{bucket_id}"),
                NAME,
                "Hello, world!",
            )
            .set_if_generation_match(0)
            .send_unbuffered()
            .await?;
        println!("Uploaded object {} to bucket {bucket_id}.", object.name);
    
        let mut reader = client
            .read_object(format!("projects/_/buckets/{bucket_id}"), NAME)
            .send()
            .await?;
        let mut contents = Vec::new();
        while let Some(chunk) = reader.next().await.transpose()? {
            contents.extend_from_slice(&chunk);
        }
        println!(
            "Downloaded {} bytes from object {NAME} in bucket {bucket_id}.",
            contents.len()
        );
    
        Ok(())
    }

Melihat trace Anda

Gunakan Cloud Trace Explorer untuk melihat data trace Anda di konsol Google Cloud :

  1. Di konsol Google Cloud , buka halaman Trace explorer:

    Buka Trace explorer

    Anda juga dapat menemukan halaman ini menggunakan kotak penelusuran.

  2. Di halaman Trace explorer, klik trace tertentu dalam diagram sebar untuk melihat detail trace.

    Panel Trace details menampilkan tabel span trace.

  3. Opsional: klik baris span untuk melihat informasi mendetail tentang span tertentu, seperti informasi berikut:

    • Atribut: key-value pair yang memberikan informasi tambahan tentang span.

    • Logs & events: entri log yang terkait dengan span.

    • Stack trace: stack trace yang terkait dengan span.

    • Metadata & Links: link ke layanan Google Cloud lain yang terkait dengan span.

Untuk mengetahui informasi selengkapnya tentang cara menggunakan Cloud Trace Explorer, lihat Menemukan dan menjelajahi trace.

Langkah berikutnya