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 インスタンスのメトリクスをモニタリングする

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

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をコピーしました