【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

Amazon CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順について解説します。

 

以下は、以前 CloudWatch の各種メトリクスについて解説した記事です。

 

【AWS】【CloudWatch】各種メトリクスの解説(障害対応に役立つ)

 

 

Amazon CloudWatch のデフォルトメトリクスだけではメモリ使用率は監視できない

Amazon CloudWatch のデフォルトメトリクスでは以下の項目のリソース監視ができます。

  • CPU 使用率(CPUUtilization)
  • ディスクI/O(DiskReadBytes、DiskWriteBytes)
  • ネットワークトラフィックの量(NetworkIn、NetworkOut)
  • インスタンスのステータスチェック

この項目を見ると分かるようにメモリ使用率が監視できません。

EC2 インスタンスのメモリ使用率を確認するためには CloudWatch エージェントを別途インストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得するカスタムメトリクスの設定をしなければいけません。

 

デフォルトメトリクスとカスタムメトリクスの違い

  • デフォルトメトリクス ← AWS が自動的に生成するメトリクスを言います。(例」CPUUtilization 等)
  • カスタムメトリクス ← AWS ユーザーが自由に生成できる(自由に生成した)メトリクスを言います。

 

 

 

 

メモリ使用率の監視対象サーバの情報

今回は以下の RedHat 8系を監視対象としています。

 

■OS

[ec2-user@Test ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.0 (Ootpa)
[ec2-user@Test ~]$

 

■メモリ

[ec2-user@Test ~]$ free 
              total        used        free      shared  buff/cache   available 
Mem:         839608      143592      479896       10856      216120      559712 
Swap:             0           0           0 
[ec2-user@Test ~]$

 

 

■インスタンスタイプ

インスタンスタイプは「t2.micro」です。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

 

 

CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

以下、Amazon CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順の概要です。

 

  1. IAM ロールの作成
  2. IAM ロールのアタッチ
  3. CloudWatch エージェントのインストール
  4. CloudWatch エージェントの設定
  5. 動作確認

 

 

CloudWatch エージェント(CloudWatch Agent)とは

  • 「CloudWatch メトリクス」と「CloudWatch ログ」の両方を収集できます。(リソース監視とログ監視が可能になります)
  • CloudWatch エージェントは複数のプラットフォーム(Amazon Linux、RedHat 系 Linux、Ubuntu、Debian、Windows)上で稼働させることができます。
  • オフィスのサーバーやデータセンターのサーバーなどのオンプレにもインストールして稼働させることができます。
  • VMware などの仮想マシン上にもインストールして稼働させることができます。
  • 柔軟に細かく取得するデータやログを設定できます。
  • 慣れていなくても CloudWatch エージェントのウィザードコマンド(amazon-cloudwatch-agent-config-wizard)より適切な設定をすることができます。

 

 

 

IAM ロールの作成

次に IAM ロールを作成します。

CloudWatch エージェントで、インスタンスのデータやログを CloudWatch に送信できるようにするには、適切な IAM ロール作成してインスタンスにアタッチする(許可する)必要があります。

 

IAM ロール名は以下のように設定します。

  • IAM ロール名:CloudWatchAgentRole

 

AWS 管理コンソールのメニューより「サービス」「セキュリティ、ID、およびコンプライアンス」「IAM」をクリックします。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

「Identity and Access Management(IAM)」ダッシュボードに移動したら左側ペインより「ロール」をクリックします。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

 

 

「ロール」の画面に移動したら「ロールの作成」ボタンをクリックします。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

 

ロールの作成画面で以下のように設定します。

  • 信頼されたエンティティの種類を選択 ← AWS サービス
  • このロールを使用するサービスを選択 ← EC2

設定をしたら「次のステップ:アクセス権限」ボタンをクリックします。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

 

 

「ポリシーのフィルタ」「CloudWatchAgent」と入力し、出力された以下の 2 つのポリシーを割り当てます。

  • CloudWatchAgentServerPolicy
  • CloudWatchAgentAdminPolicy

設定したら「次のステップ:タグ」ボタンをクリックします。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

 

 

 

 

「タグの追加(オプション)」で必要な場合はタグを設定して「次のステップ:確認」ボタンをクリックします。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

 

 

「確認」画面で「ロール名」を入力し「ロールの作成」ボタンをクリックします。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

下図のようにロールが作成されたことを確認します。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

IAM ロールのアタッチ

作製した IAM ロール(CloudWatchAgentRole)を監視対象の EC2 インスタンスにアタッチします。

 

対象の EC2 インスタンスを選択し、「アクション」「インスタンスの設定」「IAM ロールの割り当て/置換」をクリックします。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

作製した「IAM ロール」を選択し「適用」ボタンをクリックします。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

 

 

CloudWatch エージェント(CloudWatch Agent)のインストール

次に CloudWatch エージェントをインストールします。

今回は手動で CloudWatch エージェントをインストールしました。

 

OS は RedHat 8.0 です。

[ec2-user@Test ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.0 (Ootpa)
[ec2-user@Test ~]$

 

 

 

最初に「wget」がインストールされていない場合はインストールをしておきます。

[root@Test ~]# yum install wget

 

 

 

RedHat系の場合は以下のコマンドで「amazon-cloudwatch-agent.rpm」パッケージをローカルにダウンロードします。

[root@Test ~]# wget https://s3.amazonaws.com/amazoncloudwatch-agent/redhat/amd64/latest/amazon-cloudwatch-agent.rpm 

 

 

 

■参考

ダウンロード先リンク一覧

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/download-cloudwatch-agent-commandline.html#download-CloudWatch-Agent-on-EC2-Instance-commandline-first

 

 

 

ダウンロードした「amazon-cloudwatch-agent.rpm」パッケージを yum コマンドでインストールします。

[root@Test ~]# yum install amazon-cloudwatch-agent.rpm

 

 

 

 

CloudWatch エージェントの設定

CloudWatch エージェントの設定ファイルを修正します。

エージェントの設定ファイルは、カスタムメトリクスを含め、エージェントが収集するメトリクスとログを指定する JSON ファイルです。

このファイルを設定するには、ウィザードを使用するか、一から自分で作成します。

 

■CloudWatch エージェントのインストール場所

デフォルトでは「/opt/aws/amazon-cloudwatch-agent」ディレクトリにインストールされます。

[root@Test amazon-cloudwatch-agent]# pwd 
/opt/aws/amazon-cloudwatch-agent 
[root@Test amazon-cloudwatch-agent]# ls 
bin  doc  etc  LICENSE  logs  NOTICE  RELEASE_NOTES  THIRD-PARTY-LICENSES  var 
[root@Test amazon-cloudwatch-agent]#

 

 

■CloudWatch エージェントのウィザードファイルの場所

デフォルトでは「/opt/aws/amazon-cloudwatch-agent/bin」ディレクトリ配下に「amazon-cloudwatch-agent-config-wizard」ファイルがあります。

[root@Test bin]# pwd
/opt/aws/amazon-cloudwatch-agent/bin
[root@Test bin]# ls 
amazon-cloudwatch-agent                config-downloader  start-amazon-cloudwatch-agent 
amazon-cloudwatch-agent-config-wizard  config-translator 
amazon-cloudwatch-agent-ctl            CWAGENT_VERSION 
[root@Test bin]#

 

ファイルには実行権限が付いています。

[root@Test bin]# ls -l 
total 89568 
-rwxr-xr-x. 1 root root 31292414 May 28 20:32 amazon-cloudwatch-agent 
-rwxr-xr-x. 1 root root 13747701 May 28 20:32 amazon-cloudwatch-agent-config-wizard 
-rwxr-xr-x. 1 root root     9890 May 28 20:32 amazon-cloudwatch-agent-ctl 
-rwxr-xr-x. 1 root root 11652899 May 28 20:32 config-downloader 
-rwxr-xr-x. 1 root root 17594820 May 28 20:32 config-translator 
-rw-r–r–. 1 root root       11 May 28 20:32 CWAGENT_VERSION 
-rwxr-xr-x. 1 root root 17406165 May 28 20:32 start-amazon-cloudwatch-agent 
[root@Test bin]#

 

 

■CloudWatch エージェントのウィザードの実行

root にスイッチし、以下のコマンドで実行できます。

[root@Test bin]# ./amazon-cloudwatch-agent-config-wizard

 

 

 

以下、CloudWatch エージェントウィザードの実行結果です。

[root@Test bin]# ./amazon-cloudwatch-agent-config-wizard 
============================================================= 
= Welcome to the AWS CloudWatch Agent Configuration Manager = 
============================================================= 
On which OS are you planning to use the agent? 
1. linux 
2. windows 
default choice: [1]: 

Trying to fetch the default region based on ec2 metadata… 
Are you using EC2 or On-Premises hosts? 
1. EC2 
2. On-Premises 
default choice: [1]: 

Which user are you planning to run the agent? 
1. root 
2. cwagent 
3. others 
default choice: [1]: 

Do you want to turn on StatsD daemon? 
1. yes 
2. no 
default choice: [1]: 

Which port do you want StatsD daemon to listen to? 
default choice: [8125] 
 
What is the collect interval for StatsD daemon? 
1. 10s 
2. 30s 
3. 60s 
default choice: [1]: 

What is the aggregation interval for metrics collected by StatsD daemon? 
1. Do not aggregate 
2. 10s 
3. 30s 
4. 60s 
default choice: [4]: 

Do you want to monitor metrics from CollectD? 
1. yes 
2. no 
default choice: [1]: 

Do you want to monitor any host metrics? e.g. CPU, memory, etc. 
1. yes 
2. no 
default choice: [1]: 

Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply. 
1. yes 
2. no 
default choice: [1]: 

Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available? 
1. yes 
2. no 
default choice: [1]: 

Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file. 
1. 1s 
2. 10s 
3. 30s 
4. 60s 
default choice: [4]: 

Which default metrics config do you want? 
1. Basic 
2. Standard 
3. Advanced 
4. None 
default choice: [1]: 

Current config as follows: 

        “agent”: { 
                “metrics_collection_interval”: 60, 
                “run_as_user”: “root” 
        }, 
        “metrics”: { 
                “append_dimensions”: { 
                        “AutoScalingGroupName”: “${aws:AutoScalingGroupName}”, 
                        “ImageId”: “${aws:ImageId}”, 
                        “InstanceId”: “${aws:InstanceId}”, 
                        “InstanceType”: “${aws:InstanceType}” 
                }, 
                “metrics_collected”: { 
                        “collectd”: { 
                                “metrics_aggregation_interval”: 60 
                        }, 
                        “mem”: { 
                                “measurement”: [ 
                                        “mem_used_percent” 
                                ], 
                                “metrics_collection_interval”: 60 
                        }, 
                        “statsd”: { 
                                “metrics_aggregation_interval”: 60, 
                                “metrics_collection_interval”: 60, 
                                “service_address”: “:8125” 
                        }, 
                        “swap”: { 
                                “measurement”: [ 
                                        “swap_used_percent” 
                                ], 
                                “metrics_collection_interval”: 60 
                        } 
                } 
        } 

Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items. 
1. yes 
2. no 
default choice: [1]: 

Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration? ← 今まで CloudWatch Log Agent を利用していた場合は、CloudWatch Log Agent から CloudWatch Agent に移行することができます。 
1. yes 
2. no 
default choice: [2]: 
2 ← 特に CloudWatch Log Agent を利用していないので「2」を選択します。 
Do you want to monitor any log files? ← ログ監視をしたい場合は「1」を選択します。
1. yes 
2. no 
default choice: [1]: 
2 ← 今回はログ監視をしないので「2」を選択します。
Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully. 
Current config as follows: 

        “agent”: { 
                “metrics_collection_interval”: 60, 
                “run_as_user”: “root” 
        }, 
        “metrics”: { 
                “append_dimensions”: { 
                        “AutoScalingGroupName”: “${aws:AutoScalingGroupName}”, 
                        “ImageId”: “${aws:ImageId}”, 
                        “InstanceId”: “${aws:InstanceId}”, 
                        “InstanceType”: “${aws:InstanceType}” 
                }, 
                “metrics_collected”: { 
                        “collectd”: { 
                                “metrics_aggregation_interval”: 60 
                        }, 
                        “mem”: { 
                                “measurement”: [ 
                                        “mem_used_percent” ← メモリ使用率を取得します。 
                                ], 
                                “metrics_collection_interval”: 60 
                        }, 
                        “statsd”: { 
                                “metrics_aggregation_interval”: 60, 
                                “metrics_collection_interval”: 60, 
                                “service_address”: “:8125” 
                        }, 
                        “swap”: { 
                                “measurement”: [ 
                                        “swap_used_percent” ← 現在使用中のスワップスペースの使用率を取得します。
                                ], 
                                “metrics_collection_interval”: 60 
                        } 
                } 
        } 

Please check the above content of the config. 
The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json. 
Edit it manually if needed. 
Do you want to store the config in the SSM parameter store? 
1. yes 
2. no 
default choice: [1]: 

What parameter store name do you want to use to store your config? (Use ‘AmazonCloudWatch-‘ prefix if you use our managed AWS policy) 
default choice: [AmazonCloudWatch-linux] 
 
Trying to fetch the default region based on ec2 metadata… 
Which region do you want to store the config in the parameter store? 
default choice: [ap-northeast-1] 
 
Which AWS credential should be used to send json config to parameter store? ← SSM のパラメータストアに json 正式のコンフィグをアップロードするための認証(クレデンシャル)を選択します。
1. ASIATLC7F77MJQERN2NM(From SDK) 
2. Other 
default choice: [1]: 
1 ← デフォルトの「1」を選択します。 
Successfully put config to parameter store AmazonCloudWatch-linux.
Program exits now.
[root@Test bin]#

 

 

CloudWatch エージェントの事前定義されたメトリクスセット

CloudWatch エージェントの事前定義されたメトリクスセットがあります。

 

CloudWatch エージェントの事前定義されたメトリクスセット

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

 

■EC2 インスタンス(Linux)の場合

 

Basic(基本)

  • Mem: mem_used_percent
  • Swap: swap_used_percent

Standard

  • CPU: cpu_usage_idle、cpu_usage_iowait、cpu_usage_user、 cpu_usage_system
  • Disk: disk_used_percent、disk_inodes_free
  • Diskio: diskio_io_time
  • Mem: mem_used_percent
  • Swap: swap_used_percent

アドバンスト

  • CPU: cpu_usage_idle、cpu_usage_iowait、cpu_usage_user、 cpu_usage_system
  • Disk: disk_used_percent、disk_inodes_free
  • Diskio: diskio_io_time、diskio_write_bytes、diskio_read_bytes、diskio_writes、diskio_reads
  • Mem: mem_used_percent
  • Netstat: netstat_tcp_established、netstat_tcp_time_wait
  • Swap: swap_used_percent

 

 

 

 

 

 

CloudWatch エージェント動作確認

■現在のステータス確認

[root@Test bin]# /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status 

  “status”: “stopped”, 
  “starttime”: “”, 
  “version”: “1.219020.0” 

[root@Test bin]#

 

 

■CloudWatch エージェントの起動

[root@Test bin]# /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a start 
amazon-cloudwatch-agent is not configured. Applying default configuration before starting it. 
/opt/aws/amazon-cloudwatch-agent/bin/config-downloader –output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d –download-source default –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/default.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 
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 
Created symlink /etc/systemd/system/multi-user.target.wants/amazon-cloudwatch-agent.service → /etc/systemd/system/amazon-cloudwatch-agent.service. 
Redirecting to /bin/systemctl restart amazon-cloudwatch-agent.service 
[root@Test bin]#

 

 

 

■ステータス確認

[root@Test bin]# /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status 

  “status”: “running”, 
  “starttime”: “2019-07-07T05:03:45+00:00”, 
  “version”: “1.219020.0” 

[root@Test bin]#

 

 

■CloudWatch エージェントの停止

[root@Test bin]# /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop
Redirecting to /bin/systemctl stop amazon-cloudwatch-agent.service
[root@Test bin]#

 

 

 

 

 

 

CloudWatch の表示確認

CloudWatch コンソール画面よりグラフが表示されることを確認します。

 

AWS 管理コンソール画面より「サービス」「管理とガバナンス」「CloudWatch」をクリックします。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

 

 

 

CloudWatch のダッシュボードの左側ペインの「メトリクス」をクリックします。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

 

 

「すべてのメトリクス」タブをクリックして「カスタム名前空間」「CWAgent」をクリックします。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

 

 

 

 

先ほど設定したメトリクス 2 個が表示されるので「ImageId, InstanceId, InstanceType」をクリックします。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

 

 

 

下図のように値が取得できてグラフ化されていることを確認します。

【AWS】CloudWatch エージェントをインストールして EC2 インスタンス(RedHat Linux)のメモリ使用率を取得する設定手順

 

 

 

 

 

 

参考情報

以下のサイトを参考にさせていただきました。

ありがとうございます。

 

CentOS7にCloudWatchエージェントを導入し、カスタムメトリクスを収集する

https://www.denet.ad.jp/technology/2018/03/centos7cloudwatchagent.html

 

コマンドラインを使用して CloudWatch エージェントをダウンロードおよび設定する

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

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください