Selain kemampuan perutean trafik LLM yang dijelaskan dalam topik sebelumnya, ASM meningkatkan observabilitasnya untuk skenario LLM. Topik ini menjelaskan cara menggunakan log akses dan metrik pemantauan ASM untuk mengamati informasi permintaan LLM.
Untuk menunjukkan seluruh rangkaian fitur, topik ini mengasumsikan bahwa Anda telah menyelesaikan semua langkah dalam Perutean Trafik: Gunakan ASM untuk mengelola trafik LLM secara efisien. Jika Anda hanya telah menyelesaikan Langkah 1 dan Langkah 2 dari topik tersebut, Anda tetap dapat mengirim permintaan uji dengan perintah dari Langkah 2. Perintah yang digunakan untuk melihat data observabilitas sama dengan yang ada di topik ini.
Langkah 1: Amati permintaan LLM dengan log akses
Konfigurasikan log akses
ASM meningkatkan pencatatan log untuk permintaan LLM. Untuk melihat informasi ini dalam log akses, cukup perbarui format log akses kustom. Untuk informasi lebih lanjut, lihat log akses bidang data kustom.
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Pada Log Settings global, tambahkan tiga bidang berikut.
Teks isinya 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 didefinisikan sebagai berikut:
-
request_model: Model aktual yang digunakan untuk permintaan LLM saat ini, seperti
qwen-turboatauqwen1.5-72b-chat. -
request_prompt_tokens: Jumlah token input untuk permintaan tersebut.
-
request_completion_tokens: Jumlah token output untuk permintaan tersebut.
Sebagian besar penyedia layanan LLM mengenakan biaya berdasarkan penggunaan token. Data ini memungkinkan Anda melacak permintaan yang mengonsumsi token dan mengidentifikasi model yang digunakan.
-
Verifikasi
-
Menggunakan file kubeconfig untuk kluster ACK Anda, jalankan dua perintah berikut secara terpisah.
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"} ] }'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"} -
Setelah diformat, isi log adalah sebagai berikut:
{ "duration": "7640", "response_code": "200", "authority_for": "dashscope.aliyuncs.com", --Penyedia LLM 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 LLM 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 SLS. Dengan mengumpulkan dan menyimpan log akses ini, Anda dapat mengamati panggilan LLM tingkat permintaan, menentukan aturan peringatan kustom, dan membuat dasbor yang informatif. Untuk informasi lebih lanjut, lihat Aktifkan pengumpulan log bidang data.
Langkah 2: Tambahkan metrik untuk konsumsi token
Meskipun log akses memberikan informasi detail halus, metrik pemantauan menawarkan tampilan tingkat tinggi. Proxy mesh ASM mengekspor konsumsi token pada tingkat workload sebagai metrik pemantauan, sehingga Anda dapat mengamati penggunaan token suatu workload secara real time.
ASM menambahkan dua metrik baru:
-
asm_llm_proxy_prompt_tokens: Jumlah token input.
-
asm_llm_proxy_completion_tokens: Jumlah token output.
Secara default, kedua metrik ini memiliki dimensi berikut:
-
llmproxy_source_workload: Nama workload yang mengirim permintaan.
-
llmproxy_source_workload_namespace: Namespace tempat sumber permintaan berada.
-
llmproxy_destination_service: Penyedia tujuan.
-
llmproxy_model: Model untuk permintaan saat ini.
Ubah konfigurasi workload untuk menghasilkan metrik baru
Langkah ini menggunakan deployment sleep di namespace default sebagai contoh.
-
Gunakan file kubeconfig kluster ACK Anda untuk membuat file bernama
asm-llm-proxy-bootstrap-config.yaml.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.yaml -
Jalankan perintah berikut untuk mengubah deployment
sleepdan menambahkan anotasi ke pod-nya.kubectl patch deployment sleep -p '{"spec":{"template":{"metadata":{"annotations":{"sidecar.istio.io/bootstrapOverride":"asm-llm-proxy-bootstrap-config"}}}}}'
Verifikasi
-
Jalankan dua perintah berikut secara terpisah untuk mengirim permintaan uji.
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 metrik Prometheus yang diekspor oleh sidecar aplikasi
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 ini mengonfirmasi bahwa sidecar mengekspor metrik tersebut, masing-masing mencakup empat dimensi default.
ASM terintegrasi dengan ARMS. Untuk analisis dan visualisasi yang lebih mendetail, konfigurasikan aturan pengumpulan untuk mengirim metrik ini ke Managed Service for Prometheus. Untuk informasi lebih lanjut, lihat Kumpulkan metrik pemantauan ke Managed Service for Prometheus.
Langkah 3: Tambahkan dimensi LLM ke metrik native
Service Mesh menyediakan banyak metrik default yang menampilkan informasi rinci untuk protokol HTTP dan TCP. Metrik ini menawarkan banyak dimensi, dan ASM menyediakan dasbor Prometheus bawaan yang kuat berdasarkan metrik tersebut.
Namun, metrik ini tidak berisi informasi tentang permintaan LLM. Untuk mengatasi hal ini, ASM memungkinkan Anda menambahkan informasi permintaan LLM ke metrik yang sudah ada dengan menyesuaikan dimensinya.
Konfigurasikan dimensi kustom: model
Bagian ini menunjukkan cara menambahkan dimensi model ke metrik REQUEST_COUNT.
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Klik Edit Dimension untuk Edit dimension, pilih tab Custom Dimension, lalu klik Custom Dimensions. Atur Dimension Name menjadi
modeldan Value menjadifilter_state["wasm.asm.llmproxy.request_model"].
Verifikasi
-
Jalankan dua perintah berikut secara terpisah untuk mengirim permintaan uji.
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 metrik Prometheus yang diekspor oleh sidecar aplikasi
sleep.kubectl exec deployments/sleep -it -c istio-proxy -- curl localhost:15090/stats/prometheus | grep istio_requests_totalOutput 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"} 1Output ini mengonfirmasi bahwa dimensi
modeltelah ditambahkan ke metrikistio_requests_total.Dengan metrik pemantauan ini, Anda dapat mengonfigurasi aturan analisis di ARMS untuk wawasan yang lebih mendalam. Contohnya:
-
Tingkat keberhasilan permintaan untuk model tertentu.
-
Latensi respons rata-rata untuk model atau penyedia tertentu.
-
Kesimpulan
Topik ini membangun di atas Perutean Trafik: Gunakan ASM untuk mengelola trafik LLM secara efisien dan menjelaskan cara melakukan pengamatan detail halus maupun tingkat tinggi terhadap trafik LLM menggunakan ASM. Anda dapat mengaktifkan fitur observabilitas multidimensi hanya dengan modifikasi kecil pada konfigurasi kluster Anda. ASM terus meningkatkan kemampuan observabilitasnya untuk trafik LLM guna menyediakan solusi yang lebih detail dan fleksibel.