サービングエンドポイントのヘルスメトリクスを追跡し、Prometheus と Datadogにエクスポートする

この記事では、エンドポイントのヘルスメトリクスの提供の概要と、メトリクスエクスポート API を使用してエンドポイントメトリクスを PrometheusDatadog にエクスポートする方法を示します。

エンドポイントの正常性メトリクスは、遅延、要求率、エラー率、CPU 使用率、メモリ使用量などのインフラストラクチャとメトリクスを測定します。 これにより、サービス提供インフラストラクチャの動作がわかります。

要件

  • 目的のエンドポイントへの読み取りアクセスと、エンドポイントにアクセスするために Databricks Mosaic AIUI の [設定] で生成できる個人用アクセストークン (PAT)。

  • 既存の モデルサービング エンドポイント。 これを検証するには、次のようにエンドポイントの正常性を確認します。

    curl -n -X GET -H "Authorization: Bearer [PAT]" https://[DATABRICKS_HOST]/api/2.0/serving-endpoints/[ENDPOINT_NAME]
    
  • エクスポートメトリクス API を検証します。

    curl -n -X GET -H "Authorization: Bearer [PAT]" https://[DATABRICKS_HOST]/api/2.0/serving-endpoints/[ENDPOINT_NAME]/metrics
    

サービングエンドポイントメトリクスの定義

メトリクス

説明

レイテンシー(ミリ秒)

Databricks 内の中央値 (P50) と 99 パーセンタイル (P99) のラウンドトリップ待機時間をキャプチャします。 これには、認証やレート制限などのDatabricks関連の追加の待機時間は含まれません

リクエスト率(毎秒)

毎秒処理された要求の数を測定します。 このレートは、1 分以内の要求数を合計し、60 (1 分間の秒数) で割って計算されます。

要求エラー率 (/秒)

毎秒の 4xx および 5xx HTTP エラー応答のレートを追跡します。 要求率と同様に、1 分以内に失敗した要求の総数を集計し、60 で割ったコンピュートです。

CPU 使用率 (%)

すべてのサーバーレプリカの平均 CPU 使用率を示します。 Databricks インフラストラクチャのコンテキストでは、レプリカは仮想マシン ノードを指します。 構成されたコンカレンシー設定に応じて、Databricks は複数のレプリカを作成し、モデル トラフィックを効率的に管理します。

メモリ使用量 (%)

すべてのサーバーレプリカの平均メモリー使用率を示します。

プロビジョニングされた同時実行数

プロビジョニングされた同時実行数は、システムが処理できる並列要求の最大数です。 プロビジョニングされた同時実行は、コンピュートスケールアウト範囲の下限と上限の範囲内で動的に調整され、受信トラフィックに応じて変化します。

GPU 使用率 (%)

NVIDIA DCGM エクスポーターによって報告された平均 GPU 使用率を表します。インスタンスタイプに複数の GPU がある場合、それぞれが個別に追跡されます ( gpu0gpu1、 ...、 gpuNなど)。 使用率は、すべてのサーバーレプリカで平均化され、1 分に 1 回サンプリングされます。 注: サンプリングの頻度が低いということは、このメトリクスが一定の負荷の下で最も正確であることを意味します。

GPU メモリ使用率 (%)

NVIDIA DCGM エクスポータ データに基づいて、各 GPU で使用されているフレーム バッファ メモリの平均割合を示します。 GPU 使用率と同様に、このメトリクスはレプリカ間で平均化され、毎分サンプリングされます。 これは、一貫した負荷条件下で最も信頼性があります。

Prometheusの統合

運用環境にある展開の種類に関係なく、スクレイピング構成は類似している必要があります。

このセクションのガイダンスは、Docker を使用してローカルで Prometheus サービスを開始するための Prometheus ドキュメントに従います。

  1. yaml 設定ファイルを作成し、 prometheus.ymlという名前を付けます。次に例を示します。

     global:
      scrape_interval: 1m
      scrape_timeout: 10s
     scrape_configs:
      - job_name: "prometheus"
        metrics_path: "/api/2.0/serving-endpoints/[ENDPOINT_NAME]/metrics"
        scheme: "https"
        authorization:
         type: "Bearer"
         credentials: "[PAT_TOKEN]"
    
        static_configs:
         - targets: ["dbc-741cfa95-12d1.dev.databricks.com"]
    
  2. 次のコマンドを使用して、プロメテウスをローカルで起動します。

       docker run \
       -p 9090:9090 \
       -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
       prom/prometheus
    
  3. http://localhost:9090 に移動して、ローカルのPrometheusサービスが稼働しているかどうかを確認します。

  4. プロメテウススクレーパーのステータスを確認し、次の場所からエラーをデバッグします。 http://localhost:9090/targets?search=

  5. ターゲットが完全に起動して実行されたら、UI で cpu_usage_percentagemem_usage_percentageなどの指定されたメトリックをクエリーできます。

Datadogの統合

この例の予備設定は、無料版に基づいています。

Datadog には、さまざまな環境にデプロイできるさまざまなエージェントがあります。 デモンストレーションの目的で、次の例では、Databricks ホストのメトリクスエンドポイントをスクレイピングする Mac OS エージェントをローカルで起動します。 他のエージェントを使用するための構成も同様のパターンである必要があります。

  1. 登録する Datadog アカウント。

  2. アカウントダッシュボードに OpenMetrics インテグレーションをインストールすると、Datadog は OpenMetrics データを受け入れて処理できるようになります。

  3. Datadog のドキュメントに従って、Datadog エージェントを起動して実行してください。この例では、DMG パッケージ オプションを使用して、 launchctldatadog-agentを含むすべてのものをインストールします。

  4. OpenMetrics の構成を見つけます。 この例では、設定は ~/.datadog-agent/conf.d/openmetrics.d/conf.yaml.defaultにあります。 次に、構成ファイル yaml 例を示します。

     instances:
      - openmetrics_endpoint: https://[DATABRICKS_HOST]/api/2.0/serving-endpoints/[ENDPOINT_NAME]/metrics
    
       metrics:
       - cpu_usage_percentage:
           name: cpu_usage_percentage
           type: gauge
       - mem_usage_percentage:
           name: mem_usage_percentage
           type: gauge
       - provisioned_concurrent_requests_total:
           name: provisioned_concurrent_requests_total
           type: gauge
       - request_4xx_count_total:
           name: request_4xx_count_total
           type: gauge
       - request_5xx_count_total:
           name: request_5xx_count_total
           type: gauge
       - request_count_total:
           name: request_count_total
           type: gauge
       - request_latency_ms:
           name: request_latency_ms
           type: histogram
    
       tag_by_endpoint: false
    
       send_distribution_buckets: true
    
       headers:
         Authorization: Bearer [PAT]
         Content-Type: application/openmetrics-text
    
  5. launchctl start com.datadoghq.agentを使用して datadog エージェントを起動します。

  6. 構成を変更する必要があるたびに、エージェントを再起動して変更を取得する必要があります。

     launchctl stop com.datadoghq.agent
     launchctl start com.datadoghq.agent
    
  7. datadog-agent healthでエージェントの正常性を確認します。

  8. datadog-agent statusでエージェントのステータスを確認します。次のような応答が表示されるはずです。 そうでない場合は、エラー メッセージでデバッグします。 潜在的な問題は、PAT トークンの有効期限が切れているか、URL が正しくないことが原因である可能性があります。

     openmetrics (2.2.2)
     -------------------
       Instance ID: openmetrics: xxxxxxxxxxxxxxxx [OK]
       Configuration Source: file:/opt/datadog-agent/etc/conf.d/openmetrics.d/conf.yaml.default
       Total Runs: 1
       Metric Samples: Last Run: 2, Total: 2
       Events: Last Run: 0, Total: 0
       Service Checks: Last Run: 1, Total: 1
       Average Execution Time : 274ms
       Last Execution Date : 2022-09-21 23:00:41 PDT / 2022-09-22 06:00:41 UTC (xxxxxxxx)
       Last Successful Execution Date : 2022-09-21 23:00:41 PDT / 2022-09-22 06:00:41 UTC (xxxxxxx)
    
  9. エージェントの状態は、次の UI から http://127.0.0.1:5002/ でも確認できます。

    エージェントが完全に稼働している場合は、Datadog ダッシュボードに戻ってメトリクスを照会できます。 メトリクス data:https://app.datadoghq.com/monitors/create/metricに基づいてモニターまたはアラートを作成することもできます。