MacBook のメトリクスを CloudWatch で監視したいんだ!
はじめに
当初は Raspberry Pi
に CloudWatch Agent
をインストールして、CloudWatch
で監視することを文章にしようと思っていましたが、 Raspberry Pi
で実施した手順を整理し直すために、MacBook
で同じ手順をやってみることにしました。
この記事のゴール
- MacBook に
CloudWatch Agent
をインストールできるようになります。 - MacBook のメトリクスを
CloudWatch
で監視できるようになります。
背景
Raspberry Pi
を NAS
として使っているのですが、いつも間にか NAS
が落ちている状況に遭遇していました。
落ちていても気づかないので、CloudWatch
で監視したいと考えた次第です。
Raspberry Pi
では CloudWatch Alerm
を設定するところまで実施しましたが、今回は省略します。
前提条件
- 利用端末 :
MacBook Air
Apple M3
macOS Sonoma 14.5
-
MacOS
にwget
がインストールされていること -
MacOS
にaws-cli
がインストールされていること
やることサマリ
-
IAM
ユーザーの作成 -
IAM
ユーザーの認証情報を MacBook に設定 -
CloudWatch Agent
のインストール -
CloudWatch Agent
の設定 -
CloudWatch Agent
の起動 -
CloudWatch
のコンソール画面でメトリクスを確認
手順詳細
IAM
ユーザーの作成
1. CloudWatch Agent
が CloudWatch
にデータを送信するため、 IAM
ユーザーを作成する必要があります。
下記公式ドキュメントを参考に IAM
ユーザーを作成します。
IAM
と入力
1-1. コンソール画面右上の検索画面に
IAM
をクリック
1-2.
step 1, 2
ユーザー
をクリック
1-3. 左ペインに表示されている
step 3
ユーザーの作成
をクリック
1-4. 画面右
step 4
ユーザーの詳細を指定
画面の ユーザー名
欄に任意の名称を入力
1-5.
ユーザーの詳細を指定
画面右下の 次へ
ボタンをクリック
1-6.
step 5, 6
許可の詳細
画面の 許可のオプション
で ポリシーを直接アタッチする
を選択
1-7.
許可ポリシー
の検索欄に CloudWatchAgentServerPolicy
を入力
1-8.
CloudWatchAgentServerPolicy
にチェックを入れる
1-9.
許可の設定
画面右下の 次へ
ボタンをクリック
1-10.
step 7, 8, 9, 10
確認して作成
画面右下の ユーザーの作成
ボタンをクリック
1-11.
step 11
IAM
ユーザーの認証情報を MacBook に設定
2.
IAM ユーザー
画面にて、作成したユーザーのユーザー名をクリック
2-1.
step 1
アクセスキーを作成
をクリック
2-2.
step 2
主要なベストプラクティスと代替案にアクセスする
画面にて AWSの外部で実行されるアプリケーション
を選択
2-3.
主要なベストプラクティスと代替案にアクセスする
画面右下の 次へ
ボタンをクリック
2-4.
step 3, 4
説明タグを設定 - オプション
画面の 説明タグ値
に任意の説明を入力
2-5.
説明タグを設定 - オプション
画面右下の アクセスキーの作成
ボタンをクリック
2-6.
step 5, 6
アクセスキーを取得
画面にて、アクセスキー ID
と シークレットアクセスキー
をメモ
2-7, 8.
step 7, 8
2-9. 認証情報ファイルを作成
下記コマンドを実行して、認証情報ファイルを作成します。
your_access_key
と your_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
CloudWatch Agent
のインストール
3. 下記公式ドキュメントを参考にインストールします。
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.
CloudWatch Agent
の設定
4. amazon-cloudwatch-agent-config-wizard
コマンドを実行して、CloudWatch Agent
の設定を行います。
下記公式ドキュメントも参考にしてください。
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.
common-config.toml
の編集
4-3. 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"
CloudWatch Agent
の起動
5.
CloudWatch Agent
の起動
5-1. 下記コマンドを実行して、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
CloudWatch
のコンソール画面でメトリクスを確認
6.
CloudWatch
と入力
6-1. コンソール画面右上の検索画面に
CloudWatch
をクリック
6-2.
step 1, 2
すべてのメトリクス
をクリック
6-3. 左ペインに表示されている
step 3
カスタム名前空間
内の CWAgent
をクリック
6-4.
step 4
cpu,host
をクリック
6-5. ここで選択する項目は任意です
step 5
host
に MacBook
と記載されているメトリクスのチェックボックスにチェックを入れる
6-6. CloudWatch Agent
が CloudWatch
にデータを送信できていれば、メトリクスが表示されます。
step 6
参照情報
Discussion