サービス提供エンドポイントの正常性メトリックを追跡し、Prometheus と Datadog にエクスポートする

この記事では、サービス提供エンドポイントの正常性メトリックの概要と、エンドポイントのメトリックを PrometheusDatadog にエクスポートするメトリック エクスポート API の使用方法について説明します。

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

要件

  • エンドポイントにアクセスするために Databricks Machine Learning UI の [設定] で生成できる目的のエンドポイントと個人用アクセス トークン (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
    

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

メトリック 説明
待機時間 (ミリ秒) Azure Databricks 内のラウンドトリップ待機時間の中央値 (P50) と 99 パーセンタイル値 (P99) をキャプチャします。 これには、認証やレート制限などの Databricks 関連の追加の待機時間は含まれません
要求率 (1 秒あたり) 1 秒あたりに処理された要求の数を測定します。 この率は、1 分間の要求数を合計し、それを 60 (1 分間の秒数) で割って計算されます。
要求エラー率 (1 秒あたり) 1 秒あたりの 4xx および 5xx HTTP エラー応答の割合を追跡します。 要求率と同様、1 分間の失敗した要求の合計数を集計し、それを 60 で割って計算されます。
CPU 使用率 (%) すべてのサーバー レプリカの平均 CPU 使用率を示します。 Databricks インフラストラクチャのコンテキストでは、レプリカは仮想マシン ノードを指します。 構成されたコンカレンシー設定に応じて、Databricks により、複数のレプリカが作成され、モデル トラフィックが効率的に管理されます。
メモリ使用率 (%) すべてのサーバー レプリカの平均メモリ使用率を示します。
プロビジョニング済みコンカレンシー プロビジョニング済みコンカレンシーとは、システムが処理できる並列要求の最大数のことです。 プロビジョニング済みコンカレンシーは、コンピューティング スケールアウト範囲の最小および最大制限内で動的に調整され、受信トラフィックに応じて変動します。
GPU 使用率 (%) NVIDIA DCGM エクスポーターによって報告される平均 GPU 使用率を表します。 インスタンスの種類に複数の GPU がある場合、各 GPU は個別に追跡されます (gpu0gpu1、…、gpuN など)。 この使用率は、すべてのサーバー レプリカの平均であり、1 分に 1 回サンプリングされます。 注: サンプリングの頻度が低いということは、このメトリックが一定の負荷の下で最も正確であることを意味します。
GPU メモリ使用率 (%) NVIDIA DCGM エクスポーター データに基づいて、各 GPU で使用されるフレーム バッファ メモリの平均率を示します。 GPU 使用率と同様、このメトリックは、すべてのレプリカの平均であり、1 分ごとにサンプリングされます。 一貫した負荷条件下で最も信頼性が高くなります。

Prometheus の統合

Note

運用環境のデプロイの種類に関係なく、スクレイピング構成は似ているはずです。

このセクションのガイダンスは、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. 次のコマンドを使用して Prometheus をローカルで起動します:

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

  4. Prometheus スクレーパーの状態を確認し、次のエラーをデバッグします: http://localhost:9090/targets?search=

  5. ターゲットが完全に起動して実行されたら、UI で指定されたメトリック (例えば cpu_usage_percentage または mem_usage_percentage) に対してクエリを実行できます。

Datadog の統合

Note

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

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

  1. Datadog アカウントを登録します。

  2. Datadog が OpenMetrics データを受け入れて処理できるように、アカウント ダッシュボードに OpenMetrics 統合をインストールします。

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

  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 ダッシュボードに戻ってメトリックのクエリを実行できます。 メトリック データ (https://app.datadoghq.com/monitors/create/metric) に基づいてモニターまたはアラートを作成することもできます。