はじめてのCloudWatch Agent導入 (SSM & CentOS)

AWS運用自動化サービス「Cloud Automator」

こんにちは、高橋です。日々ポインコと暮らしています。
最近、兄の方が黒ばんできました。「黒ばむ」ってはじめて使いました。

ということで、今回は「はじめてのCloudWatch Agent導入」です。導入にはAmazon Systems Manager(SSM)を使います。何故SSMという略なのかと言うと、たぶん前身の「EC2 Simple Systems Manager」の名残だと思われます。たぶん。

そもそもCloudWatch Agentとは

簡単に言うと、EC2(サーバー)に入れると色々なログ(メトリクス)を収集できるよ、ってサービスです。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html

CloudWatch Agentには2種類あるんですが、今回は新しい方が対象です。違いは当社blogで確認してください!

CloudWatch Logs/統合CloudWatchエージェントの違いと移行時の注意点

そもそもSSM(Agent)とは

簡単に言うと、AWSからEC2などのリソースを管理してコマンドを実行したり、CLI操作ができたり…というものです。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/ssm-agent.html
今回はこのSSMでCloudWatch Agentを導入します。
(私は未検証ですが、コマンドラインを使用しても導入可能です)

前置き

今回対象とするOSはCentOS 7(CentOS Linux release 7.6.1810 (Core))です。
https://aws.amazon.com/marketplace/pp/B00O7WM7QW

CentOS 7のAMIのマイナーバージョンが気になった方はこちら!

Marketplace(Centos.org)提供CentOS7AMIのマイナーバージョンを調べてみた(2019/4/15現在)

それでは導入して参りましょう。

1.EC2(サーバー)の用意

まずはEC2インスタンスを用意しましょう。オンプレミスサーバーも対象にできますが、今回はEC2です。こんな感じです。

2.IAMロールの作成 / アタッチ

次に、EC2用のIAMロールを作成します。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html

各サーバーで CloudWatch Agentを実行する上で必要な IAM ロールを作成するには
・CloudWatchAgentServerPolicy
・AmazonSSMManagedInstanceCore

管理者が Parameter Store に書き込むための IAM ロールを作成するには
・CloudWatchAgentAdminPolicy
・AmazonSSMManagedInstanceCore

とのことです。
今回は1つのロールにまとめましたが、必要に応じて分けると良いかもしれません。

作成が完了したら手順1で起動したEC2インスタンスにアタッチします。SSHで接続するので、セキュリティグループの設定もお忘れなく。

3.SSM Agentの導入

CentOSには、SSM Agentはデフォルトでインストールされていませんので、以下の手順でインストールします。

インストールしたら、起動チェックします。

もし起動していない(amazon-ssm-agent is stopped)場合は起動。 

更にマネジメントコンソールの「AWS Systems Manager」-「マネージドインスタンス」画面で、対象のインスタンスが表示されていることを確認するといい感じです。

※参考にしたドキュメントはこちら
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-manual-agent-install.html#agent-install-centos

4.CloudWatch Agentの導入

SSMの用意がととのいましたので、続いて目的のCloudWatch Agentをインストールします。こちらはAWSのドキュメントから手順をそのまま抜粋しました。

  1. ナビゲーションペインで、[Run Command] を選択し、次に [Run command (コマンドの実行)] を選択します。
  2. [Command document (コマンドのドキュメント)] リストで、AWS-ConfigureAWSPackage を選択します。
  3. [Targets] セクションでオプションを選択し、更新するインスタンスを選択します。
  4. [アクション] リストで、Install を選択します。
  5. [名前] に AmazonCloudWatchAgent と入力します。
  6. [バージョン] に、latest と入力します (デフォルトで提供されていない場合)。
  7. [Run (実行)] を選択します。


コマンドがこのように成功しない場合は、各種設定を見直しましょう。

更に「rpm -qa | grep -i watch」で、「amazon-cloudwatch-agent」パッケージが導入されていることを確認するといい感じです。

5.CloudWatch Agentの設定

続いて、CloudWatch Agentの設定ファイルの初期化をおこないます。「amazon-cloudwatch-agent-config-wizard」とウィザードが用意されています。以下で実行します。

するとウィザード氏が色々質問してきますので、丁寧に答えていきましょう。

OSはCent OSなので1ですね。

オンプレじゃなくてEC2なので1。

エージェントを稼働するユーザーを選びます。

StatsDという(ざっくり言うと)データ収集ツールを有効化するかどうかです。詳しくはドキュメントを参照してください。クライアントの実装が必要になります。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-custom-metrics-statsd.html

StatsDを使うためのポート番号です。

StatsDでデーモンさんがデータ収集する周期です。

StatsDでのメトリクス集約周期です。

続いてCollectDを使ってメトリクス収集するかどうかです。「collectd」もざっくり言うとデータ収集ツールのことです。これをyesにした場合、CloudWatch Agent起動時に「open /usr/share/collectd/types.db: no such file or directory」とエラーが発生してしまいます。これはCentOSにcollectdのパッケージがインストールされていないためです。以下を参考にEPELパッケージを有効にした後、collectdをインストールしましょう。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-enable-epel/

CPUやメモリのメトリクス収集するかどうかです。もちろんしたいですね。

コアあたりのCPUを監視するかどうかです。1を選びます。

メトリクスに利用可能なディメンションを追加するかどうかです。これも1で良いですね。

メトリクスの収集間隔です。よしなに。

メトリクスセットを選択します。詳しくはドキュメントを参照しましょう。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html

このように設定ファイルの内容が表示されます。

設定内容に満足したらyesを選びます。noにすると、メトリクスセットに戻るだけです(ドラクエのいいえループ)。

既にCloudWatch Agentが存在するかどうかを選びます。今回は新規ですので2でOKです。

ログファイルの監視をおこなうかどうかを選びます。今回は/var/log/messagesを監視してみます。

「/var/log/messages」を入力します。

ロググループ名を入力します。今回はそのままmessagesにしてみます。

ログストリーム名を入力します。こちらもインスタンスIDのままにします。

他にも監視したいログファイルがあるか? と訊かれます。今回は1ファイルだけ監視するので2を選びます。1を選んだ場合は、再度監視対象の入力を促されますので、違うログファイルを指定します。

設定内容が表示されます。

SSMのパラメータストアに保存するかどうかを訊かれます。yesです。

パラメータストアの名前を決めます。AWSのポリシーに沿う場合は「AmazonCloudWatch-」で始まる必要があるとのことで、「AmazonCloudWatch-CentOS-test」としました。これに沿わないとパラメータストアへの読み書きができないらしいです。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html

パラメータストアのリージョンです。東京にします。

設定ファイルをパラメータストアに送るためのクレデンシャルをどうするか。デフォルトのままとします。

設定内容が保存されました!お疲れさまでした。
設定ファイルは「/opt/aws/amazon-cloudwatch-agent/bin/config.json」に保存されます。

6.CloudWatch Agentの起動

設定が終わったので、SSMでCloudWatch Agentを起動しましょう。手順はこちらから抜粋。

  1. [Run command] を選択します。
  2. [Command document] リストで、[AmazonCloudWatch-ManageAgent] を選択します。
  3. [ターゲット] 領域で、CloudWatch エージェントをインストールしたインスタンスを選択します。
  4. [Action] リストで、[configure] を選択します。
  5. [Optional Configuration Source] リストで、[ssm] を選択します。
  6. 「CloudWatch エージェント設定ファイルを作成する」で説明されているとおり、[Optional Configuration Location (オプションの設定場所)] ボックスに、作成して Systems Manager Parameter Store に保存したエージェント設定ファイルの名前を入力します。
  7. これらのステップを完了した後、[Optional Restart] リストで、[yes] を選択してエージェントを開始します。
  8. [Run] を選択します。
  9. 必要に応じて、[ターゲットと出力] 領域で、インスタンス名の横のボタンを選択して [View output (出力の表示)] を選択します。Systems Manager に、エージェントが正常に開始されたことが表示されます。

コマンドは成功しましたか? 失敗した場合は「出力の表示」でログを確認しましょう。

7.ログの確認

CloudWatch Agentが起動しているか、一応こちらを参考に確認しましょう。

また、以下も確認してみましょう。
・マネジメントコンソールのCloudWatch画面を開き、メトリクスに「CWAgent」が追加され、対象インスタンスのメトリクスが取得されていること
・マネジメントコンソールのCloudWatch画面を開き、ロググループに対象インスタンスのログが取得されていること

あとがき

今回はSSMを使ってCloudWatch Agentを導入してみました。
いくつかハマりポイントがあったかと思いますので、参考にしていただけると兄が喜びます。

AWS運用自動化サービス「Cloud Automator」