このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? すべてのページの右側のペインにある GitHub リンクで、このページの編集を選択してください。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
ノードモニタリングエージェントを備えた Amazon EKS マネージドノードのノードログを取得する方法について説明します。
前提条件
以下があることを確認します。
-
ノードモニタリングエージェントを備えた既存の Amazon EKS クラスター。詳細については、「ノードの自動修復を有効にし、ノードのヘルス問題を調査する」を参照してください。
-
クラスターと通信するようにインストールおよび設定された
kubectl
コマンドラインツール。 -
S3 バケットとオブジェクトを作成するのに十分なアクセス許可が付与された状態でインストールおよびログインした AWS CLI。
-
インストール済みの Python 3 最新バージョン
-
インストール済みの AWS SDK for Python 3、Boto 3。
ステップ 1: S3 バケットの宛先を作成する (任意)
ログを格納する S3 バケットがまだない場合は、作成します。次の AWS CLI コマンドを使用します。バケットのデフォルトは private
アクセスコントロールリストです。bucket-name
はユーザーが選択した一意のバケット名に置き換えます。
aws s3api create-bucket --bucket
bucket-name
ステップ 2: HTTP Put の事前署名された S3 URL を作成する
Amazon EKS は、指定した URL に対して HTTP PUT オペレーションを実行してノードログを返します。このチュートリアルでは、事前署名された S3 HTTP PUT URL を生成します。
ログは gzip tarball として .tar.gz
拡張子で返されます。
注記
AWS API または SDK を使用して、EKS がログファイルをアップロードするための事前署名された S3 アップロード URL を作成する必要があります。AWS CLI を使用して事前署名された S3 アップロード URL を作成することはできません。
-
ログを格納するバケット内の場所を決定します。例えば、キーとして
2024-11-12/logs1.tar.gz
を使用できます。 -
ファイル
presign-upload.py
に次の Python コードを保存します。<bucket-name>
と<key>
を置き換えます。キーは.tar.gz
で終わる必要があります。import boto3; print(boto3.client('s3').generate_presigned_url( ClientMethod='put_object', Params={'Bucket': '<bucket-name>', 'Key': '<key>'}, ExpiresIn=1000 ))
-
次を使用してスクリプトを実行します
python presign-upload.py
-
URL 出力をメモします。この値は次のステップで
http-put-destination
として使用します。
詳細については、AWS Boto3 SDK for Python ドキュメントの「Generate a presigned URL to upload a file
ステップ 3: NodeDiagnostic リソースを作成する
ログを収集するノードの名前を特定します。
リソースの名前としてノードの名前を使用する NodeDiagnostic
マニフェストを作成し、HTTP PUT URL の宛先を指定します。
apiVersion: eks.amazonaws.com/v1alpha1 kind: NodeDiagnostic metadata: name:
node-name
spec: logCapture: destination:http-put-destination
マニフェストをクラスターに適用します。
kubectl apply -f nodediagnostic.yaml
NodeDiagnostic
リソースを記述することで、コレクションのステータスを確認できます。
-
ステータスが
Success
またはSuccessWithErrors
の場合は、タスクが完了し、ログが指定された宛先にアップロードされたことを示します (SuccessWithErrors
は、一部のログが欠落している可能性があることを示します)。 -
ステータスが Failure の場合は、アップロード URL が正しい形式であり、有効期限が切れていないことを確認してください。
kubectl describe nodediagnostics.eks.amazonaws.com/
node-name
ステップ 4: S3 からログをダウンロードする
ログをダウンロードする前に約 1 分待ちます。そして、S3 CLI を使用してログをダウンロードします。
# Once NodeDiagnostic shows Success status, download the logs
aws s3 cp s3://bucket-name
/key
./node-logs.tar.gz
ステップ 5: NodeDiagnostic リソースをクリーンアップする
-
NodeDiagnostic
リソースは自動的には削除されません。ログアーティファクトを取得したら、自分でクリーンアップする必要があります。
# Delete the NodeDiagnostic resource
kubectl delete nodediagnostics.eks.amazonaws.com/node-name