Melihat latensi permintaan aplikasi

Pelajari cara mengumpulkan dan melihat data latensi dari aplikasi Anda:

  1. Buat cluster Google Kubernetes Engine (GKE) menggunakan Google Cloud CLI.

  2. Download dan deploy aplikasi contoh ke cluster Anda.

  3. Buat trace dengan mengirim permintaan HTTP ke aplikasi contoh.

  4. Lihat informasi latensi trace yang Anda buat.

  5. Jalankan pembersihan.


Untuk mengikuti panduan langkah demi langkah untuk tugas ini langsung di Google Cloud konsol, klik Pandu saya:

Pandu saya


Sebelum memulai

  1. Batasan keamanan yang ditentukan oleh organisasi mungkin mencegah Anda menyelesaikan langkah-langkah berikut. Untuk mengetahui informasi pemecahan masalah, lihat Mengembangkan aplikasi di lingkungan yang terbatas. Google Cloud

  2. Login ke akun Anda. Google Cloud 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.
  3. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  4. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

  5. Verify that billing is enabled for your Google Cloud project.

  6. Enable the Google Kubernetes Engine and Cloud Trace APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  7. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Google Kubernetes Engine and Cloud Trace APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk membuat cluster Google Kubernetes Engine dan melihat rentang trace, minta administrator untuk memberi Anda peran IAM berikut di project Anda:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Membuat cluster GKE

Panduan ini membuat cluster GKE standar. Jika Anda menggunakan mode Autopilot untuk Google Kubernetes Engine atau jika Anda mengaktifkan Workload Identity Federation for GKE, Anda harus mengonfigurasi aplikasi untuk menggunakan Workload Identity Federation for GKE.

  1. Di toolbar, klik Activate Cloud Shell, lalu lakukan langkah-langkah berikut di Cloud Shell.

  2. Buat cluster:

    gcloud container clusters create cloud-trace-demo --zone us-central1-c
    

    Perintah sebelumnya, yang memerlukan waktu beberapa menit untuk diselesaikan, membuat cluster standar dengan nama cloud-trace-demo di zona us-central1-c.

  3. Konfigurasikan kubectl untuk otomatis memperbarui kredensialnya agar menggunakan identitas yang sama dengan Google Cloud CLI:

    gcloud container clusters get-credentials cloud-trace-demo --zone us-central1-c
    
  4. Verifikasi akses ke cluster Anda:

    kubectl get nodes
    

    Contoh output perintah ini adalah:

    NAME                                              STATUS   ROLES    AGE   VERSION
    gke-cloud-trace-demo-default-pool-063c0416-113s   Ready    <none>   78s   v1.22.12-gke.2300
    gke-cloud-trace-demo-default-pool-063c0416-1n27   Ready    <none>   79s   v1.22.12-gke.2300
    gke-cloud-trace-demo-default-pool-063c0416-frkd   Ready    <none>   78s   v1.22.12-gke.2300
    

Mendownload dan men-deploy aplikasi

Download dan deploy aplikasi Python, yang menggunakan framework Flask dan paket OpenTelemetry. Aplikasi ini dijelaskan di bagian Tentang aplikasi di halaman ini.

Di Cloud Shell, lakukan hal berikut:

  1. Clone aplikasi Python dari GitHub:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Jalankan perintah berikut untuk men-deploy aplikasi contoh:

    cd python-docs-samples/trace/cloud-trace-demo-app-opentelemetry && ./setup.sh
    

    Skrip setup.sh memerlukan waktu beberapa menit untuk diselesaikan.

    Skrip ini mengonfigurasi tiga layanan menggunakan image bawaan, lalu menunggu semua resource di-provisioning. Workload diberi nama cloud-trace-demo-a, cloud-trace-demo-b, dan cloud-trace-demo-c.

    Contoh output perintah ini adalah:

    deployment.apps/cloud-trace-demo-a is created
    service/cloud-trace-demo-a is created
    deployment.apps/cloud-trace-demo-b is created
    service/cloud-trace-demo-b is created
    deployment.apps/cloud-trace-demo-c is created
    service/cloud-trace-demo-c is created
    
    Wait for load balancer initialization complete......
    Completed.
    

Membuat data trace

Trace menjelaskan waktu yang dibutuhkan aplikasi untuk menyelesaikan satu operasi.

Untuk membuat trace, di Cloud Shell, jalankan perintah berikut:

curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].status.loadBalancer.ingress[0].ip}')

Respons perintah sebelumnya terlihat seperti berikut:

Hello, I am service A
And I am service B
Hello, I am service C

Anda dapat menjalankan perintah curl beberapa kali untuk membuat beberapa trace.

Melihat data latensi

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

    Buka Trace explorer

    Anda juga dapat menemukan halaman ini menggunakan kotak penelusuran.

    Screenshot berikut menunjukkan hasil menjalankan perintah curl beberapa kali. Grafik menampilkan data latensi gabungan untuk rentang, yang menjelaskan sub-operasi trace.

    Jendela penjelajah rekaman aktivitas untuk panduan memulai cepat.

  2. Untuk melihat trace secara mendetail, pilih rentang dalam grafik atau baris dalam tabel.

    Dialog detail trace akan terbuka, seperti yang ditunjukkan dalam screenshot berikut:

    Detail tambahan tentang setiap rentang ditampilkan di panel detail.

    Diagram Gantt menampilkan informasi tentang trace yang dipilih. Baris pertama dalam diagram Gantt adalah untuk trace, dan setiap baris berikutnya adalah rentang dalam trace.

  3. Untuk melihat informasi mendetail tentang rentang, di diagram Gantt, pilih rentang.

Tentang aplikasi

Aplikasi contoh yang digunakan dalam panduan memulai ini tersedia di repositori GitHub. Repositori ini berisi informasi tentang cara menggunakan aplikasi di lingkungan selain Cloud Shell. Aplikasi contoh ditulis dalam Python, menggunakan framework Flask dan paket OpenTelemetry, serta dijalankan di cluster GKE.

Panduan ini membuat cluster GKE standar. Jika Anda menggunakan mode Autopilot untuk Google Kubernetes Engine atau jika Anda mengaktifkan Workload Identity Federation for GKE, Anda harus mengonfigurasi aplikasi untuk menggunakan Workload Identity Federation for GKE.

Instrumentasi

File app.py di repositori GitHub, berisi instrumentasi yang diperlukan untuk mengambil dan mengirim data trace ke project Anda: Google Cloud

  • Aplikasi ini mengimpor beberapa paket OpenTelemetry:

    from opentelemetry import trace
    from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
    from opentelemetry.instrumentation.flask import FlaskInstrumentor
    from opentelemetry.instrumentation.requests import RequestsInstrumentor
    from opentelemetry.propagate import set_global_textmap
    from opentelemetry.propagators.cloud_trace_propagator import CloudTraceFormatPropagator
    from opentelemetry.sdk.trace import TracerProvider
    from opentelemetry.sdk.trace.export import BatchSpanProcessor
    
  • Aplikasi ini menginstrumentasi permintaan web dengan konteks trace dan otomatis melacak pengendali Flask dan permintaan ke layanan lain:

    app = flask.Flask(__name__)
    FlaskInstrumentor().instrument_app(app)
    RequestsInstrumentor().instrument()
  • Aplikasi ini mengonfigurasi pengekspor Cloud Trace sebagai penyedia trace, yang menyebarkan konteks trace dalam format Cloud Trace:

    def configure_exporter(exporter):
        """Configures OpenTelemetry context propagation to use Cloud Trace context
    
        Args:
            exporter: exporter instance to be configured in the OpenTelemetry tracer provider
        """
        set_global_textmap(CloudTraceFormatPropagator())
        tracer_provider = TracerProvider()
        tracer_provider.add_span_processor(BatchSpanProcessor(exporter))
        trace.set_tracer_provider(tracer_provider)
    
    
    configure_exporter(CloudTraceSpanExporter())
    tracer = trace.get_tracer(__name__)
  • Cuplikan kode berikut menunjukkan cara mengirim permintaan di Python. OpenTelemetry secara implisit menyebarkan konteks trace untuk Anda dengan permintaan keluar Anda:

    if endpoint is not None and endpoint != "":
        data = {"body": keyword}
        response = requests.get(
            endpoint,
            params=data,
        )
        return keyword + "\n" + response.text
    else:
        return keyword, 200
    
    

Cara kerja aplikasi

Agar lebih jelas, di bagian ini, cloud-trace-demo dihilangkan dari nama layanan. Misalnya, layanan cloud-trace-demo-c direferensikan sebagai c.

Aplikasi ini membuat tiga layanan bernama a, b, dan c. Layanan a dikonfigurasi untuk memanggil layanan b, layanan b dikonfigurasi untuk memanggil layanan c. Untuk mengetahui detail konfigurasi layanan, lihat file YAML di repositori GitHub.

Saat Anda mengeluarkan permintaan HTTP ke layanan a dalam panduan memulai ini, Anda menggunakan perintah curl berikut:

curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].status.loadBalancer.ingress[0].ip}')

Perintah curl berfungsi sebagai berikut:

  1. kubectl mengambil alamat IP layanan bernama cloud-trace-demo-a.
  2. Perintah curl kemudian mengirim permintaan HTTP ke layanan a.
  3. Layanan a menerima permintaan HTTP dan mengirim permintaan ke layanan b.
  4. Layanan b menerima permintaan HTTP dan mengirim permintaan ke layanan c.
  5. Layanan c menerima permintaan HTTP dari layanan b dan menampilkan string Hello, I am service C ke layanan b.
  6. Layanan b menerima respons dari layanan c, menambahkannya ke string And I am service B, dan menampilkan hasilnya ke layanan a.
  7. Layanan a menerima respons dari layanan b dan menambahkannya ke string Hello, I am service A.
  8. Respons dari layanan a dicetak di Cloud Shell.

Jalankan pembersihan.

Agar akunAnda tidak dikenai biaya untuk resource yang digunakan pada halaman ini, ikuti langkah-langkah berikut. Google Cloud

Jika Anda membuat project baru dan tidak lagi memerlukan project tersebut, maka hapus project tersebut.

Jika Anda menggunakan project yang ada, lakukan hal berikut:

  1. Untuk menghapus cluster, di Cloud Shell, jalankan perintah berikut:

    gcloud container clusters delete cloud-trace-demo --zone us-central1-c

Langkah berikutnya