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
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Di pojok kanan atas halaman Basic Information, klik Settings.
-
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.
Untuk instans ASM versi 1.17.2.35 dan seterusnya
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
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.
-
-
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.
-
Lihat log di stdout kontainer sidecar bidang data.
Contoh berikut menunjukkan cara melihat log akses menggunakan kubectl.
-
Jalankan perintah berikut untuk melihat log sidecar:
kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1 -
Jalankan perintah berikut untuk melihat log gerbang masuk:
kubectl -n istio-system logs istio-ingressgateway-6cff9b6b58-r**** --tail 1
-
-
(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.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
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
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Pada bagian Basic Information di halaman Config Info, klik Enable access logging and print it to container stdout di samping Update Access Log Format.
-
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
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
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.
-
-
Pada bagian Log Settings, pilih field, ubah informasi field target, atau klik ikon
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-encodingdalam 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. -
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=autoOutput menunjukkan bahwa nilai header
Accept-Encodingyang 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.
-
Pada bilah alamat browser Anda, masukkan <Ingress gateway address>/productpage untuk mengakses aplikasi productpage.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Di bagian atas halaman Deployments, atur Namespace menjadi default. Kemudian, temukan aplikasi productpage-v1 dan klik Details di kolom Actions.
-
Pada halaman detail aplikasi, klik tab Logs dan atur Container menjadi istio-proxy.
Panel output log menampilkan entri berikut. Kehadiran field
my_custom_keydengan nilaijasonmenunjukkan 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 |
|
bytes_received |
%BYTES_RECEIVED% |
|
|
bytes_sent |
%BYTES_SENT% |
|
|
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% |
|
|
request_duration |
%REQUEST_DURATION% |
|
|
request_tx_duration |
%REQUEST_TX_DURATION% |
|
|
response_duration |
%RESPONSE_DURATION% |
|
|
response_tx_duration |
%RESPONSE_TX_DURATION% |
|
|
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:
|
|
upstream_response_time (gateway) |
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 |
|
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 |
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.