LightSailをCloudWatchで監視するようにした

Amazon Linux



このサイトを動かしているWordPressをAmazon Linux 2ベースのインスタンスに引っ越しました。



ついでにLightSailインスタンスをCloudWatchで監視するようにした、というお話です。

こんな風にしてメトリクスを見ることができます。

クリックで元画像を表示



手順は大きく以下。

・IAMでCloudWatch用のユーザーを作る
・作ったユーザーをLightSail内のCloudWatchエージェントに設定する

IAM

まずIAMでCloudWatch用のユーザーを作ります。

理論的なところはいろいろなサイトで解説されているので、ここでは実際の手順だけ。

IAMでUsersを選択。

クリックして元画像を表示



Add usersを選択。

クリックして元画像を表示



わかりやすい名前を入れ、Access key – Programmatic accessにチェックを入れて、Next。

クリックして元画像を表示



Attach existing policies directlyを選び、Filter policiesCloudWatchAgentServerPolicyを入れてチェックし、Next.

クリックして元画像を表示



タグは不要ならそのままNext。

クリックして元画像を表示



問題なさそうならCreate userします。

クリックして元画像を表示



無事に作られました。
Access key IDSecret access keyはメモしておきましょう。

クリックして元画像を表示

LightSail側の作業

基本的にはここの手順に従います。

CloudWatch エージェントを使用して Lightsail インスタンスのメトリクスをモニタリングする
Amazon Lightsail インスタンスを所有していますが、Amazon CloudWatch エージェントを使用してインスタンスのディスクとメモリのメトリクスをモニタリングしたいと考えています。

↑の記事には載っていませんが、自分はこれらも入れました。
 不要かも。

sudo yum install amazon-cloudwatch-agent
sudo amazon-linux-extras install collectd



LightSailインスタンスで作ったユーザー情報を入れます。
東京リージョンにしました。
 こちらの記事を参考にさせていただきました。感謝です。

sudo aws configure --profile AmazonCloudWatchAgent
AWS Access Key ID [None]: YourAccessKeyID
AWS Secret Access Key [None]: YourSecretAccessKey
Default region name [None]: ap-northeast-1
Default output format [None]: (Enter)
(以降は基本Enter連打でOK)

途中で「他にほしいログはあるか?」と言われたので、/var/log/syslogを入れておきました。

> Log file path:
/var/log/syslog
Log group name:
default choice: [syslog]



最後に「設定は/opt/aws/amazon-cloudwatch-agent/bin/config.jsonに保存してあるよ」とのこと。
自分はCPU使用率とTCPコネクション数を追加してみました。
 取得できるメトリクスは公式ページを参照。
2022/10/08更新
syslogのパスが間違っていたので、修正しました。

{
	"agent": {
		"metrics_collection_interval": 60,
		"run_as_user": "root"
	},
	"logs": {
		"logs_collected": {
			"files": {
				"collect_list": [
					{
						"file_path": "/var/log/messages",
						"log_group_name": "syslog",
						"log_stream_name": "{instance_id}",
						"retention_in_days": -1
					}
				]
			}
		}
	},
	"metrics": {
		"aggregation_dimensions": [
			[
				"InstanceId"
			]
		],
		"append_dimensions": {
			"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
			"ImageId": "${aws:ImageId}",
			"InstanceId": "${aws:InstanceId}",
			"InstanceType": "${aws:InstanceType}"
		},
		"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"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"mem": {
				"measurement": [
					"mem_used_percent"
				],
				"metrics_collection_interval": 60
			},
			"netstat": {
				"measurement": [
					"tcp_established",
					"tcp_time_wait"
				],
				"metrics_collection_interval": 60
			},
			"statsd": {
				"metrics_aggregation_interval": 60,
				"metrics_collection_interval": 10,
				"service_address": ":8125"
			}
		}
	}
}



ただ、このconfig.jsonではなくなぜか別のamazon-cloudwatch-agent.jsonを参照していました。

sudo systemctl status amazon-cloudwatch-agent
● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
   Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2022-09-29 14:36:42 UTC; 36s ago
 Main PID: 19055 (amazon-cloudwat)
    Tasks: 7
   Memory: 19.1M
   CGroup: /system.slice/amazon-cloudwatch-agent.service
           └─19055 /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml -envconfig /opt/aws/amazon-cloudwatch-agent...

Sep 29 14:36:42 ip-172-26-0-182.ap-northeast-1.compute.internal systemd[1]: Stopped Amazon CloudWatch Agent.
Sep 29 14:36:42 ip-172-26-0-182.ap-northeast-1.compute.internal systemd[1]: Started Amazon CloudWatch Agent.
Sep 29 14:36:42 ip-172-26-0-182.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[19055]: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json does not exist or cann...ing it.
Sep 29 14:36:42 ip-172-26-0-182.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[19055]: I! Detecting run_as_user...
Hint: Some lines were ellipsized, use -l to show in full.

そのため、シンボリックリンクを作って対処します。

cd /opt/aws/amazon-cloudwatch-agent/etc/
sudo ln -s ../bin/config.json amazon-cloudwatch-agent.json
ls -l /opt/aws/amazon-cloudwatch-agent/etc/
total 16
drwxr-xr-x 2 root root   30 Sep 29 13:55 amazon-cloudwatch-agent.d
lrwxrwxrwx 1 root root   18 Sep 29 14:38 amazon-cloudwatch-agent.json -> ../bin/config.json
-rw-rw-r-- 1 root root 3054 Sep 29 14:38 amazon-cloudwatch-agent.toml
-rw-r--r-- 1 root root  991 Sep 26 15:31 common-config.toml
-rw-r--r-- 1 root root    2 Sep 29 14:38 env-config.json
-rw-r--r-- 1 root root   85 Sep 29 14:38 log-config.json

設定の反映にはプロセス再起動が必要です。

sudo amazon-cloudwatch-agent-ctl -a stop
sudo amazon-cloudwatch-agent-ctl -a start



ここまでうまく設定できていればCloudWatchコンソールで見えていると思います!
↓はこのサイトでの取得結果です。

クリックして元画像を表示

終わりに

いかがでしたか。

わざわざSSHログインしなくてもメモリやCPU使用率を確認でき、一定値を超えたらアラートを出すなどのアクションにもつながるので、とても便利です!

Comments

タイトルとURLをコピーしました