CloudWatchを利用したNginxのプロセス監視方法

# 手順
以下の手順に沿って実施することでCloudWatchを利用したプロセス監視を設定することが可能。
1. IAMポリシー、IAMロールの設定
2. Systems Manager(Run Command)によるCloudWatchエージェントインストール
3. CloudWatchエージェントの設定ファイル作成
4. Systems Manager(Run Command)による設定ファイル反映、CloudWatchエージェント起動
5. プロセス監視の閾値設定

## 1. IAMポリシー、IAMロールの設定
監視対象のEC2インスタンスに対して、以下のIAMポリシーが紐づくIAMロールを設定する。
- CloudWatchAgentServerPolicy
- AmazonSSMManagedInstanceCore

### 補足
IAMポリシー「AmazonSSMManagedInstanceCore」は、Systems ManagerのRun Commandを利用しEC2インスタンスにcloudwatchエージェントをインストールするために必要。
IAMポリシー「CloudWatchAgentServerPolicy」は、CloudWatchにメトリクスを書き込むために必要となる。
監視対象のEC2インスタンスにて「amazon-cloudwatch-agent-config-wizard」コマンドを利用して作成した設定ファイルをパラメータストアに配置する場合、IAMポリシー「CloudWatchAgentAdminPolicy」もIAMロールに紐づける必要がある。
 

## 2. Systems Manager(Run Command)によるCloudWatchエージェントインストール
Run Commandにて以下を設定した上で「実行」を押下する。
以下、設定を行う上で特に注意する箇所について設定値を記載する。
### コマンドドキュメント
名前：「AWS-ConfigureAWSPackage」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/d4ee7e7d-5d3c-e607-3e19-6d0e9e8b72ec.png)

### コマンドのパラメータ
Name：「AmazonCloudWatchAgent」
Version：「latest」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/fceb505c-92e8-6e28-5af0-a87f66854418.png)

### ターゲット
監視対象のEC2インスタンスを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/7cba2ad5-3529-beae-39ef-db9ff9019c6b.png)

### 出力オプション
要件がなければチェックを外す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/a037a0c3-e60d-ac16-40f2-4742dd131f2b.png)

## 3. CloudWatchエージェントの設定ファイル作成
パラメータストアでCloudWatchAgentで利用するための設定ファイルを手動作成する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/142d69c8-087b-9a6b-3f54-469a677e1b00.png)

値は以下を参照。
```
{
    "metrics": {
        "metrics_collected": {
            "procstat": [
                {
                    "pid_file": "/var/run/nginx.pid",
                    "measurement": [
                        "pid_count"
                    ],
                    "metrics_collection_interval": 60
                }
            ]
        }
    }
}
```

### 補足
監視対象のEC2インスタンスにて、amazon-cloudwatch-agent-config-wizardコマンドでも設定ファイルを作成することは可能。
しかし、簡易的な設定ファイルの場合は、パラメータストアで作成する方が楽であると考え、当手順ではその方法を利用しないで進めている。


## 4. Systems Manager(Run Command)による設定ファイル反映、CloudWatchエージェント起動
Run Commandにて以下を設定した上で「実行」を押下する。
以下、設定を行う上で特に注意する箇所について設定値を記載する。
### コマンドドキュメント
名前：「AmazonCloudWatch-ManageAgent」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/c60b415a-5310-3a03-19dc-5654d1c6f918.png)
### コマンドのパラメータ
Action： 「configure」
Optional Configuration Location：「nginx-process」※任意の値にすること
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/30f932c3-7afb-480f-cf6d-8d447aaddbd3.png)

### 補足
#### Cloudwatchエージェントステータス確認
実行後、EC2インスタンスにてCloudwatchエージェントのステータスを確認すると起動で表示される。
```
[root@ip-10-0-1-240 ~]# sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
{
  "status": "running",
  "starttime": "2022-12-31T07:32:23+0000",
  "configstatus": "configured",
  "version": "1.247357.0b252275"
}
```
#### エラー「RequestError: send request failed」
CloudWatchエージェントログ「/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log」を確認した際に以下のエラーが表示されている場合、CloudwatchエージェントとCloudWatch側で通信出来ていないため、VPCエンドポイント「com.amazonaws.ap-northeast-1.monitoring」を作成する必要がある。このVPCエンドポイントはインターフェース型であるため、セキュリティグループの設定が必要となる。インバウンドルールのポート番号は「TCP:443」、ソースは、監視対象のEC2インスタンスのサブネットIP又はセキュリティグループを指定することで疎通可能となる。
```
2022-12-31T03:24:03Z E! cloudwatch: WriteToCloudWatch failure, err:  RequestError: send request failed
caused by: Post "https://monitoring.ap-northeast-1.amazonaws.com/": dial tcp 52.119.222.42:443: i/o timeout
```

#### CloudWatchによるメトリクス確認
上記「4. Systems Manager(Run Command)による設定ファイル反映、CloudWatchエージェント起動」設定後、しばらくするとCloudWatchによりメトリクスが設定される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/719c5a11-79d2-1d0e-0cd3-2f5becefc172.png)

## 5. プロセス監視の閾値設定
CloudWatchによりアラーム設定を行う。
![2022-12-31 16_52_37-CloudWatch Management Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/3e315b7c-95c5-ca99-4bf2-a9f8a77390b0.png)
![2022-12-31 16_52_56-CloudWatch Management Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/78f32dad-b154-60ab-7555-e946b321ab31.png)

上記「4. Systems Manager(Run Command)による設定ファイル反映、CloudWatchエージェント起動」設定後に反映されたメトリクスを選択する。
![2022-12-31 16_53_06-CloudWatch Management Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/2f88d6be-ab8c-8c50-7669-9b4c27dc023e.png)
![2022-12-31 16_53_19-CloudWatch Management Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/c56b7634-59f2-b1ff-63ca-f7c8a41a18c2.png)
![2022-12-31 16_53_46-CloudWatch Management Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/bf38c604-22b8-57de-8550-c61493c8f84b.png)
![2022-12-31 16_54_38-CloudWatch Management Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/ada05330-fd0d-1612-8a7c-3ca4887a73a8.png)
![2022-12-31 16_55_59-2-CloudWatch Management Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/357478ed-a352-3989-0f44-b46d89e01181.png)

あらかじめSNSトピック、サブスクリプションを作成した上で選択する。
![2022-12-31 17_00_59-CloudWatch Management Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/d328ee0d-b4e3-922b-c102-09e7bb3c9c4c.png)
![2022-12-31 17_01_18-CloudWatch Management Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/cc036b59-e6ee-dcd8-de2a-0974e2804d3e.png)
![2022-12-31 17_01_42-CloudWatch Management Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/e487800e-0ff2-dc32-dc6d-fb9adc62c85d.png)
![2022-12-31 17_02_01-CloudWatch Management Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/68b5226d-080b-aaf2-d640-4d944702a6a1.png)
![2022-12-31 17_02_07-CloudWatch Management Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/6ac328d2-0987-9be0-e6eb-6fa121f48b82.png)
![2022-12-31 17_02_16-CloudWatch Management Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/db394782-0c87-d092-830f-35680d15c1da.png)
![2022-12-31 17_02_25-CloudWatch Management Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/3db4b1c8-f3f5-2db0-1101-aaa3c10ab08b.png)

## 役立ちコマンド
### Cloudwatchエージェントのステータス確認
```
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
```

### Cloudwatchエージェントの実行ログ確認
```
tail -f /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
```

## 参考
https://dev.classmethod.jp/articles/private-cloudwatch-agent/

https://www.site24x7.jp/blog/cloudwatch-process-monitoring/

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