この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
こんにちは。株式会社協栄情報クラウド事業本部の岩下です。
今回は、CloudWatchを利用するためにCloudWatchエージェントを使い、実際にCloudWatch Logsにログを収集するまでのハンズオンを実行したので記録として残します。
CloudWatchエージェントを使いCloudWatch Logsにログを収集することでEC2インスタンスにログインすることなく、マネジメントコンソールにて見やすく、また簡易的にログの確認ができるというメリットがあります。
CloudWatchエージェントについて
CloudWatchとは
まずCloudWatchとは、AWSで実行されているアプリケーションをリアルタイムでモニタリングできるサービスのことです。
CloudWatchを使用してメトリクスを収集し、追跡できます。メトリクスとは、リソースやアプリケーションに関して測定できる変数のことです。
CloudWatchエージェントとは
CloudWatchだけでは監視できない部分(EC2インスタンスの内)をEC2にCloudWatchエージェントをインストールすることで、より細かなメトリクスを測定できる機能のことです。
CloudWatch(サービス全体)とCloudWatchエージェント(EC2インスタンス内)それぞれをわかりやすくいうと、システムでエラーが起きていないかをログを記録し監視するツールになります。
下記のAWS公式ドキュメントを参照にしてます。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html
CloudWatchエージェント設定ファイルとは
CloudWatchエージェントをサーバーで実行する前に、CloudWatchエージェント設定ファイルの作成が必要です。
CloudWatch エージェント設定ファイルとは、agent、metrics、logs の 3 つのセクションを持つ JSON ファイルのことをいい言います。
-
agent セクションには、エージェントの全体的な設定に関するフィールドが含まれています。
-
metrics セクションでは、収集と CloudWatchへの発行に関するカスタムメトリクスを指定します。
-
logs セクションでは、CloudWatch Logsに発行されるログファイルを指定します。
下記のAWS公式ドキュメントを参照にしてます。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html
ログの収集をやってみる
事前準備
前提条件として、
- ログ収集対象のEC2インスタンスがすでにあること。
-
以下のポリシーが追加されているIAMロールがアタッチされていること。
(AWSリソースに書き込むためには権限が必要な為)CloudWatchAgentAdminPolicy
- インスタンスから情報を読み取って CloudWatch に書き込み、パラメータストアに情報を書き込むことができる権限。
CloudWatchAgentServerPolicy
- CloudWatch エージェントがインスタンスから情報を読み取り、CloudWatch に書き込むことを許可する権限。
AmazonSSMManagedInstanceCore
- SSMを使用して EC2 インスタンスに接続する場合に必要。
以上を前提条件として始めていきたいと思います。
下記のAWS公式ドキュメントを参照にしてます。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html
EC2インスタンスにCloudWatchエージェントを導入する
まずは、TeraTermでEC2インスタンスに接続します。
-
CloudWatchエージェントをダウンロードします。
(該当のリージョンIDに書き換えが必要。今回の場合はeu-west-1を利用)wget https://s3.eu-west-1.amazonaws.com/amazoncloudwatch-agent-eu-west-1/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
-
CloudWatchエージェントをインストールする
$ sudo yum install amazon-cloudwatch-agent
-
CloudWatchエージェント設定ファイルの作成
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
CloudWatchエージェント設定ファイルを作成する際、質問形式で聞かれます。
質問に答えて、サーバーの設定ファイルをカスタマイズします。
下記のAWS公式ドキュメントを参照にしてます。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html
- collectdをインストール
collectd は、サーバの統計情報を収集するためのオープンソースソフトウェアです。$ sudo amazon-linux-extras install collectd
下記のAWS公式ドキュメントを参照にしてます。 https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-custom-metrics-collectd.html
SSM(AWS Systems Manager)からエージェントを起動する
以上でEC2インスタンス上での準備は完了したので、実際にSSMの『Run Command』でエージェントを起動します。
また、EC2の内部に入ることなく簡易的にEC2のコマンドを実行できることから、今回SSMのRun Commandを利用しています。
※『Run Command』とは、各種コマンドをマネジメントコンソール上で実行できるコマンド
-
SSM(AWS Systems Manager)のサイドメニューから『Run Command』を選択
-
コマンドドキュメント:起動対象の『AmazonCloudWatch-ManageAgent』を検索して該当のドキュメントを開く
※コマンドドキュメントとは、AWS Systems Managerドキュメントタイプのひとつであり、Systems Managerが実行するアクションが定義されたドキュメントとのこと。
-
開いたら、『コマンドを実行する』をクリック
-
コマンドパラメータの画面にて下記を設定する
パラメータストアに保存されているファイル名
Optional Configuration Location: 『AmazonCloudWatch-linux』を入力
-
ターゲット: 「インスタンスを手動で選択する」をクリックし、対象のインスタンスにチェックをいれる
-
設定が完了したら「実行」をクリック
-
成功したら以下のような画面が表示されます。
確認する
CloudWatchのロググループにログが記録されているかを確認します。
CloudWatchのサイドメニューからロググループを選択し、以下のグループにログが記録されているか確認します。
-
ロググループ: CloudWatchエージェント設定ファイルの作成時に決めたファイル名:messages
-
ログストリーム: インスタンスID
その中の階層の配下にログが保存されていることが確認できました。
まとめ
AWSにおける監視運用サービスであるCloudWatchエージェントにてCloudWatch Logsにログを収集するハンズオンで構築した内容をまとめました。
CloudWatchエージェントでCloudWatch Logsにログを収集することで、EC2インスタンスにログインすることなくマネジメントコンソールにて簡易的にログを確認することで瞬時に問題に対応できるメリットがあると感じました。
構築だけしているときは、どこにどのファイル名で記録が管理されているのかわからなくなるときがありましたが、今回の記事でまとめたことによって頭の中でも整理ができやすくなりました。
CloudWatchには、CloudWatchエージェントだけでなくほかにもアラームやイベントなど様々な機能が提供されているので、また機会があれば紹介したいと思います。