CloudWatchのカスタムメトリクスを使用して、Linux EC2のメモリ使用率を監視


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

カスタムメトリクスとは、EC2インスタンスに対する監視(モニタリング)において、CloudWatchの標準モニタリング(5分間隔/無償)および詳細モニタリング(1分間隔/有償)以外で、独自に設定できる監視項目設定のことです。

今回は、CloudWatch エージェントを利用して、LINUXのカスタムメトリクスを監視する方法を紹介します。

前提

IAMロール作成/アタッチ

IAMロールを下記ポリシーで作成して、対象EC2にアタッチします。
必要なポリシー:
cloudwatch:PutMetricData
ec2:DescribeTags

メトリクス設定ファイル作成

ローカルで下記内容のjsonファイルを作成します。

監視内容例:
CPUユーザ使用率、CPUシステム使用率、SWAP使用率、ディスク使用率、メモリ使用率

amazon-cloudwatch-agent.json

{
    "agent": {
        "metrics_collection_interval": 300,    // 間隔
        "run_as_user": "root"                  // 実行ユーザ
    },
    "metrics": {
        "append_dimensions": {
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
            "ImageId": "${aws:ImageId}",
            "InstanceId": "${aws:InstanceId}",
            "InstanceType": "${aws:InstanceType}"
        },
        "metrics_collected": {
            "cpu": {
                "measurement": [
                    "cpu_usage_user",     // CPUユーザ使用率
                    "cpu_usage_system"        // CPUシステム使用率
                ],
                "metrics_collection_interval": 300,
                "resources": [
                    "*"
                ],
                "totalcpu": false
            },
            "disk": {
                "measurement": [
                    "used_percent"            // ディスク使用率
                ],
                "metrics_collection_interval": 300,
                "resources": [
                    "*"
                ]
            },
            "diskio": {
                "measurement": [
                    "io_time"                 // ディスクio
                ],
                "metrics_collection_interval": 300,
                "resources": [
                    "*"
                ]
            },
            "mem": {
                "measurement": [
                    "mem_used_percent"         // メモリ使用率
                ],
                "metrics_collection_interval": 300
            },
            "processes": {
                "measurement": [
                    "processes_blocked"        // ブロックされているプロセス数
                ],
                "metrics_collection_interval": 300
            },
            "swap": {
                "measurement": [
                    "swap_used_percent"        // SWAP使用率
                ],
                "metrics_collection_interval": 300
            }
        }
    }
}

CloudWatchエージェント作成

対象EC2の接続、CloudWatchエージェントのインストール

RPMダウンロードURL:
https://s3.amazonaws.com/amazoncloudwatch-agent/redhat/amd64/latest/amazon-cloudwatch-agent.rpm
対象EC2を接続して、rootユーザに変更します。
ダウンロードしたRPMファイルを/tmpディレクトリに格納して、実行します。

[ec2-user@ip-10-0-4-204 ~]$ sudo su -
[root@ip-10-0-4-204 ~]# cd /tmp
[root@ip-10-0-4-204 tmp]# rpm -U ./amazon-cloudwatch-agent.rpm
create group cuagent, result: 0
create user cuagent, result: 0

メトリクス設定ファイルの格納

メトリクス設定ファイルを/tmpに格納します。

設定ファイル権限変更

[root@ip-10-0-4-204 tmp]# chmod 755 amazon-cloudwatch-agent.json

CloudWatchエージェントの起動

[root@ip-10-0-4-204 tmp]# sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/tmp/amazon-cloudwatch-agent.json -s
/opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --download-source file:/tmp/amazon-cloudwatch-agent.json --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default
Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_amazon-cloudwatch-agent.json.tmp
Start configuration validation...
/opt/aws/amazon-cloudwatch-agent/bin/config-translator --input /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --input-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --output /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default
2020/11/09 03:23:32 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_amazon-cloudwatch-agent.json.tmp ...
Valid Json input schema.
I! Detecting runasuser...
No csm configuration found.
No log configuration found.
Configuration validation first phase succeeded
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
Configuration validation second phase succeeded
Configuration validation succeeded
Redirecting to /bin/systemctl stop amazon-cloudwatch-agent.service
Redirecting to /bin/systemctl restart amazon-cloudwatch-agent.service

CloudWatchエージェント状態の確認

[root@ip-10-0-4-204 tmp]# systemctl status amazon-cloudwatch-agent
● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
   Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-11-09 01:34:31 UTC; 1min 23s ago
 Main PID: 1420 (amazon-cloudwat)
   CGroup: /system.slice/amazon-cloudwatch-agent.service
           mq1420 /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml -envconfig /opt/aws/amazon-cloudwatch-agent/etc/env-config.json -pidfile /opt/aws...

Nov 09 01:34:31 ip-10-0-4-204.ap-northeast-1.compute.internal systemd[1]: Started Amazon CloudWatch Agent.
Nov 09 01:34:31 ip-10-0-4-204.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[1420]: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json does not exist or cannot read. Skipping it.
Nov 09 01:34:31 ip-10-0-4-204.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[1420]: Valid Json input schema.
Nov 09 01:34:31 ip-10-0-4-204.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[1420]: I! Detecting runasuser...

CloudWatchエージェントより送信されたカスタムメトリクスのイメージを確認します。
file

あとがき

以上はLinuxの設定ですが、Windowsの方は下記リンクに記載しています。
https://cloud5.jp/metrics-monitoring-windows/

Last modified: 2024-02-02

Author