CloudWatchagentの設定ファイルを手動で設定してみた。

```json:CloudWatchagent.cfg
{
    "agent": {
        "metrics_collection_interval": 60,
        "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log"
    },
    "metrics": {
        "append_dimensions": {
            "InstanceId": "${aws:InstanceId}"
        },
        "metrics_collected": {
            "mem": {
                "measurement": [
                    "mem_used_percent"
                ],
                "metrics_collection_interval": 60
            },
            "disk": {
                "measurement": [
                    "used_percent"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "/"
                ]
            },
            "procstat": [
                {
                    "pattern": "sshd",
                    "measurement": [
                        "pid_count"
                    ]
                }
            ]
        }
    }
}

```

CloudWatch エージェント設定ファイルは手動で作成する方法とウィザードをしようして対話的に設定する方法があります。

最初はウィザードで設定する方が簡単ですがなれてきたら手動で作成する方が素早く設定ファイルが作成できます。手動といってもほとんどChatGPTで作成することが可能です。　

# 設定ファイルの作成方法

Linuxの場合、設定ファイルは/opt/aws/amazon-cloudwatch-agent/etc/ディレクトリ内に配置されることが多いです。設定ファイルを作成して前述のディレクトリ内に配置します

## 設定ファイルの構造

設定ファイルはJSONで記述されており、大きく分けると以下の４項目になります。
agent、metrics、logs、traces

・agent：エージェント全体の設定をおこないます。
・metrics：収集するメトリクスに関する設定。
・logs: ログの収集に関する設定
・traces：AWS X-Ray に送信されるトレースのソースを指定

今回の設定ではAWS X-Ray にトレースデータを送信しないのでtracesは不要となります。具体的に以下の３項目の設定を見ていきましょう。
・agent
・metrics
・logs


### agent
agentはエージェント全体の設定を行うのでした。具体的には以下のような設定があります。

・metrics_collection_interval: メトリクス収集の間隔（秒）。
・run_as_user: エージェントを実行するユーザー名。
・region: エージェントがデータを送信するAWSリージョンを指定します。指定しない場合はEC2 インスタンスが配置されているリージョンにメトリクスを送信します。

### metrics
metricsは収集するメトリクスに関する設定を定義します。具体的には以下のような設定があります。

・namespace: メトリクスを送信するCloudWatchのネームスペース。ネームスペースはCloudWatch内でメトリクスを分類・整理する機能。
・append_dimensions: メトリクスに追加するディメンションを指定します。
・aggregation_dimensions: メトリクスを集約するためのディメンションのセットを指定
・metrics_collected: 収集するメトリクスの種類とそれに関する設定を指定します

### procstat プラグインを使用するには
CloudWatch エージェント設定ファイルの procstat セクションに metrics_collected セクションを追加します。
プロセスを指定するには３つの方法がありますが、使用できるのは１つまでです。

プロセスを収集するには以下３つの方法があります。
**pid_file**: 作成するプロセス識別番号 (PID) ファイルの名前でプロセスを選択します。
**exe**: 正規表現の照合ルールを使用して、指定した文字列と一致するプロセス名のプロセスを選択します。照合した　　　　もじを含むプロセスを選択するので注意が必要です。
**pattern**: プロセスの起動に使用するコマンドラインでプロセスを選択します。正規表現の照合ルールを使用して指定した文字列と一致するコマンドラインを持つすべてのプロセスが選択されます。


## Procstat とは？
Linuxでは、/proc 配下にシステム上のリソース情報があります。


### logs

・logs_collected:サーバーから収集するログファイルやWindows イベントログを指定します。今回はLinuxの監視設定ですのでログファイルを指定します。
・files: ログファイルを指定します。collect_listを含みます。
・collect_lis: ログファイルについて詳細に記載します。
・file_path：CloudWatchlogsに送信するログファイルのパスを指定します。
  

ディメンションとは
ディメンションは、データを特定の文脈で分類または分割するための属性や特性を指します。特に、Amazon CloudWatchや他の監視システムにおいては、ディメンションはメトリクス（測定データ）に関連付けられるキーと値のペアで、そのメトリクスの特定の側面や特性を表します。



より詳細な設定方法はAWS公式サイトが分かりやすいです
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html#CloudWatch-Agent-Configuration-File-Logssection

## 設定ファイルの手動での設定方法

### 1CloudWatchagentのインストール

RunCommandを選択してコマンドを実行するをクリックします。
以下を指定して実行します。

・コマンドのドキュメント: AWS-ConfigureAWSPackage
```
・Action: install
・Name: AmazonCloudWatchAgent
・Version: latest
```
![2024-01-24_16h11_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622891/966a17fb-9a1d-87f2-7d32-0fca30d9ed8a.png)

### ２パラメータストアにCloudWatchagentの設定ファイルを設置
パラメータストアにCloudWatchagentの設定を追加します。追加することで一度に複数のEC2にパラメータを設定することができて便利です。

### ３CloudWatch Agentに設定反映
以下の設定でRun Commandを実行する
コマンドドキュメントは「AmazonCloudWatch-ManageAgent」
パラメータ	値
```
Action	configure
Mode	ec2
Optional Configuration Source	ssm
Optional Configuration Location	AmazonCloudWatch-Param1
```

configureを設定することで既存の設定を上書きします。

コマンドの実行が終了したらCloudWatchからメトリクスが取得できているか確認します。



以下参考記事

https://dev.classmethod.jp/articles/amazoncloudwatch-manageagent-ssm-run-command/

https://ops.jig-saw.com/tech-cate/amazon-cloudwatch-setup

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

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-common-scenarios.html#CloudWatch-Agent-multiple-config-files

https://blog.serverworks.co.jp/find-cloudwatch-agent

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/troubleshooting-CloudWatch-Agent.html#CloudWatch-Agent-troubleshooting-update-no-new-metrics

https://repost.aws/ja/knowledge-center/cloudwatch-push-metrics-unified-agent

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-on-EC2-Instance-fleet.html