CloudWatch AgentでEC2のメトリクスとログの収集

AWSの CloudWatch Agent は、AWS Systems Managerと統合されて Amazon EC2からメモリ使用率など標準外のメトリクスと、ログの両方を収集することができます。

今回、AWS Systems Manager から操作して、CloudWatch Agent でEC2からメトリクスとログを収集できるようにします。

IAM Roleの作成

EC2用のIAM Roleを作成します。EC2上で CloudWatch Agent 設定を行い作成した設定ファイルをSystems Manager Parameter Store に保存するIAMロールと、CloudWatch Agent を実行しメトリックスを取得する各EC2サーバー用のIAMロールの2種類を作成します。

エージェント設定ファイルを Systems Manager Parameter Store に保存する IAM ロール

AWS マネジメントコンソール にサインインし、IAM コンソールを開き新規にEC2用のロールを作成します。作成するロールには、[CloudWatchAgentAdminPolicy] と [AmazonEC2RoleforSSM] のポリシーをアタッチします。

ここで、[AmazonEC2RoleforSSM]は、CloudWatch エージェントをインストールや設定にSSMを使用する為にアタッチします。

CloudWatch Agent を実行しメトリックスを取得する IAM ロール

AWS マネジメントコンソール にサインインし、IAM コンソールを開き新規にEC2用のロールを作成します。作成するロールには、[CloudWatchAgentServerPolicy] と [AmazonEC2RoleforSSM] のポリシーをアタッチします。

以下を参考にしました。Ubuntu等他のOSのインストール方法も記載されています。

SSM エージェント をインストール

SSM エージェント は、デフォルトでは、2017 年 9 月以降の Amazon Linux の基本 AMI にインストールされています。それ以前のAMIやKUSANAGIなどのAMIの場合は手動でSSMエージェントをインストールします。

Amazon Linux へのSSMエージェントインストール

SSM インストーラーをダウンロードして実行(64bitインスタンス)します。

$ mkdir /tmp/ssm
$ cd /tmp/ssm
$ sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm

 

SSM エージェントの実行状況を確認します。

$ sudo status amazon-ssm-agent
amazon-ssm-agent start/running, process 8102

 

起動していなかったら起動します。

$ sudo start amazon-ssm-agent

 

CentOS へのSSMエージェントインストール

KUSANAGIなどのCentOSへは以下のコマンドでインストールします。

$ mkdir /tmp/ssm
$ cd /tmp/ssm
$ sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm

 

SSM エージェントの実行状況を確認します。

$ sudo systemctl status amazon-ssm-agent
● amazon-ssm-agent.service - amazon-ssm-agent Loaded: loaded (/etc/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2018-07-11 17:23:45 JST; 31min ago Main PID: 16806 (amazon-ssm-agen) CGroup: /system.slice/amazon-ssm-agent.service └─16806 /usr/bin/amazon-ssm-agent
     (以下続く)

 

起動していなかったら起動します。

$ sudo systemctl enable amazon-ssm-agent

 

以下を参考にしました。

AWS Systems Manager からEC2へエージェントを一括導入

AWSコンソール上のAWS Systems Manager を開きます。左側メニューの「ランコマンド」をクリックします。開いた画面で「コマンドの実行」ボタンを押します。

SSMエージェントのアップデート

AWS Systems Manager経由でアップデートします。Run Commandでコマンドのドキュメントで [AWS-UpdateSSMAgent] を選択します。

 [AWS-UpdateSSMAgent] を選択すると、AWS Systems Manager でコマンドを実行できるEC2インスタンスの一覧が表示されます。

対象インスタンスを選択して実行します。複数のインスタンスをまとめて選択して、コマンドを同時実行ができるのがすごいですね。

[AWS-UpdateSSMAgent] を選択した際に、対象インスタンスが表示されない場合は、EC2のロールのポリシー設定が適切か、SSMエージェントは起動されているか確認してください。また、ロールの設定変更やSSMエージェント起動後、しばらくしないと対象インスタンスに表示されない場合もあります。

出力を開いてコマンドが正常終了していることを確認します。

CloudWatch Agentのインストール

AWS Systems Manager経由でインストールします。ランコマンドでコマンドのドキュメントの[AWS-ConfigureAWSPackage]を選択します。

ターゲットに対象のインスタンスを選択します。

コマンドのパラメータは以下のように設定します。

Action: Install
Name: AmazonCloudWatchAgent
Version: latest

実行して、実行のステータスが「成功」で終了したらターゲット毎に出力を確認します。

EC2上でメトリクス送信設定ファイルを生成

CloudWatch Agent の設定ファイル生成

CloudWatch Agent の設定を行い設定ファイルを生成します。以下のコマンドでウィザード形式で設定を進めます。

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
=============================================================
= Welcome to the AWS CloudWatch Agent Configuration Manager =
=============================================================

 

ウィザードでは以下を設定します。

メトリクス設定内容

Which OS are you planning to use the agent? :Linux(default)
Are you using EC2 or On-Premises hosts? :EC2(default)
Do you want to monitor any host metrics? :yes(default)
Do you want to monitor cpu metrics per core? :yes(default)
Do you want to add ec2 dimensions? :yes(default)
Would you like to collect your metrics at high resolution ? :60s (ここは各自で決めてください)
Which default metrics config do you want? :Advanced (Basic/Standard/Advanced/None から選択可)

設定内容が json で表示された後で以下が表示ますので、確認したらエンターキーを押します。

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 configuration file to import for migration? :no(default)(移行元のLog Agent がない場合)
Do you want to monitor any log files? :yes(default)
Log file path: /var/log/messages
Log group name: messages
Do you want to specify any additional log files to monitor? :no(他に監視するログファイルがない場合)

設定内容と以下のメッセージが表示されます。修正する場合は手動で設定ファイルを修正します。

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.

1

CloudWatch Agent 設定を SSMのParameter store に保存

生成した設定ファイルをSSMのParameter storeに保存します。

Parameter Store 保存設定

Do you want to store the config in the SSM Parameter store? :yes(default)
What is the Parameter store name do you want to store your config? :AmazonCloudWatch-linux
Which region do you want to store the config in the Parameter store? :ap-northeast-1
Which AWS credential should be used to send json config to Parameter store? :1(From SDK)(default)

これで、設定ファイルが Parameter Storeに保存されウィザードが終了します。

AWS Systems Manager のコンソール画面の左側メニュー「パラメータストア」をクリックすると保存された設定が確認できます。

AWS Systems Manager から 各EC2インスタンスへ CloudWatch Agent 設定を配布

AWS Systems Manager から、SSMのParameter store に保存されているCloudWatch Agent 設定を各EC2インスタンスへ配布します。

ランコマンドでコマンドのドキュメントの [AmazonCloudWatch-ManageAgent]を選択し、ターゲットに対象のインスタンスを選択します。

コマンドのパラメータは以下のように設定します。Optional Configuration Location に Configurationを保存したParameter storeの名称を記載します。

Action: configure
Mode: ec2
Optional Configuration Source: ssm
Optional Configuration Location: AmazonCloudWatch-linux
Optional Restart: yes

実行して、実行のステータスが「成功」で終了したらターゲット毎に出力を確認します。
これで、各EC2インスタンスのメトリクスをCloudWatchで収集することが可能になりました。

CloudWatch の確認

メトリクスの確認

CloudWatchコンソールの「メトリクス」メニューを開くと新たに「CWAgent」というネームスペースができています。

CWAgentの下には、4つのディメンションがあり、以下のようになっています。

ImageId, InstanceId, InstanceType, device, fstype, path: Disk関連
ImageId, InstanceId, InstanceType, cpu: CPU関連
ImageId, InstanceId, InstanceType, name: Disk I/O関連
ImageId, InstanceId, InstanceType: Memory関連

メモリ関連のメトリクスを確認すると以下のようにメモリ利用率などの4つのメトリクスが見れるようになります。これらをもとに、標準ではできなかったメモリ使用率でのアラームが作成できます。

ログの確認

CloudWatchコンソールの「ログ」メニューを開くと以下のように「messages」ロググループが作成されています。

「messages」ロググループ以下には、インスタンス毎に ログストリームが作成されており、その中に /var/log/messages の内容が出力されています。

AWS Systems Manager の有効性

設定内容を SSMの Parameter Storeに保存しておけば、インストールから設定反映、実行までAWS Systems Managerで完結してインスタンスの情報を収集できます。インスタンスのOSへのログインなしに設定可能となり、複数のインスタンスを監視する時に各インスタンスの設定が楽になります。

EC2以外にもオンプレミスのサーバーにも使えるようなので、別途対応してみたいと思います。

コメントを残す

コメントは当サイト運営者の承認後に反映されます。
お名前はニックネームでも結構です。

Comments are allowed only in Japanese. / 日本語が含まれない投稿は無視されますのでご注意ください。