Amazon CloudWatch AWS を使用した PCS インスタンスのモニタリング - AWS PCS

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon CloudWatch AWS を使用した PCS インスタンスのモニタリング

AWS PCS は、PCS コンピューティングノードグループで定義されているスケーリング要件を満たすために、必要に応じて Amazon EC2 インスタンスを起動します。これらのインスタンスは、Amazon CloudWatch を使用して実行中にモニタリングできます。実行中のインスタンスのログを確認するには、インスタンスにログインし、インタラクティブなコマンドラインツールを使用します。ただし、デフォルトでは、CloudWatch メトリクスデータはインスタンスが終了すると一定期間のみ保持され、インスタンスログは通常、インスタンスをバックアップする EBS ボリュームとともに削除されます。終了後に PCS によって起動されたインスタンスからメトリクスまたはログデータを保持するには、EC2 起動テンプレートを使用してインスタンスに CloudWatch エージェントを設定できます。このトピックでは、実行中のインスタンスのモニタリングの概要と、永続インスタンスのメトリクスとログを設定する方法の例を示します。

実行中のインスタンスのモニタリング

AWS PCS インスタンスの検索

PCS によって起動されたインスタンスをモニタリングするには、クラスターまたはコンピューティングノードグループに関連付けられた実行中のインスタンスを見つけます。次に、特定のインスタンスの EC2 コンソールで、ステータスとアラームモニタリングセクションを調べます。これらのインスタンスにログインアクセスが設定されている場合は、インスタンスに接続して、インスタンスのさまざまなログファイルを検査できます。PCS によって管理されるインスタンスの特定の詳細については、「」を参照してくださいAWS PCS でのコンピューティングノードグループインスタンスの検索

詳細なメトリクスの有効化

デフォルトでは、インスタンスメトリクスは 5 分間隔で収集されます。1 分間隔でメトリクスを収集するには、コンピューティングノードグループの起動テンプレートで詳細な CloudWatch モニタリングを有効にします。詳細については、「詳細な CloudWatch モニタリングを有効にする」を参照してください。

永続インスタンスのメトリクスとログの設定

インスタンスに Amazon CloudWatch エージェントをインストールして設定することで、インスタンスのメトリクスとログを保持できます。これは、主に 3 つのステップで構成されます。

  1. CloudWatch エージェント設定を作成します。

  2. PCS インスタンスで取得できる設定を保存します。

  3. CloudWatch エージェントソフトウェアをインストールし、設定を取得し、設定を使用して CloudWatch エージェントを開始する EC2 起動テンプレートを作成します。

詳細については、「Amazon CloudWatch ユーザーガイド」の「CloudWatch エージェントを使用してメトリクス、ログ、トレースを収集する」および「」を参照してくださいPCS での Amazon EC2 AWS 起動テンプレートの使用Amazon CloudWatch

CloudWatch エージェント設定を作成する

CloudWatch エージェントをインスタンスにデプロイする前に、収集するメトリクス、ログ、トレースを指定する JSON 設定ファイルを生成する必要があります。設定ファイルは、ウィザードを使用して作成することも、テキストエディタを使用して手動で作成することもできます。設定ファイルは、このデモ用に手動で作成されます。

AWS CLI がインストールされているコンピュータで、config.json という名前の CloudWatch 設定ファイルを以下の内容で作成します。次の URL を使用して、 ファイルのコピーをダウンロードすることもできます。

https://aws-hpc-recipes.s3.amazonaws.com/main/recipes/pcs/cloudwatch/assets/config.json
メモ
  • サンプルファイルのログパスは Amazon Linux 2 用です。インスタンスが別の基本オペレーティングシステムを使用する場合は、必要に応じてパスを変更します。

  • 他のログをキャプチャするには、 の下にエントリを追加しますcollect_list

  • の値はテンプレート変数{brackets}です。サポートされている変数の完全なリストについては、「Amazon CloudWatch ユーザーガイド」の「CloudWatch エージェント設定ファイルを手動で作成または編集する」を参照してください。 Amazon CloudWatch

  • これらの情報タイプを収集metricsしない場合は、 logsまたは を省略できます。

{ "agent": { "metrics_collection_interval": 60 }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/cloud-init.log", "log_group_class": "STANDARD", "log_group_name": "/PCSLogs/instances", "log_stream_name": "{instance_id}.cloud-init.log", "retention_in_days": 30 }, { "file_path": "/var/log/cloud-init-output.log", "log_group_class": "STANDARD", "log_stream_name": "{instance_id}.cloud-init-output.log", "log_group_name": "/PCSLogs/instances", "retention_in_days": 30 }, { "file_path": "/var/log/amazon/pcs/bootstrap.log", "log_group_class": "STANDARD", "log_stream_name": "{instance_id}.bootstrap.log", "log_group_name": "/PCSLogs/instances", "retention_in_days": 30 }, { "file_path": "/var/log/slurmd.log", "log_group_class": "STANDARD", "log_stream_name": "{instance_id}.slurmd.log", "log_group_name": "/PCSLogs/instances", "retention_in_days": 30 }, { "file_path": "/var/log/messages", "log_group_class": "STANDARD", "log_stream_name": "{instance_id}.messages", "log_group_name": "/PCSLogs/instances", "retention_in_days": 30 }, { "file_path": "/var/log/secure", "log_group_class": "STANDARD", "log_stream_name": "{instance_id}.secure", "log_group_name": "/PCSLogs/instances", "retention_in_days": 30 } ] } } }, "metrics": { "aggregation_dimensions": [ [ "InstanceId" ] ], "append_dimensions": { "AutoScalingGroupName": "${aws:AutoScalingGroupName}", "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}" }, "metrics_collected": { "cpu": { "measurement": [ "cpu_usage_idle", "cpu_usage_iowait", "cpu_usage_user", "cpu_usage_system" ], "metrics_collection_interval": 60, "resources": [ "*" ], "totalcpu": false }, "disk": { "measurement": [ "used_percent", "inodes_free" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "diskio": { "measurement": [ "io_time" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "mem": { "measurement": [ "mem_used_percent" ], "metrics_collection_interval": 60 }, "swap": { "measurement": [ "swap_used_percent" ], "metrics_collection_interval": 60 } } } }

このファイルは、インスタンスのブートストラップ、認証とログイン、およびその他のトラブルシューティングドメインのエラーの診断に役立つ複数のファイルをモニタリングするように CloudWatch エージェントに指示します。具体的には次のとおりです。

  • /var/log/cloud-init.log – インスタンス設定の初期ステージからの出力

  • /var/log/cloud-init-output.log – インスタンス設定中に実行されるコマンドからの出力

  • /var/log/amazon/pcs/bootstrap.log – インスタンス設定中に実行される PCS 固有のオペレーションからの出力

  • /var/log/slurmd.log – Slurm ワークロードマネージャーのデーモンスラムからの出力

  • /var/log/messages – カーネル、システムサービス、アプリケーションからのシステムメッセージ

  • /var/log/secure – SSH、sudo、その他のセキュリティイベントなどの認証試行に関連するログ

ログファイルは、 という名前の CloudWatch ロググループに送信されます/PCSLogs/instances。ログストリームは、インスタンス ID とログファイルのベース名の組み合わせです。ロググループの保持期間は 30 日です。

さらに、 ファイルは CloudWatch エージェントにいくつかの一般的なメトリクスを収集し、インスタンス ID 別に集計するように指示します。

設定を保存する

CloudWatch エージェント設定ファイルは、PCS コンピューティングノードインスタンスがアクセスできる場所に保存する必要があります。これを行うには、2 つの一般的な方法があります。コンピューティングノードグループインスタンスがインスタンスプロファイルを介してアクセスできる Amazon S3 バケットにアップロードするか、Amazon Systems Manager パラメータストアに SSM パラメータとして保存できます。

S3 バケットへのアップロード

ファイルを S3 に保存するには、次の AWS CLI コマンドを使用します。コマンドを実行する前に、次の置換を行います。

  • amzn-s3-demo-bucket を独自の S3 バケット名に置き換える

まず、 (既存のバケットがある場合はオプション) 設定ファイルを保持するバケットを作成します (複数可)。

aws s3 mb s3://amzn-s3-demo-bucket

次に、ファイルを バケットにアップロードします。

aws s3 cp ./config.json s3://amzn-s3-demo-bucket/

SSM パラメータとして保存する

ファイルを SSM パラメータとして保存するには、次のコマンドを使用します。コマンドを実行する前に、次の置換を行います。

  • region-code を、AWS PCS を使用している AWS リージョンに置き換えます。

  • (オプション) AmazonCloudWatch-PCS を パラメータの独自の名前に置き換えます。名前のプレフィックスを から変更する場合AmazonCloudWatch-、ノードグループインスタンスプロファイルの SSM パラメータに読み取りアクセスを具体的に追加する必要があります。

aws ssm put-parameter \ --region region-code \ --name "AmazonCloudWatch-PCS" \ --type String \ --value file://config.json

EC2 起動テンプレートを記述する

起動テンプレートの具体的な詳細は、設定ファイルが S3 または SSM に保存されているかどうかによって異なります。

S3 に保存されている設定を使用する

このスクリプトは、CloudWatch エージェントをインストールし、S3 バケットから設定ファイルをインポートし、それを使用して CloudWatch エージェントを起動します。このスクリプトの次の値を独自の詳細に置き換えます。

  • amzn-s3-demo-bucket – アカウントが読み取ることができる S3 バケットの名前

  • /config.json – 設定が保存されている S3 バケットルートへの相対パス

MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/cloud-config; charset="us-ascii" packages: - amazon-cloudwatch-agent runcmd: - aws s3 cp s3://amzn-s3-demo-bucket/config.json /etc/s3-cw-config.json - /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file://etc/s3-cw-config.json --==MYBOUNDARY==--

ノードグループの IAM インスタンスプロファイルには、バケットへのアクセス権が必要です。上のユーザーデータスクリプトのバケットの IAM ポリシーの例を次に示します。

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }

また、インスタンスは S3 エンドポイントと CloudWatch エンドポイントへのアウトバウンドトラフィックを許可する必要があります。これは、クラスターアーキテクチャに応じて、セキュリティグループまたは VPC エンドポイントを使用して実現できます。

SSM に保存されている設定を使用する

このスクリプトは、CloudWatch エージェントをインストールし、SSM パラメータから設定ファイルをインポートし、それを使用して CloudWatch エージェントを起動します。このスクリプトの次の値を独自の詳細に置き換えます。

  • (オプション) AmazonCloudWatch-PCS を パラメータの独自の名前に置き換えます。

MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/cloud-config; charset="us-ascii" packages: - amazon-cloudwatch-agent runcmd: - /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c ssm:AmazonCloudWatch-PCS --==MYBOUNDARY==--

ノードグループの IAM インスタンスポリシーには、CloudWatchAgentServerPolicy がアタッチされている必要があります。

パラメータ名が で始まらないAmazonCloudWatch-場合は、ノードグループインスタンスプロファイルの SSM パラメータに読み取りアクセスを具体的に追加する必要があります。以下は、プレフィックス DOC-EXAMPLE-PREFIX の IAM ポリシーの例です。

JSON
{ "Version" : "2012-10-17", "Statement" : [ { "Sid" : "CustomCwSsmMParamReadOnly", "Effect" : "Allow", "Action" : [ "ssm:GetParameter" ], "Resource" : "arn:aws:ssm:*:*:parameter/DOC-EXAMPLE-PREFIX*" } ] }

また、インスタンスは SSM および CloudWatch エンドポイントへのアウトバウンドトラフィックを許可する必要があります。これは、クラスターアーキテクチャに応じて、セキュリティグループまたは VPC エンドポイントを使用して実現できます。