Pocket

こんにちは、インフラエンジニアの綿引です。

「CloudWatch で監視したいけどメモリ・ディスク使用率の監視項目がないじゃない、、」
と悩まれた方もいらっしゃるのではないでしょうか?

そこで今回は CloudWatch で EC2 のメモリ・ディスク使用率を監視する、ということをやってみたいと思います。

対象の方は以下のような方でしょうか。

 

  • 監視運用を導入するまでアラートをウォッチしてしておきたい
  • コストを抑えるためスモールスタートで監視を実施したい

 

また以下をご参考にいただければ、アラームも Slack に飛ばせるので、一緒に見て頂けると嬉しいです。

参考 : Amazon CloudWatch + Amazon SNS + AWS Chatbot を使ってアラームを Slack に通知してみる

目次

1. CloudWatch エージェント について
 1.1. CloudWatch エージェント のできること
 1.2. CloudWatch Logs について
2. CloudWatch エージェントのインストール
 2.1. IAM ロールを作成する
  2.1.1. CloudWatchAgentServerRole の作成
  2.1.2. CloudWatchAgentAdminRole の作成
 2.2. インストールおよび設定
  2.2.1. SSM エージェントのインストール
  2.2.2. CloudWatch エージェントのインストール
  2.2.3. CloudWatch エージェントの設定ファイル作成
 2.3. エージェントの起動
3. CloudWatch メトリクスの確認
4. エージェント起動時のエラーについて
5. 最後に

 

1. 統合 CloudWatch エージェント について

まず 統合 CloudWatch エージェント についてです。

統合 CloudWatch エージェントとは、サーバにインストールする CloudWatch のエージェント (パッケージ) のことです。

これをインストールすることでカスタムメトリクスが取得できるようになったり、CloudWatch Logs にログを送信できるようになります。

 

1.1. CloudWatch エージェント のできること

CloudWatch エージェント のできることとしては以下になります。

 

  • EC2 インスタンスから標準メトリクスより多くのメトリクスを収集できるようになる
  • サーバのログを収集できる
  • オンプレミスなどのAWS によって管理されていないサーバからもメトリクスを収集できる

 

また収集できるメトリクスの詳細は以下に記載してあります。

参考 : CloudWatch エージェントにより収集されるメトリクス

 

1.2. CloudWatch Logs について

統合 CloudWatch エージェント をインストールすると、対象サーバから CloudWatch Logs に対してログを送信できるようになります。

CloudWatch Logs についてはまた別の機会に紹介できればと思いますが、システムログや Webサーバ (Apache・Nginx) のログも監視できる強力な監視ツールです。

 

2. CloudWatch エージェントのインストール

では早速、CloudWatch エージェントを導入していきます。

まず CloudWatch エージェントをインストールするには、以下の3種類の方法があります。

 

  1. コマンドラインを使用する
  2. AWS Systems Manager を使用する
  3. AWS CloudFormation を使用する

 

参考 : CloudWatch エージェントのインストール

またサポートされる OS などは以下に記載されているため、実施する前にご確認いただけると混乱せずに進められると思います。

参考 : CloudWatch エージェントを使用して Amazon EC2 インスタンスとオンプレミスサーバーからメトリクスとログを収集する

今回は Systems Manager からインストールしてみたいと思います。

使用するサービスと用途は以下です。

  1. EC2 (ホスト名 : cloudwatch-test)
    – CloudWatch エージェントをインストールするサーバ
  2. IAM
    – EC2 から CloudWatch にメトリクスの書き込みを行うためのロールを作成
    – AWS Systems Manager のパラメータストアに書き込みを行うためのロールを作成
  3. AWS Systems Manager
    – Run Command により CloudWatch エージェントのインストール・起動を実施
    – CloudWatch エージェントの設定ファイルをパラメータストアに保存

 

2.1. IAM ロールを作成する

まずは以下のマニュアルに沿って EC2 にアタッチする IAM ロールを作成していきます。

参考 : CloudWatch エージェントで使用する IAM ロールおよびユーザーを作成する

今回は以下の2種類のロールを作成します。

 

  • CloudWatchAgentServerRole
  • CloudWatchAgentAdminRole

 

どちらのロールも EC2 にアタッチする CloudWatch に書き込み許可を与えるためのロールですが、2つ目の CloudWatchAgentAdminRole に関しては、 CloudWatch エージェントの設定ファイルをパラメータストアに書き込む権限を持っています。

使い分けとしては基本は1つ目の CloudWatchAgentServerRole をアタッチしておくが、パラメータストアへの書き込みが必要な時は2つ目の CloudWatchAgentAdminRole を使用するといった形です。

1台管理用のサーバをたてて、それだけ CloudWatchAgentAdminRole を付与するというやり方も良いかと思います。

詳細は以下をご確認頂けると幸いです。

参考 : AWS Systems Manager パラメータストア

 

2.1.1. CloudWatchAgentServerRole の作成

まずは1つ目の CloudWatchAgentServerRole から作成していきます。

マネジメントコンソールから IAM を選択し、ロールを選択した後、 「ロールの作成」 を押下します。

「信頼されたエンティティの種類を選択」 にて 「AWS サービス」 を選択、「ユースケースの選択」 にて 「EC2」 を選択して 「次のステップ: アクセス権限」 を押下します。

次にポリシーの選択ですが、以下を選択し、 「次のステップ: タグ」 を押下します。

 

  • CloudWatchAgentServerPolicy
  • AmazonSSMManagedInstanceCore

 

次ページのタグは任意です。

ロール名はユーザーガイドに沿って 「CloudWatchAgentServerRole」 にします。

後は設定したポリシーを確認して、最後に 「ロールの作成」 を押下します。

次に CloudWatchAgentAdminRole の作成です。

 

2.1.2. CloudWatchAgentAdminRole の作成

作成の仕方は1つ目とほぼ変わらないので上記を参考作っていただきたいのですが、ポリシーの 「CloudWatchAgentServerPolicy」 を 「CloudWatchAgentAdminPolicy」 に変更します。

CloudWatchAgentAdminRole のポリシーとしては以下になります。

 

  • CloudWatchAgentAdminPolicy
  • AmazonSSMManagedInstanceCore

 

ロール名は 「CloudWatchAgentAdminRole」 にしました。

最後に対象の EC2 に上記のロールをアタッチします。

今回は前述した通りパラメータストアに書き込みを行うため 「CloudWatchAgentAdminRole」 をアタッチします。

EC2 のコンソール画面を開き、対象のインスタンスのチェックボックスを選択、 「アクション」 → 「インスタンスの設定」 → 「IAM ロールの割り当て/置き換え」 を押下します。

s

先ほど作成した 「CloudWatchAgentAdminRole」 を選択し、最後に 「適用」 を押下します。

これで IAM の作業は完了です。

 

2.2. インストールおよび設定

次は CloudWatch エージェント の設定に移ります。

前述の通り AWS Systems Manager にて CloudWatch エージェントをインストールするのですが、Systems Manager でインストールするには、対象サーバに SSM エージェントのインストール が必要となります。

SSM エージェント (AWS Systems Manager エージェント) とは、CloudWatch エージェントとは別の、AWS Systems Manager のエージェントのことです。

参考 : SSM エージェント について

この SSM エージェントをサーバにインストールすると、EC2・オンプレミスに関わらず AWS Systems Manager の コンソールから、情報を監視したり、リモートでコマンドを実行することが可能になります。

CloudWatch エージェントを使用するには SSM のバージョンが 2.2.93.0 以降である必要があったり、OS によってはデフォルトでインストールされてたりするので、以下から事前に導入されているかご確認いただいた方が宜しいかと思います。

参考 : Linux の EC2 インスタンスで SSM エージェント をインストールして設定する

 

2.2.1. SSM エージェントのインストール

それでは SSM エージェントをインストールしていきます。手順としては対象サーバにログインし、“yum” でインストールします。

以下のコマンドを実行します。

次にプロセスが立ち上がっているかを確認します。

最後に自動起動も有効にしておきましょう。

これで SSM エージェントのインストールは完了です。

 

2.2.2. CloudWatch エージェントのインストール

SSM エージェントをインストールしたので、Systems Manager から操作ができるようになりました。

続いて、CloudWatch エージェント をインストールしていきましょう。

まずは 「AWS Systems Manager」 から 「Run Command」 を選択します。

次に 「コマンドを実行する」 を押下します。

|

次に 「AWS-ConfigureAWSPackage」 を検索し、表示された項目にチェックをつけます。

そのまま下に移動し 「コマンドのパラメータ」 の項目で以下を設定します。

・Action : Install
・Name : AmazonCloudWatchAgent

次に 「ターゲット」 の項目にて 「インスタンスを手動で選択する」 を選択し、
対象のインスタンスにチェックをつけます。

最後に 「実行」 を押下します。

無事成功しました。
これで CloudWatch エージェントのインストールは完了です。

 

2.2.3. CloudWatch エージェントの設定ファイル作成

インストールが完了したので、CloudWatch エージェントを起動させていきたい所ですが、起動には、前述の通りCloudWatch エージェントの設定ファイルを作成する必要があります。

設定ファイルの作成の仕方は以下の2種類の方法があります。

1. ウィザードを使用して CloudWatch エージェント設定ファイルを作成する
2. CloudWatch エージェント設定ファイルを手動で作成または編集する

今回は 1. のウィザードを使用して作成していきます。
対象サーバにログインし、以下コマンドを実行します。

ここからは対話型になりますので、一つずつ確認していきます。

まずは OS を選択します。今回は Linux なので、「1」 にします。

尚、何も入力せずに 「Enter」 を押すと 「default choice」 の設定になりますので
「default choice」 と設定が一緒であれば、何も入力せず 「Enter」 を押下で OK です。

次は、EC2 か オンプレミスかです。
今回は EC2 なので 「1」 にします。

これは CloudWatch エージェントを何のユーザで起動させるかです。
今回はデフォルトの root にするため、「1」 にします。

StatsD デーモンをオンにするかなので、「1」を選択します。

尚、StatsD デーモンはデータ収集用のツールで、
カスタムメトリクス用のデータを収集するために使われているようです。

StatsD デーモンのポート指定です。
デフォルトの「8125」にします。

StatsD デーモンの収集間隔の指定です。
デフォルトの「1」にします。

StatsD デーモンによって収集されるデータの集約間隔です。
これもデフォルトの「4」にします。

CollectD を使ってメトリクス収集するかです。
これは yes にするため「1」にします。

尚、CollectD も StatsD デーモンと同様、データ収集用のツールで、
メモリ使用量、稼働時間の統計などを取得しているようです。

CPU やメモリも監視するか、なので「1」にします。

CPU のコアごとに監視するかです。
監視はそこそこしたいですが、追加料金が適用される場合があるようです。

詳細はわかりませんでしたが、コアごとにメトリクスが収集されるため、
その分メトリクス数が多くなるからということでしょうか?

正確にはわかりませんが、今回は “no” の「2」を選択します。

EC2 の イメージID や インスタンスID なども項目に追加したいかです。
デフォルトの「1」にします。

メトリクスを何秒間隔で収集するかです。
デフォルトの「4」にします。

これは AWS 側で事前定義された「メトリクスセット」を選択します。
今回は “Advanced” にしてみようと思いますので、「3」を指定します。

注意点としては各メトリクスセットで収集されるメトリクスが異なるので、
事前に以下をチェックして頂けると宜しいかと思います。

参考 : CloudWatch エージェントの事前定義されたメトリクスセット

今までの設定が出力され、問題ないかと聞かれますので “yes” の「1」を指定します。

次は “CloudWatch Log Agent の設定ファイルはあるか” です。

対象サーバに “CloudWatch Logs エージェント” をインストールしている状態であれば、
設定ファイルをインポートできるようです。

CloudWatch Logs エージェントに関しては以下をご確認いただきたいですが、
廃止予定なので、もしご使用であればタイミングで移行したいですね。

参考 : CloudWatch Logs の使用開始

今回は設定がないため「2」を指定します。

ログファイルを監視するかなので、今回は「2」を指定します。
CloudWatch Logs にログを送りたい場合はこちらで設定します。

また設定内容が出力され、本設定ファイルを SSM パラメータストアに保存するかの問いです。
前述の通り、パラメータストアに保存するので「1」を指定します。

パラメータストアに保存する際の、”パラメータストアの名前”を指定します。
デフォルトの「AmazonCloudWatch-linux」にします。

設定ファイルをパラメータストアのどのリージョンの保存するかです。
「ap-northeast-1」にします。

最後にどの IAM ユーザ・ロールを使用するかです。
ここでパラメータストアへの書き込み権限がなければエラーとなります。

既にパラメータストアへの書き込み権限があるロールを EC2 にアタッチ済みのため、
デフォルトの「1」にします。

これでパラメータストアに CloudWatch エージェントの設定ファイルを保存できました。
正常に終了すれば AWS Systems Manager のパラメータストアに表示されます。

パラメータストアへの書き込みが完了したので、 EC2 にアタッチしている IAM ロールを
セキュリティ強化のため 「CloudWatchAgentServerRole」 に変更しておきましょう。

これで CloudWatch エージェントの設定ファイルの作成が完了しました。

 

2.3. エージェントの起動

CloudWatch エージェントの設定ファイル作成が完了したので、
エージェントの起動を行なっていきます。

AWS Systems Manager から 「Run Command」 を選択し、
検索窓に 「AmazonCloudWatch-ManageAgent」 と入力後、
表示された項目にチェックをつけます。

そのまま下に移動し 「コマンドのパラメータ」 の項目で、
先ほどパラメータストアに保存したファイル名を入力します。

・Optional Configuration Location : AmazonCloudWatch-linux

次に 「ターゲット」 の項目にて 「インスタンスを手動で選択する」 を選択し、
対象のインスタンスにチェックをつけます。

最後に 「実行」 を押下します。
これで起動が完了しました。

 

3. CloudWatch メトリクスの確認

これまでの作業で対象サーバの “メモリ・ディスク使用率” が
CloudWatch に送信されているはずなので確認してみましょう。

コンソールから CloudWatch を選択し、「メトリクス」を押下します。
すると、これまでなかった「CWAgent」という項目が表示されていますので、これを選択します。

「ImageId,InstanceId,InstanceType」 を選択します。

メモリ使用率である「mem_used_percent」がありました。

ディスク使用率も「ImageId,InstanceId,InstanceType,device,fstype,path」に存在します。
これで当初の目的であるメモリ・ディスク使用率を監視することができそうです。

 

4. エージェント起動時のエラーについて

本検証の「CloudWatch エージェントの開始」を実施している際に、
エラーを引いたので共有させていただきます。

Systems Manager の 「Run Command」 から「CloudWatch エージェントの開始」を行った所、
以下のように失敗しました。

詳細を確認した所、以下のエラーメッセージが出力されておりました。

確認した所、パッケージ 「collectd」 がサーバにインストールされていないことが原因でした。
以下 のコマンドで「collectd」をインストールしたら、エージェントの起動が上手くいきました。

 

5. 最後に

今回は 「統合 CloudWatch エージェントを導入してメモリ・ディスク使用率を監視する」
をやってみましたが、なかなか骨が折れました。

ただこれで EC2 のモニタリングに必要な情報はそこそこ揃いましたし、
前回のブログと合わせてアラームも設定できるので、より使いやすくはなったと思います。

今後に関しては、CloudWatch Logs を用いたログ監視をやってみたいのと、
アラーム・ダッシュボードの設定もやっていきたいです。

エンジニア募集中

Wedding Parkでは一緒に技術のウエディングパークを創っていくエンジニアを募集しています。
興味のある方はぜひ一度気軽にオフィスに遊びにいらして頂ければと思います。
株式会社ウエディングパークwantedly

Pocket

Join Us !

ウエディングパークでは、一緒に働く仲間を募集しています!
ご興味ある方は、お気軽にお問合せください(カジュアル面談から可)

採用情報を見る