Cloud Trace dan Cloud Service Mesh

Catatan: Panduan ini hanya mendukung Cloud Service Mesh dengan Istio API dan tidak mendukung API. Google Cloud Untuk mengetahui informasi selengkapnya, lihat Ringkasan Cloud Service Mesh.

Cloud Trace adalah sistem pelacakan terdistribusi yang mengumpulkan data latensi dari aplikasi dan menampilkannya dalam waktu hampir real-time. Dengan Cloud Trace, Anda dapat mengikuti contoh permintaan melalui sistem terdistribusi, mengamati panggilan jaringan, dan membuat profil sistem secara menyeluruh.

Cloud Trace tersedia dengan instalasi Cloud Service Mesh di platform berikut:

  • GKE di Google Cloud
  • Cluster GKE Enterprise di infrastruktur lokal jika Anda menginstal dengan otoritas sertifikat Cloud Service Mesh

Perhatikan bahwa Cloud Trace dinonaktifkan secara default. Setelah diaktifkan, halaman Cloud Service Mesh di Google Cloud konsol akan menyediakan link ke rekaman aktivitas di halaman Cloud Trace . Untuk mengetahui informasi harga mendetail, lihat halaman harga Cloud Trace.

Mengaktifkan Cloud Trace

Bagian ini menunjukkan cara mengaktifkan Cloud Trace.

Terkelola (TD)

Jika sudah memiliki CR Telemetry API Istio, sertakan dalam CR Telemetry API Istio baru untuk mempertahankan setelan penyesuaian sebelumnya di CR Telemetry Istio yang ada.

Bagian ini menunjukkan cara mengaktifkan Cloud Trace di Cloud Service Mesh dengan bidang kontrol Traffic Director terkelola.

  1. Jalankan perintah berikut untuk mengaktifkan Cloud Trace:

    cat <<EOF | kubectl apply -n istio-system -f -
    apiVersion: telemetry.istio.io/v1alpha1
    kind: Telemetry
    metadata:
       name: enable-cloud-trace
       namespace: istio-system
    spec:
       tracing:
       - providers:
         - name: stackdriver
    EOF
    

    Secara default, frekuensi pengambilan sampel adalah 1%. Anda dapat mengganti nilai default dengan menentukan randomSamplingPercentage dan menetapkannya ke nilai antara 0.0 dan 100.0.

    Contoh berikut menetapkan frekuensi pengambilan sampel sebesar 100% (yang biasanya hanya Anda lakukan untuk tujuan demo atau pemecahan masalah):

    cat <<EOF | kubectl apply -n istio-system -f -
    apiVersion: telemetry.istio.io/v1alpha1
    kind: Telemetry
    metadata:
       name: enable-cloud-trace
       namespace: istio-system
    spec:
       tracing:
       - providers:
         - name: stackdriver
         randomSamplingPercentage: 100.0
    EOF
    

Terkelola (Istiod)

Bagian ini menunjukkan cara mengaktifkan Cloud Trace di Cloud Service Mesh dengan bidang kontrol Istiod terkelola.

  1. Jalankan perintah berikut:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    data:
       mesh: |-
          defaultConfig:
            tracing:
              stackdriver: {}
    kind: ConfigMap
    metadata:
       name: istio-release-channel
       namespace: istio-system
    EOF
    

    dengan release-channel adalah saluran rilis Anda (asm-managed, asm-managed-stable, atau asm-managed-rapid).

  2. Jalankan perintah berikut untuk melihat configmap:

    kubectl get configmap istio-release-channel -n istio-system -o yaml
    
  3. Untuk memverifikasi bahwa Cloud Trace diaktifkan, pastikan baris berikut muncul di bagian mesh:.

    ...
    apiVersion: v1
    data:
       mesh: |
       ....
       defaultConfig:
          tracing:
             stackdriver:{}
    ...
    
  4. Mulai ulang proxy.

    Perhatikan bahwa konfigurasi tracer adalah bagian dari konfigurasi bootstrap proxy, sehingga setiap pod harus dimulai ulang dan disisipkan kembali untuk mengambil update tracer. Misalnya, Anda dapat menggunakan perintah berikut untuk memulai ulang pod yang termasuk dalam deployment:

    kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Dalam cluster

Bagian ini menunjukkan cara mengaktifkan Cloud Trace di Cloud Service Mesh dengan bidang kontrol dalam cluster.

Untuk mengaktifkan Cloud Trace, deploy ulang bidang kontrol yang dikelola pelanggan menggunakan file overlay berikut. Untuk mengetahui informasi selengkapnya tentang file overlay, lihat Tentang file overlay.

Default

Jalankan perintah berikut untuk mengaktifkan Cloud Trace:

 ./asmcli install \
    OTHER_FLAGS \
    --option cloud-tracing

Perintah ini menerapkan file overlay berikut untuk mengaktifkan pelacakan dengan opsi default. Perhatikan bahwa frekuensi pengambilan sampel default adalah 1%. Jika ingin mengganti nilai default, Anda harus menggunakan --custom-overlay.

 apiVersion: install.istio.io/v1alpha1
 kind: IstioOperator
 spec:
   meshConfig:
     enableTracing: true
   values:
     global:
       proxy:
         tracer: stackdriver

Untuk mengetahui daftar opsi, lihat paket anthos-service-mesh.

Kustom

Anda dapat mengganti nilai default dengan menentukan nilai tracing.sampling. Nilai harus berada dalam rentang 0,0 hingga 100,0 dengan presisi 0,01. Misalnya, untuk melacak 5 permintaan dari setiap 10.000,gunakan 0, 05.

Contoh berikut menunjukkan frekuensi pengambilan sampel sebesar 100% (yang hanya Anda lakukan untuk tujuan demo atau pemecahan masalah).

 apiVersion: install.istio.io/v1alpha1
 kind: IstioOperator
 spec:
   meshConfig:
     enableTracing: true
     defaultConfig:
        tracing:
        sampling: 100
   values:
     global:
       proxy:
         tracer: stackdriver

Jalankan perintah berikut untuk mengaktifkan Cloud Trace:

 ./asmcli install \
    OTHER_FLAGS \
    --custom_overlay PATH_TO_FILE

Perhatikan bahwa konfigurasi tracer adalah bagian dari konfigurasi bootstrap proxy, sehingga pod harus dimulai ulang dan disisipkan kembali untuk mengambil update tracer. Gunakan perintah berikut untuk memulai ulang pod yang termasuk dalam deployment:

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Penerapan konteks rekaman aktivitas

Meskipun proxy sidecar dapat mengirim rentang rekaman aktivitas secara otomatis, proxy tersebut memerlukan beberapa petunjuk untuk mengikat seluruh rekaman aktivitas. Aplikasi harus menerapkan header HTTP yang sesuai sehingga saat proxy mengirim informasi rentang, rentang dapat dikorelasikan dengan benar ke dalam satu rekaman aktivitas.

Untuk melakukannya, aplikasi perlu mengumpulkan dan menerapkan header yang sesuai dari permintaan masuk ke permintaan keluar. Konfigurasi pelacakan Cloud Service Mesh Stackdriver akan menerima salah satu format header berikut, dan akan menerapkan semua format berikut:

  • B3 (x-b3-traceid, x-b3-spanid, x-b3parentspanid, x-b3-sampled, x-b3-flags)
  • W3C TraceContext (traceparent)
  • Google Cloud Trace (x-cloud-trace-context)
  • gRPC TraceBin (grpc-trace-bin)

Artinya, aplikasi Anda dapat menggunakan salah satu format tersebut untuk menerapkan konteks pelacakan dan rekaman aktivitas akan dibuat serta ditetapkan ke Stackdriver dengan tepat.

Contoh

Berikut adalah contoh permintaan HTTP-Get dengan header traceparent dalam permintaan asli. Perhatikan header konteks rekaman aktivitas tambahan yang ditambahkan oleh proxy.

$ kubectl exec -it sleep-557747455f-n6flv -- curl "httpbin:8000/anything?freeform=" -H "accept: application/json" -H "Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01" -vv
*   Trying 10.12.3.52:8000...
* Connected to httpbin (10.12.3.52) port 8000 (#0)
> GET /anything?freeform= HTTP/1.1
> Host: httpbin:8000
> User-Agent: curl/7.80.0-DEV
> accept: application/json
> Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< server: envoy
< date: Wed, 10 Nov 2021 20:36:04 GMT
< content-type: application/json
< content-length: 1032
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 5
<
{
  "args": {
    "freeform": ""
  },
  "data": "",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "application/json",
    "Grpc-Trace-Bin": "AAB1Q9FeCeXWGAHU90zeEmm4AaDHmGRtdM7wAgE",
    "Host": "httpbin:8000",
    "Traceparent": "00-7543d15e09e5d61801d4f74cde1269b8-a0c798646d74cef0-01",
    "User-Agent": "curl/7.80.0-DEV",
    "X-B3-Sampled": "1",
    "X-B3-Spanid": "a0c798646d74cef0",
    "X-B3-Traceid": "7543d15e09e5d61801d4f74cde1269b8",
    "X-Cloud-Trace-Context": "7543d15e09e5d61801d4f74cde1269b8/11585396123534413552;o=1",
    "X-Envoy-Attempt-Count": "1",
    "X-Forwarded-Client-Cert": "<REDACTED>"
  },
  "json": null,
  "method": "GET",
  "origin": "127.0.0.6",
  "url": "http://httpbin:8000/anything?freeform="
}

Perhatikan bahwa dalam kumpulan header permintaan yang ditampilkan, kumpulan lengkap header konteks rekaman aktivitas ada.

Untuk contoh penerapan header lainnya, lihat Penerapan konteks rekaman aktivitas.

Membuat rekaman aktivitas dari klien dengan ID kustom

Untuk membuat rekaman aktivitas dari klien dengan ID kustom, gunakan perintah curl untuk membuat permintaan dengan klien eksternal dan memaksanya menampilkan rekaman aktivitas. Contoh:

curl $URL --header "x-client-trace-id: 105445aa7843bc8bf206b12000100000"

Untuk mengetahui informasi selengkapnya tentang x-client-trace-id, lihat dokumentasi Envoy.

Mengakses rekaman aktivitas

Melihat contoh rekaman aktivitas untuk layanan

Untuk melihat contoh rekaman aktivitas untuk layanan di aplikasi Anda, ikuti langkah-langkah berikut:

  1. Buka halaman Cloud Service Mesh di Google Cloud konsol.

    Buka halaman Cloud Service Mesh

  2. Di bagian Layanan, pilih nama Layanan yang ingin Anda periksa.

    Screenshot berikut menunjukkan contoh Layanan frontend.

    Grafik trace Cloud Service Mesh

  3. Di bagian Rekaman aktivitas permintaan, klik rekaman aktivitas mana pun untuk melihat informasi selengkapnya.

    Screenshot berikut menunjukkan contoh subpanel permintaan rekaman aktivitas.

    Subpanel trace Cloud Service Mesh

Melihat semua rekaman aktivitas

Untuk melihat semua rekaman aktivitas untuk Layanan, ikuti langkah-langkah berikut:

  1. Buka halaman Cloud Service Mesh di Google Cloud konsol.

    Buka halaman Cloud Service Mesh

  2. Di bagian Layanan, pilih nama Layanan yang ingin Anda periksa.

  3. Buka halaman Metrik.

  4. Tentukan rentang waktu dari menu dropdown Rentang Waktu atau tetapkan rentang kustom dengan linimasa.

  5. Klik Lihat rekaman aktivitas.

Rekaman aktivitas untuk layanan di Cloud Service Mesh berisi informasi berikut:

  • Latensi permintaan di berbagai layanan dalam mesh.
  • Properti permintaan HTTP, termasuk ID, URL, ukuran, latensi, dan protokol.
  • Nama layanan, namespace, dan ID mesh sebagai bagian dari label istio.canonical_service, istio.namespace, dan istio.mesh_id.

Langkah berikutnya