Melampaui kemampuan pengarahan permintaan LLM yang dibahas dalam dokumen sebelumnya, Alibaba Cloud Service Mesh (ASM) telah meningkatkan fitur observabilitasnya untuk memenuhi kebutuhan observabilitas tingkat lanjut dalam skenario LLM. Topik ini menjelaskan cara mengamati permintaan LLM menggunakan log akses dan metrik pemantauan di konsol ASM.
Untuk memberikan berbagai opsi manajemen trafik, langkah-langkah dalam topik ini disiapkan berdasarkan semua langkah dalam Pengarahan Trafik: Gunakan ASM untuk Mengelola Trafik LLM. Jika Anda hanya menyelesaikan Langkah 1 dan Langkah 2, Anda dapat menjalankan perintah uji di Langkah 2 untuk memeriksa apakah perintah untuk mengambil data observabel sama seperti yang dibahas dalam topik ini.
Langkah 1: Amati Permintaan LLM Menggunakan Log Akses
Konfigurasikan Log Akses
ASM telah meningkatkan dukungan untuk log permintaan LLM. Anda dapat mengonfigurasi log akses kustom untuk melihat log permintaan. Untuk instruksi terperinci, lihat Log Akses Data Plane Kustom.
Masuk ke Konsol ASM. Di panel navigasi di sebelah kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi di sebelah kiri, pilih .
Dalam pengaturan global Log Settings, tambahkan tiga bidang berikut:

Bidang-bidang tersebut adalah sebagai berikut:
request_model FILTER_STATE(wasm.asm.llmproxy.request_model:PLAIN) request_prompt_tokens FILTER_STATE(wasm.asm.llmproxy.request_prompt_tokens:PLAIN) request_completion_tokens FILTER_STATE(wasm.asm.llmproxy.request_completion_tokens:PLAIN)Bidang-bidang tersebut adalah sebagai berikut:
request_model: model yang digunakan untuk permintaan LLM saat ini, misalnya qwen-turbo atau qwen1.5-72b-chat.
request_prompt_tokens: jumlah token input untuk permintaan saat ini.
request_completion_tokens: jumlah token output untuk permintaan saat ini.
Sebagian besar penyedia layanan model besar biasanya mengenakan biaya kepada Anda berdasarkan penggunaan token. Bidang-bidang ini memungkinkan pengguna untuk melihat jumlah token yang dikonsumsi selama permintaan dan mengidentifikasi model spesifik yang digunakan.
Verifikasi
Jalankan dua perintah berikut secara terpisah dengan menggunakan file kubeconfig dari kluster ACK.
kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' \ --header 'Content-Type: application/json' \ --data '{ "messages": [ {"role": "user", "content": "Please introduce yourself."} ] }'kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' \ --header 'Content-Type: application/json' \ --header 'user-type: subscriber' \ --data '{ "messages": [ {"role": "user", "content": "Please introduce yourself."} ] }'Jalankan perintah berikut untuk melihat log akses.
kubectl logs deployments/sleep -c istio-proxy | tail -2Output yang diharapkan:
{"bytes_received":"85","bytes_sent":"617","downstream_local_address":"47.93.xxx.xx:80","downstream_remote_address":"192.168.34.235:39066","duration":"7640","istio_policy_status":"-","method":"POST","path":"/compatible-mode/v1/chat/completions","protocol":"HTTP/1.1","request_id":"d0e17f66-f300-411a-8c32-xxxxxxxxxxxxx","requested_server_name":"-","response_code":"200","response_flags":"-","route_name":"-","start_time":"2024-07-12T03:20:03.993Z","trace_id":"-","upstream_cluster":"outbound|80||dashscope.aliyuncs.com","upstream_host":"47.93.xxx.xx:443","upstream_local_address":"192.168.34.235:38476","upstream_service_time":"7639","upstream_response_time":"7639","upstream_transport_failure_reason":"-","user_agent":"curl/8.8.0","x_forwarded_for":"-","authority_for":"dashscope.aliyuncs.com","request_model":"qwen1.5-72b-chat","request_prompt_tokens":"3","request_completion_tokens":"55"} {"bytes_received":"85","bytes_sent":"809","downstream_local_address":"47.93.xxx.xx:80","downstream_remote_address":"192.168.34.235:41090","duration":"2759","istio_policy_status":"-","method":"POST","path":"/compatible-mode/v1/chat/completions","protocol":"HTTP/1.1","request_id":"d89faada-6af3-4ac3-b4fd-xxxxxxxxxxxxx","requested_server_name":"-","response_code":"200","response_flags":"-","route_name":"vip-route","start_time":"2024-07-12T03:20:30.854Z","trace_id":"-","upstream_cluster":"outbound|80||dashscope.aliyuncs.com","upstream_host":"47.93.xxx.xx:443","upstream_local_address":"192.168.34.235:38476","upstream_service_time":"2759","upstream_response_time":"2759","upstream_transport_failure_reason":"-","user_agent":"curl/8.8.0","x_forwarded_for":"-","authority_for":"dashscope.aliyuncs.com","request_model":"qwen-turbo","request_prompt_tokens":"11","request_completion_tokens":"90"}Log yang diformat dan diproses muncul sebagai berikut.
{ "duration": "7640", "response_code": "200", "authority_for": "dashscope.aliyuncs.com", --Penyedia model besar aktual yang diakses "request_model": "qwen1.5-72b-chat", --Model yang digunakan oleh permintaan saat ini "request_prompt_tokens": "3", --Jumlah token input untuk permintaan saat ini "request_completion_tokens": "55" --Jumlah token output untuk permintaan saat ini }{ "duration": "2759", "response_code": "200", "authority_for": "dashscope.aliyuncs.com", --Penyedia model besar aktual yang diakses "request_model": "qwen-turbo", --Model yang digunakan oleh permintaan saat ini "request_prompt_tokens": "11", --Jumlah token input untuk permintaan saat ini "request_completion_tokens": "90" --Jumlah token output untuk permintaan saat ini }
ASM terintegrasi dengan mulus dengan Simple Log Service (SLS) dari Alibaba Cloud, memungkinkan Anda memantau invokasi LLM tingkat permintaan melalui log akses. Selain itu, log-log ini dapat dikumpulkan dan disimpan langsung. Setelah Anda mengaktifkan log akses, Anda dapat membuat aturan peringatan kustom dan merancang dasbor log yang rinci. Untuk informasi lebih lanjut, lihat Aktifkan Pengumpulan Log Data Plane.
Langkah 2: Tambahkan Metrik untuk Menampilkan Jumlah Token yang Dikonsumsi oleh Beban Kerja Saat Ini
Sementara log akses menyediakan catatan terperinci, metrik pemantauan menawarkan pandangan yang lebih luas tentang data. Proxy mesh ASM sekarang dapat mengeluarkan jumlah token yang dikonsumsi oleh beban kerja sebagai metrik pemantauan, memungkinkan pengamatan real-time penggunaan token untuk beban kerja saat ini.
ASM memperkenalkan dua metrik baru:
asm_llm_proxy_prompt_tokens: jumlah token input.
asm_llm_proxy_completion_tokens: jumlah token output.
Metrik ini mencakup dimensi default berikut:
llmproxy_source_workload: nama beban kerja yang memulai permintaan.
llmproxy_source_workload_namespace: namespace tempat layanan yang memulai permintaan berada.
llmproxy_destination_service: layanan tujuan.
llmproxy_model: model yang digunakan untuk permintaan saat ini.
Ubah Konfigurasi Beban Kerja untuk Mengeluarkan Metrik Baru
Langkah ini menggunakan sleep yang diterapkan di namespace default sebagai contoh.
Buat file bernama asm-llm-proxy-bootstrap-config.yaml dengan menggunakan file kubeconfig dari kluster ACK.
apiVersion: v1 kind: ConfigMap metadata: name: asm-llm-proxy-bootstrap-config data: custom_bootstrap.json: | "stats_config": { "stats_tags":[ { "tag_name": "llmproxy_source_workload", "regex": "(\\|llmproxy_source_workload=([^|]*))" }, { "tag_name": "llmproxy_source_workload_namespace", "regex": "(\\|llmproxy_source_workload_namespace=([^|]*))" }, { "tag_name": "llmproxy_destination_service", "regex": "(\\|llmproxy_destination_service=([^|]*))" }, { "tag_name": "llmproxy_model", "regex": "(\\|llmproxy_model=([^|]*))" } ] }Jalankan perintah berikut untuk membuat ConfigMap bernama asm-llm-proxy-bootstrap-config.
kubectl apply -f asm-llm-proxy-bootstrap-config.yamlUbah sleep dengan menambahkan anotasi ke pod dengan perintah berikut.
kubectl patch deployment sleep -p '{"spec":{"template":{"metadata":{"annotations":{"sidecar.istio.io/bootstrapOverride":"asm-llm-proxy-bootstrap-config"}}}}}'
Verifikasi
Jalankan pengujian dengan menggunakan perintah berikut.
Jalankan perintah berikut untuk melihat metrik Prometheus yang dihasilkan oleh Sidecar sleep.
kubectl exec deployments/sleep -it -c istio-proxy -- curl localhost:15090/stats/prometheus | grep llmproxyOutput yang diharapkan:
asm_llm_proxy_completion_tokens{llmproxy_source_workload="sleep",llmproxy_source_workload_namespace="default",llmproxy_destination_service="dashscope.aliyuncs.com",llmproxy_model="qwen1.5-72b-chat"} 72 asm_llm_proxy_completion_tokens{llmproxy_source_workload="sleep",llmproxy_source_workload_namespace="default",llmproxy_destination_service="dashscope.aliyuncs.com",llmproxy_model="qwen-turbo"} 85 asm_llm_proxy_prompt_tokens{llmproxy_source_workload="sleep",llmproxy_source_workload_namespace="default",llmproxy_destination_service="dashscope.aliyuncs.com",llmproxy_model="qwen1.5-72b-chat"} 3 asm_llm_proxy_prompt_tokens{llmproxy_source_workload="sleep",llmproxy_source_workload_namespace="default",llmproxy_destination_service="dashscope.aliyuncs.com",llmproxy_model="qwen-turbo"} 11Output menunjukkan metrik yang disediakan oleh sidecar dan dimensi default masing-masing.
ASM sekarang terintegrasi dengan layanan ARMS, memungkinkan pengumpulan metrik ke Managed Service for Prometheus melalui aturan pengumpulan yang dikonfigurasi. Untuk instruksi terperinci, lihat Kumpulkan Metrik ke Managed Service for Prometheus.
Langkah 3: Tambahkan Dimensi Terkait LLM ke Metrik Asli ASM
ASM secara asli menyediakan berbagai metrik yang merinci protokol HTTP atau TCP. Metrik ini dilengkapi dengan dimensi yang luas, dan ASM telah mengembangkan Dasbor Prometheus yang kuat menggunakan metrik dan dimensi ini.
Namun, metrik ini saat ini tidak mencakup permintaan LLM. Untuk mengatasi masalah ini, ASM telah meningkatkan dukungan untuk permintaan LLM, memungkinkan Anda menambahkan permintaan LLM ke metrik yang ada dengan menyesuaikan dimensi metrik.
Konfigurasikan Dimensi Kustom: model
Dalam contoh ini, tambahkan dimensi model ke metrik REQUEST_COUNT.
Masuk ke Konsol ASM. Di panel navigasi di sebelah kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi di sebelah kiri, pilih .
Pilih REQUEST_COUNT dan klik Edit Dimension. Klik tab Custom Dimension, dan masukkan model di bawah Nama Dimensi, dan
filter_state["wasm.asm.llmproxy.request_model"]di bawah Nilai.

Verifikasi
Jalankan pengujian dengan menjalankan perintah berikut secara terpisah.
Jalankan perintah berikut untuk melihat metrik Prometheus yang dihasilkan oleh Sidecar sleep.
kubectl exec deployments/sleep -it -c istio-proxy -- curl localhost:15090/stats/prometheus | grep llmproxyOutput yang diharapkan:
istio_requests_total{reporter="source",source_workload="sleep",source_canonical_service="sleep",source_canonical_revision="latest",source_workload_namespace="default",source_principal="unknown",source_app="sleep",source_version="",source_cluster="cce8d2c1d1e8d4abc8d5c180d160669cc",destination_workload="unknown",destination_workload_namespace="unknown",destination_principal="unknown",destination_app="unknown",destination_version="unknown",destination_service="dashscope.aliyuncs.com",destination_canonical_service="unknown",destination_canonical_revision="latest",destination_service_name="dashscope.aliyuncs.com",destination_service_namespace="unknown",destination_cluster="unknown",request_protocol="http",response_code="200",grpc_response_status="",response_flags="-",connection_security_policy="unknown",model="qwen1.5-72b-chat"} 1 istio_requests_total{reporter="source",source_workload="sleep",source_canonical_service="sleep",source_canonical_revision="latest",source_workload_namespace="default",source_principal="unknown",source_app="sleep",source_version="",source_cluster="cce8d2c1d1e8d4abc8d5c180d160669cc",destination_workload="unknown",destination_workload_namespace="unknown",destination_principal="unknown",destination_app="unknown",destination_version="unknown",destination_service="dashscope.aliyuncs.com",destination_canonical_service="unknown",destination_canonical_revision="latest",destination_service_name="dashscope.aliyuncs.com",destination_service_namespace="unknown",destination_cluster="unknown",request_protocol="http",response_code="200",grpc_response_status="",response_flags="-",connection_security_policy="unknown",model="qwen-turbo"} 1Dimensi model sekarang telah berhasil ditambahkan ke metrik istio_requests_total.
Dengan metrik pemantauan ini, Anda dapat menyiapkan aturan analisis di ARMS untuk analisis yang lebih rinci. Sebagai contoh:
Tingkat keberhasilan permintaan ke model tertentu.
Latensi respons rata-rata untuk model atau penyedia layanan tertentu.
Kesimpulan
Berdasarkan Pengarahan Trafik: Gunakan ASM untuk Mengelola Trafik LLM, topik ini menjelaskan bagaimana melakukan observasi mendetail dan menyeluruh terhadap trafik LLM. Dengan melakukan penyesuaian kecil pada konfigurasi kluster, Anda dapat membuka fitur observabilitas multi-dimensi yang melekat pada service mesh. ASM terus mengembangkan fungsi observabilitas ini, menawarkan solusi yang semakin komprehensif dan adaptif.