EC2 + CloudWatch サーバのディスク使用率をモニタリングする方法


## はじめに

この記事はEC2＋CloudWatchでEC2のディスク使用率をモニタリングする方法について記述します。

### 環境
OS: AmazonLinux2023

EC2のディスク使用率をモニタリングするためにはCloudWatchのメトリクス中でも「カスタムメトリクス」使用する必要があります。以下は設定完了までの全体の流れです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256444/1c377998-5e08-4eaa-8425-d3a4bb0b3fcc.png)

### メトリクスって何？

:::note info
メトリクスとは？

システムの状態を数値で表したデータです。主にパフォーマンスのモニタリングや分析のために使用され、時間の経過に伴って収集されたデータにの推移を把握することができます。
:::

### メトリクスの種類


| 種類               | 説明                                           | 例                              |
| ------------------ | ---------------------------------------------- | ------------------------------- |
| 標準メトリクス      | AWSサービスがデフォルトで提供するメトリクス       | EC2のCPU使用率、RDSのディスクI/Oなど   |
| カスタムメトリクス  | ユーザーが自分で定義して収集するメトリクス       | ディスク使用率、リクエスト応答時間、メモリ使用率など   |



## 作業フロー
1. CloudWatch Agent設定
2. IAM Role作成
3. EC2のIAM Role設定
4. CloudWatchのアラート設定

## CloudWatch Agent設定

### CloudWatch Agentインストール

カスタムメトリクスをCloudWatchに提供するためにはCloudWatch Agentが必要です。
EC2にCloudWatch Agentを入れましょう。

``` EC2.AmazonLinux2023
sudo yum install amazon-cloudwatch-agent
```

### amazon-cloudwatch-agent.json設定

``` /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
{
  "metrics": {
    "metrics_collected": {
      "disk": {
        "measurement": [
          "used_percent"
        ],
        "resources": [
          "/"
        ],
        "ignore_file_system_types": [
          "sysfs", "tmpfs"
        ]
      }
    }
  }
}
```

`resources`はモニタリングしたいディレクトリを設定します。
今回はルートディレクトリを設定しました。

### amazon-cloudwatch-agent.json設定を適用する

``` EC2.AmazonLinux2023
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
-a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json -s
```

### amazon-cloudwatch-agent.service再起動
``` EC2.AmazonLinux2023
sudo systemctl restart amazon-cloudwatch-agent.service
```

### amazon-cloudwatch-agent.service状態確認
``` EC2.AmazonLinux2023
sudo systemctl status amazon-cloudwatch-agent.service
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256444/0933911d-d17a-4feb-a320-2be46060cf7d.png)


これでEC2側からCloudWatchにディスク容量のデータを送れるようになりました！


### ログを見て動作を確認する

:::note alert
EC2がCloudWatchにアクセスできるようにIAM Role設定をしないと、EC2からスタムメトリクスのデータを提供することができません。
:::
以下はエラーログです。

``` /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
status code: 404, request id:
2025-02-27T08:32:42Z W! cloudwatch: 1665 retries, going to sleep 41008 ms before retrying.
2025-02-27T08:33:23Z E! cloudwatch: WriteToCloudWatch failure, err:  NoCredentialProviders: no valid providers in chain
caused by: EnvAccessKeyNotFound: failed to find credentials in the environment.
SharedCredsLoad: failed to load profile, .
EC2RoleRequestError: no EC2 instance role found
caused by: EC2MetadataError: failed to make EC2Metadata request
```

## IAM Role設定
EC2からカスタムメトリクス情報を渡すためにはそのための権限が必要です。
そのための権限を集めたものをIAM Roleとして作成します。

1. IAMのダッシュボードに移動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256444/a00df911-6dff-4525-a0b8-797c6f933ced.png)

2. ロール管理画面に移動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256444/7c76a9e7-6deb-4d52-b804-75a2022906fa.png)

3. ロールを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256444/7c17da75-4153-4dac-8975-d64c20afaa83.png)

4. ポリシーを追加
![스크린샷 2025-04-10 16.25.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256444/1fad261f-9095-43fe-8fcb-dd4403f7896c.png)
![스크린샷 2025-04-10 16.25.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256444/5d51b04e-1805-48b2-8ff1-86636aca89ff.png)

5. IAM Role名を記入して作成完了します

それではEC2に今作ったIAM Roleをアタッチしましょう


## EC2のIAM Role設定

1. モニタリングしたいEC2インスタンスに移動
2. アクションでIAMロール変更をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256444/fac01525-a2c8-4a6b-8fb5-67d997e3153e.png)
3. IAMロールをアタッチする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256444/064b506f-0ded-4639-a95f-e0f7796fafe7.png)

これでEC2→CloudWatchへカスタムメトリクス情報を渡せるようになりました。

## CloudWatchのアラート設定

1. CloudWatchの全てのアラート管理画面に移動します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256444/d62fe099-5086-4233-9ecd-c4c6b6367f22.png)

2. アラート作成、メトリクス選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256444/4711cd2c-efd3-4310-ad74-476d5aec0485.png)

3. CWAgent(CloudWatchAgent)クリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256444/a81aec98-f053-437e-8c56-7d4a479e9ba5.png)

モニタリングしたいEC2を選択します。

あとは、
しきい値設定
アラート名設定
アラート宛先設定
をすると完了です！

EC2からディスク容量情報をもらい、モニタリングできるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256444/e5cf11fa-7e75-4b27-835f-8c19968754fc.png)