CloudWatch Agentを利用してインスタンスのメモリ使用率を監視する

こんにちは、櫻井です。

 

EC2インスタンスを監視するためのツールとして、CloudWatchを選ぶ方は多いと思います。CloudWatchでEC2インスタンスのメモリ使用率を監視したい場合、CloudWatchが標準で用意しているメトリクスの中に、「メモリ使用率」の項目が無いので、EC2インスタンスにCloudWatch Agentをインストールし、CloudWatchのカスタムメトリクスとしてメモリ使用率を出力し、監視できるようにする必要があります。今回はその方法を紹介します。

 

余談ですが、サーバーの監視項目として一般的な、「メモリ使用率」がなぜCloudWatchの標準メトリクスに含まれていないのか。という疑問が生まれたので調べてみました。

 

結論としては、責任共有モデルが関係しているようです。

 

責任共有モデルとは、どこまでがAWS側の責任で、どこまでがAWS利用者側の責任になるのかという範囲を分けるためのものです。

責任共有モデルについてはAWS公式ドキュメントに記載があるので、詳しく知りたい方は下記のリンクを参照してください。

責任共有モデルとは

 

 

上記のドキュメントを参考にすると、OSについての責任を持つ必要があるのはAWS利用者側にある。ということがわかります。

 

したがって、OSの役割に該当するメモリ使用率や、空きディスク領域、ログインユーザ数などは、AWSの管理領域外になるため、CloudWatchの標準メトリクスでは取得することができない。ということらしいです。勉強になりました。

 

では、これからCloudWatch Agentを使ったメモリ使用率の監視方法を紹介していきます。

 

CloudWatch Agent起動前の準備

 

以下の手順でCloudWatch Agentの起動前の準備を行います。

  1. 起動するインスタンスにアタッチするIAMロールを作成する
  2. CloudWatch Agentをインストールする
  3. CloudWatch Agentの設定ファイルを作成する
  4. CloudWatch Agentを起動する
  5. メモリの使用率を確認する

 

前提

  • 今回利用するEC2インスタンスのAMIはAmazonLinux2を利用しています。
  • リージョンは東京リージョンを利用します。

 

起動するインスタンスにアタッチするIAMロールを作成する

 

AWS管理ポリシーであるCloudWatchAgentAdminPolicyがアタッチされたIAMロールを作成し、EC2にアタッチします。

 

CloudWatchAgentAdminPolicyとはCloudWatch Agentをサーバーにインストールし、メトリクスを CloudWatch に送信するために必要なポリシーです。

 

  • “IAM” → “ロール” から “ロールを作成” をクリックします。

 

 

 

 

  • “信頼されたエンティティタイプ” で “AWSのサービス” を選択し、”一般的なユースケース” に “EC2” を選択して次へ

 

 

 

  • 許可ポリシーに”CloudWatchAgentAdminPolicy”を選択し、次へ

 

 

  • 必要なポリシーがアタッチされていることを確認して、”ロールを作成”をクリックします。

 

 

 

これでロールの作成は完了です。

上記で作成したロールをメモリを監視したいEC2インスタンスにアタッチしてください。

 

 

CloudWatch Agentを監視対象のEC2インスタンスにインストールする

 

立ち上げたEC2インスタンスにログインしてCloudWatch Agentをインストールします。

以下のコマンドを実行してください。

 

 

CloudWatch Agentの設定ファイルを作成する

 

amazon-cloudwatch-agent-config-wizardを起動します。

 

起動すると対話形式で設定を行うことができます。

 

OSの種別を聞かれています。Amazon Linuxなので、何も入力せずにEnterキーを押下します。

 

サーバはEC2かオンプレミスかを聞かれています。EC2なので、何も入力せずにEnterキーを押下します。

 

Agent を稼働させるユーザーを聞かれています。 rootでいいので、何も入力せずにEnterキーを押下します。

 

StatsDを起動するかを聞かれています。StatsDは指標データを集計するためのデーモンなので、何も入力せずにEnterキーを押下します。

 

StatsDを使うためののポート番号を聞かれています。8125でいいので何も入力せずにEnterキーを押下します。

 

メトリクスの収集間隔を聞かれています。10秒でいいので、何も入力せずにEnterキーを押下します。

 

メトリクスの集計間隔を聞かれています。60秒でいいので、何も入力せずにEnterキーを押下します。

 

収集したメトリクスを監視するかを聞かれています。監視するので、何も入力せずにEnterキーを押下します。

 

CPU、メモリなどのホストメトリクスを監視するかを聞かれています。監視するので、何も入力せずにEnterキーを押下します。

 

CPUメトリクスをコアごとに監視するかを聞かれています。監視するので、何も入力せずにEnterキーを押下します。

 

メトリクスに利用可能なディメンションを追加するかを聞かれています。追加するので、何も入力せずにEnterキーを押下します。

 

メトリクスの収集間隔を高頻度で収集するかを聞かれています。高頻度である必要はないので、何も入力せずにEnterキーを押下します。

 

どのメトリクス設定がいいかを聞かれています。ベーシックでいいので、何も入力せずにEnterキーを押下します。

 

設定内容が表示されるので、確認して問題ないようであれば、何も入力せずにEnterキーを押下します。

 

既存のCloudWatch Agentがあるかを聞かれています。今回は新規なので、何も入力せずにEnterキーを押下します。

 

監視したいログファイルがあるかを聞かれています。今回、ログファイルは監視しないので、2を入力してEnterキーを押下します。監視したいログファイルがある場合は、何も入力せずにEnterキーを押下します。

 

この設定をSSMパラメータストアに保存するかを聞かれています。保存したいので、何も入力せずにEnterキーを押下します。

 

パラメータストアの名前を何にするかを聞かれています。今回はデフォルトでいいので何も入力せずにEnterキーを押下します。

 

どのリージョンのパラメータストアに保存するかを聞かれています。前述の通り東京リージョンでいいので、何も入力せずにEnterキーを押下します。

 

設定ファイルをパラメータに送るためのクレデンシャルは何にするかを聞かれています。今回はデフォルトでいいので、何も入力せずにEnterキーを押下します。

 

以下のように出力されれば設定は完了です。

 

 

CloudWatch Agentを起動する

 

collectdをインストールする

 

collectdをインストールすることで、EC2インスタンスのメモリ使用率などの情報をカスタムメトリクスとしてAWS側に送ることができるようになります。こちらをインストールしないとCloudWatch Agentの起動に失敗するのでインストールします。

 

以下のコマンドでcollectdをインストールしてください。

 

 

CloudWatch Agentを起動する

 

以下のコマンドを実行することでCloudWatch Agentを起動することができます。以下のコマンドの “-a fetch-config” は最新バージョンの CloudWatch Agentの設定ファイルをロードすることを意味しており、”-s” は起動を意味しています。”-c” にはSSMパラメータストアに保存されているパラメータを入力するので、先ほど作成したパラメータであるAmazonCloudWatch-linuxを入力しています。

 

EC2インスタンス内でCloudWatch Agentが起動できているかを確認します。

 

以下の画像のような出力がされていれば起動ができています。

 

 

メモリ使用率を確認する

 

  • マネジメントコンソール上からCloudWatchに移動し、”すべてのメトリクス”にある、”CWAgent”をクリックします。

 

 

  • “InstanceId”をクリックします。

 

 

 

  • 作成したEC2インスタンスのメトリクス名の”mem_used_percent”を選択すると、メモリの使用率を確認できるようになります。

 

 

 

 

まとめ

 

これでインスタンスのメモリ使用率を外部から確認することができるようになりました。

インスタンスのメモリ使用率の監視は使う機会が多いと思うので、手間がかかるところではありますが、ぜひやってみてください。

 

一緒に働く仲間を募集中!

ギークフィードではAWSエンジニアを募集しています。

興味がある方はこちらからエントリーをしてぜひ一緒に働きましょう!

AWS・開発エンジニア募集

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
櫻井
櫻井
2022年3月にギークフィードに入社。 エンジニア完全未経験からSAP・SAAを三週間で取得することが出来ました。そのためAWSに関することを中心に記事を作成する予定です。 自分が初心者だからこそわかる、エンジニア未経験の方や、エンジニアを始めたばかりの方の躓きポイントをうまく説明できるように頑張ります。

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ