Google Kubernetes Engine(GKE)上の Ray クラスタのロ��と指標を収集して表示する

このページでは、Google Kubernetes Engine(GKE)で実行されている Ray クラスタのログと指標を収集するように Google Kubernetes Engine(GKE)を構成する方法と、Cloud Logging と Cloud Monitoring で Ray のログと指標を表示する方法について説明します。

Ray と KubeRay の詳細については、Ray on Google Kubernetes Engine(GKE)の概要をご覧ください。

始める前に

作業を始める前に、次のタスクが完了していることを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API を有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。gcloud CLI をインストール済みの場合は、gcloud components update コマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。

要件と制限事項

  • Ray クラスタのロギングを有効にする前に、既存の GKE クラスタでシステムとワークロードのロギングを有効にする必要があります。
  • 既存の GKE クラスタで Ray クラスタのログ収集を有効にすると、GKE は既存の Ray Pod ではなく、新しく作成された Ray Pod からのみログを収集します。
  • GKE Standard クラスタの場合、Ray クラスタの指標の収集を有効にするには、Google Cloud Managed Service for Prometheus を有効にする必要があります。Autopilot クラスタの場合、Google Cloud Managed Service for Prometheus はデフォルトで有効になっています。
  • Ray クラスタ内の Ray コンテナで ray-logs という名前のボリュームを指定しないでください。指定すると、GKE はログを収集しません。
  • JSON ロギングは、GKE バージョン v1.35.1-gke.1616000 以降で使用できます。構造化 JSON ロギングを有効にするには、Ray コンテナ仕様内で特定の環境変数を構成します。

Ray クラスタのログ収集を有効にする

Ray クラスタのログ収集は、新規または既存の GKE Autopilot または Standard クラスタで有効にできます。GKE が Ray クラスタから収集する Ray ログは、コンテナログとして分類されます。これには、Ray クラスタ ヘッダーノードとワーカーノードで生成されたすべてのログが含まれます。

Ray クラスタに対するログ収集を有効にするには、 Google Cloud コンソールまたは gcloud CLI を使用します。

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine ページに移動します。

    Google Kubernetes Engine に移動

  2. [作成] をクリックし、[Standard] セクションまたは [Autopilot] セクションで [構成] をクリックします。

  3. ナビゲーション パネルの [クラスタ] の下の [機能] をクリックします。

  4. [オペレーション] セクションで、[System and Workloads] チェックボックスがオンになっていることを確認します。

  5. [AI と ML] セクションで、[Ray Operator ���有効化] を選択してから、[Ray クラスタのログ収集を有効にする] を選択します。

  6. [作成] をクリックします。

Standard クラスタの場合は、Google Cloud Managed Service for Prometheus も有効にする必要があります。

gcloud

--addons=RayOperator オプションと --enable-ray-cluster-logging オプションを使用してクラスタを作成します。

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --addons=RayOperator \
    --enable-ray-cluster-logging

次のように置き換えます。

  • CLUSTER_NAME: 新しいクラスタの名前。
  • LOCATION: 新しいクラスタのロケーション(us-central1 など)。

既存のクラスタで Ray クラスタのログ収集を有効にするには、--addons=RayOperator オプションと --enable-ray-cluster-logging オプションを指定して gcloud container clusters update コマンドを使用します。

Ray ログを確認する

Logging を使用して、GKE で実行されている Ray クラスタから収集されたログを確認できます。

  1. Google Cloud コンソールの [Cloud Logging] ページに移動します。

    [Cloud Logging] に移動

  2. クエリエディタを開き、クエリエディタに式を貼り付けます。

  3. [クエリを実行] をクリックします。

ログ エクスプローラでは、次のサンプルクエリを使用できます。

クエリ / フィルタの名前
すべての Ray ログ
resource.type="k8s_container"
labels."k8s-pod/ray_io/is-ray-node"="yes"
すべての Ray ヘッドログ
resource.type="k8s_container"
labels."k8s-pod/ray_io/node-type"="head"
Ray クラスタ内のすべてのログ
resource.type="k8s_container"
labels."k8s-pod/ray_io/cluster"="RAY_CLUSTER_NAME"
Ray ジョブのすべてのドライバログ
resource.type="k8s_container"
jsonPayload.ray_submission_id="RAY_JOB_SUBMISSION_ID"
Ray ジョブのすべてのワーカーログ
resource.type="k8s_container"
labels."k8s-pod/ray_io/cluster"="RAY_CLUSTER_NAME"
labels."k8s-pod/ray_io/node-type"="worker"
jsonPayload.filename=~"/tmp/ray/session_latest/logs/worker-(.*).out"

拡張構造化ロギングを有効にする(推奨)

拡張構造化ロギングは、GKE バージョン v1.35.1-gke.1616000 以降で使用できます。

デフォルトでは、Ray ログは Cloud Logging の jsonPayload.log フィールド内の非構造化テキスト文字列としてキャプチャされます。クエリ、分析、オブザーバビリティを改善するために、構造化 JSON 形式でログを生成するように Ray クラスタを構成できます。この拡張形式では、ログが詳細な Key-Value ペアに解析されるため、task_idjob_id などの属性に対して、フィールドベースのクエリをより高速に実行できます。構造化ロギングの強化により、正しい重大度ラベルが提供され、複数行のログの分割が防止され、Cloud Logging 機能とシームレスに統合されて、分析とデバッグが改善されます。

構造化 JSON 出力を有効にするには、次の操作を行います。

  1. Ray クラスタでログ収集を有効にする
  2. RayCluster YAML マニフェストの Ray コンテナ仕様で、次の環境変数を設定します。

    1. RAY_LOGGING_CONFIG_ENCODING="JSON": 構造化 JSON エンコードを使用するように Ray アプリケーション ログ(Ray Core、アクター、タスク)を構成します。
    2. RAY_BACKEND_LOG_JSON="1": 構造化された JSON 形式で生成されるように Ray システムログ(GCS サーバーや Raylet のログなど)を構成します。

    たとえば、次の RayCluster マニフェストには、headGroupSpec と workerGroupSpecs の両方の仕様で、すべての Ray コンテナの env セクションが含まれています。

    # Example snippet for a RayCluster manifest
    apiVersion: ray.io/v1
    kind: RayCluster
    metadata:
      name: raycluster-structured
    spec:
      headGroupSpec:
        template:
          spec:
            containers:
            - name: ray-head
              image: rayproject/ray:2.54.0 # Replace with your desired Ray image
              # ... other container settings
              env:
              - name: RAY_LOGGING_CONFIG_ENCODING
                value: "JSON"
              - name: RAY_BACKEND_LOG_JSON
                value: "1"
      workerGroupSpecs:
      - groupName: small-group
        replicas: 1
        minReplicas: 1
        maxReplicas: 5
        template:
          spec:
            containers:
            - name: ray-worker
              image: rayproject/ray:2.54.0 # Replace with your desired Ray image
              # ... other container settings
              env:
              - name: RAY_LOGGING_CONFIG_ENCODING
                value: "JSON"
              - name: RAY_BACKEND_LOG_JSON
                value: "1"
    
  3. 更新された RayCluster マニフェストを適用します。kubectl apply -f your-raycluster.yaml

構造化ログのクエリ

クエリ / フィルタの名前
特定の Ray ジョブ ID のすべてのエラーログ
resource.type="k8s_container"
labels."k8s-pod/ray_io/is-ray-node"="yes"
severity=ERROR
jsonPayload.job_id="YOUR_JOB_ID"
特定の Ray ワーカー プロセス ID のログ
resource.type="k8s_container"
labels."k8s-pod/ray_io/is-ray-node"="yes"
jsonPayload.worker_id="YOUR_WORKER_ID"
特定のワーカー Pod の特定のタスク ID のエラーログ
resource.type="k8s_container"
resource.labels.pod_name="YOUR_WORKER_POD_NAME"
labels."k8s-pod/ray_io/is-ray-node"="yes" 
severity=ERROR
jsonPayload.task_id="YOUR_TASK_ID"

Ray クラスタの指標の収集を有効にする

新規または既存の GKE Autopilot または Standard クラスタで Ray クラスタの指標の収集を有効にできます。

Ray クラスタの指標の収集を有効にすると、GKE は既存の Ray クラスタと新しい Ray クラスタから指標を収集します。GKE は、Ray によってエクスポートされたすべてのシステム指標を Prometheus 形式で収集します。

Ray クラスタの指標の収集は、Google Cloud コンソールまたは gcloud CLI を使用して有効にすることができます。

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine ページに移動します。

    Google Kubernetes Engine に移動

  2. [作成] をクリックし、[Standard] セクションまたは [Autopilot] セクションで [構成] をクリックします。

  3. ナビゲーション パネルの [クラスタ] の下の [機能] をクリックします。

  4. [オペレーション] セクションで、[System and Workloads] チェックボックスがオンになっていることを確認します。

  5. [AI と ML] セクションで、[Ray Operator の有効化] を選択してから、[Ray クラスタの指標の収集を有効にする] を選択します。

  6. [作成] をクリックします。

Standard クラスタの場合は、Google Cloud Managed Service for Prometheus も有効にする必要があります。

gcloud

--addons=RayOperator オプションと --enable-ray-cluster-monitoring オプションを使用してクラスタを作成します。

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --addons=RayOperator \
    --enable-ray-cluster-monitoring

次のように置き換えます。

  • CLUSTER_NAME: 新しいクラスタの名前。
  • LOCATION: 新しいクラスタのロケーション(us-central1 など)。

既存のクラスタで Ray クラスタのログ収集を有効にするには、--addons=RayOperator オプションと --enable-ray-cluster-monitoring オプションを指定して gcloud container clusters update コマンドを使用します。

Ray の指標を確認する

Google Cloud Managed Service for Prometheus には、事前構成された Ray on GKE の概要のダッシュボードが用意されています。このダッシュボードには、主要な Ray 指標が一元的に表示されます。これは、GKE で Ray クラスタのモニタリングを迅速に開始するうえでおすすめの方法です。

Ray on GKE の概要ダッシュボードに移動

Ray クラスタに対して指標の収集を有効にすると、このダッシュボードにデータが自動的に入力されます。

GKE 上で動作している Ray クラスタから収集された個々の指標を確認する場合は、次の手順で操作します。

  1. Google Cloud コンソールの [Metrics Explorer] ページに移動します。

    [Metrics Explorer] に移動

  2. [指標を選択] フィールドで、Ray 固有の指標を検索できます。��常、これらの指標には prometheus/ray_ という接頭辞が付いています。たとえば、prometheus/ray_worker_cpu_seconds_totalprometheus/ray_memory_bytes_max などがあります。

  3. 適切なリソースタイプ(k8s_podk8s_container など)を選択し、Ray クラスタに関連するラベル(ray.io/cluster など)でフィルタ処理することで、検索結果を絞り込むことができます。

次のステップ