🗂

CloudWatchエージェント構築

2023/12/15に公開

【EC2】CloudWatchエージェント構築

CloudWatch ・・・ AWS環境におけるモニタリングシステムの総称

従来の監視システム

Pull型 => 対象のサーバーにエージェントをインストールし、
     マネージャーとなる管理サーバーから監視する。

CloudWatch

Push型 => エージェントからメトリクスをCloudWatchに送信して監視。
     ※CloudWatchを使用してEC2に対するサーバー監視を行う場合、
      標準メトリクスを用いた監視は限定的となる。

  • 標準メトリクス  ・・・CPU使用率、ディスク、ネットワークの利用状況、
                インスタンスのステータスチェック等
  • カスタムメトリクス・・・メモリ使用率、ディスク使用率、
                EC2インスタンス上のアプリケーションの状態等

カスタムメトリクスの取得には別途「CloudWatchエージェント」をインストールし、そのための設定が必要。

CloudWatchエージェント構築(EC2)

EC2の運用台数など、環境によって適切な構築、運用方法は異なる。
メトリクス取得のための必要な設定を理解することによって、最適な構築が行える。
CloudWatchエージェントの導入方法はさまざま。

ロールの設定

  • CloudWatchAgentServerPolicy
     => IAMから使用するロールに付与するポリシー。
  • CloudWatchAgentAdminPolicy
     => AWS System ManagerのParameter Storeに設定値を書き込むために、
      CloudWatchエージェントの設定で必要なポリシー。

※ロール自体の設定はインストール後でも可能

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

コマンドラインによるCloudWatchエージェントのインストール

コマンドラインでのインストール方法を理解することで、ユーザーデータに渡すcloud-init等と組み合わせた応用的な構築方法が実現可能。

インスタンスのOSがAmazon Linux 2の場合のCloudWatchエージェントインストールコマンド

$ sudo yum install amazon-cloudwatch-agent

CloudWatchエージェントの設定

CloudWatchエージェントのインストール後、メトリクスの取得には別途設定が必要。
agentmetricslogsの3セクションを持つJSONファイルに定義する。
このJSONファイルの仕様を満たしていれば、作成済みのJSONファイルの流用が可能になる。

初めて構築する場合はウィザードを使用しての設定が推奨される
(最適化されたデフォルトの設定値が記述された設定ファイルが生成されるため)

ウィザード設定コマンド

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

実行後、セクションごとに設定値を入力。

このセクションでここまでの設定値が反映されたJSONが出力される。


出力されたJSONを確認後、引き続きウィザードで設定値を入力

このセクションでParameter Storeの設定を除く、全ての設定値が反映されたJSONが出力される。

最後にAWS System ManagerのParameter Storeに設定値を保存するか問われる。


上記コマンド実行後、CloudWatchの設定値が記述されたJSON形式の
/opt/aws/amazon-cloudwatch-agent/bin/config.jsonファイルが生成される。
このファイルを事前に用意することで、インスタンス作成時のスクリプトや、AnsibleなどのIaCに組み込むなどの応用ができる。

collectdのインストール

アプリケーションやサービスからの追加のメトリクスを取得する場合は、
collectdを追加インストールする必要がある。
メモリ使用率やディスク使用率を取得したいだけであればインストール不要。

$ sudo amazon-linux-extras install collectd

CloudWatchエージェントの起動

設定後(及びcollectdインストール後)、CloudWatchエージェントを起動。

起動コマンド

$ 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

エージェント起動後、カスタムメトリクスによる監視が開始。

CloudWatchエージェントの停止

取得したいメトリクスを変更する際など、/opt/aws/amazon-cloudwatch-agent/bin/config.jsonファイルを変更した場合はプロセスの再起動が必要。

停止コマンド

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop

Run CommandによるCloudWatchエージェントのインストール

AWS System ManagerのRun Commandを使用して、複数のEC2インスタンスに対するCloudWatchエージェントのインストール、アンインストール、設定等の作業を一括で行うことができる。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-on-EC2-Instance-fleet.html

cloud-intによるCloudWatchエージェントのインストール

EC2インスタンスを起動する際、ユーザーデータとしてスクリプトを渡すことでOSやMWの初期構築を簡略化できる。
EC2ではシェルスクリプトとcloud-intが使用可能。

CloudWatchエージェントのメトリクス確認

正常にメトリクスが取得できている場合、コンソール画面からCloudWatchのメトリクスに「CWAgent」が追加されている。
「CWAgent」を押下すると、設定した名前空間ごとに対象のメトリクスが確認できる。

【ECS】CloudWatchエージェント構築

ECSを使用している環境(起動タイプはEC2)で、何らかの理由でホストとなるEC2のメモリやディスク使用率を取得する監視要件がある場合に、ECSでデプロイしたタスク定義のコンテナでホストのメトリクスを取得する方法。

  1. IAMでECSのタスク定義に付与する、タスクロール及びタスク実行ロールの作成
  2. SSMにてパラメータの作成
  3. ECSのタスク定義及びサービスの作成

IAMでECSのタスク定義に付与する、タスクロール及びタスク実行ロールの作成

  1. Amazon ECSでのCloudWatchエージェントとX-Rayデーモンのデプロイを参考にしながら、事前にロールを作成。
  2. コンテナがCloudWatchにメトリクスを書き込むため、CloudWatchAgentServerPolicyを付与。
    タスクロール  ・・・コンテナで使用されるIAMロール
    タスク実行ロール・・・AWSのAPIを実行するために使用されるIAMロール。
               コンテナログをCloudWatchログに転送する用途などで使用。

参考資料:Amazon ECS タスク実行ロール

SSMでパラメーターの作成

SSMのParameter Storeにて、取得したいメトリクスを定義したパラメーター(JSON)を作成。

ECSのタスク定義及びサービスの作成

タスクで使用するイメージ指定
cloudwatch-agent/cloudwatch-agen

メトリクス取得のためのCloudWatchの設定値は、環境変数に渡すことによってSSMのパラメーターから取得可能。環境変数のキー「CW_CONFIG_CONTENT」に指定する値はParameter Storeで定義した名前と同じ名前を指定する。

ログを出力したい場合は以下の設定を行う。
awslogs-create-groupオプションを指定することで、ロググループが自動作成される。

タスク作成後、サービス作成。サービススケジューラーはDAEMONでよい。
サービス作成後、タスクのデプロイを行い、CloudWatchエージェントのコンテナからEC2のホストに対してメトリクスが取得できているか確認できる。

参照記事:CloudWatch エージェントの構築 #AWS - Qiita

Discussion