All Products
Search
Document Center

Alibaba Cloud Service Mesh:Pelacakan terpadu untuk aplikasi dalam-mesh dan luar-mesh

Last Updated:Jun 21, 2026

Alibaba Cloud Service Mesh (ASM) menyediakan kemampuan pelacakan siap pakai untuk aplikasi di dalam service mesh. Namun, untuk mencapai pelacakan end-to-end yang mencakup aplikasi eksternal yang berkomunikasi dengan layanan dalam-mesh, Anda harus menggunakan Managed Service for OpenTelemetry guna menyatukan jejak panggilan. Panduan ini menjelaskan cara menggunakan Managed Service for OpenTelemetry untuk melacak permintaan dari aplikasi eksternal ke aplikasi di dalam instans ASM, sehingga menghasilkan satu jejak panggilan terpadu.

Prasyarat

Catatan

  • Panduan ini menerapkan aplikasi Python bernama ExternalProxy yang menjalankan server HTTP. Mengakses path root ExternalProxy akan memanggil layanan productpage dari aplikasi Bookinfo yang berjalan di dalam service mesh.

  • Panduan ini menggunakan Managed Service for OpenTelemetry sebagai backend pelacakan. Jika Anda menggunakan sistem pelacakan mandiri yang kompatibel dengan Zipkin, buka titik akhir (endpoint) pelaporannya agar dapat diakses oleh aplikasi eksternal. Anda kemudian dapat melewatkan Langkah 2: Dapatkan endpoint untuk Managed Service for OpenTelemetry dan langsung melanjutkan ke Langkah 3: Terapkan aplikasi ExternalProxy luar-mesh, menggunakan endpoint sistem Anda sebagai alamat pelaporan.

Langkah 1: Terapkan aplikasi Bookinfo dalam-mesh

  1. Jalankan perintah berikut untuk menerapkan aplikasi Bookinfo ke kluster dalam instans ASM Anda.

    Anda dapat mengunduh file YAML untuk aplikasi Bookinfo dari GitHub.

    kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f bookinfo.yaml
  2. Jalankan perintah berikut untuk menerapkan VirtualService untuk aplikasi Bookinfo.

    Anda dapat mengunduh file YAML untuk VirtualService dari GitHub.

    kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f virtual-service-all-v1.yaml
  3. Jalankan perintah berikut untuk menerapkan DestinationRule untuk aplikasi Bookinfo.

    Anda dapat mengunduh file YAML untuk DestinationRule dari GitHub.

    kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f destination-rule-all.yaml
  4. Jalankan perintah berikut untuk menerapkan Gateway untuk aplikasi Bookinfo.

    Anda dapat mengunduh file YAML untuk Gateway dari GitHub.

    kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f bookinfo-gateway.yaml

Langkah 2: Dapatkan endpoint OpenTelemetry

  1. Masuk ke konsol Managed Service for OpenTelemetry. Di panel navigasi sebelah kiri, klik Overview.

  2. Pada halaman Overview, klik tab Access process, lalu klik View access point information.

  3. Lihat endpoint tersebut.

    1. Di bagian atas halaman, pilih wilayah target.

      Anda harus memilih wilayah tempat kluster ACK untuk aplikasi Bookinfo diterapkan. Jika tidak, data pelacakan tidak dapat dikorelasikan.

    2. Pada tab Access point information, aktifkan sakelar Show token. Pilih endpoint jaringan publik atau jaringan pribadi berdasarkan lokasi penerapan aplikasi ExternalProxy Anda.

      Karena ExternalProxy melaporkan data menggunakan API Zipkin v1, Anda memerlukan endpoint v1. Klik tab Zipkin dan temukan endpoint yang sesuai dalam tabel. Biasanya, Anda sebaiknya menggunakan endpoint v2. Namun, untuk skenario tertentu seperti integrasi Istio atau Molten, diperlukan endpoint v1. Saat menggunakan komponen Sleuth, URL dasar tidak boleh mencakup /api/v2/spans.

Langkah 3: Terapkan aplikasi ExternalProxy luar-mesh

Penting
  • Proxy sidecar meneruskan semua bagian permintaan masuk, termasuk Header HTTP dan badan permintaan, ke layanan hulu (upstream). Artinya, header yang terkait pelacakan juga diteruskan.

  • Untuk memastikan propagasi konteks jejak, aplikasi Anda harus meneruskan header pelacakan yang diperlukan dalam permintaan arah keluar (outbound), sesuai praktik standar komunitas.

  1. Simpan kode berikut sebagai file bernama ExternalProxy.py di lingkungan runtime aplikasi eksternal Anda.

    • Ganti {XTRACE_ZIPKIN_V1_ENDPOINT} dengan endpoint dari langkah sebelumnya. Jika Anda melaporkan ke sistem pelacakan mandiri, gunakan endpoint pelaporannya sebagai gantinya.

    • Ganti {INGRESS_GATE_WAY_IP} dengan alamat IP gerbang masuk kluster ACK Anda.

      ExternalProxy.py

      import requests
      from flask import Flask
      from py_zipkin.zipkin import zipkin_span,create_http_headers_for_new_span
      from py_zipkin.util import generate_random_64bit_string
      from py_zipkin.util import ZipkinAttrs
      import time
      app = Flask(__name__)
      def do_stuff(trace_id, span_id, parent_span_id):
          time.sleep(2)
          headers = create_http_headers_for_new_span()
          headers["X-B3-TraceId"] = trace_id
          headers["X-B3-SpanId"] = span_id
          headers["X-B3-ParentSpanId"] = parent_span_id
          print "SEND TO INGRESS HEADERS : {0}".format(headers)
          r = requests.get('http://${INGRESS_GATE_WAY_IP}/productpage', headers=headers)
          return 'OK'
      def http_transport(encoded_span):
          # awalan encoding dijelaskan di https://github.com/Yelp/py_zipkin#transport
          body=encoded_span
          zipkin_url="${XTRACE_ZIPKIN_V1_ENDPOINT}"
          headers = {"Content-Type": "application/x-thrift"}
          # Sebaiknya bungkus ini dalam try/except jika POST gagal
          r=requests.post(zipkin_url, data=body, headers=headers)
          print(body)
      @app.route('/')
      def index():
          with zipkin_span(
              service_name='external-proxy',
              span_name='external-proxy/inbound',
              transport_handler=http_transport,
              port=5000,
              sample_rate=100, 
          ) as inbound_span:
          do_stuff(inbound_span.zipkin_attrs.trace_id, inbound_span.zipkin_attrs.span_id, inbound_span.zipkin_attrs.parent_span_id)
          return 'OK', 200
      if __name__=='__main__':
          app.run(host="0.0.0.0",port=5000,debug=True)
  2. Jalankan perintah berikut untuk memulai aplikasi ExternalProxy.

    python ExternalProxy.py
     * Serving Flask app "main" (pemuatan malas)
     * Environment: production
       WARNING: Ini adalah server pengembangan. Jangan gunakan dalam penerapan produksi.
       Gunakan server WSGI produksi sebagai gantinya.
     * Debug mode: on
     * Running on http://0.0.0.0:5000/ (Tekan CTRL+C untuk keluar)
     * Restarting with stat
     * Debugger is active!
     * Debugger PIN: 317-792-686
  3. Jalankan perintah berikut untuk mengirim permintaan ke aplikasi ExternalProxy.

    curl localhost:5000

    Output yang diharapkan:

    OK

Langkah 4: Lihat informasi jejak

  1. Masuk ke konsol Managed Service for OpenTelemetry.

  2. Di panel navigasi sebelah kiri, klik Applications. Pilih wilayah di bagian atas halaman, lalu klik ExternalProxy dalam daftar aplikasi.

  3. Di panel navigasi sebelah kiri, klik Application details. Klik tab Traces, lalu klik Trace ID untuk melihat detail jejak panggilan.

    Jejak panggilan lengkap kini terbentuk antara aplikasi eksternal, ExternalProxy, dan aplikasi Bookinfo dalam-mesh. Bagian atas halaman detail jejak menampilkan informasi ringkasan, termasuk Start time, Duration, Services, Depth, dan Total spans. Di bawah ringkasan, tampilan pohon menunjukkan hubungan hierarkis setiap rentang. Kolom-kolomnya mencakup Span name, Timeline, Service name, Start time, IP address, dan Status. Dalam contoh ini, jejak panggilan dimulai dari external-proxy, melewati productpage, lalu secara berurutan memanggil layanan details, reviews, dan ratings. Beberapa rentang, seperti rentang pembatas laju ahas_rate_limit_cluster, mungkin muncul dengan status error.