CloudWatch ソリューション: Amazon EC2 ヘルス
このソリューションは、EC2 インスタンスで実行されているワークロードの CloudWatch エージェントを使用して、すぐに使用できるメトリクス収集を設定するのに役立ちます。さらに、事前設定された CloudWatch ダッシュボードを設定するのに役立ちます。
トピック
要件
このソリューションは、以下の条件に適しています。
コンピューティング: Amazon EC2
プラットフォーム: Linux と macOS
特定の AWS リージョン内で最大 500 個の EC2 インスタンスをサポート
CloudWatch エージェントの最新バージョン
-
EC2 インスタンスにインストールされた SSM エージェント
注記
AWS Systems Manager (SSM エージェント) は、AWS および信頼できるサードパーティーが提供している一部の Amazon マシンイメージ (AMI) にプリインストールされています。エージェントがインストールされていない場合は、使用しているオペレーティングシステムタイプの手順を使用して、手動でインストールできます。
利点
このソリューションでは、CloudWatch Agent を使用して EC2 サーバーをモニタリングしているため、次のユースケースについて、標準の EC2 名前空間メトリクスに加えて追加のシステムレベルのメトリクスが得られます。
CPU パフォーマンスの問題とリソースの制約を検出します。
EC2 インスタンス全体のさまざまなディスクのディスク使用率とストレージ容量をモニタリングします。
メモリ使用率パターンと潜在的なメモリリークを追跡します。
I/O オペレーションとその全体的なパフォーマンスへの影響を分析します。
ネットワークトラフィックパターンと異常の可能性を観測します。
ソリューションの主な利点を以下に示します。
-
EC2 インスタンスのメトリクス収集を自動化し、手動計測をなくします。
-
EC2 インスタンスメトリクス用の事前設定済みの統合 CloudWatch ダッシュボードが用意されています。ダッシュボードは、ダッシュボードを初めて作成するときにメトリクスが存在しない場合でも、ソリューションを使用して設定された新しい EC2 インスタンスからのメトリクスを自動的に処理します。また、Auto Scaling グループを介して管理される EC2 インスタンスを観測することもできます。
以下の画像は、このソリューションのダッシュボードの例です。
コスト
このソリューションは、アカウントでリソースを作成して使用します。標準使用には料金がかかります。これには以下を含みます。
-
CloudWatch エージェントによって収集されたすべてのメトリクスは、カスタムメトリクスとして課金されます。このソリューションで使用されるメトリクスの数は、EC2 ホストの数によって異なります。
CloudWatch エージェントメトリクスの合計数は、ディスクの設定によって異なります。ディスクメトリクスと diskio メトリクス以外に、ソリューションは 6 つのメトリクスを公開します。ディスクメトリクス (
disk_used_percent
、disk_inodes_free
) の数はdevice/fstype/path
ディメンションの数によって異なります。diskio メトリクス (diskio_io_time
) はname
ディメンションの数によって異なります。例えば、EC2 コンソール操作機能のデフォルト設定での単一の t2.micro では、合計 22 個の CloudWatch エージェントメトリクス (4 CPU、12 ディスク、4 diskio、1 メモリ、1 スワップ) が生成されます。AWS/EC2
などの公開メトリクスは無料で提供されます。 1 つのカスタムダッシュボード。
-
CloudWatch エージェントによってメトリクスの公開がリクエストされた API オペレーション。このソリューションのデフォルト設定では、CloudWatch エージェントは毎分 1 回 PutMetricData を呼び出します。つまり、PutMetricData API は EC2 ホストごとに 30 日の月には
30*24*60=43,200
回呼び出されます。
CloudWatch の料金の詳細については、「Amazon CloudWatch の料金
料金計算ツールを使用すると、このソリューションを使用するためのおよその月額コストを見積もることができます。
料金計算ツールを使用して毎月のソリューションのコストを見積もるには
-
[メトリクス] セクションの [メトリクスの数] に
(6 + total count of disk and diskio metrics per EC2 host as described above) * number of EC2 instances configured for this solution
を入力します。 -
[API] セクションの [API リクエストの数] に
43200 * number of EC2 instances configured for this solution
を入力します。 -
デフォルトでは、ソリューションは EC2 ホストごとに毎分 1 回 PutMetricData オペレーションを実行します。
-
[ダッシュボードとアラーム] セクションの [ダッシュボードの数] に「
1
」と入力します。 -
毎月の見積コストは、料金計算ツールの下部に表示されます。
このソリューションの CloudWatch エージェント設定
CloudWatch エージェントは、サーバー上およびコンテナ化された環境で継続的かつ自律的に実行されるソフトウェアです。インフラストラクチャとアプリケーションからメトリクス、ログ、トレースを収集し、CloudWatch と X-Ray に送信します。
Amazon CloudWatch エージェントの詳細については、「CloudWatch エージェントを使用してメトリクス、ログ、トレースを収集する」を参照してください。
このソリューションのエージェント設定では、EC2 インスタンスのモニタリングと観測を開始するのに役立つ一連のメトリクスを収集します。CloudWatch エージェントは、ダッシュボードのデフォルトで表示されるよりも多くの EC2 メトリクスを収集するように設定できます。Amazon EC2 メトリクスのリストについては、「Linux および macOS インスタンスで CloudWatch エージェントにより収集されるメトリクス」を参照してください。Windows インスタンスで収集されるメトリクスについては、「Windows Server インスタンスで CloudWatch エージェントにより収集されるメトリクス」を参照してください。
EC2 Health ソリューションのエージェント設定
エージェントによって収集されるメトリクスは、エージェント設定で定義されます。このソリューションには、ソリューションのダッシュボードに適したディメンションで推奨メトリクスを収集するためのエージェント設定が用意されています。
ソリューションをデプロイする手順については、「ソリューションにエージェントをデプロイする」で後述します。以下の情報は、環境に合わせてエージェント設定をカスタマイズする方法を理解するのに役立ちます。
注記
EC2 インスタンスが Auto Scaling グループの一部でない場合、CloudWatch エージェントは AutoScalingGroupName
ディメンションをすべて削除します。この動作は、null 値や空の値を持つディメンション名を防ぐのに役立ちます。ソリューションダッシュボードに含まれる各メトリクスウィジェットは、AutoScalingGroup
ディメンションを含むメトリクスと含まないメトリクスを検索します。これにより、ソリューションが適用されるすべての EC2 インスタンスが同じダッシュボードでサポートされるようになります。
エージェント設定に何らかの変更を加える場合は、ソリューションに付随するダッシュボードに同じ変更を適用する必要があります。例えば、ImageId ディメンションを省略する場合は、ダッシュボードウィジェットで使用されるメトリクス検索式から同じディメンションを削除する必要があります。
EC2 インスタンスのエージェント設定
ワークロードがデプロイされている Amazon EC2 インスタンスでは、次の CloudWatch エージェント設定を使用します。
{ "agent": { "metrics_collection_interval": 60, "run_as_user": "cwagent" }, "metrics": { "append_dimensions": { "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}", "ImageId": "${aws:ImageId}", "AutoScalingGroupName": "${aws:AutoScalingGroupName}" }, "metrics_collected": { "cpu": { "measurement": [ "cpu_usage_idle", "cpu_usage_iowait", "cpu_usage_user", "cpu_usage_system" ], "totalcpu": true }, "disk": { "measurement": [ "used_percent", "inodes_free" ], "resources": [ "*" ], "dimensions": [ ["device", "fstype", "path"] ] }, "diskio": { "measurement": [ "io_time" ], "resources": [ "*" ] }, "mem": { "measurement": [ "used_percent" ] }, "swap": { "measurement": [ "used_percent" ] } } } }
ソリューションにエージェントをデプロイする
ユースケースに応じて、CloudWatch エージェントをインストールするためのいくつかのアプローチがあります。このソリューションには Systems Manager を使用することをお勧めします。これにより、コンソール操作機能が提供され、1 つの AWS アカウント内のマネージドサーバーのフリートの管理が簡単になります。このセクションの手順では Systems Manager を使用し、CloudWatch エージェントを既存の設定で実行していない場合を対象としています。CloudWatch エージェントが実行されているかどうかは、「CloudWatch エージェントが実行されていることを確認する」の手順に従って確認できます。
EC2 ホストで CloudWatch エージェントを既に実行していて、エージェント設定を管理している場合は、このセクションの手順をスキップし、既存のデプロイメカニズムに従って設定を更新できます。EC2 Health エージェント設定を既存のエージェント設定とマージしてから、マージされた設定をデプロイするようにしてください。Systems Manager を使用して CloudWatch エージェントの設定を保存および管理している場合は、設定を既存のパラメータ値にマージできます。詳細については、「CloudWatch エージェント設定ファイルの管理」を参照してください。
注記
Systems Manager を使用して次の CloudWatch エージェント設定をデプロイすると、EC2 インスタンスの既存の CloudWatch エージェント設定がある場合は置き換えられるか、上書きされます。独自の環境やユースケースに合わせてこの設定を変更できます。設定で定義されているメトリクスは、ソリューションを提供するダッシュボードに最小限必要なものです。
このデプロイプロセスには、以下のステップが含まれます。
ステップ 1: ターゲット EC2 インスタンスに必要な IAM アクセス許可があることを確認します。
ステップ 2: 推奨エージェント設定ファイルを Systems Manager パラメータストアに保存します。
ステップ 3: AWS CloudFormation スタックを使用して 1 つまたは複数の EC2 インスタンスに CloudWatch エージェントをインストールします。
ステップ 4: エージェントのセットアップが正しく設定されていることを確認します。
ステップ 1: ターゲット EC2 インスタンスに必要な IAM アクセス許可があることを確認する
CloudWatch エージェントをインストールして設定するためのアクセス許可を Systems Manager に付与する必要があります。また、EC2 インスタンスから CloudWatch にテレメトリを発行するアクセス許可を CloudWatch エージェントに付与する必要もあります。インスタンスにアタッチされた IAM ロールに CloudWatchAgentServerPolicy と AmazonSSMManagedInstanceCore の IAM ポリシーがアタッチされていることを確認します。
-
ロールを作成するには、「Amazon EC2 インスタンスの CloudWatch エージェントで使用する IAM ロールを作成する」を参照してください。
-
ロールを作成したら、ロールを EC2 インスタンスにアタッチします。EC2 インスタンスにロールをアタッチするには、「インスタンスへの IAM ロールのアタッチ」の手順に従います。
ステップ 2: 推奨 CloudWatch エージェント設定ファイルを Systems Manager パラメータストアに保存する
パラメータストアでは、設定パラメータを安全に保存および管理することで EC2 インスタンスへの CloudWatch エージェントのインストールが簡素化され、ハードコーディングされた値が不要になります。これにより、デプロイプロセスがより安全で柔軟になり、集中管理が可能になり、複数のインスタンスで設定を簡単に更新できるようになります。
以下の手順を使用して、パラメータストアに推奨 CloudWatch エージェント設定ファイルをパラメータとして保存します。
CloudWatch エージェント設定ファイルをパラメータとして作成するには
-
AWS Systems Manager コンソール (https://console.aws.amazon.com/systems-manager/
) を開きます。 -
コンソールで選択したリージョンが EC2 インスタンスが実行されているリージョンであることを確認します。
-
ナビゲーションペインで [アプリケーション管理]、[パラメータストア] を選択します。
-
以下の手順に従って、設定の新しいパラメータを作成します。
[パラメータの作成] を選択します。
-
[名前] ボックスに、後のステップで CloudWatch エージェント設定ファイルを参照するために使用する名前を入力します。例えば、
AmazonCloudWatch-EC2Health-Configuration
と指定します。 (オプション) [説明] ボックスにパラメータの説明を入力します。
[パラメータ階層] で、[標準] を選択します。
[型] で、[文字列] を選択します。
[データ型] で、[テキスト] を選択します。
-
[値] ボックスに、このドキュメントで前述したエージェント設定 JSON を貼り付けます。
[パラメータの作成] を選択します。
ステップ 3: CloudWatch エージェントをインストールし、AWS CloudFormation テンプレートを使用して設定を適用する
AWS CloudFormation を使用してエージェントをインストールし、これまでの手順で作成した CloudWatch エージェント設定を使用するように設定できます。
このソリューションの CloudWatch エージェントをインストールして設定するには
-
次のリンクを使用して、AWS CloudFormation [スタックのクイック作成] ウィザードを開きます: https://console.aws.amazon.com/cloudformation/home?#/stacks/quickcreate?templateURL=https://aws-observability-solutions.s3.amazonaws.com/CloudWatchAgent/CFN/v1.0.0/cw-agent-installation-template-1.0.0.json
。 -
コンソールで選択したリージョンが EC2 インスタンスが実行されているリージョンであることを確認します。
-
[スタック名] にこのスタックを識別する名前 (
CWAgentInstallationStack
など) を入力します。 -
[パラメータ] セクションで、以下を指定します。
-
[CloudWatchAgentConfigSSM] に、
AmazonCloudWatch-EC2Health-Configuration
など、前に作成したエージェント設定の Systems Manager パラメータの名前を入力します。 -
ターゲットインスタンスを選択するには、2 つのオプションがあります。
-
[InstanceIds] に、この設定で CloudWatch エージェントをインストールするインスタンス ID のカンマ区切りリストを指定します。1 つのインスタンスまたは複数のインスタンスを一覧表示できます。
-
大規模にデプロイする場合は、[TagKey] とそれに対応する [TagValue] を指定して、このタグと値を持つすべての EC2 インスタンスをターゲットにできます。[TagKey] を指定する場合は、対応する [TagValue] を指定する必要があります。(Auto Scaling グループの場合、Auto Scaling グループ内のすべてのインスタンスにデプロイするには、[TagKey] に
aws:autoscaling:groupName
を指定し、[TagValue] に Auto Scaling グループ名を指定します。)
[InstanceIds] パラメータと [TagKeys] パラメータの両方を指定すると、[InstanceIds] が優先され、タグは無視されます。
-
-
-
設定を確認し、[スタックの作成] を選択します。
まずテンプレートファイルを編集してカスタマイズする場合は、[スタックの作成ウィザード] の [テンプレートファイルのアップロード] オプションを選択して、編集したテンプレートをアップロードします。詳細については、「AWS CloudFormation コンソールからスタックを作成する」を参照してください。次のリンクを使用して、テンプレートをダウンロードできます: https://aws-observability-solutions.s3.amazonaws.com/CloudWatchAgent/CFN/v1.0.0/cw-agent-installation-template-1.0.0.json
注記
このステップが完了すると、この Systems Manager パラメータは、ターゲットインスタンスで実行されている CloudWatch エージェントに関連付けられます。これにより、以下のように処理されます。
-
Systems Manager パラメータが削除されると、エージェントは停止します。
-
Systems Manager パラメータを編集すると、設定の変更はスケジュールされた頻度 (デフォルトで 30 日) でエージェントに自動的に適用されます。
-
この Systems Manager パラメータに変更をすぐに適用する場合は、このステップを再度実行する必要があります。関連付けの詳細については、「AWS Systems Manager の関連付けの使用」を参照してください。
ステップ 4: エージェントのセットアップが正しく設定されていることを確認する
CloudWatch エージェントがインストールされているかどうかは、CloudWatch エージェントが実行されていることを確認する」の手順に従って確認できます。CloudWatch エージェントがインストールされておらず、実行されていない場合は、すべてが正しく設定されていることを確認してください。
-
「ステップ 1: ターゲット EC2 インスタンスに必要な IAM アクセス許可があることを確認する」の説明に従って、EC2 インスタンスに正しいアクセス許可を持つロールがアタッチされていることを確認してください。
-
Systems Manager パラメータの JSON が正しく設定されていることを確認してください。「AWS CloudFormation での CloudWatch エージェントのインストールのトラブルシューティング」の手順に従います。
EC2 ヘルスメトリクスが CloudWatch に公開されていることを確認するには
-
CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/
) を開きます。 -
[メトリクス]、[すべてのメトリクス] を選択します。
-
ソリューションをデプロイしたリージョンを選択したことを確認し、[カスタム名前空間]、[CWAgent] を選択します。
-
mem_used_percent
など、このドキュメントのエージェント設定セクションに記載されているメトリクスを検索します。これらのメトリクスの結果が表示された場合、メトリクスは CloudWatch に公開されています。
EC2 Health ソリューションダッシュボードを作成する
このダッシュボードには、EC2 Health メトリクスを示す、新しく出力されるメトリクスが表示されます。このダッシュボードには、1 つのリージョンの EC2 インスタンスのヘルスに寄与する上位の要因が表示されます。寄与する上位の要因のビューには、メトリクスウィジェットあたり上位 10 件が表示されます。これにより、外れ値を一目で特定できます。
ダッシュボードを作成するには、以下のオプションを使用できます。
CloudWatch コンソールを使用してダッシュボードを作成します。
AWS CloudFormation コンソールを使用してダッシュボードをデプロイします。
AWS CloudFormation インフラストラクチャをコードとしてダウンロードし、継続的インテグレーション (CI) オートメーションの一部として統合します。
CloudWatch コンソールを使用してダッシュボードを作成すると、実際に作成して課金される前にダッシュボードをプレビューできます。
注記
このソリューションで AWS CloudFormation を使用して作成されたダッシュボードには、ソリューションがデプロイされたリージョンのメトリクスが表示されます。EC2 メトリクスが公開されるリージョンに AWS CloudFormation スタックを必ず作成してください。
CloudWatch エージェント設定で CWAgent
以外のカスタム名前空間を指定した場合は、ダッシュボードの AWS CloudFormation テンプレートを変更して、CWAgent
を、使用しているカスタマイズされた名前空間に置き換える必要があります。
CloudWatch コンソールを使用してダッシュボードを作成するには
-
次のリンクを使用して CloudWatch コンソール [ダッシュボードの作成] を開きます: https://console.aws.amazon.com/cloudwatch/home?#dashboards?dashboardTemplate=Ec2LinuxMacOsHealth&referrer=os-catalog
。 -
コンソールで選択したリージョンが EC2 インスタンスが実行されているリージョンであることを確認します。
-
ダッシュボードの名前を入力し、[ダッシュボードの作成] を選択します。
このダッシュボードを他のリージョンの類似のダッシュボードと簡単に区別するために、
EC2HealthDashboard-us-east-1
のように、ダッシュボード名にリージョン名を含めることをお勧めします。 -
ダッシュボードをプレビューし、[保存] を選択してダッシュボードを作成します。
AWS CloudFormation を使用してダッシュボードを作成するには
-
次のリンクを使用して、AWS CloudFormation [スタックのクイック作成] ウィザードを開きます: https://console.aws.amazon.com/cloudformation/home?#/stacks/quickcreate?templateURL=https://aws-observability-solutions.s3.amazonaws.com/EC2_Health/CloudWatch/CFN/v1.0.0/dashboard-template-linux-macos-1.0.0.json
。 -
コンソールで選択したリージョンが EC2 インスタンスが実行されているリージョンであることを確認します。
-
[スタック名] にこのスタックを識別する名前 (
EC2HealthDashboardStack
など) を入力します。 -
[パラメータ] セクションで、[DashboardName] パラメータにダッシュボードの名前を指定します。
このダッシュボードを他のリージョンの類似のダッシュボードと簡単に区別するために、
EC2HealthDashboard-us-east-1
のように、ダッシュボード名にリージョン名を含めることをお勧めします。 -
[機能と変換] で、変換のためのアクセス機能を承認します。AWS CloudFormation は IAM リソースを追加しないことに注意してください。
-
設定を確認し、[スタックの作成] を選択します。
-
スタックステータスが CREATE_COMPLETE になったら、作成したスタックの [リソース] タブを選択し、[物理 ID] のリンクを選択してダッシュボードに移動します。コンソールの左側のナビゲーションペインで [ダッシュボード] を選択し、[カスタムダッシュボード] でダッシュボード名を検索することで、CloudWatch コンソールでダッシュボードにアクセスすることもできます。
何らかの目的でテンプレートファイルを編集してカスタマイズする場合は、[スタックの作成ウィザード] の [テンプレートファイルのアップロード] オプションを使用して、編集したテンプレートをアップロードできます。詳細については、「AWS CloudFormation コンソールからスタックを作成する」を参照してください。次のリンクを使用してテンプレートをダウンロードできます: https://aws-observability-solutions.s3.amazonaws.com/EC2_Health/CloudWatch/CFN/v1.0.0/dashboard-template-linux-macos-1.0.0.json
EC2 Health ソリューションダッシュボードの使用を開始する
新しい EC2 モニタリングダッシュボードで試すことができるタスクをいくつか示します。これらのタスクにより、ダッシュボードが正しく機能していることの検証が可能になり、EC2 インスタンスをモニタリングするためにダッシュボードを実際に使用する経験ができます。これらを試すと、ダッシュボードの操作に慣れ、可視化されたメトリクスを解釈できるようになっていきます。
- さまざまな CPU 使用率メトリクスをモニタリングする
-
[CPU] セクションで、CPU 使用率メトリクスの配列を調べます。これらは、ユーザープロセス、システムタスク、I/O オペレーションなど、さまざまなアクティビティで CPU リソースがどのように使用されているかに関するインサイトを提供します。一貫して使用率が高いインスタンスや異常なパターンがあるインスタンスがあるか探します。これは、スケーリングや最適化の必要性を示している可能性があります。
- さまざまなデバイス間でディスク使用率を分析する
-
[ディスク] セクションに移動して、ストレージ使用量と inode 可用性メトリクスを見つけます。これらは、ストレージスペースまたはファイルシステムリソースが不足しているインスタンスを特定するのに役立ちます。ディスク使用率が高くなっているインスタンスには注意してください。パフォーマンスの問題やサービスの中断につながる可能性があります。
- メモリ使用率パターンを調査する
-
[メモリ] セクションで、メモリ使用率を経時的にプロットするグラフを観察します。これは、各インスタンスで使用可能なメモリがどれだけ使用されているかを示しています。特定の時間やイベントと相関する可能性のある、メモリ使用量のパターンや急増を探します。メモリ使用率が高い場合は、インスタンスのサイズ変更やアプリケーションの最適化が必要になる可能性があります。
- コア使用率メトリクス間のパターンの相関を見る
-
関連する使用率パターンを比較して注意を払います。例えば、ログローテーションプロセスを実行するワークロードでは、定期的に CPU とメモリの使用率が増加した後にディスクの使用率が低下する可能性があります。
- ネットワークアクティビティを検査する
-
[ネットワーク] セクションで、インバウンドおよびアウトバウンドのネットワークトラフィックメトリクスを、データボリュームとパケット数の両方の観点から調べます。これらは、EC2 インスタンスのネットワークアクティビティに関するインサイトを提供します。ネットワークトラフィックの定期的な急増や通常と異なる急増、またはインバウンドデータとアウトバウンドデータの不均衡に注意します。