【AWS/KUSANAGI】CloudWatchからEC2を監視する設定方法(CPU、メモリ、ログ)

AWSには「CloudWatch」という、各種監視ができるサービスが準備されております。

EC2(サーバー)のCPU・メモリ・ログ等を監視し、利用傾向やエラー発生時の検知を高速化しようと思いました。
が、意外と設定が大変でしたのでその方法をメモしておきます。

※ログにエラーが含まれていた時に通知する、といった設定は当記事には含まれておりませんのでご了承ください。
(CloudWatchにログを蓄積するところまでです)

確認環境

  • AWS CloudWatch
  • AWS EC2
  • EC2は CentOS7系(KUSANAGI for AWS)

※2021年2月時点の手順です

やりたいこと

AWS CloudWatchを使って、EC2のCPU・メモリ・(サーバー)ログを監視したい。

→ まずは、CloudWatchからデータが参照できる(データが蓄積される)ように、設定を行います。

必要なセットアップ

CPU監視のみであれば、CloudWatchの標準のメトリクスに準備されておりますので、特段準備は不要です。
※メトリクスとは、測定の単位のようなものであり、例えば「CPU使用率」「ディスクの読み書き」などが準備されています。

Amazon EC2 インスタンスの信頼性、可用性、およびパフォーマンスを維持するために、モニタリングする項目を一覧表示…

しかし、(上記URLの通り)メモリ使用率やログについては「CloudWatch エージェント」を使う必要があります。

設定方法はいくつかありますが、「AWS Systems Manager」からコマンド発行(Run Command)する機能も利用しつつ、設定します。
そのため、対象となるEC2に「SSM エージェント」「CloudWatchエージェント」をインストール、設定する必要があります。

設定手順

IAMロールの作成、セット

IAMロールの作成

「AWS Systems Manager」「CloudWatch エージェント」を使いますので、EC2に対して操作できる権限(ロール)を与えます。

ポリシーは下記が必要です。

  • AmazonSSMManagedInstanceCore
  • CloudWatchAgentAdminPolicy

IAM > ロール > ロールの作成
→ AWS サービス > (一般的なユースケースの)EC2
→ 上記のポリシーを選択
→ (タグは設定なしでもOK)
→ ロール名は「CloudWatchAgentAdminRole」など、任意の名称でOK

EC2に付与

該当のEC2インスタンスを選択し、
アクション > セキュリティ > IAM ロールを変更

上記で作成したロール(CloudWatchAgentAdminRole)を設定

EC2に「SSM エージェント」をインストール

CentOS インスタンスに接続し、Systems Manager を使用してコマンドを実行する各インスタンスに SSM…

「Amazon Linux」などの標準OSではデフォルトインストールされているようですが、「KUSANAGI for AWS」にはインストールされていませんでしたので、手動でインストールします。

使用しているのがCentOS 7.x系でしたので、上記手順に従ってインストールです。
CPUアーキテクチャは、お使いのインスタンスタイプからご確認ください。

EC2 インスタンスタイプ

# 【インストールしたいEC2で作業】

# x86_64(Inter 64bit)、東京リージョンの場合、下記コマンドとなります
sudo yum install -y https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm

# 状態確認
sudo systemctl status amazon-ssm-agent

# 自動起動ON
sudo systemctl enable amazon-ssm-agent

# 停止していた場合、SSMを起動
sudo systemctl start amazon-ssm-agent

「CloudWatch エージェント」のインストール、設定

エージェントを設定した後、CloudWatch エージェントを追加インスタンスにインストールする方法について説明します。…

監視したいEC2に対して「CloudWatch エージェント」をインストールします。
EC2内でメモリ利用状況などを取得して「CloudWatch」に送り込むといった、「Cloud Watch」と連動してEC2内で動いてくれるプログラムですね。

「CloudWatch エージェント」のインストール

「AWS Systems Manager」から「EC2」に対して操作ができるようになっていますので、以下は「Amazon Systems Manager」から操作します。

AWS Systems Manager > Run Command > Run command(ボタン)
AWS-ConfigureAWSPackage を選択
ターゲットは「インスタンスを手動で選択する」を選び、対象のインスタンスをチェック
そして実行、です。

これで「CloudWatch エージェント」がEC2にインストールされました。

「CloudWatch エージェント」の設定ファイル作成

EC2内から、ウィザードを使って設定ファイルを作成します。

基本設定 → メトリクス関係の設定 → ログ関係の設定
という順番で設定します。

失敗しても、再度ウィザードを起動すれば大丈夫です。

# 【該当のEC2で作業】

# ウィザードの起動
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

以下、(自身の)備忘録です。

  • 基本はデフォルト設定を使用
  • 「Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply.」については、CPUコアごとの情報までは「不要」と判断
  • 「Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?」については、既存設定はないため「no」を選択
  • 「Do you want to specify any additional log files to monitor?」について、ログの各設定は以下のように設定
    Log file path: /home/xxx/ssl_error.log*
    Log group name: ssl_error.log
    Log stream name: {instance_id}
  • 複数のログ種類を確保するのであれば、「Do you want to specify any additional log files to monitor?」を「yes」で続けていく

最後まで設定を行うと設定ファイルが作成されますが、IAAロールの設定ができていないと保存に失敗します。
設定を見直しましょう。

# 保存失敗時のエラー 
Please make sure the creds you used have the right permissions configured for SSM access.
Error in putting config to parameter store AmazonCloudWatch-linux: AccessDeniedException: User: arn:aws:sts::nnnnn:assumed-role/CloudWatchLog-EC2/xxxxx is not authorized to perform: ssm:PutParameter on resource: arn:aws:ssm:ap-northeast-1:nnnnn:parameter/AmazonCloudWatch-linux
status code: 400, request id: xxxxx
Program exits now.

監視に必要な「collectd」をインストール

# 【該当のEC2で作業】

# collected をインストール
sudo yum install collectd

「CloudWatch エージェント」の起動

「AWS Systems Manager」から操作します。

AWS Systems Manager > Run Command > Run command(ボタン)
AmazonCloudWatch-ManageAgent を選択
「コマンドのパラメータ」の「Optional Configuration Location」に、先ほどCloudWatchの設定ウィザードでセットしたストア名を入力(デフォルト:AmazonCloudWatch-linux)
ターゲットは「インスタンスを手動で選択する」を選び、対象のインスタンスをチェック
そして実行、です。

なお、上記の「collectd」がインストールされていない場合、以下のようなエラーが発生して起動に失敗します。

/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 failed
======== Error Log ========
2021-02-01T04:36:59Z E! [telegraf] Error running agent: Error parsing /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml, open /usr/share/collectd/types.db: no such file or directory
----------ERROR-------
2021/02/01 13:36:59 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ssm_AmazonCloudWatch-linux.tmp ...
failed to run commands: exit status 1

「CloudWatch」での確認

設定が成功していれば「ClowdWatch」の下記箇所に項目が増えているはずです。

  • メトリクス > すべてのメトリクス > CWAgent
    ※メモリ使用率などのメトリクスが増えています
  • ログ > ロググループ

おつかれさまでした!

"目からウロコの"IT視点を


3分で楽しめるメルマガ『Professional's eye』。
あなたの「デジタル力」がアップします!
送信時点で「Privacy Policy」に同意したものとみなします。
広告を含むご案内のメールをお送りする場合があります。

バックナンバー

指南書ライブラリ

      >最新情報をお届けします

      最新情報をお届けします

      当サイト『Gloria, Limited』では
      ワクワクする『デジタルお役立ち情報』 を発信しております。

      最新情報をお送りいたしますので是非ご登録ください^^

      CTR IMG