CloudWatchエージェントについて
・CloudWatchエージェントとは
→EC2インスタンスにインストールしておくと様々な沢山のログ(メトリクス)の収集が可能にできるサービスです。
→Amazon EC2から標準外のメトリクス及びログの両方を収集することが可能になります。
→今までEC2の詳細なメトリクスをCloudWatch上で確認するためには。collectdのCloudWatchプラグインやCloudWatch Monitoring Script、または自身のカスタムスクリプトなどでデータを収集してCloudWatchへアップロードする必要がありました。
→新しい設定オプションにより、これまではCloudWatchコンソールもしくはAWS CLIで行っていたログイベントを保持する期間についての設定についても、CloudWatchエージェントで、保持する期間を指定できるようになっています。
デフォルトの場合は、ログは無期限に保持され、期限切れになることはありません。
CloudWatch エージェントによる CloudWatch Logs へのログ出力において、ふたつの新機能が使えるようになりました。
ログフィルター式と、ログ保持期間の指定です。
- Amazon CloudWatch Agent adds Support for Log Filter Expressions
- Amazon CloudWatch Agent adds support for Configurable Log Group Retention
前者は必要なログのみ CloudWatch Logs に出力することを可能とし、見通しの良さやコスト削減に寄与します。
後者はログ保持期間を指定したい場合の追加設定が不要になり、特に動的にロググループが作成される場合の管理の手間を減らしてくれます。
・エージェント(SSM)とは
→AWS Systems Manager エージェント (SSM Agent) は、Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、エッジデバイス、オンプレミスサーバー、仮想マシン (VM) で実行される Amazon のソフトウェアです。
→EC2などのリソースを管理してコマンドを実行したり、CLI(コマンドラインインターフェース)の操作を可能にするものです。
実際にやってみました
1.まずEC2インスタンスを設置し起動しておくか、起動可能な状態にしておきます。
2.EC2インスタンスにCloudWatch監視用のIAMロールを作成し、アタッチします。
作成時のロール名は任意ですが今回は、CloudWatchServerRoleとしました。
ロール作成時のポリシーは、以下の3つ追加しておきます。
・AmazonSSMManagedInstanceCore
・CloudWatchAgentServerPolicy
・CloudWatchAgentAdminPolicy




以下の処理をして、作成したIAMロールをEC2にアタッチします。


アタッチまで成功すると上部に以下の表示が出ます。

上記まで対応完了したときの私のインスタンスの概要は以下の通りでした。

3. CloudWatchエージェントをEC2インスタンスにインストールします。
・AmazonLinux2のOSパッケージからのインストールの想定です。
・今回は、東京リージョン(ap-northeast-1)使用での対応です。
① EC2を起動し、ターミナルにてSSH接続します。

② CloudWatchエージェントパッケージをダウンロードします。
wget https://s3.ap-northeast-1.amazonaws.com/amazoncloudwatch-agent-ap-northeast-1/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm

③ CloudWatchエージェントパッケージをインストールします。
sudo rpm -U ./amazon-cloudwatch-agent.rpm

④ CloudWatchエージェントの設定ファイル内容を編集します。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
※上記コマンドを実行すると設定ウィザードが起動しますので入力してゆきます。

→どのOSでエージェントを使用しますか?今回はLinux
Are you using EC2 or On-Premises hosts?
→使用しているホストはEC2とオンプレミスのどちらですか?今回はEC2
Which user are you planning to run the agent?
→エージェントを実行するユーザーはどのユーザーですか?今回はroot
Do you want to turn on StatsD daemon?
→Statsデーモン(メトリクス収集のツール)を使いたいですか?今回は追加でカスタムメトリクスを使用しますのでyes。
Which port do you want StatsD daemon to listen to? default choice: [8125]
→Statsデーモンの待ち受けるポート番号はデフォルトの8125でいいですか?今回、指定の要件は特にないので8125のまま変更しません。
※今回、これらはデフォルト値にて設定してあります。
※StatsDとは、さまざまなアプリケーションからメトリクスを収集できる一般的なオープンソースソリューションです。

→Collectデーモンを使ってメトリクスを収集しますか?今回は使用しません。
→メモリ監視をする必要が有る場合は、こちらのCollectデーモンによるメトリクス収集の設定が必要になります。
※この質問は今回Collectデーモンを使用してのメトリクス収集はしないのでnoとしました。

→CPUやメモリを収集しますか?収集しておきますのでyes。
Do you want to monitor cpu metrics per core?
→コアあたりのCPUを監視しますか?yes。
Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
→メトリクスに利用可能なディメンションを利用しますか?yes。
Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file.1. 1s 2. 10s 3. 30s 4. 60s
→高解像度でのメトリクスの収集間隔を選んでください。今回はデフォルトの60秒。
Which default metrics config do you want?1. Basic 2. Standard 3. Advanced 4. None
→メトリクスセットをどれにするか選択してください。今回はサービス監視の設定練習だけなので最低限なBasicにします。
※今回、これらもデフォルト値にて設定してあります。

→設定ファイルが作成されたので、これで良いかの確認をしています。問題無ければyesです。
※今回、これらもデフォルト値にて設定してあります。

→既にCloudWatchエージェントが存在するか?新規なのでno
Do you want to monitor any log files? 1. yes 2. no
→ログファイルの監視をしたいか?したいのでyes。
以下でどのログを監視するかを聞いてきますので、今回はシステムログ「/var/log/messages」を監視する設定にし、監視する追加のログファイルは必要無いのでnoとしました。
※以降は全てデフォルトにしました。

→監視する追加のログファイルを指定したいか?追加の監視は今回不要なのでno。
設定ファイルが表示されます。

→設定ファイルをSSMのパラメーターストアに入れていいですか?yes。
What parameter store name do you want to use to store your config? (Use ‘AmazonCloudWatch-‘ prefix if you use our managed AWS policy) default choice: [AmazonCloudWatch-linux]
→パラメーターストアの名前は何にしますか?デフォルトの[AmazonCloudWatch-linux]にします。
Which region do you want to store the config in the parameter store?
→パラメータストアのリージョンはどれにしますか?今回は東京リージョンなのでデフォルトの[ap-northeast-1]にします。
Which AWS credential should be used to send json config to parameter store?
→設定ファイルをパラメータストアに送信するためのクレデンシャルはどちらにしますか?今回はデフォルトにします。
ここまで完了すると、設定ファイルの作成は完了です。
最後に設定されたファイルは、cat /opt/aws/amazon-cloudwatch-agent/bin/config.jsonにて確認することが可能です。
4.SSMからエージェントを起動します。(設定した内容は以下の通りです。)




以下の出力オプションはデフォルトだとS3書き込みが有効の設定となっておりますが、今回S3は未設定ですので、以下のCloudWatch出力へ変更しておきます。
※ここを変更せずに実行するとエラーが生じます。

コンソールでの出力表示は以下の内容でした。
【Output】
****** processing amazon-cloudwatch-agent ******
/opt/aws/amazon-cloudwatch-agent/bin/config-downloader –output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d –download-source ssm:AmazonCloudWatch-linux –mode ec2 –config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml –multi-config default I! Trying to detect region from ec2 D! [EC2] Found active network interface Region: ap-northeast-1 credsConfig: map[] Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ssm_AmazonCloudWatch-linux.tmp Start configuration validation… /opt/aws/amazon-cloudwatch-agent/bin/config-translator –input /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json –input-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d –output /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml –mode ec2 –config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml –multi-config default I! Detecting run_as_user…I! Trying to detect region from ec2 D! [EC2] Found active network interface No csm configuration found. Configuration validation first phase succeeded /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml Configuration validation second phase succeeded Configuration validation succeeded amazon-cloudwatch-agent has already been stopped
【Error】
2022/09/30 02:04:09 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ssm_AmazonCloudWatch-linux.tmp … 2022/09/30 02:04:09 I! Valid Json input schema. Created symlink from /etc/systemd/system/multi-user.target.wants/amazon-cloudwatch-agent.service to /etc/systemd/system/amazon-cloudwatch-agent.service. Redirecting to /bin/systemctl restart amazon-cloudwatch-agent.service
※上記内容につきまして、Outputに「succeeded」の記載があれば正常に実行されているとみなしたので大丈夫です。
※Errorの内容に関しましては、systemctlターゲットのシンボリックリンクを作成しましたという内容の表示でしたので、問題無いと考えられます。
5.CloudWatchの内容確認をします
※ AWSのCloudWatchを選択し遷移される画面の「ロググループ」を選択します。

その中に、「messages」が存在する事が分かります。

中を開いて、ログストリームに存在するログストリーム名のリンクをクリックします。
以下に表示された通り、取得されたEC2インスタンスのログの表示がされています。

以上で今回のCloudWatchエージェントをインストールと設定をし、基本的な動作確認までが完了となります。お疲れ様でした。
コメント