All Products
Search
Document Center

Alibaba Cloud Service Mesh:Kustomisasi log akses bidang data

Last Updated:Jun 19, 2026

Proxy Envoy pada bidang data menghasilkan log akses untuk seluruh lalu lintas dalam service mesh. Alibaba Cloud Service Mesh (ASM) memungkinkan Anda menyesuaikan konten log akses dari Proxy Envoy ini.

Prasyarat

Langkah 1: Aktifkan pencatatan log akses

Untuk instans ASM versi sebelum 1.17.2.35

  1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih ASM Instance > Base Information.

  3. Di pojok kanan atas halaman Basic Information, klik Settings.

  4. Pada panel Settings Update, pilih Enable access logging and print it to container stdout, lalu klik OK.

    Secara default, kontainer istio-proxy mengeluarkan log yang berisi field berikut. Jika Anda menonaktifkan pencatatan log akses, kontainer istio-proxy tidak akan menghasilkan log akses dalam format JSON.

    Field log bawaan

    
        "authority_for":"%REQ(:AUTHORITY)%",
        "bytes_received":"%BYTES_RECEIVED%",
        "bytes_sent":"%BYTES_SENT%",
        "downstream_local_address":"%DOWNSTREAM_LOCAL_ADDRESS%",
        "downstream_remote_address":"%DOWNSTREAM_REMOTE_ADDRESS%",
        "duration":"%DURATION%",
        "istio_policy_status":"%DYNAMIC_METADATA(istio.mixer:status)%",
        "method":"%REQ(:METHOD)%",
        "path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%",
        "protocol":"%PROTOCOL%",
        "request_id":"%REQ(X-REQUEST-ID)%",
        "requested_server_name":"%REQUESTED_SERVER_NAME%",
        "response_code":"%RESPONSE_CODE%",
        "response_flags":"%RESPONSE_FLAGS%",
        "route_name":"%ROUTE_NAME%",
        "start_time":"%START_TIME%",
        "trace_id":"%REQ(X-B3-TRACEID)%",
        "upstream_cluster":"%UPSTREAM_CLUSTER%",
        "upstream_host":"%UPSTREAM_HOST%",
        "upstream_local_address":"%UPSTREAM_LOCAL_ADDRESS%",
        "upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%",
        "upstream_transport_failure_reason":"%UPSTREAM_TRANSPORT_FAILURE_REASON%",
        "user_agent":"%REQ(USER-AGENT)%",
        "x_forwarded_for":"%REQ(X-FORWARDED-FOR)%"

Untuk instans ASM versi 1.17.2.35 dan seterusnya

  1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Observability Management Center > Observability Settings.

  3. Pada halaman Observability Settings, klik tab Global, Namespace, atau Custom sesuai kebutuhan Anda.

    • Jika Anda mengklik tab Namespace, klik Create dan pilih Namespace yang diperlukan.

    • Jika Anda mengklik tab Custom, klik Create, pilih Namespace, lalu masukkan Name dan Match Label sesuai kebutuhan.

  4. Pada bagian Log Settings, aktifkan sakelar Enable Log Output, lalu klik Submit.

    Setelah sakelar diaktifkan, sidecar atau gateway pada bidang data service mesh akan mencetak log akses ke standard output. ASM juga mendukung penyaringan log. Untuk informasi lebih lanjut, lihat Filter logs.

  5. Lihat log di stdout kontainer sidecar bidang data.

    Contoh berikut menunjukkan cara melihat log akses menggunakan kubectl.

    1. Jalankan perintah berikut untuk melihat log sidecar:

      kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1

      Contoh output

      {
          "authority_for":"47.110.XX.XXX",
          "bytes_received":"0",
          "bytes_sent":"22382",
          "downstream_local_address":"192.168.0.29:80",
          "downstream_remote_address":"221.220.XXX.XXX:0",
          "duration":"80",
          "istio_policy_status":"-",
          "method":"GET",
          "path":"/static/favicon.ico",
          "protocol":"HTTP/1.1",
          "request_id":"0f2cf829-3da5-4810-a618-08d9745d****",
          "requested_server_name":"outbound_.8000_._.httpbin.default.svc.cluster.local",
          "response_code":"200",
          "response_flags":"-",
          "route_name":"default",
          "start_time":"2023-06-30T04:00:36.841Z",
          "trace_id":"-",
          "upstream_cluster":"inbound|80||",
          "upstream_host":"192.168.0.29:80",
          "upstream_local_address":"127.0.X.X:55879",
          "upstream_response_time":"79",
          "upstream_service_time":"79",
          "upstream_transport_failure_reason":"-",
          "user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.X.X Safari/537.36",
          "x_forwarded_for":"221.220.XXX.XXX"
      }
    2. Jalankan perintah berikut untuk melihat log gerbang masuk:

      kubectl -n istio-system logs istio-ingressgateway-6cff9b6b58-r**** --tail 1

      Contoh output

      {
          "authority_for":"47.110.XX.XXX",
          "bytes_received":"0",
          "bytes_sent":"22382",
          "downstream_local_address":"192.168.0.63:80",
          "downstream_remote_address":"221.220.XXX.XXX:64284",
          "duration":"81",
          "istio_policy_status":"-",
          "method":"GET",
          "path":"/static/favicon.ico",
          "protocol":"HTTP/1.1",
          "request_id":"0f2cf829-3da5-4810-a618-08d9745d****",
          "requested_server_name":"-",
          "response_code":"200",
          "response_flags":"-",
          "route_name":"httpbin",
          "start_time":"2023-06-30T04:00:36.841Z",
          "trace_id":"-",
          "upstream_cluster":"outbound|8000||httpbin.default.svc.cluster.local",
          "upstream_host":"192.168.0.29:80",
          "upstream_local_address":"192.168.0.63:36140",
          "upstream_response_time":"81",
          "upstream_service_time":"81",
          "upstream_transport_failure_reason":"-",
          "user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.X.X Safari/537.36",
          "x_forwarded_for":"221.220.XXX.XXX"
      }
  6. (Opsional) Lihat log akses di Konsol Container Service for Kubernetes.

    Jika Anda menggunakan kluster Alibaba Cloud Container Service for Kubernetes (ACK), Anda juga dapat melihat log akses di Konsol ACK.

    1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

    2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

    3. Pada halaman Pods, klik nama pod target, lalu klik tab Logs di bagian bawah halaman untuk melihat log akses.

Untuk informasi lebih lanjut tentang log, lihat Observability Settings dan Enable control plane log collection and log-based alerting (New).

Langkah 2: Sesuaikan konten log akses

Untuk instans ASM versi sebelum 1.17.2.35

  1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih ASM Instance > Base Information.

  3. Pada bagian Basic Information di halaman Config Info, klik Enable access logging and print it to container stdout di samping Update Access Log Format.

  4. Pada kotak dialog Update Access Log Format, tambahkan format log akses kustom. Atur accessLogFormat key menjadi my_custom_key dan accessLogFormat value menjadi %REQ(end-user)%, lalu klik Submit.

    Contoh ini menunjukkan cara mengambil field header end-user dari permintaan HTTP dalam aplikasi contoh Bookinfo. Saat menyesuaikan format log akses, Anda dapat memilih field opsional yang disediakan oleh ASM atau menambahkan field kustom. Setelah memilih field tersebut, log akses akan dicetak dalam format kustom. Anda tidak perlu memilih empat field berikut: request_duration (%REQUEST_DURATION%), request_tx_duration (%REQUEST_TX_DURATION%), response_duration (%RESPONSE_DURATION%), dan response_tx_duration (%RESPONSE_TX_DURATION%).

Untuk instans ASM versi 1.17.2.35 dan seterusnya

  1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Observability Management Center > Observability Settings.

  3. Pada halaman Observability Settings, klik tab Global, Namespace, atau Custom sesuai kebutuhan Anda.

    • Jika Anda mengklik tab Namespace, klik Create dan pilih Namespace yang diperlukan.

    • Jika Anda mengklik tab Custom, klik Create, pilih Namespace, lalu masukkan Name dan Match Label sesuai kebutuhan.

  4. Pada bagian Log Settings, pilih field, ubah informasi field target, atau klik ikon 增加.png di samping metrik log di bagian bawah untuk menambahkan field log sesuai kebutuhan. Lalu, klik Submit.

    Anda hanya dapat menyesuaikan format log setelah mengaktifkan sakelar Enable Log Output. Pada bagian Log Format, field log yang dipilih secara default bersifat wajib dan tidak dapat diubah. Field log dapat mengambil nilai dari header permintaan, header respons, dan nilai bawaan Envoy.

    Contoh berikut menunjukkan cara mencetak header accept-encoding dalam permintaan. Atur accessLogFormat key menjadi accept-encoding, Type menjadi Request Properties, dan accessLogFormat value menjadi Accept-Encoding. Sebagai contoh, ekspresi format untuk field atribut permintaan authority_for adalah %REQ(:AUTHORITY)%, ekspresi format untuk field atribut respons upstream_response_time adalah %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%, dan properti bawaan Envoy mencakup field seperti request_duration dan response_duration.

  5. Jalankan perintah berikut untuk melihat log dari komponen bidang data service mesh:

    kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1|grep accept-encoding --color=auto

    Contoh output

    {
        "bytes_received":"0",
        "bytes_sent":"9593",
        "downstream_local_address":"192.168.0.29:80",
        "downstream_remote_address":"69.164.XXX.XX:0",
        "duration":"2",
        "istio_policy_status":"-",
        "method":"GET",
        "path":"/",
        "protocol":"HTTP/1.1",
        "request_id":"29939dc9-62be-4ddf-acf6-32cb098d****",
        "requested_server_name":"outbound_.8000_._.httpbin.default.svc.cluster.local",
        "response_code":"200",
        "response_flags":"-",
        "route_name":"default",
        "start_time":"2023-06-30T04:18:19.734Z",
        "trace_id":"-",
        "upstream_cluster":"inbound|80||",
        "upstream_host":"192.168.0.29:80",
        "upstream_local_address":"127.0.X.X:34723",
        "upstream_service_time":"2",
        "upstream_transport_failure_reason":"-",
        "user_agent":"Mozilla/5.0 zgrab/0.x",
        "x_forwarded_for":"69.164.XXX.XX",
        "authority_for":"47.110.XX.XXX",
        "upstream_response_time":"2",
        "accept-encoding":"gzip"
    }

    Output menunjukkan bahwa nilai header Accept-Encoding yang ditambahkan pada Langkah 2 termasuk dalam log akses. Untuk informasi lebih lanjut tentang log, lihat Observability Settings dan Enable control plane log collection and log-based alerting (New).

Langkah 3: Lihat log akses

Setelah Anda mengaktifkan pencatatan log akses, kontainer sidecar peminta akan mencetak log akses dalam format kustom yang ditentukan.

  1. Pada bilah alamat browser Anda, masukkan <Ingress gateway address>/productpage untuk mengakses aplikasi productpage.

  2. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  3. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Deployments.

  4. Di bagian atas halaman Deployments, atur Namespace menjadi default. Kemudian, temukan aplikasi productpage-v1 dan klik Details di kolom Actions.

  5. Pada halaman detail aplikasi, klik tab Logs dan atur Container menjadi istio-proxy.

    Panel output log menampilkan entri berikut. Kehadiran field my_custom_key dengan nilai jason menunjukkan bahwa Anda berhasil mengonfigurasi konten log kustom.

    {"method":"GET","x_forwarded_for":null,"upstream_host":"172.19.16.90:9080","protocol":"HTTP/1.1","my_custom_key":"jason","authority_for":"addedvalues:9080","response_code":200,"start_time":"2021-10-21T11:40:12.0552","request_id":"5222b7fb-05a6-4fae-8e13-xxx","bytes_sent":883,"downstream_remote_address":"172.19.16.11:33752","upstream_transport_failure_reason":null,"downstream_local_address":"192.168.237.140:9080","requested_server_name":null,"response_flags":"-","duration":4,"user_agent":"python-requests/2.18.4","route_name":"default","trace_id":null,"istio_policy_status":null,"path":"/addedvalues/0","upstream_cluster":"outbound|9080||addedvalues.default.svc.cluster.local","bytes_received":0,"upstream_service_time":"3","authority":"addedvalues:9080","upstream_local_address":"172.19.16.11:52430"}

Field log akses

Dalam Service Mesh ASM, "upstream" merujuk pada penerima permintaan dalam rantai panggilan, sedangkan "downstream" merujuk pada inisiator permintaan. Misalnya, ketika Layanan A mengirim permintaan ke Layanan B, Layanan A adalah "downstream", dan Layanan B adalah "upstream".

Parameter

Nilai

Deskripsi

authority_for

%REQ(:AUTHORITY)%

Hostname tujuan dalam permintaan. Untuk permintaan HTTP/1.1, ini sesuai dengan nilai header permintaan Host. Untuk permintaan HTTP/2, ini sesuai dengan nilai header permintaan :authority.

bytes_received

%BYTES_RECEIVED%

  • HTTP: Jumlah byte dalam badan permintaan.

  • TCP: Jumlah byte yang diterima dari koneksi downstream.

bytes_sent

%BYTES_SENT%

  • HTTP: Jumlah byte yang dikirim dalam badan permintaan. Untuk koneksi WebSocket, nilai ini mencakup panjang header respons.

  • TCP: Jumlah byte yang dikirim ke koneksi downstream.

downstream_local_address

%DOWNSTREAM_LOCAL_ADDRESS%

Alamat dan port tujuan koneksi downstream. Ini dapat dianggap sebagai alamat tujuan asli koneksi downstream.

downstream_remote_address

%DOWNSTREAM_REMOTE_ADDRESS%

Alamat dan port klien koneksi downstream.

method

%REQ(:METHOD)%

Metode permintaan. Field ini hanya berlaku untuk permintaan HTTP.

path

%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%

Jalur permintaan.

protocol

%PROTOCOL%

Protokol permintaan.

request_id

%REQ(X-REQUEST-ID)%

ID unik permintaan.

requested_server_name

%REQUESTED_SERVER_NAME%

Nama server yang ditentukan dalam koneksi SSL (Server Name Indication).

response_code

%RESPONSE_CODE%

Kode status respons HTTP.

response_flags

%RESPONSE_FLAGS%

Informasi tambahan tentang respons atau koneksi. Untuk informasi lebih lanjut tentang nilai-nilai dan maknanya, lihat referensi response_flag.

route_name

%ROUTE_NAME%

Nama rute yang cocok. Ini konsisten dengan nama rute yang didefinisikan dalam layanan virtual. Nilai kosong (-) menunjukkan tidak ada rute yang cocok.

start_time

%START_TIME%

Waktu saat pemrosesan permintaan dimulai, dengan presisi milidetik.

trace_id

%TRACE_ID%

ID jejak untuk pelacakan.

upstream_cluster

%UPSTREAM_CLUSTER%

Layanan dan subset tujuan upstream.

upstream_host

%UPSTREAM_HOST%

Host tujuan upstream, biasanya alamat IP Pod dan port.

upstream_local_address

%UPSTREAM_LOCAL_ADDRESS%

Alamat lokal yang digunakan untuk membuat koneksi dengan layanan upstream.

duration

%DURATION%

  • Untuk permintaan HTTP, field ini menunjukkan total waktu yang berlalu sejak permintaan mulai dibaca hingga byte terakhir respons dikirim ke layanan downstream. Ini adalah total waktu yang dibutuhkan sidecar atau gateway untuk memproses permintaan.

  • Untuk permintaan TCP, field ini menunjukkan durasi total koneksi downstream.

request_duration

%REQUEST_DURATION%

  • Untuk permintaan HTTP, field ini menunjukkan waktu yang dibutuhkan untuk membaca seluruh permintaan (header dan badan) dari layanan downstream. Jika durasi ini panjang, selidiki hal berikut:

    • Apakah kualitas jaringan baik dan bandwidth mencukupi.

    • Apakah aplikasi upstream atau downstream memiliki bottleneck di bawah beban I/O serupa.

  • Untuk permintaan TCP, field ini tidak diimplementasikan dan ditampilkan sebagai - dalam log.

request_tx_duration

%REQUEST_TX_DURATION%

  • Untuk permintaan HTTP, field ini menunjukkan waktu yang berlalu sejak permintaan dimulai hingga byte terakhirnya dikirim ke layanan upstream. Jika durasi ini panjang, selidiki hal berikut:

    • Apakah kualitas jaringan baik dan bandwidth mencukupi.

    • Apakah aplikasi upstream atau downstream memiliki bottleneck di bawah beban I/O serupa.

  • Untuk permintaan TCP, field ini tidak diimplementasikan dan ditampilkan sebagai - dalam log.

response_duration

%RESPONSE_DURATION%

  • Untuk permintaan HTTP, field ini menunjukkan waktu yang berlalu sejak permintaan dimulai hingga byte pertama respons dibaca dari layanan upstream. Jika durasi ini panjang dan request_tx_duration pendek, selidiki apakah aplikasi upstream memiliki bottleneck performa.

  • Untuk permintaan TCP, field ini tidak diimplementasikan dan ditampilkan sebagai - dalam log.

response_tx_duration

%RESPONSE_TX_DURATION%

  • Untuk permintaan HTTP, field ini menunjukkan waktu yang berlalu sejak byte pertama respons dari layanan upstream dibaca hingga byte terakhir dikirim ke layanan downstream. Jika durasi ini panjang, selidiki hal berikut:

    • Apakah kualitas jaringan baik dan bandwidth mencukupi.

    • Apakah aplikasi upstream atau downstream memiliki bottleneck di bawah beban I/O serupa.

  • Untuk permintaan TCP, field ini tidak diimplementasikan dan ditampilkan sebagai - dalam log.

upstream_service_time (sidecar)

%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%

Dalam log akses sidecar atau gateway, field ini menunjukkan waktu pemrosesan layanan upstream dan waktu yang dibutuhkan untuk komunikasi jaringan dengan layanan upstream. Jika durasi ini panjang, selidiki apakah:

  • Performa pemrosesan aplikasi upstream sesuai ekspektasi.

  • Latensi jaringan dan bandwidth untuk komunikasi dengan layanan upstream sesuai ekspektasi.

upstream_response_time (gateway)

Catatan

Untuk permintaan HTTP yang memiliki badan (Content-Length > 0), Envoy mengalirkan permintaan ke layanan upstream saat menerimanya, bukan menunggu seluruh permintaan tiba sebelum meneruskan. Oleh karena itu, klien downstream yang lambat dapat meningkatkan total waktu permintaan untuk semua layanan dalam rantai panggilan upstream.

Nilai flag respons

Field response_flag dalam log akses memberikan informasi tambahan tentang permintaan atau koneksi. Tabel berikut menjelaskan berbagai nilai response_flag.

Nilai

Deskripsi

UH

Envoy tidak dapat menemukan host upstream yang sehat. Hal ini biasanya terjadi karena tidak ada endpoint yang tersedia untuk layanan tujuan.

UF

Gagal terhubung ke host upstream. Hal ini biasanya terjadi karena aplikasi upstream tidak mendengarkan atau port dikonfigurasi salah.

UO

Overflow upstream (pemutusan sirkuit).

NR

Envoy tidak menemukan rute untuk permintaan tersebut.

NC

Envoy tidak dapat menemukan layanan tujuan. Hal ini biasanya berarti bahwa nama hostname atau nama subset dalam aturan routing yang dikonfigurasi salah.

URX

Permintaan dibatasi laju (rate-limited).

DC

Klien downstream terputus.

UR

Layanan upstream mengatur ulang koneksi.

UAEX

Layanan otorisasi eksternal menolak permintaan. Artinya, proxy ASM menolak permintaan berdasarkan respons dari layanan otorisasi eksternal.

DPE

Kesalahan protokol downstream. Ini menunjukkan bahwa permintaan yang dikirim oleh aplikasi downstream menggunakan protokol yang tidak terduga. Periksa apakah nama port layanan di kluster Anda diawali dengan protokol yang benar, seperti http-80, http, atau grpc.

UPE

Kesalahan protokol upstream. Ini menunjukkan bahwa proxy ASM mencoba meneruskan permintaan ke layanan upstream menggunakan protokol yang tidak terduga. Periksa apakah nama port layanan di kluster Anda diawali dengan protokol yang benar, seperti http-80, http, atau grpc.

Operasi terkait

Anda juga dapat menggunakan Log Service (SLS) untuk mengumpulkan log akses bidang data. Untuk informasi lebih lanjut, lihat Generate and collect ASM gateway access logs.