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

Container Compute Service:サイドカーコンテナーを使用して GPU-HPN ポッドの stdout ログと stderr ログを収集する

最終更新日:Apr 12, 2025

実行中の GPU-HPN ポッドは、stdout ログと stderr ログを生成します。このトピックでは、サイドカーコンテナーを使用して GPU-HPN ポッドからこれらのログを収集する方法について説明します。

重要

このトピックは、ACS GPU-HPN ポッドにのみ適用されます。汎用ポッドおよびアクセラレーテッドポッドからログを収集する方法については、「カスタムソリューションを使用してアプリケーションログを収集する」をご参照ください。

手順

ステップ 1: マルチコンテナーワークロードをデプロイする

3 つのコンテナーを含む GPU-HPN ワークロードをデプロイします。各コンテナーの目的は次のとおりです。

  • print-stdout: stdout ログを出力します。

  • print-stderr: stderr ログを出力します。

  • shared-std-volume: すべてのコンテナーの stdout をコンテナーの /var/log/container-std ディレクトリにマウントします。

  1. dep-with-std-volume.yaml という名前のファイルを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-with-std-volume
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: dep-with-std-volume
      template:
        metadata:
          labels:
            alibabacloud.com/compute-class: "gpu-hpn"
            alibabacloud.com/hpn-type: "rdma"
            app: dep-with-std-volume
        spec:
          containers:
          - name: print-stdout
            image: registry.cn-wulanchabu.aliyuncs.com/acs/ubuntu:latest
            # stdout ログを出力します。
            command: ["bash", "-c", "echo 'this log is from print-stdout container'; tail -f /dev/null"]
            resources:
              requests:
                cpu: "1"
                memory: "1Gi"
              limits:
                cpu: "1"
                memory: "1Gi"
          - name: print-stderr
            image: registry.cn-wulanchabu.aliyuncs.com/acs/ubuntu:latest
            # stderr ログを出力します。
            command: ["bash", "-c", "echo 'this log is from print-stderr container' >&2; tail -f /dev/null"]
            resources:
              requests:
                cpu: "1"
                memory: "1Gi"
              limits:
                cpu: "1"
                memory: "1Gi"
          - name: shared-std-volume
            image: registry.cn-wulanchabu.aliyuncs.com/acs/ubuntu:latest
            command: ["sleep", "infinity"]
            resources:
              requests:
                cpu: "1"
                memory: "1Gi"
              limits:
                cpu: "1"
                memory: "1Gi"
            volumeMounts:
            - mountPath: /var/log/container-std
              name: stdout-volume
          volumes:
          # stdout 用の共有ボリュームを宣言します。
          - name: stdout-volume
            emptyDir:
              medium: Stdout
  2. ワークロードをデプロイします。

    kubectl apply -f dep-with-std-volume.yaml
  3. ワークロードがデプロイされた後、ポッドのステータスをクエリします。

    kubectl get pod -n default

    期待される出力:

    NAME                            READY   STATUS             RESTARTS         AGE
    dep-with-std-volume-xxxx-xxxx   3/3     Running            0                9m

ステップ 2: ログを確認する

  1. shared-std-volume コンテナーにログインします。

    kubectl exec -it dep-with-std-volume-xxxx-xxxx -c shared-std-volume -- /bin/bash
  2. 共有ディレクトリを表示します。

    ls /var/log/container-std/*

    期待される出力:

    /var/log/container-std/print-stderr:
    0.log
    
    /var/log/container-std/print-stdout:
    0.log
    
    /var/log/container-std/shared-std-volume:
    0.log

    ディレクトリには、3 つのコンテナーにちなんで名付けられた 3 つのサブディレクトリが含まれています。各サブディレクトリには、0.log という名前のファイルがあります。

  3. ログファイルの各エントリは、UTC 時間、出力ソース、改行マーク、および元のコンテンツで構成され、スペース文字で区切られています。次の例は、print-stdout コンテナーと print-stderr コンテナーの出力を表示する方法を示しています。

    cat /var/log/container-std/print-stdout/*
    cat /var/log/container-std/print-stderr/*

    期待される出力:

    2024-10-18T08:48:57.567368449Z stdout F this log is from print-stdout container
    2024-10-18T08:48:57.949367202Z stderr F this log is from print-stderr container
    • 時間: UTC 時間です。カスタマイズできません。

    • 出力ソース: stdout は標準出力を示し、stderr は標準エラー出力を示します。

    • 現在のコンテンツに改行があるかどうかを確認する: ファイルの各行には最大 4,096 文字が含まれています。元のファイルの内容がこの制限を超える場合、残りの内容は新しい行に表示されます。FP の文字は、現在の行に改行があるかどうかを示します。

      • F は、現在の行が元のコンテンツの最後の行であることを示します。

      • P は、現在の行が元のコンテンツの最後の行ではないことを示します。

    • 元のコンテンツ: コンテナの実際の出力です。