7.2. サーバーレス開発者メトリクス
メトリクスを使用すると、開発者は Knative サービスのパフォーマンスを監視できます。OpenShift Container Platform モニターリングスタックを使用して、Knative サービスのヘルスチェックおよびメトリクスを記録し、表示できます。
OpenShift Container Platform Web コンソール Developer パースペクティブの Dashboards に移動すると、OpenShift Serverless のさまざまなメトリクスを表示できます。
サービスメッシュが mTLS で有効にされている場合、サービスメッシュが Prometheus のメトリクスの収集を阻止するため、Knative Serving のメトリクスはデフォルトで無効にされます。
この問題の解決については、Enabling Knative Serving metrics when using Service Mesh with mTLS の有効化を参照してください。
メトリクスの収集は、Knative サービスの自動スケーリングには影響しません。これは、収集要求がアクティベーターを通過しないためです。その結果、Pod が実行していない場合に収集が行われることはありません。
7.2.1. デフォルトで公開される Knative サービスメトリクス
メトリクス名、単位、およびタイプ | 説明 | メトリックのタグ |
---|---|---|
メトリックの単位: dimensionless メトリックのタイプ: ゲージ | キュープロキシーに到達する、1 秒あたりのリクエスト数。
Formula:
| destination_configuration="event-display", destination_namespace="pingsource1", destination_pod="event-display-00001-deployment-6b455479cb-75p6w", destination_revision="event-display-00001" |
メトリックの単位: dimensionless メトリックのタイプ: ゲージ | 1 秒あたりのプロキシー化された要求の数。
Formula:
| |
メトリックの単位: dimensionless メトリックのタイプ: ゲージ | この Pod で現在処理されている要求の数。
平均同時実行性は、ネットワークの
| destination_configuration="event-display", destination_namespace="pingsource1", destination_pod="event-display-00001-deployment-6b455479cb-75p6w", destination_revision="event-display-00001" |
メトリックの単位: dimensionless メトリックのタイプ: ゲージ | この Pod で現在処理されているプロキシー要求の数:
| destination_configuration="event-display", destination_namespace="pingsource1", destination_pod="event-display-00001-deployment-6b455479cb-75p6w", destination_revision="event-display-00001" |
メトリック単位: 秒 メトリックのタイプ: ゲージ | プロセスが起動している秒数。 | destination_configuration="event-display", destination_namespace="pingsource1", destination_pod="event-display-00001-deployment-6b455479cb-75p6w", destination_revision="event-display-00001" |
メトリクス名、単位、およびタイプ | 説明 | メトリックのタグ |
---|---|---|
メトリックの単位: dimensionless メトリックの型: counter |
| configuration_name="event-display", container_name="queue-proxy", namespace_name="apiserversource1", pod_name="event-display-00001-deployment-658fd4f9cf-qcnr5", response_code="200", response_code_class="2xx", revision_name="event-display-00001", service_name="event-display" |
メトリックの単位: ミリ秒 メトリックのタイプ: histogram | 応答時間 (ミリ秒単位)。 | configuration_name="event-display", container_name="queue-proxy", namespace_name="apiserversource1", pod_name="event-display-00001-deployment-658fd4f9cf-qcnr5", response_code="200", response_code_class="2xx", revision_name="event-display-00001", service_name="event-display" |
メトリックの単位: dimensionless メトリックの型: counter |
| configuration_name="event-display", container_name="queue-proxy", namespace_name="apiserversource1", pod_name="event-display-00001-deployment-658fd4f9cf-qcnr5", response_code="200", response_code_class="2xx", revision_name="event-display-00001", service_name="event-display" |
メトリックの単位: ミリ秒 メトリックのタイプ: histogram | 応答時間 (ミリ秒単位)。 | configuration_name="event-display", container_name="queue-proxy", namespace_name="apiserversource1", pod_name="event-display-00001-deployment-658fd4f9cf-qcnr5", response_code="200", response_code_class="2xx", revision_name="event-display-00001", service_name="event-display" |
メトリックの単位: dimensionless メトリックのタイプ: ゲージ |
提供および待機キューの現在の項目数。無制限の同時実行の場合は報告されません。 | configuration_name="event-display", container_name="queue-proxy", namespace_name="apiserversource1", pod_name="event-display-00001-deployment-658fd4f9cf-qcnr5", response_code="200", response_code_class="2xx", revision_name="event-display-00001", service_name="event-display" |
7.2.2. カスタムアプリケーションメトリクスを含む Knative サービス
Knative サービスによってエクスポートされるメトリクスのセットを拡張できます。正確な実装は、使用するアプリケーションと言語によって異なります。
以下のリストは、処理されたイベントカスタムメトリクスの数をエクスポートするサンプル Go アプリケーションを実装します。
package main import ( "fmt" "log" "net/http" "os" "github.com/prometheus/client_golang/prometheus" 1 "github.com/prometheus/client_golang/prometheus/promauto" "github.com/prometheus/client_golang/prometheus/promhttp" ) var ( opsProcessed = promauto.NewCounter(prometheus.CounterOpts{ 2 Name: "myapp_processed_ops_total", Help: "The total number of processed events", }) ) func handler(w http.ResponseWriter, r *http.Request) { log.Print("helloworld: received a request") target := os.Getenv("TARGET") if target == "" { target = "World" } fmt.Fprintf(w, "Hello %s!\n", target) opsProcessed.Inc() 3 } func main() { log.Print("helloworld: starting server...") port := os.Getenv("PORT") if port == "" { port = "8080" } http.HandleFunc("/", handler) // Separate server for metrics requests go func() { 4 mux := http.NewServeMux() server := &http.Server{ Addr: fmt.Sprintf(":%s", "9095"), Handler: mux, } mux.Handle("/metrics", promhttp.Handler()) log.Printf("prometheus: listening on port %s", 9095) log.Fatal(server.ListenAndServe()) }() // Use same port as normal requests for metrics //http.Handle("/metrics", promhttp.Handler()) 5 log.Printf("helloworld: listening on port %s", port) log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil)) }
7.2.3. カスタムメトリクスの収集の設定
カスタムメトリクスの収集は、ユーザーワークロードのモニターリング用に設計された Prometheus のインスタンスで実行されます。ユーザーのワークロードのモニターリングを有効にしてアプリケーションを作成した後に、モニターリングスタックがメトリクスを収集する方法を定義する設定が必要になります。
以下のサンプル設定は、アプリケーションの ksvc
を定義し、サービスモニターを設定します。正確な設定は、アプリケーションおよびメトリクスのエクスポート方法によって異なります。
apiVersion: serving.knative.dev/v1 1 kind: Service metadata: name: helloworld-go spec: template: metadata: labels: app: helloworld-go annotations: spec: containers: - image: docker.io/skonto/helloworld-go:metrics resources: requests: cpu: "200m" env: - name: TARGET value: "Go Sample v1" --- apiVersion: monitoring.coreos.com/v1 2 kind: ServiceMonitor metadata: labels: name: helloworld-go-sm spec: endpoints: - port: queue-proxy-metrics scheme: http - port: app-metrics scheme: http namespaceSelector: {} selector: matchLabels: name: helloworld-go-sm --- apiVersion: v1 3 kind: Service metadata: labels: name: helloworld-go-sm name: helloworld-go-sm spec: ports: - name: queue-proxy-metrics port: 9091 protocol: TCP targetPort: 9091 - name: app-metrics port: 9095 protocol: TCP targetPort: 9095 selector: serving.knative.dev/service: helloworld-go type: ClusterIP
7.2.4. サービスのメトリックの検証
メトリクスとモニターリングスタックをエクスポートするようにアプリケーションを設定したら、Web コンソールでメトリクスを検査できます。
前提条件
- OpenShift Container Platform Web コンソールにログインしている。
- OpenShift Serverless Operator および Knative Serving がインストールされていること。
手順
オプション: メトリクスに表示できるアプリケーションに対する要求を実行します。
$ hello_route=$(oc get ksvc helloworld-go -n ns1 -o jsonpath='{.status.url}') && \ curl $hello_route
出力例
Hello Go Sample v1!
-
Web コンソールで、Monitoring
Metrics インターフェイスに移動します。 入力フィールドに、監視するメトリクスのクエリーを入力します。以下に例を示します。
revision_app_request_count{namespace="ns1", job="helloworld-go-sm"}
別の例:
myapp_processed_ops_total{namespace="ns1", job="helloworld-go-sm"}
可視化されたメトリクスを確認します。
7.2.4.1. キュープロキシーメトリクス
各 Knative サービスには、アプリケーションコンテナーへの接続をプロキシーするプロキシーコンテナーがあります。キュープロキシーのパフォーマンスについて多くのメトリクスが報告されます。
以下のメトリクスを使用して、要求がプロキシー側でキューに入れられているかどうか、およびアプリケーション側で要求を処理する際の実際の遅延を測定できます。
メトリクス名 | 説明 | タイプ | タグ | 単位 |
---|---|---|---|---|
|
| カウンター |
| 整数 (単位なし) |
| リビジョン要求の応答時間。 | ヒストグラム |
| ミリ秒 |
|
| カウンター |
| 整数 (単位なし) |
| リビジョンアプリケーション要求の応答時間。 | ヒストグラム |
| ミリ秒 |
|
| ゲージ |
| 整数 (単位なし) |
7.2.5. ダッシュボードでのサービスのメトリクスの検証
namespace でキュープロキシーメトリクスを集約する専用のダッシュボードを使用してメトリクスを検査できます。
前提条件
- OpenShift Container Platform Web コンソールにログインしている。
- OpenShift Serverless Operator および Knative Serving がインストールされていること。
手順
-
Web コンソールで、Monitoring
Metrics インターフェイスに移動します。 -
Knative User Services (Queue Proxy metrics)
ダッシュボードを選択します。 - アプリケーションに対応する Namespace、Configuration、および Revision を選択します。
可視化されたメトリクスを確認します。