CloudWatch AgentをRHEL9にインストールする手順

AWS,Linux

ブログ運営者
さいとう

閲覧いただきありがとうございます!"さいとう"と申します。わたしは異業種・未経験からIT業界に転職し、現在インフラエンジニアとしてクラウド環境の設計や構築・運用の支援を行っています。


Amazon CloudWatch Agentは、EC2インスタンス上でのリソース使用状況やログの監視を効率的に行うために欠かせないツールです。


CPU使用率、メモリ使用量、ディスクI/O、ネットワークトラフィックといった重要なメトリクスを収集し、システムのパフォーマンスをリアルタイムで監視することができます。特に、RHEL9(Red Hat Enterprise Linux 9)のようなエンタープライズ向けOSでは、システムの安定性とセキュリティを保つために、CloudWatch Agentの導入がますます重要になっています。


RHEL9は、企業向けの信頼性の高いOSとして知られており、大規模なシステムやミッションクリティカルな環境で広く利用されています。しかし、RHEL9のAMIにはデフォルトでCloudWatch Agentがプリインストールされていません。そのため、手動でインストールし、適切に設定する必要があります。


今回の記事では、RHEL9にCloudWatch Agentをインストールし、適切な監視環境を構築するための手順を詳しく解説します。


CloudWatch Agentの導入により、システムの健全性を継続的に監視し、運用の効率化を図ることが可能になります。これからRHEL9上でのCloudWatch Agentのインストールを検討している方にとって、実践的なガイドとなるよう、ステップバイステップで解説していきます。


※記事の内容は"インストール"のみに焦点を当てていますので、CloudWatch Agentの設定方法やIAMの権限まわり、EC2の起動に関しては説明しておりません。

RHEL9にCloudWatch Agentをインストールする方法

この記事で紹介する手順は、以下の前提条件に基づいています。

  • Amazon EC2インスタンスとしてRHEL9を使用
AMI: Red Hat Enterprise Linux version 9 (HVM), EBS General Purpose (SSD) Volume Type
Architecture: 64-bit (x86)
  • インターネット接続が確保されている、もしくは、S3 VPCエンドポイントが設定されている


インストール手順

■1. 必要なツールのインストール

まず、wgetコマンドをインストールします。wgetはリモートサーバーからファイルをダウンロードするために必要です。

sudo dnf install -y wget


【実行結果】

Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.

Last metadata expiration check: 0:04:04 ago on Fri 18 Oct 2024 07:01:36 AM UTC.
Dependencies resolved.
===========================================================================================================================================================================================
 Package                             Architecture                          Version                                         Repository                                                 Size
===========================================================================================================================================================================================
Installing:
 wget                                x86_64                                1.21.1-8.el9_4                                  rhel-9-appstream-rhui-rpms                                789 k

Transaction Summary
===========================================================================================================================================================================================
Install  1 Package

Total download size: 789 k
Installed size: 3.1 M
Downloading Packages:
wget-1.21.1-8.el9_4.x86_64.rpm                                                                                                                              15 MB/s | 789 kB     00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                       10 MB/s | 789 kB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                                   1/1
  Installing       : wget-1.21.1-8.el9_4.x86_64                                                                                                                                        1/1
  Running scriptlet: wget-1.21.1-8.el9_4.x86_64                                                                                                                                        1/1
  Verifying        : wget-1.21.1-8.el9_4.x86_64                                                                                                                                        1/1
Installed products updated.

Installed:
  wget-1.21.1-8.el9_4.x86_64

Complete!



■2. Amazon CloudWatch Agentのダウンロード

次に、CloudWatch AgentのRPMパッケージをAmazon S3からダウンロードします。

wget https://amazoncloudwatch-agent.s3.amazonaws.com/redhat/amd64/latest/amazon-cloudwatch-agent.rpm



【実行結果】

[ec2-user@ip-10-0-6-151 ~]$ wget https://amazoncloudwatch-agent.s3.amazonaws.com/redhat/amd64/latest/amazon-cloudwatch-agent.rpm
--2024-10-18 07:07:45--  https://amazoncloudwatch-agent.s3.amazonaws.com/redhat/amd64/latest/amazon-cloudwatch-agent.rpm
Resolving amazoncloudwatch-agent.s3.amazonaws.com (amazoncloudwatch-agent.s3.amazonaws.com)... 3.5.9.205, 16.182.104.145, 54.231.168.209, ...
Connecting to amazoncloudwatch-agent.s3.amazonaws.com (amazoncloudwatch-agent.s3.amazonaws.com)|3.5.9.205|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 107806279 (103M) [application/octet-stream]
Saving to: ‘amazon-cloudwatch-agent.rpm’

amazon-cloudwatch-agent.rpm                    100%[===================================================================================================>] 102.81M  9.65MB/s    in 12s

2024-10-18 07:07:58 (8.28 MB/s) - ‘amazon-cloudwatch-agent.rpm’ saved [107806279/107806279]



■3. CloudWatch Agentのインストール

ダウンロードしたRPMパッケージを使用して、CloudWatch Agentをインストールします。

sudo rpm -U ./amazon-cloudwatch-agent.rpm


【実行結果】

[ec2-user@ip-10-0-6-151 ~]$ sudo rpm -U ./amazon-cloudwatch-agent.rpm
create group cwagent, result: 0
create user cwagent, result: 0



上の実行結果は、CloudWatch Agentのインストール中に、cwagentという名前のユーザーとグループが正常に作成されたことを示しています。結果が 0 となっているのは、コマンドが成功したことを意味しています。


■4. CloudWatch Agentの設定

インストール後、CloudWatch Agentの設定を行います。ウィザード形式の設定ツールを利用して、簡単に初期設定が可能です。以下のコマンドを実行してウィザードを開始します。

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard



ウィザードでは、収集したいメトリクスやログの種類、出力先などを指定することができます。ウィザードが終了すると、CloudWatch Agentの設定ファイルが生成されます。


【実行結果】

[ec2-user@ip-10-0-6-151 ~]$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
================================================================
= Welcome to the Amazon CloudWatch Agent Configuration Manager =
=                                                              =
= CloudWatch Agent allows you to collect metrics and logs from =
= your host and send them to CloudWatch. Additional CloudWatch =
= charges may apply.                                           =
================================================================
On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [1]:

Trying to fetch the default region based on ec2 metadata...
I! imds retry client will retry 1 timesAre 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. cwagent
2. root
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? WARNING: CollectD must be installed or the Agent will fail to start
1. yes
2. no
default choice: [1]:
2
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?
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]:

Do you want to aggregate ec2 dimensions (InstanceId)?
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": "cwagent"
        },
        "metrics": {
                "aggregation_dimensions": [
                        [
                                "InstanceId"
                        ]
                ],
                "append_dimensions": {
                        "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
                        "ImageId": "${aws:ImageId}",
                        "InstanceId": "${aws:InstanceId}",
                        "InstanceType": "${aws:InstanceType}"
                },
                "metrics_collected": {
                        "disk": {
                                "measurement": [
                                        "used_percent"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "mem": {
                                "measurement": [
                                        "mem_used_percent"
                                ],
                                "metrics_collection_interval": 60
                        },
                        "statsd": {
                                "metrics_aggregation_interval": 60,
                                "metrics_collection_interval": 10,
                                "service_address": ":8125"
                        }
                }
        }
}
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?
1. yes
2. no
default choice: [2]:
2
Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
2
Do you want the CloudWatch agent to also retrieve X-ray traces?
1. yes
2. no
default choice: [1]:
2
Existing config JSON identified and copied to:  /opt/aws/amazon-cloudwatch-agent/etc/backup-configs
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": "cwagent"
        },
        "metrics": {
                "aggregation_dimensions": [
                        [
                                "InstanceId"
                        ]
                ],
                "append_dimensions": {
                        "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
                        "ImageId": "${aws:ImageId}",
                        "InstanceId": "${aws:InstanceId}",
                        "InstanceType": "${aws:InstanceType}"
                },
                "metrics_collected": {
                        "disk": {
                                "measurement": [
                                        "used_percent"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "mem": {
                                "measurement": [
                                        "mem_used_percent"
                                ],
                                "metrics_collection_interval": 60
                        },
                        "statsd": {
                                "metrics_aggregation_interval": 60,
                                "metrics_collection_interval": 10,
                                "service_address": ":8125"
                        }
                }
        }
}
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]:
2
Program exits now.



設定ファイルを所定の位置にコピーします。

sudo cp /opt/aws/amazon-cloudwatch-agent/bin/config.json /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json


■5. CloudWatch Agentの起動

最後に、設定が完了したらCloudWatch Agentを起動します。


現在の状態の確認をしましょう。

systemctl status amazon-cloudwatch-agent


【実行結果】

[ec2-user@ip-10-0-6-151 ~]$ systemctl status amazon-cloudwatch-agent
○ amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
     Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; disabled; preset: disabled)
     Active: inactive (dead)



それでは起動してみます。

sudo systemctl start amazon-cloudwatch-agent



systemctlコマンドで起動する場合、デフォルトでは、"/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json"の設定を読み込みます。ファイルが無ければエラーになりますので、"/opt/aws/amazon-cloudwatch-agent/bin/config.json"からコピーするか、以下のコマンドで起動しましょう。

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



起動ステータスを確認して、正しく動作していることを確認しましょう。

systemctl status amazon-cloudwatch-agent


【実行結果】

[ec2-user@ip-10-0-6-151 ~]$ systemctl status amazon-cloudwatch-agent
● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
     Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; disabled; preset: disabled)
     Active: active (running) since Fri 2024-10-18 07:10:42 UTC; 6s ago
   Main PID: 14554 (amazon-cloudwat)
      Tasks: 7 (limit: 47909)
     Memory: 21.9M
        CPU: 147ms
     CGroup: /system.slice/amazon-cloudwatch-agent.service
             └─14554 /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml -envconfig /opt/aws/amazon-clo>

Oct 18 07:10:42 ip-10-0-6-151.ap-southeast-1.compute.internal systemd[1]: Started Amazon CloudWatch Agent.
Oct 18 07:10:42 ip-10-0-6-151.ap-southeast-1.compute.internal start-amazon-cloudwatch-agent[14559]: D! [EC2] Found active network interface
Oct 18 07:10:42 ip-10-0-6-151.ap-southeast-1.compute.internal start-amazon-cloudwatch-agent[14559]: I! imds retry client will retry 1 timesI! Detected the instance is EC2
Oct 18 07:10:42 ip-10-0-6-151.ap-southeast-1.compute.internal start-amazon-cloudwatch-agent[14559]: 2024/10/18 07:10:42 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/et>
Oct 18 07:10:42 ip-10-0-6-151.ap-southeast-1.compute.internal start-amazon-cloudwatch-agent[14559]: 2024/10/18 07:10:42 I! Valid Json input schema.
Oct 18 07:10:42 ip-10-0-6-151.ap-southeast-1.compute.internal start-amazon-cloudwatch-agent[14559]: I! Detecting run_as_user...
Oct 18 07:10:42 ip-10-0-6-151.ap-southeast-1.compute.internal start-amazon-cloudwatch-agent[14559]: I! Trying to detect region from ec2
Oct 18 07:10:42 ip-10-0-6-151.ap-southeast-1.compute.internal start-amazon-cloudwatch-agent[14559]: 2024/10/18 07:10:42 D! ec2tagger processor required because append_dimensions is set
Oct 18 07:10:42 ip-10-0-6-151.ap-southeast-1.compute.internal start-amazon-cloudwatch-agent[14559]: 2024/10/18 07:10:42 Configuration validation first phase succeeded
Oct 18 07:10:42 ip-10-0-6-151.ap-southeast-1.compute.internal start-amazon-cloudwatch-agent[14554]: I! Detecting run_as_user...


補足

amazon-cloudwatch-agentを起動する方法は2つあり、一つは後述するsystemctlコマンドによる起動です。もう一つは、"amazon-cloudwatch-agent-ctl"コマンドで起動する方法です。"amazon-cloudwatch-agent-ctl"コマンドは設定を取得し、CloudWatch Agentを起動します。

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


【実行結果】

ec2-user@ip-10-0-15-31 ~]$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
****** processing amazon-cloudwatch-agent ******
I! Trying to detect region from ec2 D! [EC2] Found active network interface I! imds retry client will retry 1 timesSuccessfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp
Start configuration validation...
2024/10/18 06:46:51 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp ...
2024/10/18 06:46:51 I! Valid Json input schema.
2024/10/18 06:46:51 D! ec2tagger processor required because append_dimensions is set
2024/10/18 06:46:51 Configuration validation first phase succeeded
I! Detecting run_as_user...
I! Trying to detect region from ec2
D! [EC2] Found active network interface
I! imds retry client will retry 1 times
/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
amazon-cloudwatch-agent has already been stopped
Created symlink /etc/systemd/system/multi-user.target.wants/amazon-cloudwatch-agent.service → /etc/systemd/system/amazon-cloudwatch-agent.service.
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status

【実行結果】

[ec2-user@ip-10-0-15-31 ~]$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
{
  "status": "running",
  "starttime": "2024-10-18T06:46:51+00:00",
  "configstatus": "configured",
  "version": "1.300047.0b872"
}


まとめ

今回の記事では、RHEL9にCloudWatch Agentをインストールする手順を紹介しました。CloudWatch Agentを導入することで、EC2インスタンス上のリソース使用状況やログをリアルタイムでモニタリングできるようになり、システムの健全性を維持するための有効な手段が整います。特に、エンタープライズ向けのRHEL9環境においては、安定したシステム運用が求められるため、こうしたモニタリングツールの導入は非常に重要です。


CloudWatch Agentは、CPUやメモリの使用量、ディスクのI/O、ネットワークトラフィック、さらにはアプリケーションログなど、多岐にわたるメトリクスを収集し、Amazon CloudWatchにデータを送信することで、システムの状態をリアルタイムで把握できます。これにより、問題の早期発見やトラブルシューティングが迅速に行えるだけでなく、リソースの最適化や運用コストの削減にもつながります。


次のステップとしては、CloudWatch Agentで収集したメトリクスやログの内容を必要に応じて詳細に設定し、Amazon CloudWatchのダッシュボードをカスタマイズして可視化してみましょう。これにより、システムのパフォーマンスを一目で確認できるようになり、重要なインフラの健全性を継続的に監視できる体制が整います。また、アラーム機能を活用することで、異常が発生した際に即座に対応できる仕組みを構築することも可能です。


CloudWatch Agentをフル活用して、より効果的なモニタリング環境を構築し、安定したシステム運用を実現していきましょう。


参考リンク:AWS公式ドキュメント