CloudWatchAgentをインストールしてみる

## EC2にCloudWatchエージェントをインストール方法
インストール方法は2種類あります。
- CLIからのインストール
- SystemManagerを使用してインストール

CLIでインストールしてみようと思います。
気が向いたらSystemManageからもやるかも

## IAMロールの作成

はじめにインスタンスにアタッチされた**IAM ロール**に **CloudWatchAgentServerPolicy**がアタッチする必要があります。

信頼されたエンティティタイプをAWSサービスを選択
ユースケースをEC2選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636718/17a035a1-f455-2168-34fa-1b4b2b3a5d87.png)

CloudWatchAgentServerPolicyで検索してチェックボックスにチェックを入れる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636718/8f9f541a-fc86-2127-8460-ae4b8903cf8b.png)

ロール名と説明を記入する
説明はでデフォルトで記入されてます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636718/a24903d5-7d81-6316-5e9a-fee2884bdcf8.png)

CloudWatch エージェントによるログの保持ポリシーの設定を許可をする
先ほど作成したロール名で検索してポリシー名をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636718/d523af8b-4cb8-3a36-4d5e-03c80195391e.png)

許可タブから許可を追加からインラインポリシーの作成をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636718/f66d4505-1e05-4e29-6ff7-5ad640dd186b.png)

ビジュアルタブから設定する場合PutRetentionPolicyにチェックを入れる
リソースを全てにチェックを入れる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636718/84b257c9-9927-2b18-6638-7d584e063798.png)

JSONから設定する場合はJSONタブを押して以下をコピペする
```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "logs:PutRetentionPolicy",
      "Resource": "*"
    }
  ]
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636718/35d15e8e-6a1f-5f7e-6559-8a3da39d15e1.png)

これでCloudWatchAgentのIAMロールにログの保持ポリシーを設定するための許可を付与できました。
あとはEC2にアタッチするだけ

## CLIからインストールしてみる
amazon linux 2を使用している場合は以下のコマンドインストール
```bash
sudo yum install amazon-cloudwatch-agent
```

念のため`yum list installed | grep amazon-cloudwatch-agent`をしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636718/6aaf2386-6d80-b3d2-9db0-fb611d8b410c.png)


## ウィザードを使用してCloudWatchエージェント設定ファイルを作成する

以下のコマンドを実行
```
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
```

- エージェントを Amazon EC2 インスタンスとオンプレミスサーバーのどちらにインストールするか。
- サーバーで Linux と Windows Server のどちらが実行されているか。
- エージェントがログファイルを CloudWatch Logs に送信するようにするか。持っている場合は､既存の CloudWatch Logs エージェント設定ファイルを持っているか。持っている場合､CloudWatch エージェントは､このファイルを使用してサーバーから収集するログを判別できます。
- エージェントがログファイルを CloudWatch Logs に送信する場合、それらのログファイルを保持する必要がある期間。デフォルト値の -1 にすると、ログアイテムは無期限に保持されるように設定されます。
- サーバーからメトリクスを収集する場合は、デフォルトのメトリクスセットの 1 つを監視するか、収集するメトリクスのリストをカスタマイズしますか。
- StatsD または collectd プロトコルを使用して、アプリケーションまたはサービスからカスタムメトリクスを取得しますか。
- 既存の SSM Agent から移行しますか?
などが聞かれます。

collectdのインストールをする
configはstandardで監視するファイルは/var/log/messagesを監視
パラメータストアには登録しません。

##　実際にいろいろなメトリクスを見てみる
CloudWatchからメトリクスを見てみるとconfigをstandardにしたのでメモリ使用率や使用量が見れるはずなのにない
CloudWatchAgentが起動しているか見てみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636718/742284b8-2f0a-b72f-d21c-8b791ba01f82.png)

どうやら起動していないっぽいので起動してみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636718/2b6ba08b-4da7-5b7e-7ef8-14d12ff126fc.png)
開始してすぐに停止しているのでログを見てみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636718/84d3d417-0d5c-1390-8798-027e01f1ab50.png)

エラー内容を見るとjsonコンフィグファイルが存在しないまたは読み込めないと言われている

lsで実際に見てみる
```
[ec2-user@ip-10-0-0-38 ~]$ ls -l /opt/aws/amazon-cloudwatch-agent/etc/
total 4
drwxr-xr-x. 2 root root   6 Jul 18 21:53 amazon-cloudwatch-agent.d
-rw-r--r--. 1 root root 925 Jul 18 21:53 common-config.toml
```
どうやら設定ファイルであるjsonがなさげということが分かった

調べた結果```sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s```
で行けたけど`systemctl status amazon-cloudwatch-agent`をするとjsonコンフィグがないとないってる


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636718/9bbcbc26-c0a5-7aae-4d5d-56078bd2c674.png)

起動したけどCloudWatchAgentの項目がない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636718/66ead7ee-74f9-1bd1-a099-aac4464434f8.png)

```
2023-08-26T13:25:24.936Z        warn    ec2tagger/ec2tagger.go:495      ec2tagger: Unable to describe ec2 tags for initial retrieval    {"kind": "processor", "name": "ec2tagger", "pipeline": "metrics/host", "error": "UnauthorizedOperation: You are not authorized to perform this operation.\n\tstatus code: 403, request id: 33de39c8-55a4-4993-b071-4705b158252a"}
```

どうやら権限がなくEC2のタグが読み込めないエラーが出ていたので、EC2のタグを削除したらCWagentが表示されるようになった

## 参照
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/download-cloudwatch-agent-commandline.html

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

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