Service Mesh (ASM) menyediakan pengaturan observabilitas untuk log, metrik, dan tracing. Anda dapat menggunakan konsol ASM untuk menyesuaikan pengaturan ini pada tingkat global, namespace, atau workload tertentu. Misalnya, Anda dapat menentukan format output log, menambahkan dimensi metrik, mengaktifkan atau menonaktifkan metrik tertentu, serta mengatur persentase sampling tracing. Topik ini menjelaskan cara menggunakan Pengaturan Observabilitas.
Prasyarat
Diperlukan instans ASM versi 1.17.2.35 atau yang lebih baru. Untuk informasi selengkapnya, lihat Buat instans ASM atau Upgrade instans ASM.
Cakupan
|
Jenis |
Deskripsi |
|
Global |
Konfigurasi global mendukung pengaturan untuk log, metrik, dan tracing. Hanya ada satu konfigurasi global dan tidak dapat dihapus. Pengaturan tracing hanya didukung pada cakupan global. |
|
Namespace |
Memungkinkan Anda membuat konfigurasi observabilitas khusus untuk suatu namespace. Setiap namespace hanya dapat memiliki satu konfigurasi observabilitas tingkat namespace. |
|
Kustom |
Konfigurasi kustom menggunakan pemilih label (label selector) untuk menentukan cakupannya. Setiap workload dapat dipilih oleh paling banyak satu konfigurasi kustom. |
Prosedur
Global
-
Login ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Di halaman Observability Settings, klik tab Global. Konfigurasikan log, metrik, dan tracing sesuai kebutuhan, lalu klik Submission.
Klik tautan dalam tabel berikut untuk melihat deskripsi detail konfigurasi.
Bagian konfigurasi
Deskripsi
Namespace
-
Login ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Di halaman Observability Settings, klik tab Namespace, lalu klik Create. Pilih Namespace target, konfigurasikan log dan metrik sesuai kebutuhan, lalu klik Create.
Klik tautan dalam tabel berikut untuk melihat deskripsi detail konfigurasi.
Bagian konfigurasi
Deskripsi
Kustom
-
Login ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Di halaman Observability Settings, klik tab Custom, pilih Namespace target, lalu klik Create. Masukkan Name dan Label selector, konfigurasikan log dan metrik sesuai kebutuhan, lalu klik Create.
Klik tautan dalam tabel berikut untuk melihat deskripsi detail konfigurasi.
Bagian konfigurasi
Deskripsi
Pengaturan log
Pengaturan log mencakup pengaktifan atau penonaktifan output log akses, pengaturan format output log, penyesuaian format log, dan penyaringan log.
Output log akses
-
Di bagian Log Settings, alihkan sakelar Enable Log Output sesuai kebutuhan.
-
Jika diaktifkan, sidecar atau gerbang (gateway) pada bidang data (data plane) akan mengeluarkan log akses ke standard output (stdout) kontainer.
-
Jika dinonaktifkan, sidecar atau gerbang pada bidang data tidak lagi mengeluarkan log ke stdout kontainer.
-
-
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 (ingress gateway):
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.
Login ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Di halaman Pods, klik nama pod target, lalu klik tab Logs di bagian bawah halaman untuk melihat log akses.
Format output log
Fitur ini memerlukan instans ASM versi 1.20.6.36 atau yang lebih baru. Untuk informasi selengkapnya tentang cara upgrade instans, lihat Upgrade instans ASM.
Di bagian Log Settings, atur Log Output Format menjadi JSON atau TEXT sesuai kebutuhan.
-
Jika Anda memilih JSON, log akses akan dikeluarkan ke stdout kontainer sebagai string JSON.
-
Jika Anda memilih TEXT, log akses akan dikeluarkan ke stdout kontainer sebagai string teks biasa.
Format log kustom
-
Di bagian Log Settings, pilih field, modifikasi informasi field kustom, atau klik ikon
di bagian bawah daftar field log untuk menambahkan field log baru.Anda hanya dapat menyesuaikan format log ketika sakelar Enable Log Output diaktifkan. Di bagian Log Format, field log yang dipilih secara default bersifat wajib dan tidak dapat dibatalkan pemilihannya. Nilai field log dapat diambil dari header permintaan (request headers), header respons (response headers), atau nilai Envoy bawaan.
Sebagai contoh, untuk mencatat header permintaan
accept-encoding, atur accessLogFormat key menjadi accept-encoding, Type menjadi Request Properties, dan accessLogFormat value menjadi Accept-Encoding. Templat format untuk header permintaan adalah%REQ(HEADER_NAME)%(misalnya,%REQ(:AUTHORITY)%), untuk header respons adalah%RESP(HEADER_NAME)%(misalnya,%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%), dan untuk atribut Envoy bawaan adalah%ATTRIBUTE_NAME%(misalnya,%REQUEST_DURATION%). -
Jalankan perintah berikut untuk melihat log komponen bidang data di service mesh.
kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1|grep accept-encoding --color=autoLog akses sekarang menampilkan nilai header Accept-Encoding yang Anda tambahkan di langkah 1.
Penyaringan log
Di bagian Log Settings, pilih Enable Log Filter untuk mengaktifkan penyaringan log, lalu masukkan ekspresi penyaringan di kotak teks. Log akses hanya dihasilkan untuk permintaan yang sesuai dengan ekspresi tersebut.
Sebagai contoh, untuk mencatat hanya permintaan yang memenuhi kondisi Response Http Status >= 400, gunakan ekspresi response.code >= 400. Untuk informasi selengkapnya, lihat Ekspresi CEL dan field umum.
Ekspresi CEL dan field umum
Ekspresi penyaringan log merupakan ekspresi Common Expression Language (CEL) standar. Tabel berikut mencantumkan field umum untuk ekspresi CEL. Untuk informasi selengkapnya, lihat dokumentasi resmi CEL dan Envoy.
|
Atribut |
Tipe |
Deskripsi |
|
request.path |
string |
Jalur permintaan. |
|
request.url_path |
string |
Jalur permintaan tanpa string kueri. |
|
request.host |
string |
Bagian host dari URL. |
|
request.method |
string |
Metode permintaan. |
|
request.headers |
map<string, string> |
Semua header permintaan, diindeks berdasarkan nama huruf kecilnya. |
|
request.useragent |
string |
Nilai header User-Agent. |
|
request.time |
timestamp |
Waktu saat byte pertama permintaan diterima. |
|
request.id |
string |
ID permintaan. |
|
request.protocol |
string |
Protokol permintaan. Nilai yang valid: |
|
request.query |
string |
String kueri dari URL permintaan. |
|
response.code |
int |
Kode status HTTP dari respons. |
|
response.code_details |
string |
Detail mengenai kode respons. |
|
response.grpc_status |
int |
Kode status gRPC dalam respons. |
|
response.headers |
map<string, string> |
Semua header respons, diindeks berdasarkan nama huruf kecilnya. |
|
response.size |
int |
Ukuran badan respons dalam byte. |
|
response.total_size |
int |
Ukuran total pesan respons dalam byte, termasuk badan dan header. |
Pengaturan metrik
Pengaturan metrik mencakup pengaktifan atau penonaktifan pembuatan metrik dan konfigurasi dimensi metrik.
Pembuatan metrik
Metrik dikategorikan sebagai metrik sisi klien dan metrik sisi server.
-
Metrik sisi klien: Metrik yang dihasilkan ketika sidecar bertindak sebagai klien untuk memulai permintaan. Metrik gerbang (gateway) juga dikategorikan sebagai metrik sisi klien.
-
Metrik sisi server: Metrik yang dihasilkan ketika sidecar bertindak sebagai server untuk menerima permintaan.
-
Di bagian Metric Settings, pada kolom Client-Side Metrics atau Server-Side Metrics, centang atau hapus centang kotak Enabled untuk metrik sesuai kebutuhan.
-
Jika metrik diaktifkan, sidecar atau gerbang bidang data mengekspos metrik ini melalui path
/stats/prometheuspada port 15020. -
Jika metrik dinonaktifkan, metrik tersebut tidak diekspos pada port dan path yang ditentukan.
-
-
Jalankan perintah berikut untuk melihat metrik yang diekspos oleh sidecar atau gerbang.
Anda dapat menggunakan kubectl untuk menjalankan perintah curl di dalam kontainer sidecar atau gerbang guna mengakses path
/stats/prometheuspada port lokal 15020 dan melihat metrik yang diekspor.kubectl exec httpbin-5c5944c58c-w**** -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus|head -n 10Contoh output:
# TYPE istio_agent_cert_expiry_seconds gauge istio_agent_cert_expiry_seconds{resource_name="default"} 46725.287654548 # HELP istio_agent_endpoint_no_pod Endpoints without an associated pod. # TYPE istio_agent_endpoint_no_pod gauge istio_agent_endpoint_no_pod 0 # HELP istio_agent_go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. # TYPE istio_agent_go_gc_duration_seconds summary istio_agent_go_gc_duration_seconds{quantile="0"} 5.0149e-05 istio_agent_go_gc_duration_seconds{quantile="0.25"} 9.8807e-05 ......
Dimensi metrik
Dimensi metrik memberikan informasi kontekstual yang kaya. Anda dapat menggunakan dimensi ini untuk menyaring metrik target di Prometheus. Misalnya, Anda dapat menggunakan dimensi source_app untuk menyaring metrik permintaan dari aplikasi klien tertentu.
Edit dimensi default
Ikuti langkah-langkah berikut untuk mengedit dimensi default:
-
Di bagian Metric Settings, pada kolom Client-Side Metrics atau Server-Side Metrics, klik Edit dimension untuk metrik yang diaktifkan.
-
Di kotak dialog Customize CLIENT dimension configuration atau Customize SERVER dimension configuration, centang atau hapus centang kotak centang untuk dimensi yang akan diekspor, lalu klik Confirm.
Sebagai contoh, jika tidak ada dimensi yang dinonaktifkan, Anda dapat menjalankan perintah curl di dalam kontainer sidecar atau gerbang untuk mengakses path /stats/prometheus pada port lokal 15020 dan melihat metrik yang diekspor.
kubectl exec httpbin-5c5944c58c-w**** -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus
Mengambil metrik istio_request_bytes_sum (yang sesuai dengan metrik REQUEST_SIZE di konsol) sebagai contoh, Anda dapat melihat bahwa metrik tersebut mencakup semua dimensi secara default.
istio_request_bytes_sum{reporter="destination",source_workload="istio-ingressgateway",source_canonical_service="unknown",source_canonical_revision="latest",source_workload_namespace="istio-system",source_principal="spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway",source_app="istio-ingressgateway",source_version="unknown",source_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",destination_workload="httpbin",destination_workload_namespace="default",destination_principal="spiffe://cluster.local/ns/default/sa/httpbin",destination_app="httpbin",destination_version="v1",destination_service="httpbin.default.svc.cluster.local",destination_canonical_service="httpbin",destination_canonical_revision="v1",destination_service_name="httpbin",destination_service_namespace="default",destination_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",request_protocol="http",response_code="200",grpc_response_status="",response_flags="-",connection_security_policy="mutual_tls"} 18000
Jika Anda memodifikasi metrik server-side REQUEST_SIZE default agar hanya menyimpan dimensi response_code lalu mengakses path /stats/prometheus, Anda akan melihat bahwa metrik tersebut sekarang hanya mencakup dimensi response_code.
istio_request_bytes_sum{response_code="200"} 16550
Tambahkan dimensi kustom
Ikuti langkah-langkah berikut untuk menambahkan dimensi kustom:
-
Di bagian Metric Settings, pada kolom Client-Side Metrics atau Server-Side Metrics, klik Edit dimension untuk metrik yang diaktifkan.
-
Di kotak dialog Customize CLIENT dimension configuration atau Customize SERVER dimension configuration, di bawah opsi Custom Dimensions, edit nama dan nilai dimensi, lalu klik Confirm.
Sebagai contoh, jika Anda mengedit metrik server-side REQUEST_SIZE dan menambahkan dimensi kustom dengan nama request_path dan nilai request.path, metrik yang diekspor akan mencakup dimensi kustom request_path saat Anda mengakses path /stats/prometheus.
istio_request_bytes_sum{response_code="200",request_path="/spec.json"} 5800
Anda dapat mengurangi konsumsi memori Envoy dan Prometheus dengan menghapus dimensi default yang tidak diperlukan. Namun, karena sebagian besar dimensi biasanya berguna, bagian Metric Settings hanya menampilkan dimensi yang telah Anda hapus secara eksplisit.
Pengaturan tracing
Pengaturan tracing mencakup persentase sampling dan tag kustom. Untuk membangun rantai panggilan lengkap, tracing memerlukan konfigurasi pelaporan yang konsisten di seluruh layanan. Titik akhir pelaporan atau laju sampling yang tidak konsisten dapat menyebabkan jejak (trace) tidak lengkap. Oleh karena itu, versi ASM sebelum 1.24.6.83 tidak mengizinkan konfigurasi tracing tingkat namespace atau tingkat workload. Mulai versi 1.24.6.83, ASM mendukung modifikasi sumber daya Telemetry menggunakan API Kubernetes untuk mengaktifkan konfigurasi tracing tingkat namespace dan tingkat workload. Untuk informasi selengkapnya tentang konfigurasi sumber daya Telemetry, lihat Telemetry CRD.
Persentase sampling
Anda dapat menyesuaikan persentase sampling untuk tracing, yang menentukan persentase permintaan yang akan menghasilkan jejak. Nilai 0 menonaktifkan tracing.
Tag kustom
Anda dapat menyesuaikan tag yang dilampirkan pada rentang tracing (tracing spans) yang dilaporkan. Di bagian Tracing Analysis Settings, klik Add Custom Tags, lalu konfigurasikan Name, Type, dan Value.
Jenis yang valid meliputi Fixed Value, Request Header, dan Environment Variable. Tabel berikut menjelaskan setiap jenis beserta contohnya.
|
Jenis |
Deskripsi |
Konfigurasi contoh |
|
Fixed Value |
Nilai tag ditetapkan ke string yang Anda tentukan. |
|
|
Request Header |
Tag menggunakan nilai header permintaan tertentu. Jika header tidak ada dalam permintaan, nilai default akan digunakan. Sebagai contoh, Anda dapat mengambil nilai tag dari header |
|
|
Environment Variable |
Tag menggunakan nilai variabel lingkungan tertentu dari workload. Jika variabel lingkungan tidak ada dalam workload, nilai default akan digunakan. Sebagai contoh, Anda dapat mengambil nilai tag dari variabel lingkungan |
|