CloudWatch Agent(1.300055.0b1095)のウィザード項目を確認してみる

# はじめに
- 久しぶりにCloudWatch Agentの設定ファイルをウィザードで作成しようとしたとき、いくつかこれなんだろうという設定があったため、現時点の設定できる項目を整理していきます

# 前提
- CloudWatch Agentのバージョンは、2025年5月1日現在最新の"1.300055.0b1095"を使用しています

```shell
[root@ip-10-0-1-120 ~]# cat /opt/aws/amazon-cloudwatch-agent/bin/CWAGENT_VERSION
1.300055.0b1095
[root@ip-10-0-1-120 ~]# ll /opt/aws/amazon-cloudwatch-agent/bin/
total 348180
-rw-r--r--. 1 root root        16 Apr 16 18:59 CWAGENT_VERSION
-rwxr-xr-x. 1 root root 143973736 Apr 16 18:59 amazon-cloudwatch-agent
-rwxr-xr-x. 1 root root  11468616 Apr 16 18:59 amazon-cloudwatch-agent-config-wizard
-rwxr-xr-x. 1 root root     14113 Apr 16 18:59 amazon-cloudwatch-agent-ctl
-rwxr-xr-x. 1 root root  36977112 Apr 16 18:59 config-downloader
-rwxr-xr-x. 1 root root 132042760 Apr 16 18:59 config-translator
-rw-r--r--. 1 root root      1345 May  1 12:44 config.json
-rw-r--r--. 1 root root  29755484 Apr 16 18:59 opentelemetry-jmx-metrics.jar
-rwxr-xr-x. 1 root root   2284952 Apr 16 18:59 start-amazon-cloudwatch-agent
[root@ip-10-0-1-120 ~]#
```

# 設定項目
- ウィザードの開始
    - 以下翻訳だけですが...
        - Amazon CloudWatch Agent設定マネージャーへようこそ
        - CloudWatch Agentは、ホストからメトリクスとログを収集し、CloudWatch に送信することができます
        - 追加のCloudWatch料金が適用される場合があります

```shell
================================================================
= 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.                                           =
================================================================
```

## Agentセクション
- どのOSでAgentを使用するか
    - 利用するOSに合わせて、1,2,3を選択します
    - ここで"darwin"とは、macOSを指します
        - [Darwin (オペレーティングシステム)](https://ja.wikipedia.org/wiki/Darwin_(オペレーティングシステム))
    - 後続は"1"を選択した前提で進めます

```shell
On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [1]:
```

- EC2またはオンプレミスホストを使用するか
    - CloudWatch Agentはオンプレミスのサーバーにもインストールすることができます
    - 今回はEC2インスタンスに導入するので、"1"を選択しています

```shell
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:
```

- どのユーザーでAgentを実行するか
    - セキュリティのベストプラクティスとしては、1の"cwagent"を選択することが強く推奨されています
        - なお、cwagentユーザーはウィザードの前後で手動作成する必要はありません
        - このCloudWatch Agentをインストールしたタイミングで自動的に作成されます
        ```shell
        # cat /etc/passwd
        (略)
        cwagent:x:992:992:Cloudwatch Agent:/home/cwagent:/sbin/nologin
        ```
    - どうしてもcwagentが使えない場合、rootユーザー、もしくは別のユーザーを使用します

```shell
Which user are you planning to run the agent?
1. cwagent
2. root
3. others
default choice: [1]:
```
- (CloudWatch Agentの実行ユーザーをothersとした場合)あなた自身のユーザーを指定する
    - "3"を選択した場合は、もちろんどのユーザーにするかを指定する必要があります
```
Please specify your own user(remember the user must exist before the agent running):
```

## Metricsセクション
- StatsDデーモンを有効にするか
    - StatsDは、アプリケーションからカスタムメトリクスを収集するためのプロトコルです。
    - これを有効にすると、以下のメリットがあります
        - アプリケーションからカスタムメトリクスをCloudWatchに送信できるようになります
        - アプリケーションコードから簡単にメトリクスを発行できます
        - カウンター、ゲージ、タイマー、セットなどの異なるタイプのメトリクスをサポートしています
        - 既存のStatsDクライアントライブラリを使用して、さまざまなプログラミング言語からメトリクスを送信できます
    - デフォルトでは「yes」（オプション1）が選択されており、特に理由がなければこのまま有効にしておくことが推奨されます
    - StatsDを有効にしても、実際に使用しなければリソース消費は最小限に抑えられます
    - 将来的にカスタムメトリクスを送信する可能性がある場合は、有効にしておくと後から設定する手間が省けそうです
    - StatsDに関して詳細は以下もご覧ください
        - [StatsD を使用してカスタムメトリクスを取得する](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-custom-metrics-statsd.html)

```shell
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
```

- (StatsDデーモンを有効化した場合)StatsDデーモンがリッスンするポートを指定
    - ポート番号「8125」はStatsDの標準的なデフォルトポートです
    - 特別な理由がない限り、このデフォルト値を使用することが推奨されます

```shell
Which port do you want StatsD daemon to listen to?
default choice: [8125]
```

- (StatsDデーモンを有効化した場合)StatsDデーモンの収集間隔はどれくらいか
    - StatsDデーモンがメトリクスを収集する頻度（間隔）を指定することができます
    - 似ていますが、前の質問の「集約間隔」と異なり、この「収集間隔」はStatsDデーモンがアプリケーションからメトリクスを読み取る頻度を指定します
    - 通常、収集間隔は集約間隔と同じか、それより短くする必要があります
        - 例えば、集約間隔が60秒、収集間隔を10秒に設定すると、1分間に6回収集したデータを集約してCloudWatchに送信することになります

```shell
What is the collect interval for StatsD daemon?
1. 10s
2. 30s
3. 60s
default choice: [1]:
```

- (StatsDデーモンを有効化した場合)StatsDデーモンによって収集されるメトリクスの集計間隔
    - StatsDが受け取る生のメトリクスデータをまとめて処理し、CloudWatchに送信する頻度を指定できます
    - 短い間隔ではより詳細なデータが得られますが、CloudWatchに送信されるデータポイント数が増えるためコストが高くなります

```shell
What is the aggregation interval for metrics collected by StatsD daemon?
1. Do not aggregate
2. 10s
3. 30s
4. 60s
default choice: [4]:
```

- CollectDからのメトリクスを監視するか
    - CollectDとは
        - CollectDはLinuxシステム向けのオープンソースの統計収集デーモンで、システムおよびアプリケーションのパフォーマンスメトリクスを収集します
        - 多くのプラグインを通じて様々なメトリクスを収集できる柔軟なツールです
        - CollectDに関して詳細は以下もご覧ください
            - [collectd を使用してカスタムメトリクスを取得する](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-custom-metrics-collectd.html)
    - **注意事項**
        - プロンプトには、「CollectDがインストールされていないと、Agentが起動に失敗します」と明記されています
        - つまり、もしシステムにCollectDがインストールされていない状態でこの機能を有効にすると、CloudWatch Agent全体が起動できなくなる可能性があります
        - このウィザードの実行前にインストールされている必要はありませんが、CloudWatch Agentに設定を読み込ませる前にはCollectDをインストールしておく必要があります

```shell
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]:
```
- ホストメトリクス（CPU、メモリなど）を監視するか
    - ホストメトリクスを有効化することで、以下のような情報を得ることができます
        - CPUの使用率
        - メモリ使用状況
        - ディスク容量と使用率
        - ネットワークトラフィック
        - プロセス情報　など

```shell
Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:
```

- CPUメトリクスをコアごとに監視するか
    - この設定は、CPUメトリクスを収集する際に、CPU全体の使用率だけでなく、各コアごとの詳細なメトリクスも収集するかどうかを選択するものです
    - 有効化することでコアごとの不均衡な負荷や特定のコアに集中する問題を特定できます
    - しかし、CloudWatchのコストが増加するため、特にコア数が多いサーバーで有効化する際はコスト試算が必要となります

```shell
Do you want to monitor cpu metrics per core?
1. yes
2. no
default choice: [1]:
```

- 利用可能な場合、すべてのメトリクスにEC2ディメンションを追加するか
    - CloudWatchに送信されるメトリクスに、EC2関連のディメンション（分類情報）を追加するかどうかを選択するものです
        - CloudWatchにおけるディメンションとは、メトリクスを特定するための追加情報です
        - メトリクスをフィルタリングしたり、グループ化したりする際に使用されます
    - 有効化することで、EC2の場合以下ディメンションが追加されます
        - "ImageId":"${aws:ImageId}" 
            - インスタンスの AMI ID を ImageId ディメンションの値として設定します
        - "InstanceId":"${aws:InstanceId}" 
            - インスタンスのインスタンス ID を InstanceId ディメンションの値として設定します
        - "InstanceType":"${aws:InstanceType}" 
            - インスタンスのインスタンスタイプを InstanceType ディメンションの値として設定します
        - "AutoScalingGroupName":"${aws:AutoScalingGroupName}" 
            - インスタンスの Auto Scaling グループ名を AutoScalingGroupName ディメンションの値として設定します
    - もちろんこちらもCloudWatchのコストが増加するため、有効化する際はコスト試算が必要となります

```shell
Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
1. yes
2. no
default choice: [1]:
```

- EC2ディメンションを集約するか
    - この機能を有効化することで、EC2のディメンションを集約することができます
    - ディメンションの集約とは、個々のインスタンスIDごとの詳細なメトリクスに加えて、全インスタンスの集約メトリクス（平均値など）も収集することを意味します
        - つまり、個別のインスタンスのメトリクスと、すべてのインスタンスを合わせたメトリクスの両方が得られます
        - これにより、全インスタンスの合計値や平均値などを簡単に確認できます

```shell
Do you want to aggregate ec2 dimensions (InstanceId)?
1. yes
2. no
default choice: [1]:
```

- 高解像度（分単位未満の解像度）でメトリクスを収集するか
    - CloudWatch Agentがメトリクスを収集する頻度を指定できます
    - 以下4つから選択できます
        - 1s
        - 10s
        - 30s
        - 60s
    - 頻度が高ければ高いほどより短期間の問題を検出でき、またより詳細なパフォーマンス分析が可能です
        - リアルタイムに近い監視が必要な、ミッションクリティカルなアプリケーションに適しています
    - ただ、CloudWatchのコストが大幅に上昇してしまう事や、EC2インスタンスのCPU/メモリリソースをひっ迫してしまうため、徒に頻度を小さくすることはよくありません
    - 本当にリアルタイムな監視が必要かどうかよく考えたうえで、1sや10sを選択しましょう

```shell
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]:
```

- どのデフォルトメトリクス設定を希望するか
    - CloudWatch Agentが収集するメトリクス（指標）の詳細度と範囲を指定します
    - CloudWatch Agentでは、事前に定義された以下3つのメトリクスから1つ選択できます
        - Basic
            - Basicは、最も重要な基本的なシステムメトリクスのみを収集します
            - これには主にCPU使用率、メモリ使用率、ディスク使用率などの基本的なメトリクスが含まれます
            - コスト効率が良く、最小限の監視に適しています
        - Standard
            - Basicのメトリクスに加えて、より詳細なシステムメトリクスを収集します
            - 例えば、個別のディスクIO統計やネットワークパフォーマンスなど、より多くのメトリクスが含まれます
            - 一般的な本番環境の監視に適しています
        - Advanced
            - Standardのメトリクスに加えて、さらに高度で詳細なシステムメトリクスを収集します
            - 例えば、プロセス単位のメトリクスやより細かいシステムリソースの詳細情報などが含まれます
            - 詳細なパフォーマンス分析やトラブルシューティングが必要な環境に適しています
    - 上記事前定義されたメトリクスの具体的な内容は以下をご参照ください
        - [CloudWatch エージェントの事前定義されたメトリクスセット](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html)
        - Linux/Windows Server、EC2/オンプレミスで場合分けされています
    - なお、Noneを選択すると、メトリクス収集が無効となります
        - ここまでの選択肢でメトリクスに関連する項目があった後の有効/無効なので
        - もう少し前にあってもいいのでは？と個人的に思いますが...

```shell
Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:
```

- 設定項目の再確認
    - ここまでのウィザードで設定した項目がjsonで表示されます
    - その内容で正しいかを確認し、問題なければ"1"を選択します

```shell
(略)
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]:
```

## Logsセクション
- 既存のCloudWatch Log Agent設定ファイルを移行用にインポートしますか？
    - かつて、CloudWatch logsにログを連携する際、CloudWatch **Logs** Agentが使用されていました
    - 現在はCloudWatch Agentに統合されています
    - この旧式であるCloudWatch Logs Agentを使用していた時代からCloudWatch Agentに移行する場合、ここで1を選択し、読み込ませる設定ファイルを指定することになります

```shell
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]:
```

- (CloudWatch Logs Agentの設定ファイルを読み込ませる場合)既存のCloudWatch Log Agent設定ファイルのファイルパスを指定
    - 前述の通りです

```shell
What is the file path for the existing cloudwatch log agent configuration file?
default choice: [/var/awslogs/etc/awslogs.conf]
```

- ログファイルを監視するか
    - CloudWatch Agentがシステムから特定のログファイルを収集し、CloudWatch Logsサービスに送信するかどうかを選択します

```shell
Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
```

- (ログファイルを収集する場合)ログファイルのパスを指定
    - 収集対象のログファイルのパスを指定します
    - なお、スーパーアスタリスクとして "**" を追加すると、標準 Unix glob マッチングルールが受け入れられます
        - たとえば、/var/log/**.log と指定すると .log ディレクトリツリー内のすべての /var/log ファイルが収集されます。
    - また、標準のアスタリスクを標準のワイルドカードとして使用することもできます
        - 例えば、/var/log/system.log* は、/var/log 内の、system.log_1111、system.log_2222 などのファイルに一致します
    - ファイルの変更時間に基づいて、最新のファイルのみが CloudWatch Logs にプッシュされます
        - access_log.2018-06-01-01 と access_log.2018-06-01-02 など同じ形式の一連のファイルを指定するにはワイルドカードの使用が推奨されます
        - ただし、access_log_80 と access_log_443 のように複数の種類のファイルには使用を目的としたものではありません
        - 複数の種類のファイルを指定するには、Agent設定ファイルに別のストリームログのエントリを追加して、各種類のログファイルが異なるログストリームに行くようにします

```shell
Log file path:
```

- (ログファイルを収集する場合)ロググループの名前を指定
    - 以下は"/var/log/messages"を指定した場合です
    - デフォルトは末尾のドットまでの"file_path"の値が使用されます
        - 例えば、ファイルパスが /tmp/TestLogFile.log.2017-07-11-14 の場合、ロググループ名は /tmp/TestLogFile.log です。
    - ロググループ名を指定する場合、{instance_id}、{hostname}、{local_hostname}、{ip_address} を変数として使用できます
        - {hostname} は EC2 メタデータからホスト名を取得し、{local_hostname} はネットワーク設定ファイルからホスト名を使用します
    - また、ここで使えるのは、a～z、A～Z、0～9、"_" (アンダーバー)、"-" (ハイフン)、"/" (スラッシュ) および "." (ピリオド) です

```shell
Log group name:
default choice: [messages]
```

- (ログファイルを収集する場合)ロググループクラスを指定
    - 以下2つのロググループのクラスを指定します
        - CloudWatch Logs 標準ログクラス
            - リアルタイムモニタリングが必要なログや頻繁にアクセスするログに対するフル機能のオプションです
        - CloudWatch Logs 低頻度アクセスログクラス
            - ログをコスト効率良く統合するために使用できる新しいログクラスです
            - 低頻度アクセスログクラスは、アクセス頻度の低いログのアドホッククエリや事後フォレンジック分析に最適です
    - ロググループクラスについて、詳細は以下をご参照ください
        - [ログクラス](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/CloudWatch_Logs_Log_Classes.html)

```shell
Log group class:
1. STANDARD
2. INFREQUENT_ACCESS
default choice: [1]:
```

- (ログファイルを収集する場合)ログストリームの名前を指定
    - デフォルトはインスタンスIDです
    - 名前及び名前の一部に、変数として {instance_id}、{hostname}、{local_hostname}、{ip_address} を使用することができます
        - {hostname} は、EC2 メタデータからホスト名を取得し、{local_hostname} は、ネットワーク設定ファイルからホスト名を使用します

```shell
Log stream name:
default choice: [{instance_id}]
```

- (ログファイルを収集する場合)ログの保持期間を指定
    - デフォルトは無期限(="-1")ですが、CloudWatch Logsの保存はコストが高いため、最小限にとどめておきましょう
    - なお、このロググループが既に存在している状態でこのフィールドを指定すると、指定した新しい保存期間が使用されます
        - 既に存在するロググループでこのフィールドを省略した場合、ロググループの保持は変更されません

```shell
Log Group Retention in days
1. -1
2. 1
3. 3
4. 5
5. 7
6. 14
7. 30
8. 60
9. 90
10. 120
11. 150
12. 180
13. 365
14. 400
15. 545
16. 731
17. 1096
18. 1827
19. 2192
20. 2557
21. 2922
22. 3288
23. 3653
default choice: [1]:
```

- (ログファイルを収集する場合)追加で監視したいログファイルはありますか？
    - 上記で設定したログファイル以外をCloudWatch Logsに連携したい場合は"1"を、他に連携したいログファイルがない場合は"2"を選択します
    - "1"を選択した場合は、ログファイルの指定からリスタートします

```shell
Do you want to specify any additional log files to monitor?
1. yes
2. no
default choice: [1]:
```

## トレースセクション
- CloudWatch AgentにX-Rayトレースも取得させるか
    - CloudWatch Agentの設定によって、X-Rayも収集設定することができるようになりました
    - AWS X-Rayとは
        - クラウドアプリケーションを支えるAWSリソースからトレースデータを収集し、詳細なトレースマップを生成するサービスです
        - このトレースマップは、クライアント、フロントエンドサービス、およびリクエストを処理しデータを永続化するためにフロントエンドサービスが呼び出すバックエンドサービスを表示します
    - X-Rayトレースの主な用途
        - リクエストトレーシングを通じてマイクロサービスアプリケーションのデバッグと分析を支援し、問題やパフォーマンスのボトルネックの根本原因を特定するのに役立ちます
    - CloudWatch AgentとX-Rayの統合メリット
        - CloudWatch Agentを使用すると、別のトレース収集デーモンを実行する必要なくトレースを収集できるため、実行および管理するAgentの数を減らすことができます
        - バージョン1.300025.0以降のCloudWatch Agentは、OpenTelemetryまたはX-Rayクライアントからのトレースを収集し、X-Rayに送信できます
    - **注意事項**
        - X-Rayを使用するには、アプリケーションコードにX-Ray SDKを実装するか、X-Rayと統合されたAWSサービスを使用する必要があることに注意してください
    - 詳細は以下をご参照ください
        - [CloudWatch 統合エージェントを使用した AWS X-Ray へのトレース送信](https://aws.amazon.com/jp/blogs/news/using-the-unified-cloudwatch-agent-to-send-traces-to-aws-x-ray-jp/)
        - [[アップデート] Amazon CloudWatch エージェントが X-Ray と OpenTelemetry のトレース収集機能をサポートしました](https://dev.classmethod.jp/articles/cloudwatch-agent-opentelemetry-traces-x-ray/)

```shell
Do you want the CloudWatch agent to also retrieve X-Ray traces?
1. yes
2. no
default choice: [1]:
```

- (X-Rayを有効化する場合)既存のX-Ray Daemonの設定ファイルを移行用にインポートするか
    - 既存のX-Ray Daemonの設定ファイルを持っていて、それをCloudWatch Agentに移行したいかどうかを指定します
    - 以前は、X-Ray Daemonを別々に設定して実行する必要がありましたが、最近のCloudWatch AgentはX-Ray Daemonの機能を統合し、単一の Agentでトレースの収集を行えるようになりました

```shell
Do you have an existing X-Ray Daemon configuration file to import for migration?
1. yes
2. no
default choice: [1]:
```

- (X-Rayを有効化する場合)X-Rayが使用するUDPポートを指定
    - X-Rayデーモンがトレースデータを受信するために使用するUDPポート番号を指定します

```shell
Which UDP port do you want XRay daemon to listen to?
default choice: [2000]
```

- (X-Rayを有効化する場合)X-Rayが使用するTCPポートを指定
    - ひとつ前と異なり、X-Rayデーモンがトレースデータを受信するために使用するTCPポート番号を指定します

```shell
Which TCP port do you want XRay daemon to listen to?
default choice: [2000]
```
- (X-Rayを有効化する場合)X-Rayデーモンのバッファサイズを指定
    - バッファサイズとは、X-Rayデーモンがトレースデータを一時的に保存するために使用するメモリの最大サイズ（MB単位）であり、最小値は3MBです
    - このバッファは、アプリケーションからのトレースデータを一時的に保存し、まとめてAWS X-Rayサービスにアップロードするために使用されます
    - バッファの仕組みについて
        - 各クライアントSDKは、トレースデータを直接X-Rayへ送信する代わりに、UDPトラフィックをリッスンしているデーモンプロセスにJSONセグメントドキュメントを送信します
        - X-Rayデーモンはセグメントをキューにバッファリングし、バッチでX-Rayにアップロードします
    - バッファサイズの選択に関する考慮事項
        - 小さいバッファサイズ（デフォルトの3MB）
            - メモリ使用量が少なくて済むメリットがあり、リソースが限られた環境に適しています
            - ただし、トラフィックが多い場合は小さすぎることがあります
        - 大きいバッファサイズ
            - 多くのトレースデータを生成するアプリケーションに適しており、一時的なネットワーク接続の問題があっても、より多くのデータを保持できます
            - ただし、メモリ使用量が増加するデメリットがあります

```shell
Enter Total Buffer Size in MB (minimum 3)
default choice: [3]
```

- (X-Rayを有効化する場合)セグメントドキュメントをアップロードするためのAWS X-Rayへの同時呼び出しの最大数を入力
    - CloudWatch AgentがX-Rayデーモンとして機能する際に、AWS X-Rayサービスにセグメントドキュメント（トレースデータ）をアップロードするために同時に行う最大呼び出し数を指定します
    - 同時呼び出しとは、X-Rayデーモンがバッファに蓄積したトレースデータをAWS X-Rayサービスに送信する際に、同時に開始できる並列アップロード処理の数を意味します
        - この値は、トレースデータの送信効率とサーバーリソースの使用のバランスに影響します
    - 選択の考慮事項
        - 低い値（例：1〜4）
            - リソース使用量が少なくなる事、ネットワーク帯域幅の使用が少なくなるメリットがあります
            - ただし、大量のトレースデータがある場合は処理が遅くなる可能性があります
        - デフォルト値（8）
            - ほとんどのアプリケーションにとって適切なバランスです
            - 一般的なトレース量を効率的に処理できます
            - 過度のリソース消費を防ぎながら、適切な応答性を提供します
        - 高い値（例：16以上）
            - トレースデータを大量に生成する高トラフィックアプリケーションに適しています
            - データをより迅速に送信できますが、より多くのリソースを消費します
            - 帯域幅が限られている環境では注意が必要です

```shell
Enter the maximum number of concurrent calls to AWS X-Ray to upload segment documents:
default choice: [8]
```
- (X-Rayを有効化する場合)CloudWatch AgentがX-Rayトレースデータを送信するAWSリージョンを指定
    - デフォルト(空)の場合、EC2インスタンスが実行されているリージョンが指定されます
    - 一方、複数システムのトレースデータを一つのリージョンで一括管理をしたい場合などの要件がある場合、特定のリージョンを指定します

```shell
Enter the AWS Region to send segments to AWS X-Ray service (Optional)
```
- (X-Rayを有効化する場合)X-Rayデーモンの詳細設定を更新
    - 追加設定がなければ0を入力すると設定画面から抜けられます
    - 設定可能な詳細設定は以下です
        - UDP BindAddress
            - 先ほど設定したUDPポートに加えて、IPアドレスも指定ができます
        - TCP BindAddress
            - 先ほど設定したTCPポートに加えて、IPアドレスも指定ができます
        - concurrency
            - 先ほど設定したX-Rayサービスへの同時アップロード呼び出し数の最大値を変更します
        - buffer_size_mb
            - 先ほど設定したトレースデータのバッファサイズ（MB単位）を変更します
        - resource_arn
            - デーモンを実行しているAWSリソースのARN（Amazon Resource Name）を指定します
        - local_mode
            - ローカルモードを有効/無効にします
            - ローカルモードでは、AgentはAmazon EC2インスタンスのメタデータを収集しません。
        - insecure
            - セキュアでない接続を許可するかどうかを指定します
            - 本番環境では通常は無効にします
        - role_arn
            - X-Rayへのアクセスに使用するIAMロールのARNを指定します。
        - endpoint_override
            - CloudWatch Agentがトレースを送信するエンドポイントとして使用するFIPSエンドポイントまたはプライベートリンクを指定します
            - このフィールドを指定してプライベートリンクを設定すると、Amazon VPC エンドポイントにトレースを送信できます
        - region_override
            - 先ほど設定したX-Rayサービスのリージョンを上書きします
        - proxy_override
            - プロキシ設定を上書きします。プロキシ経由でX-Rayにアクセスする場合に使用します

```shell
(略)
Enter a number of the field you would like to update (or 0 to exit)
0: Keep this configuration and exit
1: UDP BindAddress
2: TCP BindAddress
3: concurrency
4: buffer_size_mb
5: resource_arn
6: local_mode
7: insecure
8: role_arn
9: endpoint_override
10: region_override
11: proxy_override
```

- jsonファイルの中身の確認と設定値をSSMパラメータに保存するか
    - 設定ファイルは以下に保存されています
        - "/opt/aws/amazon-cloudwatch-agent/bin/config.json"
    - ローカルにファイルとして保存する上記のほか、同一設定を複数のサーバーで使用したい場合、SSMパラメータストアに設定を保存し、使いまわすことが可能です
        - この場合、SSMパラメータストアに保存するために以下IAMロールが必要です
            - CloudWatchAgentAdminPolicy

```shell
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]:
```

## 全部設定した場合
- ウィザードの全体
<details><summary>ウィザードの全体像</summary>

```
[root@ip-10-0-1-120 ~]# /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
================================================================
= 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.                                           =
================================================================
On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [1]:

Trying to fetch the default region based on ec2 metadata...
I! imds retry client will retry 1 timesAre you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:

Which user are you planning to run the agent?
1. cwagent
2. root
3. others
default choice: [1]:

Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:

Which port do you want StatsD daemon to listen to?
default choice: [8125]

What is the collect interval for StatsD daemon?
1. 10s
2. 30s
3. 60s
default choice: [1]:

What is the aggregation interval for metrics collected by StatsD daemon?
1. Do not aggregate
2. 10s
3. 30s
4. 60s
default choice: [4]:

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]:

Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:

Do you want to monitor cpu metrics per core?
1. yes
2. no
default choice: [1]:

Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
1. yes
2. no
default choice: [1]:

Do you want to aggregate ec2 dimensions (InstanceId)?
1. yes
2. no
default choice: [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]:

Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:

Current config as follows:
{
        "agent": {
                "metrics_collection_interval": 60,
                "run_as_user": "cwagent"
        },
        "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
                        },
                        "disk": {
                                "measurement": [
                                        "used_percent"
                                ],
                                "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"
                        }
                }
        }
}
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]:

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]:

Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:

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

Log group class:
1. STANDARD
2. INFREQUENT_ACCESS
default choice: [1]:

Log stream name:
default choice: [{instance_id}]

Log Group Retention in days
1. -1
2. 1
3. 3
4. 5
5. 7
6. 14
7. 30
8. 60
9. 90
10. 120
11. 150
12. 180
13. 365
14. 400
15. 545
16. 731
17. 1096
18. 1827
19. 2192
20. 2557
21. 2922
22. 3288
23. 3653
default choice: [1]:

Do you want to specify any additional log files to monitor?
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]:

Do you have an existing X-Ray Daemon configuration file to import for migration?
1. yes
2. no
default choice: [1]:
2
Which UDP port do you want XRay daemon to listen to?
default choice: [2000]

Which TCP port do you want XRay daemon to listen to?
default choice: [2000]

Enter Total Buffer Size in MB (minimum 3)
default choice: [3]

Enter the maximum number of concurrent calls to AWS X-Ray to upload segment documents:
default choice: [8]

Enter the AWS Region to send segments to AWS X-Ray service (Optional)

Current Traces Configurations:
{
        "traces": {
                "traces_collected": {
                        "xray": {
                                "bind_address": "127.0.0.1:2000",
                                "tcp_proxy": {
                                        "bind_address": "127.0.0.1:2000"
                                }
                        }
                },
                "concurrency": 8,
                "buffer_size_mb": 3,
                "insecure": false
        }
}
Enter a number of the field you would like to update (or 0 to exit)
0: Keep this configuration and exit
1: UDP BindAddress
2: TCP BindAddress
3: concurrency
4: buffer_size_mb
5: resource_arn
6: local_mode
7: insecure
8: role_arn
9: endpoint_override
10: region_override
11: proxy_override

0
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": "cwagent"
        },
        "logs": {
                "logs_collected": {
                        "files": {
                                "collect_list": [
                                        {
                                                "file_path": "/var/log/messages",
                                                "log_group_class": "STANDARD",
                                                "log_group_name": "messages",
                                                "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
                        },
                        "disk": {
                                "measurement": [
                                        "used_percent"
                                ],
                                "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"
                        }
                }
        },
        "traces": {
                "buffer_size_mb": 3,
                "concurrency": 8,
                "insecure": false,
                "traces_collected": {
                        "xray": {
                                "bind_address": "127.0.0.1:2000",
                                "tcp_proxy": {
                                        "bind_address": "127.0.0.1:2000"
                                }
                        }
                }
        }
}
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.
[root@ip-10-0-1-120 ~]#
```

</details>

- 設定ファイルの全体
<details><summary>設定ファイルの全体</summary>

```
{
    "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": "messages",
                                            "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
                    },
                    "disk": {
                            "measurement": [
                                    "used_percent"
                            ],
                            "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"
                    }
            }
    },
    "traces": {
            "buffer_size_mb": 3,
            "concurrency": 8,
            "insecure": false,
            "traces_collected": {
                    "xray": {
                            "bind_address": "127.0.0.1:2000",
                            "tcp_proxy": {
                                    "bind_address": "127.0.0.1:2000"
                            }
                    }
            }
    }
}
```

</details>

# 参考
- [CloudWatch エージェントをインストールする](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-on-EC2-Instance.html)
- [サーバーで CloudWatch エージェントをインストールおよび実行する](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html)
- [CloudWatch エージェント設定ファイルを手動で作成または編集する](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html)
- [CloudWatch エージェント設定ファイルを作成する](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file.html)
- [ウィザードを使用して CloudWatch エージェント設定ファイルを作成する](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html)
- [CloudWatchagentの設定ファイルを手動で設定してみた。](https://qiita.com/kiyomura10/items/bf3528e8c29a1d4aa72e)
- [AWS Systems Manager のパラメータストアを利用した Cloudwatch Agent の設定をやってみた（Windows 編）](https://dev.classmethod.jp/articles/ssm-cloudwatch-agent-parameter-store-run-commmand-setting-method-windows-ver/)
- [AmazonLinux2023にCloudWatchAgentをパラメータストアも使用してSSMで設定する](https://qiita.com/hiren/items/c2c11f069d317715c3b3)