この記事ではAWS
のEC2インスタンス
のメモリ使用率
やディスク使用率
をCloudWatch
で監視できるようにする方法を解説していきます。
EC2
ではデフォルトでCPU使用率
など様々な項目を監視することができますが、メモリの使用率
やディスクの使用率
の項目がありません。
なので、CloudWatch
のカスタムメトリクス
を定義する必要があります。
AWS公式のスクリプト
が用意されているので、今回はそれを利用して設定していきます。
IAMロールを設定
まずはEC2インスタンス
に設定するIAMロール
を作成していきます。
EC2
からCloudWatch
に対してデータを送るための権限を設定する必要があります。
具体的に許可する項目は以下になります。
- cloudwatch:PutMetricData
- cloudwatch:GetMetricStatistics
- cloudwatch:ListMetrics
▼まずはIAM
の設定画面を開きます。
「ロール」→「ロールの作成」で新規作成画面を開きます。
▼ロール
を使用するサービスを選択する画面になります。
今回はEC2
に対して設定するので、EC2
を選択します。
▼ポリシー
を設定する画面になります。
CloudWatch
への権限が付与されているポリシー
を設定しますが、まだ作成していないのでここで作成していきます。
「ポリシーの作成」をクリックします。
▼ポリシー
を作成する画面になります。
まずは許可するサービス
を選択します。
今回は、CloudWatch
に対する権限を設定するのでCloudWatch
を選択します。
▼フォームに「Cloud」ぐらいまで入力すると候補が出てくるので、選択肢にある「CloudWatch」を選択します。
次にCloudWatch
に対して何のアクションを許可するかを個別に設定する画面になります。
今回は、以下の項目を許可していきます。
- cloudwatch:PutMetricData
- cloudwatch:GetMetricStatistics
- cloudwatch:ListMetrics
▼許可する項目を1つずつチェックしていきます。
チェックできたら、「ポリシーの確認」をクリックします。
▼最後にポリシーの名前を設定します。
今回は「cloudwatch-script-policy」としました。
「ポリシーの作成」をクリックすると作成が完了します。
ポリシー
の作成が完了しました。
先程のロール
の作成でポリシー
を選択する画面に戻ります。
▼1回内容をリロードし、先程作成したポリシー名
で検索をかけるとリストに表示されますので、チェックを付けて「次のステップ:タグ」をクリックします。
▼タグ
を設定する画面になります。
今回は特に何も設定しませんでした。
▼ロール名
を設定します。
今回は「EC2Role」としました。
▼ロール一覧画面に戻ると「EC2Role」が追加されていることが確認できました。
EC2にIAMロールを設定する
先ほど作成したIAMロール
をEC2
に設定していきます。
▼EC2
のコンソール画面のインスタンス一覧画面を開きます。
設定したいインスタンスを選択して、「インスタンスの設定」→「IAMロールの割当/置換」を選択していきます。
どのIAMロール
を割り当てるかを選択します。
選択肢に先程作成した「EC2Role」があると思うので、選択して「適用」をクリックします。
これでIAM
の設定は完了です。
スクリプトを実行する
次にEC2インスタンス
にssh
でログインして、スクリプト
を実行していきます。
今回使用するスクリプトはAWS
が公式で用意してくれているスクリプトになります。
以下ではAmazon Linux
での導入方法になりますので、他の場合は以下に貼り付けてある公式ページを参照するようにしてください。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/mon-scripts.html
▼必要なパッケージをyum
でインストールします。
perl
で書かれているスクリプト
なのでperl
を実行できるようにするための必要なものをインストールします。
sudo yum install -y perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA.x86_64
▼AWS
が用意している、CloudWatchのスクリプト
をダウンロードします
curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O
▼ダウンロードしたスクリプト
をインストールします
unzip CloudWatchMonitoringScripts-1.2.2.zip && \
rm CloudWatchMonitoringScripts-1.2.2.zip && \
cd aws-scripts-mon
これで準備は整いました。
▼テスト的に、実際にデータは送信しませんが、実行するコマンドがあるので実行していきます。
./mon-put-instance-data.pl --mem-util --verify --verbose
例えば、序盤で設定したIAMロール
の設定ができていない場合以下のようになりました。
$ ./mon-put-instance-data.pl --mem-util --verify --verbose
MemoryUtilization: 37.2271598747059 (Percent)
No credential methods are specified. Trying default IAM role.
ERROR: No IAM role is associated with this EC2 instance.
For more information, run 'mon-put-instance-data.pl --help'
正常にできた場合は以下のようになりました。
$ ./mon-put-instance-data.pl --mem-util --verify --verbose
MemoryUtilization: 36.675055118233 (Percent)
No credential methods are specified. Trying default IAM role.
Using IAM role <EC2Role>
Endpoint: https://monitoring.ap-northeast-1.amazonaws.com
Payload: {"MetricData":[{"Timestamp":1577528824,"Dimensions":[{"Value":"i-(instanceID)","Name":"InstanceId"}],"Value":36.675055118233,"Unit":"Percent","MetricName":"MemoryUtilization"}],"Namespace":"System/Linux","__type":"com.amazonaws.cloudwatch.v2010_08_01#PutMetricDataInput"}
Verification completed successfully. No actual metrics sent to CloudWatch.
成功したのでcron
の設定をしておきます。
crontab -e
でcron
の編集をすることができます。
▼以下のように設定しました。
1分ごとに呼び出すように設定しています。
* * * * * ~/aws-scripts-mon/mon-put-instance-data.pl --mem-util --mem-used --mem-avail --swap-util --swap-used --disk-space-util --disk-space-used --disk-space-avail --disk-path=/ --from-cron
どのメトリクスを送信するかをオプションで指定していきます。
どのオプションがどのメトリクスを追加するかは公式のページにまとまっているのでこちらを参照してください。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/mon-scripts.html
こちらで設定が完了しました。
CloudWatchのコンソール画面で確認
次は、CloudWatch
のコンソール画面で確認していきます。
▼メトリクスの一覧画面に移動すると「Linuxシステム」というのが追加されています。
▼進んでいくと以下のようにメモリに関する項目が増えていることが確認できました。
(2024/12/11 08:42:15時点 Amazon調べ-詳細)