🌟

MacBook のメトリクスを CloudWatch で監視したいんだ!

2024/07/07に公開

はじめに

当初は Raspberry PiCloudWatch Agent をインストールして、CloudWatch で監視することを文章にしようと思っていましたが、 Raspberry Pi で実施した手順を整理し直すために、MacBook で同じ手順をやってみることにしました。

この記事のゴール

  • MacBook に CloudWatch Agent をインストールできるようになります。
  • MacBook のメトリクスを CloudWatch で監視できるようになります。

背景

Raspberry PiNAS として使っているのですが、いつも間にか NAS が落ちている状況に遭遇していました。
落ちていても気づかないので、CloudWatch で監視したいと考えた次第です。
Raspberry Pi では CloudWatch Alerm を設定するところまで実施しましたが、今回は省略します。

前提条件

  • 利用端末 : MacBook Air Apple M3 macOS Sonoma 14.5
  • MacOSwget がインストールされていること
  • MacOSaws-cli がインストールされていること

やることサマリ

  1. IAM ユーザーの作成
  2. IAM ユーザーの認証情報を MacBook に設定
  3. CloudWatch Agent のインストール
  4. CloudWatch Agent の設定
  5. CloudWatch Agent の起動
  6. CloudWatch のコンソール画面でメトリクスを確認

手順詳細

1. IAM ユーザーの作成

CloudWatch AgentCloudWatch にデータを送信するため、 IAM ユーザーを作成する必要があります。
下記公式ドキュメントを参考に IAM ユーザーを作成します。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html#create-iam-roles-for-cloudwatch-agent-users

1-1. コンソール画面右上の検索画面に IAM と入力

1-2. IAM をクリック


step 1, 2

1-3. 左ペインに表示されている ユーザー をクリック


step 3

1-4. 画面右 ユーザーの作成 をクリック


step 4

1-5. ユーザーの詳細を指定 画面の ユーザー名 欄に任意の名称を入力

1-6. ユーザーの詳細を指定 画面右下の 次へ ボタンをクリック


step 5, 6

1-7. 許可の詳細 画面の 許可のオプションポリシーを直接アタッチする を選択

1-8. 許可ポリシー の検索欄に CloudWatchAgentServerPolicy を入力

1-9. CloudWatchAgentServerPolicy にチェックを入れる

1-10. 許可の設定 画面右下の 次へ ボタンをクリック


step 7, 8, 9, 10

1-11. 確認して作成 画面右下の ユーザーの作成 ボタンをクリック


step 11

2. IAM ユーザーの認証情報を MacBook に設定

2-1. IAM ユーザー 画面にて、作成したユーザーのユーザー名をクリック


step 1

2-2. アクセスキーを作成 をクリック


step 2

2-3. 主要なベストプラクティスと代替案にアクセスする 画面にて AWSの外部で実行されるアプリケーション を選択

2-4. 主要なベストプラクティスと代替案にアクセスする 画面右下の 次へ ボタンをクリック


step 3, 4

2-5. 説明タグを設定 - オプション 画面の 説明タグ値 に任意の説明を入力

2-6. 説明タグを設定 - オプション 画面右下の アクセスキーの作成 ボタンをクリック


step 5, 6

2-7, 8. アクセスキーを取得 画面にて、アクセスキー IDシークレットアクセスキー をメモ


step 7, 8

2-9. 認証情報ファイルを作成

下記コマンドを実行して、認証情報ファイルを作成します。
your_access_keyyour_secret_key は、 7, 8 で控えた値に置き換えてください。

sudo aws configure --profile AmazonCloudWatchAgent
# 実行結果
AWS Access Key ID [None]: your_access_key
AWS Secret Access Key [None]: your_secret_key
Default region name [None]: ap-northeast-1
Default output format [None]: json

3. CloudWatch Agent のインストール

下記公式ドキュメントを参考にインストールします。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/download-cloudwatch-agent-commandline.html#download-CloudWatch-Agent-on-EC2-Instance-commandline-first

3-1. パッケージのダウンロード

手元の MacBook は ARM64 アーキテクチャであるため、ARM64 用のパッケージをダウンロードします。
今回は東京リージョンを指定してダウンロードします。

wget https://amazoncloudwatch-agent-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/darwin/arm64/latest/amazon-cloudwatch-agent.pkg
# 実行結果
--2024-06-30 14:27:41--  https://amazoncloudwatch-agent-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/darwin/arm64/latest/amazon-cloudwatch-agent.pkg
amazoncloudwatch-agent-ap-northeast-1.s3.ap-northeast-1.amazonaws.com (amazoncloudwatch-agent-ap-northeast-1.s3.ap-northeast-1.amazonaws.com) をDNSに問いあわせています... 52.219.199.42, 52.219.9.50, 52.219.163.42, ...
amazoncloudwatch-agent-ap-northeast-1.s3.ap-northeast-1.amazonaws.com (amazoncloudwatch-agent-ap-northeast-1.s3.ap-northeast-1.amazonaws.com)|52.219.199.42|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 125143997 (119M) [application/octet-stream]
`amazon-cloudwatch-agent.pkg' に保存中

amazon-cloudwatch-agent.pkg                         100%[===================================================================================================================>] 119.35M  8.72MB/s 時間 14s

2024-06-30 14:27:54 (8.84 MB/s) - `amazon-cloudwatch-agent.pkg' へ保存完了 [125143997/125143997]

3-2. パッケージのインストール

wget でダウンロードしたパッケージをインストールします。
wget コマンドを実行したディレクトリに amazon-cloudwatch-agent.pkg が存在することを確認してください。
その後、下記コマンドを実行します。
実行後、Password: が表示されるので、MacBook のパスワードを入力してください。

sudo installer -pkg ./amazon-cloudwatch-agent.pkg -target /
# 実行結果
Password:
installer: Package name is amazon-cloudwatch-agent
installer: Installing at base path /
installer: The install was successful.

4. CloudWatch Agent の設定

amazon-cloudwatch-agent-config-wizard コマンドを実行して、CloudWatch Agent の設定を行います。
下記公式ドキュメントも参考にしてください。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html

4-1. ウィザードの実行

下記コマンドを実行して、ウィザードを起動します。
実行後、Password: が表示されるので、MacBook のパスワードを入力してください。

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
# 実行結果
Password:
================================================================
= Welcome to the Amazon CloudWatch Agent Configuration Manager =
=                                                              =
= CloudWatch Agent allows you to collect metrics and logs from =
= your host and send them to CloudWatch. Additional CloudWatch =
= charges may apply.                                           =
================================================================

4-2. ウィザードの質問に回答

On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [3]:
3
Trying to fetch the default region based on ec2 metadata...
I! imds retry client will retry 1 timesD! should retry true for imds error : RequestError: send request failed
caused by: Put "http://xxx.xxx.xxx.xxx/latest/api/token": context deadline exceeded (Client.Timeout exceeded while awaiting headers)D! should retry true for imds error : RequestError: send request failed
caused by: Put "http://xxx.xxx.xxx.xxx/latest/api/token": context deadline exceeded (Client.Timeout exceeded while awaiting headers)2024/07/07 15:32:01 D! could not get region from imds v2 thus enable fallback
W! could not get region from ec2 metadata... EC2MetadataRequestError: failed to get EC2 instance identity document
caused by: RequestError: send request failed
caused by: Get "http://xxx.xxx.xxx.xxx/latest/dynamic/instance-identity/document": dial tcp xxx.xxx.xxx.xxx:80: connect: host is downAre you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [2]:
2
Please make sure the credentials and region set correctly on your hosts.
Refer to http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html
Which user are you planning to run the agent?
1. cwagent
2. root
3. others
default choice: [1]:
2
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
2
Do you want to monitor metrics from CollectD? WARNING: CollectD must be installed or the Agent will fail to start
1. yes
2. no
default choice: [1]:
2
Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:
1
Do you want to monitor cpu metrics per core?
1. yes
2. no
default choice: [1]:
1
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
default choice: [4]:
4
Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:
1
Current config as follows:
{
	"agent": {
		"metrics_collection_interval": 60,
		"run_as_user": "root"
	},
	"metrics": {
		"metrics_collected": {
			"cpu": {
				"measurement": [
					"cpu_usage_idle"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				],
				"totalcpu": true
			},
			"disk": {
				"measurement": [
					"used_percent"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"diskio": {
				"measurement": [
					"write_bytes",
					"read_bytes",
					"writes",
					"reads"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"mem": {
				"measurement": [
					"mem_used_percent"
				],
				"metrics_collection_interval": 60
			},
			"net": {
				"measurement": [
					"bytes_sent",
					"bytes_recv",
					"packets_sent",
					"packets_recv"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"swap": {
				"measurement": [
					"swap_used_percent"
				],
				"metrics_collection_interval": 60
			}
		}
	}
}
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
1. yes
2. no
default choice: [1]:
1
Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?
1. yes
2. no
default choice: [2]:
2
Do you want to monitor any log files?
1. yes
2. no
default choice: [1]
2
Do you want the CloudWatch agent to also retrieve X-ray traces?
1. yes
2. no
default choice: [1]:
2
Existing config JSON identified and copied to:  /opt/aws/amazon-cloudwatch-agent/etc/backup-configs
Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
Current config as follows:
{
	"agent": {
		"metrics_collection_interval": 60,
		"run_as_user": "root"
	},
	"metrics": {
		"metrics_collected": {
			"cpu": {
				"measurement": [
					"cpu_usage_idle"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				],
				"totalcpu": true
			},
			"disk": {
				"measurement": [
					"used_percent"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"diskio": {
				"measurement": [
					"write_bytes",
					"read_bytes",
					"writes",
					"reads"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"mem": {
				"measurement": [
					"mem_used_percent"
				],
				"metrics_collection_interval": 60
			},
			"net": {
				"measurement": [
					"bytes_sent",
					"bytes_recv",
					"packets_sent",
					"packets_recv"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"swap": {
				"measurement": [
					"swap_used_percent"
				],
				"metrics_collection_interval": 60
			}
		}
	}
}
Please check the above content of the config.
The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.
Edit it manually if needed.
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
2

Program exits now.

4-3. common-config.toml の編集

vim を立ち上げ、 common-config.toml を編集します。

sudo vim /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml

デフォルトの toml ファイルを下記のように編集します。

## Configuration for shared credential.
## Default credential strategy will be used if it is absent here:
##      Instance role is used for EC2 case by default.
##      AmazonCloudWatchAgent profile is used for onPremise case by default.
-# [credentials]
-#    shared_credential_profile = "{profile_name}"
-#    shared_credential_file = "{file_name}"
+ [credentials]
+    shared_credential_profile = "AmazonCloudWatchAgent"
+    shared_credential_file = "/Users/<your_name>/.aws/credentials"

5. CloudWatch Agent の起動

5-1. CloudWatch Agent の起動

下記コマンドを実行して、CloudWatch Agent を起動します。

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m onPremise -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
# 実行結果
Password:
Got Home directory: /var/root
I! Set home dir Linux: /var/root
I! SDKRegionWithCredsMap region:  ap-northeast-1
Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp
2024/07/07 17:24:26 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp ...
2024/07/07 17:24:26 I! Valid Json input schema.
2024/07/07 17:24:26 D! delta processor required because metrics with diskio or net are set
2024/07/07 17:24:26 Configuration validation first phase succeeded
Got Home directory: /var/root
I! Set home dir Linux: /var/root
I! SDKRegionWithCredsMap region:  ap-northeast-1
/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

6. CloudWatch のコンソール画面でメトリクスを確認

6-1. コンソール画面右上の検索画面に CloudWatch と入力

6-2. CloudWatch をクリック


step 1, 2

6-3. 左ペインに表示されている すべてのメトリクス をクリック


step 3

6-4. カスタム名前空間 内の CWAgent をクリック


step 4

6-5. cpu,host をクリック

ここで選択する項目は任意です


step 5

6-6. hostMacBook と記載されているメトリクスのチェックボックスにチェックを入れる

CloudWatch AgentCloudWatch にデータを送信できていれば、メトリクスが表示されます。


step 6

参照情報

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html#create-iam-roles-for-cloudwatch-agent-users

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/download-cloudwatch-agent-commandline.html#download-CloudWatch-Agent-on-EC2-Instance-commandline-first

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html

Discussion