第3回 Amazon Lightsail で監視 ~ CloudWatch エージェントを導入してメモリ使用率とストレージ使用量を監視編

はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
前回は、CPU とストレージの使用量の監視設定を Amazon Lightsail のマネジメントコンソール画面から行いました。
しかし、メモリの使用率についてもメトリクスは Amazon Lightsail のマネジメントコンソール画面からは確認することができませんでした。また、ストレージの使用量についても、SSH 接続を行う必要があり、即時性に欠けるものでした。アラームの設定も行うことができませんし。
今回は、メモリ使用率とストレージの使用量についての確認方法について考えてみたいと思います。
今回できること
- Amazon CloudWatch と統合 CloudWatch エージェントについて知ることができます。
- Amazon Lightsail インスタンスに、CloudWatch エージェントを導入します。
- CloudWatch でメモリ使用率とストレージの使用量を確認できるようになります。
Amazon CloudWatch について
Amazon CloudWatch とは?
AWS とオンプレミスにおける AWS のリソースとアプリケーションのオブザーバビリティ
なんのこっちゃ。
簡単に言うと、監視サービス。AWS だけでなく、オンプレのシステムも基本 OK だよ、って感じ。
Amazon CloudWatch は、DevOps エンジニア、デベロッパー、サイト信頼性エンジニア (SRE)、IT マネージャー、および製品所有者のために構築されたモニタリング/オブザーバビリティサービスです。CloudWatch は、アプリケーションをモニタリングし、システム全体におけるパフォーマンスの変化に対応して、リソース使用率の最適化を行うためのデータと実用的なインサイトを提供します。CloudWatch は、モニタリングおよびオペレーショナルデータをログ、メトリクス、イベントの形式で収集します。運用状態の統一されたビューを取得し、AWS およびオンプレミスで実行されている AWS リソース、アプリケーション、およびサービスを完全に視覚化します。CloudWatch を使用すると、環境内における異常動作の検知、アラームの設定、ログとメトリクスが対応するように並べた視覚化、自動化されたアクションの実行、問題のトラブルシューティング、およびアプリケーションのスムーズな動作を維持するためのインサイトを検出できます。
かなり、いろんなことができる監視サービスだよ。LeoSaki(旦那)も大好き。Amazon CloudWatch のアラームを起点にインスタンスを再起動させたり、別のサービスを起動させたり、ダッシュボードを作成して可視化されたデータを眺めたり、いっぱい活用しています。
統合 CloudWatch エージェントとは?
統合 CloudWatch エージェントは、インスタンスやオンプレミスサーバーからメトリクスとログを収集するためのソフトウェアです。以前は、CloudWatch エージェントと、CloudWatch Logs エージェントに分かれていましたが、この 2 つが統合され、統合 CloudWatch エージェントとなりました。
現在は、統合 CloudWatch エージェントの利用が推奨されています。
この記事においては、統合 CloudWatch エージェントを CloudWatch エージェントと表記します。
CloudWatch エージェントは、インスタンスやオンプレミスサーバーからシステムレベルのメトリクスを収集します。収集したメトリクスは、CloudWatch でも保存して表示することができます。CloudWatch エージェントによって収集されたメトリクスは、カスタムメトリクスとして料金が発生します(10 のカスタムメトリクスは無料)。
CloudWatch エージェントによって収集されたログは、Amazon CloudWatch Logs に処理され、保存されます。Amazon CloudWatch Logs は別途利用料金が発生します(5 GB データ(取り込み、ストレージのアーカイブ、Logs Insights クエリによってスキャンされたデータ)は無料)。
以前は、ログを収集する必要のある仕様の場合、2 つのソフトをインストール、設定を行う必要があって面倒だったのですが、今は 1 回の作業で済むようになったので、小躍りしています。ありがとう、AWS !
Amazon Lightsail インスタンスに CloudWatch エージェントをインストールする
ユーザーの作成の前に一言
これはちょっといただけないよ、AWS ! 基本的にロールによる権限委譲で、セキュリティを高めることができるのが AWS サービスの良いところのはずなのに、Amazon Lightsail インスタンスの場合は、アクセスキーとシークレットアクセスキーを Amazon Lightsail インスタンスに設定しなければならないという! 今後の AWS の対応に期待です。(オチは最後)
ユーザーの作成
マネジメントコンソールから、「IAM」を検索します。

IAM ダッシュボードから「ユーザー」を選択します。

「ユーザーを追加」を選択します。

わかりやすいユーザー名をつけます(ここでは、CloudWatchForLightsail としました)。
「アクセスキー・プログラムによるアクセス」にチェックを入れます。

「既存のポリシーを直接アタッチ」を選択します。

「CloudWatchAgentServerPolicy」にチェックを入れます。
(ポリシーのフィルタに「cloudwatchagent」と入力して検索をかけると早い)

タグが必要な場合は、タグの設定を行います。

設定に誤りがないか確認を行い、「ユーザーの作成」を選択します。

.csv のダウンロードを行います。
(ダウンロードが難しい場合は、「アクセスキーID」と「シークレットアクセスキー」をメモしておきます)
※アクセスキーとシークレットアクセスキーの取り扱いには十分に注意してください。

Amazon Lightsail インスタンスへ Amazon CloudWatch エージェントのインストール
Amazon Lightsail インスタンスに SSH 接続を行います。
赤枠をクリックして直接インスタンスに SSH 接続をすることが可能です。
ターミナルソフトを利用して接続しても問題ありません。

コマンドを入力していきます。
Amazon CloudWatch エージェントソフトのダウンロード
$ wget https://s3.amazonaws.com/amazoncloudwatch-agent/debian/amd64/latest/amazon-cloudwatch-agent.deb

Amazon CloudWatch エージェントソフトのインストール
$ sudo dpkg -i -E ./amazon-cloudwatch-agent.deb

プロファイルの作成
$ sudo aws configure --profile AmazonCloudWatchAgent
ここでは、「AmazonCloudWatchAgent」という名前のプロファイルを作成します。
アクセスキーとシークレットアクセスキーを間違えないように入力します(できればコピペで)。
利用しているリージョンを入力します(ここでは、東京リージョン「ap-northeast-1」としました)

Amazon CloudWatch エージェントのプロファイルの作成
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
基本的には、デフォルトのままで良い(Enter キーを押して進むだけ)。
デフォルトのままで問題があるのは、以下の 6 個の質問。
(2022 年 10 月 27 日現在、何番目の質問であったか記載しますが、AWS はアップデートが早いため、よく質問内容を確認することをオススメします)
質問 2

質問 4

質問 5

質問 7

質問 12

質問 13

作成したプロファイル「AmazonCloudWatchAgent」を使用する設定を行う
$ sudo vim /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml
- 「i」キーでインサートモードにする
- 下記を貼り付ける
[credentials]
shared_credential_profile = "AmazonCloudWatchAgent"

- 「Esc」キーでインサートモードを解除する
- 「:wq」を入力して vim を抜ける
Amazon CloudWatch エージェントを起動させる
$ sudo amazon-cloudwatch-agent-ctl -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -a fetch-config -s

Amazon CloudWatch エージェントが起動したかどうかの確認
$ sudo amazon-cloudwatch-agent-ctl -a status
「status」が「running」となっていれば OK です。

Amazon CloudWatch コンソール画面での確認の前に
CloudWatch エージェントの設定が完了した直後ですと、メトリクスが反映されていない、情報が少なくてグラフに表示されているのがただの点でしかない、などありますので、一服しましょう。
Amazon CloudWatch コンソール画面での確認
マネジメントコンソールから、「cloudwatch」を検索します。

「すべてのメトリクス」を選択します。

メトリクスの中から「CWAgent」を選択します。

メモリ使用率の確認方法
「host」を選択します。

Amazon Lightsail インスタンスの「プライベート ip」を確認し、「mem_used_percent」にチェックを入れる

メモリ使用率を見ることができました!
ストレージ使用量の確認方法
「device,fstype,host,path」を選択します。

Amazon Lightsail インスタンスの「プライベート ip」を確認し、path が「/」の「disk_used_percent」にチェックを入れる

ディスク使用量を見ることができました!
現在、20.5 % 程度のようです。念のため、Amazon Lightsail インスタンスに SSH 接続を行い、確認してみます。

間違いないようですね!
おまけ
よく、IAM ユーザーの作成時にアタッチするポリシーについて、「CloudWatchAgentAdminPolicy」と「CloudWatchAgentServerPolicy」をアタッチする、と書かれていることがあります。この 2 つのポリシーの違いは、Systems Manager への「書き込み権限」があるかないか、のようです。
CloudWatch エージェントの設定において、Systems Manager パラメータストアにCloudWatch エージェントの設定情報を保存するかどうか聞かれます。保存する場合は、「CloudWatchAgentAdminPolicy」を、保存しない場合は、「CloudWatchAgentServerPolicy」をアタッチすれば良さそうです。
今回は Systems Manager パラメータストアにCloudWatch エージェントの設定情報を保存しませんので、「CloudWatchAgentServerPolicy」をアタッチしています。


最後に
これで、Amazon Lightsail インスタンスの監視を CloudWatch で行うことができるようになりました。
LeoSaki(旦那)としては、インスタンスにアクセスキーとシークレットアクセスキーを書き込むやり方はあまり好きじゃないなぁと思ってしまいます。AWS サービスを利用しているのならば、ロールを使いたい。あっ、でも、Amazon Lightsail インスタンスはオンプレ扱いなのか。

あとは、CloudWatch で監視設定をすれば、枕を高くして眠れるようになります。自分で監視するんじゃ心配で眠れないか・・・。そういうときは、専門の業者に頼みましょう(宣伝だけど高いよ)。
CloudWatch アラームで Lambda をキックして、Amazon Lightsail インスタンスを再起動、とかで、急場凌ぎはできそうだ。そうすると、ログが消えてしまうので調査が難しくなってしまうけれど。
ログも飛ばしておこうかなぁ、が次のテーマかも。
引き続き、よろしくお願いします!

猫大好き、野球大好き、AWS が大好き、な、藩士。
AWS 6冠、取得しています。
IPA 資格は IT パスポート、基本情報技術者、応用情報技術者、取得しています。
キャンプ場でも仕事する社畜っぽい人。
ディスカッション
コメント一覧
まだ、コメントがありません