実行中の 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ディレクトリにマウントします。
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ワークロードをデプロイします。
kubectl apply -f dep-with-std-volume.yamlワークロードがデプロイされた後、ポッドのステータスをクエリします。
kubectl get pod -n default期待される出力:
NAME READY STATUS RESTARTS AGE dep-with-std-volume-xxxx-xxxx 3/3 Running 0 9m
ステップ 2: ログを確認する
shared-std-volume コンテナーにログインします。
kubectl exec -it dep-with-std-volume-xxxx-xxxx -c shared-std-volume -- /bin/bash共有ディレクトリを表示します。
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という名前のファイルがあります。ログファイルの各エントリは、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 文字が含まれています。元のファイルの内容がこの制限を超える場合、残りの内容は新しい行に表示されます。
FとPの文字は、現在の行に改行があるかどうかを示します。Fは、現在の行が元のコンテンツの最後の行であることを示します。Pは、現在の行が元のコンテンツの最後の行ではないことを示します。
元のコンテンツ: コンテナの実際の出力です。