🪢

Amazon CloudWatchエージェント パラメータストアから設定ファイルを適用する

2024/08/31に公開

はじめに

本ページは個人の勉強で使用することを目的に作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報についてはAWS公式ドキュメントをご参照ください。

やること

  • EC2インスタンスにSystemManager RunCommandを使用してCloudWatchエージェントのインストール、SystemManager Parameter Storeの設定ファイルの読み込みを行う。
  • CloudWatchエージェントにより、EC2インスタンスのメトリクス、systemログ、cronログを収集する。

前提条件

  • VPC、サブネット、EC2インスタンス、VPCエンドポイントといったリソースはすでに構築済みとします。
  • 使用するEC2インスタンスはAmazon Linux 2023です。

1. Run CommandによるCloudWatchエージェントのインストール

  1. SystemManagerコンソールのナビゲーションペインからRun Commandをクリックします。
  2. Run Commandをクリックします。


  1. コマンドの実行画面で下記の設定値を入力し、実行をクリックします。
  • コマンドドキュメント
    • AWS-ConfigureAWSPackage
    • ドキュメントのバージョン:ランタイムの最初バージョン


  • コマンドのパラメータ
    • Action:install
    • installation Type:Uninstall and reinstall
    • Installation Type:Uninstall and reinstall
    • Name:AmazonCloudWatchAgent
    • Version:未記入
    • Additional Arguments:{} ※デフォルト


  • ターゲット:インスタンスを手動で選択する。
    • インスタンス:mori-ec2-cloudwatch-agent ※インストール先のEC2


  • その他のパラメータ
    • コメント:未記入
    • タイムアウト:600 ※デフォルト


  • 出力オプション
    • コマンド出力の Amazon S3 バケットへの書き込み:未選択
    • コマンド出力を Amazon CloudWatch Logs に書き込む:未選択
  • CloudWatch alarm - optional
    • Alarm name:未選択


  • SNS 通知
    • SNS 通知の有効化:未選択
  • AWS コマンドラインインターフェイスのコマンド
    • プラットフォーム:Linux/Unix/OS X
    • CLIコマンド:※自動で生成


  1. 実行後、コマンドIDをクリックしてコマンドのステータスが成功となっていることを確認できます。


2. Run Commandによる必要サービスのインストール

1.RunCommandコンソールのコマンドの実行画面から、下記の設定値を入力して実行をクリックします。

  • コマンドドキュメント
    • AWS-RunShellScript
    • ドキュメントのバージョン:ランタイムの最初バージョン
  • コマンドのパラメータ
# タイムゾーンをJSTに変更
sudo timedatectl set-timezone Asia/Tokyo

# rsysrogのインストール、起動設定の有効化、再起動
sudo dnf install -y rsyslog
sudo systemctl enable rsyslog
sudo systemctl restart rsyslog

# crondのインストール、起動設定の有効化、再起動
sudo dnf install -y cronie-noanacron
sudo systemctl enable crond
sudo systemctl restart crond

# collectdのインストール、起動設定の有効化、再起動
sudo dnf install -y collectd
sudo systemctl enable collectd
sudo systemctl restart collectd

# cloudwatch-agentのインストール、起動設定の有効化、再起動
sudo systemctl enable amazon-cloudwatch-agent.service
sudo systemctl restart amazon-cloudwatch-agent.service

# 収集するディレクトリのパーミッションを変更
sudo chmod 644 /var/log/messages
sudo chmod 644 /var/log/cron
  • Working Directory:未記入
    • Execution Timeout:3600 ※デフォルト
  • ターゲット
    • インスタンスを手動で選択する。
    • インスタンス:mori-ec2-cloudwatch-agent
  • その他のパラメータ
    • コメント:未記入
    • タイムアウト:600 ※デフォルト
  • レート制御
    • 同時実行数:ターゲット:1 ※デフォルト
    • エラーのしきい値:エラー:0 ※デフォルト
  • 出力オプション
    • コマンド出力の Amazon S3 バケットへの書き込み:未選択
    • コマンド出力を Amazon CloudWatch Logs に書き込む:未選択
  • CloudWatch alarm - optional
    • Alarm name:未選択
  • SNS 通知
    • SNS 通知の有効化:未選択
  • AWS コマンドラインインターフェイスのコマンド
    • プラットフォーム:Linux/Unix/OS X
    • CLIコマンド:※自動で生成

3. パラメータストアに設定ファイルを作成

  1. パラメータを作成します。
  • 名前:/mori/cloudwatch-agent/config
{
	"agent": {
		"metrics_collection_interval": 60,
		"run_as_user": "cwagent"
	},
	"logs": {
		"logs_collected": {
			"files": {
				"collect_list": [
					{
						"file_path": "/var/log/messages",
						"log_group_class": "STANDARD",
						"log_group_name": "/var/log/messages",
						"log_stream_name": "{instance_id}",
						"retention_in_days": -1
					},
					{
						"file_path": "/var/log/cron",
						"log_group_class": "STANDARD",
						"log_group_name": "/var/log/cron",
						"log_stream_name": "{instance_id}",
						"retention_in_days": -1
					}
				]
			}
		}
	},
	"metrics": {
		"namespace": "dev/mori-metrics-cwagent-test",
		"aggregation_dimensions": [
			[
				"InstanceId"
			]
		],
		"append_dimensions": {
			"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
			"ImageId": "${aws:ImageId}",
			"InstanceId": "${aws:InstanceId}",
			"InstanceType": "${aws:InstanceType}"
		},
		"endpoint_override": "★モニタリング用のエンドポイントID.monitoring.ap-northeast-1.vpce.amazonaws.com",
		"metrics_collected": {
			"collectd": {
				"metrics_aggregation_interval": 60
			},
			"cpu": {
				"measurement": [
					"cpu_usage_idle",
					"cpu_usage_iowait",
					"cpu_usage_user",
					"cpu_usage_system"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				],
				"totalcpu": false
			},
			"disk": {
				"measurement": [
					"used_percent",
					"inodes_free"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"diskio": {
				"measurement": [
					"io_time"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"mem": {
				"measurement": [
					"mem_used_percent"
				],
				"metrics_collection_interval": 60
			},
			"statsd": {
				"metrics_aggregation_interval": 60,
				"metrics_collection_interval": 10,
				"service_address": ":8125"
			},
			"swap": {
				"measurement": [
					"swap_used_percent"
				],
				"metrics_collection_interval": 60
			}
		}
	}
}

設定ファイルについて

  • 名前空間dev/mori-metrics-cwagent-testに指定したメトリクスを出力する。
  • ロググループ名 /var/log/messages, /var/log/cronにログを出力する。

参考
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html

4. RunCommandによる設定ファイルのEC2インスタンスへの適用

1.RunCommandコンソールのコマンドの実行画面から、下記の設定値を入力して実行をクリックします。

  • コマンドドキュメント
    • AmazonCloudWatch-ManageAgent
    • ドキュメントのバージョン:ランタイムの最初バージョン
  • コマンドのパラメータ
    • Action:configure
    • Mode:ec2
    • Optional Configuration Source:ssm
    • Optional Configuration Location:パラメータ名
    • Optional Restart:yes
  • ターゲット
    • インスタンスを手動で選択する。
    • インスタンス:mori-ec2-cloudwatch-agent ※設定対象のインスタンス
  • その他のパラメータ
    • コメント:未記入
    • タイムアウト:600 ※デフォルト
  • レート制御
    • 同時実行数:ターゲット:1 ※デフォルト
    • エラーのしきい値:エラー:0 ※デフォルト
  • 出力オプション
    • コマンド出力の Amazon S3 バケットへの書き込み:未選択
    • コマンド出力を Amazon CloudWatch Logs に書き込む:未選択
  • CloudWatch alarm - optional
    • Alarm name:未選択
  • SNS 通知
    • SNS 通知の有効化:未選択
  • AWS コマンドラインインターフェイスのコマンド
    • プラットフォーム:Linux/Unix/OS X
    • CLIコマンド:※自動で生成

5. CloudWatchの確認

  1. メトリクスの名前空間dev/mori-metrics-cwagent-testに指定したメトリクスが出力されています。


  1. ロググループ/var/log/messages/var/log/cronにログが出力されています。

おわりに

  • 設定ファイルの内容を使いまわせるので、ウィザードから設定ファイルを作成するよりも監視対象のEC2が複数ある場合に便利ですね。

  • ウィザードで作成する方法、VPCエンドポイントなどは以下の記事にまとめています。

https://zenn.dev/smori/articles/3a5369891004ba

Discussion