すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:KServe の Prometheus モニタリングを設定して、モデルサービスのパフォーマンスと正常性を監視する

最終更新日:Nov 09, 2025

KServe は、モデルサービスのパフォーマンスと正常性を監視するのに役立つ、デフォルトの Prometheus メトリックのセットを提供します。このトピックでは、NVIDIA V100 GPU 上の Qwen-7B-Chat-Int8 モデルを例として、KServe フレームワークの Prometheus モニタリングを設定する方法を説明します。

前提条件

ステップ 1: KServe アプリケーションのデプロイ

  1. 次のコマンドを実行して、Scikit-learn 用の KServe アプリケーションをデプロイします。

    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"

    期待される出力:

    service/sklearn-iris-metric-svc created # sklearn-iris-metric-svc という名前のサービスが作成されます。
    inferenceservice.serving.kserve.io/sklearn-iris created # KServe InferenceService リソース sklearn-iris が作成されます。
    servicemonitor.monitoring.coreos.com/sklearn-iris-svcmonitor created # Prometheus モニタリングシステムと統合し、sklearn-iris-metric-svc サービスによって公開されたモニタリングデータを収集するために、ServiceMonitor リソースが作成されます。
    INFO[0004] The Job sklearn-iris has been submitted successfully # ジョブがクラスターに送信されました。
    INFO[0004] You can run `arena serve get sklearn-iris --type kserve -n default` to check the job status

    この出力は、Arena が scikit-learn モデルを使用する KServe サービスのデプロイメントを正常に開始し、Prometheus モニタリングを統合したことを示しています。

  2. 次のコマンドを実行して、次の JSON コンテンツを含む ./iris-input.json ファイルを作成します。このファイルは、推論入力リクエストに使用されます。

    cat <<EOF > "./iris-input.json"
    {
      "instances": [
        [6.8,  2.8,  4.8,  1.4],
        [6.0,  3.4,  4.5,  1.6]
      ]
    }
    EOF
  3. 次のコマンドを実行して、NGINX Ingress ゲートウェイの IP アドレスと InferenceService URL のホスト名をクラスターから取得します。

    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. 次のコマンドを実行して、Hey ストレステストツールを使用してサービスに複数回アクセスし、モニタリングデータを生成します。

    説明

    Hey ストレステストツールの詳細については、「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

    期待される出力:

    クリックして期待される出力を表示

    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

    この出力は、テスト中のシステムのパフォーマンスを要約したものです。処理速度、データスループット、応答レイテンシーなどの主要なメトリックが含まれています。この情報は、システムの効率と安定性を評価するのに役立ちます。

  5. (オプション) アプリケーションメトリックを手動で取得して、正しく公開されていることを確認します。

    次の手順では、ACK クラスター内の sklearn-iris に関連する特定の Pod からモニタリングメトリックを収集し、ローカルホストでデータを表示する方法について説明します。Pod にログインしたり、Pod のポートを外部ネットワークに公開したりする必要はありません。

    1. 次のコマンドを実行して、名前に `sklearn-iris` を含む Pod のポート 8080 をローカルホストのポート 8080 に転送します。Pod 名は $POD_NAME 変数で指定されます。ローカルホストのポート 8080 に送信されたリクエストは、Pod のポート 8080 に透過的に転送されます。

      # Pod 名を取得します。
      POD_NAME=`kubectl get po|grep sklearn-iris |awk -F ' ' '{print $1}'`
      # port-forward を使用して、Pod のポート 8080 をローカルホストに転送します。
      kubectl port-forward pod/$POD_NAME 8080:8080

      期待される出力:

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

      この出力は、IPv4 と IPv6 の両方を通じたローカルホストへの接続が、Pod のポート 8080 に正しく転送されていることを示しています。

    2. ブラウザで次の URL を入力して、Pod のポート 8080 にアクセスし、メトリックを表示します。

      http://localhost:8080/metrics

      期待される出力:

      クリックして期待される出力を表示

      # HELP python_gc_objects_collected_total gc 中に収集されたオブジェクト
      # TYPE python_gc_objects_collected_total カウンター
      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 GC 中に見つかった収集不可能なオブジェクト
      # TYPE python_gc_objects_uncollectable_total カウンター
      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 この世代が収集された回数
      # TYPE python_gc_collections_total カウンター
      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 プラットフォーム情報
      # TYPE python_info ゲージ
      python_info{implementation="CPython",major="3",minor="9",patchlevel="18",version="3.9.18"} 1.0
      # HELP process_virtual_memory_bytes 仮想メモリサイズ (バイト単位)。
      # TYPE process_virtual_memory_bytes ゲージ
      process_virtual_memory_bytes 1.406291968e+09
      # HELP process_resident_memory_bytes 常駐メモリサイズ (バイト単位)。
      # TYPE process_resident_memory_bytes ゲージ
      process_resident_memory_bytes 2.73207296e+08
      # HELP process_start_time_seconds Unix エポックからのプロセスの開始時間 (秒単位)。
      # TYPE process_start_time_seconds ゲージ
      process_start_time_seconds 1.71533439115e+09
      # HELP process_cpu_seconds_total 消費された合計ユーザーおよびシステム CPU 時間 (秒単位)。
      # TYPE process_cpu_seconds_total カウンター
      process_cpu_seconds_total 228.18
      # HELP process_open_fds 開いているファイル記述子の数。
      # TYPE process_open_fds ゲージ
      process_open_fds 16.0
      # HELP process_max_fds 開くことができるファイル記述子の最大数。
      # TYPE process_max_fds ゲージ
      process_max_fds 1.048576e+06
      # HELP request_preprocess_seconds リクエストの前処理レイテンシー
      # TYPE request_preprocess_seconds ヒストグラム
      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 リクエストの前処理レイテンシー
      # TYPE request_preprocess_seconds_created ゲージ
      request_preprocess_seconds_created{model_name="sklearn-iris"} 1.7153354578475933e+09
      # HELP request_postprocess_seconds リクエストの後処理レイテンシー
      # TYPE request_postprocess_seconds ヒストグラム
      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 リクエストの後処理レイテンシー
      # TYPE request_postprocess_seconds_created ゲージ
      request_postprocess_seconds_created{model_name="sklearn-iris"} 1.7153354578482144e+09
      # HELP request_predict_seconds 推論リクエストのレイテンシー
      # TYPE request_predict_seconds ヒストグラム
      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 推論リクエストのレイテンシー
      # TYPE request_predict_seconds_created ゲージ
      request_predict_seconds_created{model_name="sklearn-iris"} 1.7153354578476949e+09
      # HELP request_explain_seconds 説明リクエストのレイテンシー
      # TYPE request_explain_seconds ヒストグラム

      この出力には、Pod 内のアプリケーションからのさまざまなパフォーマンスおよびステータスメトリックが表示されます。これにより、リクエストが Pod 内のアプリケーションサービスに正常に転送されたことが確認されます。

ステップ 2: KServe アプリケーションメトリックのクエリ

  1. ARMS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[プロビジョニング] をクリックし、次に [ダッシュボードのクエリ] をクリックします。

  3. [ダッシュボードリスト] ページで、[Kubernetes Pod] ダッシュボードをクリックして Grafana ページに移動します。

  4. 左側のナビゲーションウィンドウで、[Explore] をクリックします。検索文 request_predict_seconds_bucket を入力して、アプリケーションのメトリック値をクエリします。

    説明

    データ収集には約 5 分の遅延があります。

    image

よくある質問と解決策

よくある質問

request_predict_seconds_bucket メトリックのデータが正常に収集されたことを確認するにはどうすればよいですか?

解決策

  1. ARMS コンソールにログインします。

  2. [プロビジョニングされた環境] ページで、[コンテナー環境] タブをクリックします。ターゲットコンテナー環境の名前をクリックし、次に [自己監視] タブをクリックします。

  3. 左側のナビゲーションウィンドウで、[ターゲット] をクリックします。「default/sklearn-iris-svcmonitor/0 (1/1 up)」が表示されている場合、メトリックデータは正常に収集されています。

参考資料

KServe フレームワークが提供するデフォルトのメトリックの詳細については、KServe コミュニティドキュメント「KServe Prometheus メトリック」をご参照ください。