全部产品
Search
文档中心

Container Service for Kubernetes:Konfigurasikan pemantauan Prometheus untuk KServe guna memantau kinerja dan kondisi layanan model

更新时间:Nov 11, 2025

KServe menyediakan serangkaian metrik Prometheus bawaan untuk membantu Anda memantau kinerja dan kondisi layanan model. Topik ini menggunakan model Qwen-7B-Chat-Int8 pada GPU NVIDIA V100 sebagai contoh untuk menunjukkan cara mengonfigurasi pemantauan Prometheus untuk kerangka kerja KServe.

Prasyarat

Langkah 1: Terapkan aplikasi KServe

  1. Jalankan perintah berikut untuk menerapkan aplikasi KServe untuk Scikit-learn.

    arena serve kserve \
        --name=sklearn-iris \
        --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/ai-sample/kserve-sklearn-server:v0.12.0 \
        --cpu=1 \
        --memory=200Mi \
        --enable-prometheus=true \
        --metrics-port=8080 \
        "python -m sklearnserver --model_name=sklearn-iris --model_dir=/models --http_port=8080"

    Keluaran yang diharapkan:

    service/sklearn-iris-metric-svc created # Layanan bernama sklearn-iris-metric-svc dibuat.
    inferenceservice.serving.kserve.io/sklearn-iris created # Sumber daya KServe InferenceService sklearn-iris dibuat.
    servicemonitor.monitoring.coreos.com/sklearn-iris-svcmonitor created # Sumber daya ServiceMonitor dibuat untuk mengintegrasikan dengan sistem pemantauan Prometheus dan mengumpulkan data pemantauan yang dipublikasikan oleh layanan sklearn-iris-metric-svc.
    INFO[0004] The Job sklearn-iris has been submitted successfully # Tugas telah dikirim ke kluster.
    INFO[0004] You can run `arena serve get sklearn-iris --type kserve -n default` to check the job status

    Keluaran tersebut menunjukkan bahwa Arena berhasil memulai penerapan layanan KServe yang menggunakan model scikit-learn dan telah mengintegrasikan pemantauan Prometheus.

  2. Jalankan perintah berikut untuk membuat file ./iris-input.json dengan konten JSON berikut. File ini digunakan untuk permintaan masukan inferensi.

    cat <<EOF > "./iris-input.json"
    {
      "instances": [
        [6.8,  2.8,  4.8,  1.4],
        [6.0,  3.4,  4.5,  1.6]
      ]
    }
    EOF
  3. Jalankan perintah berikut untuk mengambil alamat IP gerbang NGINX Ingress dan hostname untuk URL InferenceService dari kluster.

    NGINX_INGRESS_IP=`kubectl -n kube-system get svc nginx-ingress-lb -ojsonpath='{.status.loadBalancer.ingress[0].ip}'`
    SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -o jsonpath='{.status.url}' | cut -d "/" -f 3)
  4. Jalankan perintah berikut untuk menggunakan alat uji stres Hey guna mengakses layanan beberapa kali dan menghasilkan data pemantauan.

    Catatan

    Untuk informasi selengkapnya tentang alat uji stres Hey, lihat Hey.

    hey -z 2m -c 20 -m POST -host $SERVICE_HOSTNAME -H "Content-Type: application/json" -D ./iris-input.json http://${NGINX_INGRESS_IP}:80/v1/models/sklearn-iris:predict

    Keluaran yang diharapkan:

    Klik untuk melihat keluaran yang diharapkan

    Summary:
      Total:	120.0296 secs
      Slowest:	0.1608 secs
      Fastest:	0.0213 secs
      Average:	0.0275 secs
      Requests/sec:	727.3875
      
      Total data:	1833468 bytes
      Size/request:	21 bytes
    
    Response time histogram:
      0.021 [1]	|
      0.035 [85717]	|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
      0.049 [1272]	|■
      0.063 [144]	|
      0.077 [96]	|
      0.091 [44]	|
      0.105 [7]	|
      0.119 [0]	|
      0.133 [0]	|
      0.147 [11]	|
      0.161 [16]	|
    
    
    Latency distribution:
      10% in 0.0248 secs
      25% in 0.0257 secs
      50% in 0.0270 secs
      75% in 0.0285 secs
      90% in 0.0300 secs
      95% in 0.0315 secs
      99% in 0.0381 secs
    
    Details (average, fastest, slowest):
      DNS+dialup:	0.0000 secs, 0.0213 secs, 0.1608 secs
      DNS-lookup:	0.0000 secs, 0.0000 secs, 0.0000 secs
      req write:	0.0000 secs, 0.0000 secs, 0.0225 secs
      resp wait:	0.0273 secs, 0.0212 secs, 0.1607 secs
      resp read:	0.0001 secs, 0.0000 secs, 0.0558 secs
    
    Status code distribution:
      [200]	87308 responses

    Keluaran tersebut merangkum kinerja sistem selama pengujian, mencakup metrik utama seperti kecepatan pemrosesan, throughput data, dan latensi tanggapan, sehingga membantu Anda mengevaluasi efisiensi dan stabilitas sistem.

  5. (Opsional) Ambil metrik aplikasi secara manual untuk memastikan bahwa metrik tersebut dipublikasikan dengan benar.

    Langkah-langkah berikut menjelaskan cara mengumpulkan metrik pemantauan dari Pod tertentu yang terkait dengan sklearn-iris di kluster ACK dan melihat datanya di host lokal Anda tanpa perlu masuk ke Pod atau mengekspos port Pod ke jaringan eksternal.

    1. Jalankan perintah berikut untuk meneruskan port 8080 Pod yang namanya mengandung `sklearn-iris` ke port 8080 host lokal Anda. Nama Pod ditentukan oleh variabel $POD_NAME. Permintaan yang dikirim ke port 8080 host lokal akan diteruskan secara transparan ke port 8080 Pod tersebut.

      # Dapatkan nama Pod.
      POD_NAME=`kubectl get po|grep sklearn-iris |awk -F ' ' '{print $1}'`
      # Teruskan port 8080 Pod ke host lokal menggunakan port-forward.
      kubectl port-forward pod/$POD_NAME 8080:8080

      Keluaran yang diharapkan:

      Forwarding from 127.0.0.1:8080 -> 8080
      Forwarding from [::1]:8080 -> 8080

      Keluaran tersebut menunjukkan bahwa koneksi ke host lokal melalui IPv4 dan IPv6 diteruskan dengan benar ke port 8080 Pod.

    2. Buka browser, lalu masukkan URL berikut untuk mengakses port 8080 Pod dan melihat metriknya.

      http://localhost:8080/metrics

      Keluaran yang diharapkan:

      Klik untuk melihat keluaran yang diharapkan

      # HELP python_gc_objects_collected_total Objects collected during gc
      # TYPE python_gc_objects_collected_total counter
      python_gc_objects_collected_total{generation="0"} 10298.0
      python_gc_objects_collected_total{generation="1"} 1826.0
      python_gc_objects_collected_total{generation="2"} 0.0
      # HELP python_gc_objects_uncollectable_total Uncollectable object found during GC
      # TYPE python_gc_objects_uncollectable_total counter
      python_gc_objects_uncollectable_total{generation="0"} 0.0
      python_gc_objects_uncollectable_total{generation="1"} 0.0
      python_gc_objects_uncollectable_total{generation="2"} 0.0
      # HELP python_gc_collections_total Number of times this generation was collected
      # TYPE python_gc_collections_total counter
      python_gc_collections_total{generation="0"} 660.0
      python_gc_collections_total{generation="1"} 60.0
      python_gc_collections_total{generation="2"} 5.0
      # HELP python_info Python platform information
      # TYPE python_info gauge
      python_info{implementation="CPython",major="3",minor="9",patchlevel="18",version="3.9.18"} 1.0
      # HELP process_virtual_memory_bytes Virtual memory size in bytes.
      # TYPE process_virtual_memory_bytes gauge
      process_virtual_memory_bytes 1.406291968e+09
      # HELP process_resident_memory_bytes Resident memory size in bytes.
      # TYPE process_resident_memory_bytes gauge
      process_resident_memory_bytes 2.73207296e+08
      # HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
      # TYPE process_start_time_seconds gauge
      process_start_time_seconds 1.71533439115e+09
      # HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
      # TYPE process_cpu_seconds_total counter
      process_cpu_seconds_total 228.18
      # HELP process_open_fds Number of open file descriptors.
      # TYPE process_open_fds gauge
      process_open_fds 16.0
      # HELP process_max_fds Maximum number of open file descriptors.
      # TYPE process_max_fds gauge
      process_max_fds 1.048576e+06
      # HELP request_preprocess_seconds pre-process request latency
      # TYPE request_preprocess_seconds histogram
      request_preprocess_seconds_bucket{le="0.005",model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_bucket{le="0.01",model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_bucket{le="0.025",model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_bucket{le="0.05",model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_bucket{le="0.075",model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_bucket{le="0.1",model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_bucket{le="0.25",model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_bucket{le="0.5",model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_bucket{le="0.75",model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_bucket{le="1.0",model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_bucket{le="2.5",model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_bucket{le="5.0",model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_bucket{le="7.5",model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_bucket{le="10.0",model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_bucket{le="+Inf",model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_count{model_name="sklearn-iris"} 259709.0
      request_preprocess_seconds_sum{model_name="sklearn-iris"} 1.7146860011853278
      # HELP request_preprocess_seconds_created pre-process request latency
      # TYPE request_preprocess_seconds_created gauge
      request_preprocess_seconds_created{model_name="sklearn-iris"} 1.7153354578475933e+09
      # HELP request_postprocess_seconds post-process request latency
      # TYPE request_postprocess_seconds histogram
      request_postprocess_seconds_bucket{le="0.005",model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_bucket{le="0.01",model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_bucket{le="0.025",model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_bucket{le="0.05",model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_bucket{le="0.075",model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_bucket{le="0.1",model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_bucket{le="0.25",model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_bucket{le="0.5",model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_bucket{le="0.75",model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_bucket{le="1.0",model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_bucket{le="2.5",model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_bucket{le="5.0",model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_bucket{le="7.5",model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_bucket{le="10.0",model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_bucket{le="+Inf",model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_count{model_name="sklearn-iris"} 259709.0
      request_postprocess_seconds_sum{model_name="sklearn-iris"} 1.625360683305189
      # HELP request_postprocess_seconds_created post-process request latency
      # TYPE request_postprocess_seconds_created gauge
      request_postprocess_seconds_created{model_name="sklearn-iris"} 1.7153354578482144e+09
      # HELP request_predict_seconds predict request latency
      # TYPE request_predict_seconds histogram
      request_predict_seconds_bucket{le="0.005",model_name="sklearn-iris"} 259708.0
      request_predict_seconds_bucket{le="0.01",model_name="sklearn-iris"} 259708.0
      request_predict_seconds_bucket{le="0.025",model_name="sklearn-iris"} 259709.0
      request_predict_seconds_bucket{le="0.05",model_name="sklearn-iris"} 259709.0
      request_predict_seconds_bucket{le="0.075",model_name="sklearn-iris"} 259709.0
      request_predict_seconds_bucket{le="0.1",model_name="sklearn-iris"} 259709.0
      request_predict_seconds_bucket{le="0.25",model_name="sklearn-iris"} 259709.0
      request_predict_seconds_bucket{le="0.5",model_name="sklearn-iris"} 259709.0
      request_predict_seconds_bucket{le="0.75",model_name="sklearn-iris"} 259709.0
      request_predict_seconds_bucket{le="1.0",model_name="sklearn-iris"} 259709.0
      request_predict_seconds_bucket{le="2.5",model_name="sklearn-iris"} 259709.0
      request_predict_seconds_bucket{le="5.0",model_name="sklearn-iris"} 259709.0
      request_predict_seconds_bucket{le="7.5",model_name="sklearn-iris"} 259709.0
      request_predict_seconds_bucket{le="10.0",model_name="sklearn-iris"} 259709.0
      request_predict_seconds_bucket{le="+Inf",model_name="sklearn-iris"} 259709.0
      request_predict_seconds_count{model_name="sklearn-iris"} 259709.0
      request_predict_seconds_sum{model_name="sklearn-iris"} 47.95311741752084
      # HELP request_predict_seconds_created predict request latency
      # TYPE request_predict_seconds_created gauge
      request_predict_seconds_created{model_name="sklearn-iris"} 1.7153354578476949e+09
      # HELP request_explain_seconds explain request latency
      # TYPE request_explain_seconds histogram

      Keluaran tersebut menampilkan berbagai metrik kinerja dan status dari aplikasi dalam Pod, yang mengonfirmasi bahwa permintaan berhasil diteruskan ke layanan aplikasi dalam Pod.

Langkah 2: Kueri metrik aplikasi KServe

  1. Masuk ke Konsol ARMS.

  2. Pada panel navigasi sebelah kiri, klik Provisioning, lalu klik Query Dashboards.

  3. Pada halaman Dashboard List, klik dasbor Kubernetes Pod untuk membuka halaman Grafana.

  4. Pada panel navigasi sebelah kiri, klik Explore, lalu masukkan pernyataan pencarian request_predict_seconds_bucket untuk mengkueri nilai metrik aplikasi.

    Catatan

    Pengumpulan data memiliki penundaan sekitar 5 menit.

    image

FAQ dan solusi

FAQ

Bagaimana cara memastikan bahwa data untuk metrik request_predict_seconds_bucket berhasil dikumpulkan?

Solusi

  1. Masuk ke Konsol ARMS.

  2. Pada halaman Provisioned Environments, klik tab Container Environment. Klik nama lingkungan kontainer target, lalu klik tab Self-monitoring.

  3. Pada panel navigasi sebelah kiri, klik Targets. Jika `default/sklearn-iris-svcmonitor/0 (1/1 up)` ditampilkan, berarti data metrik sedang dikumpulkan dengan sukses.

Referensi

Untuk informasi selengkapnya tentang metrik bawaan yang disediakan oleh kerangka kerja KServe, lihat dokumen komunitas KServe Metrik Prometheus KServe.