どうも、相変わらずSKYRIMがアナザースカイな森屋です。
CloudWatchは監視サーバ不要で様々なAWSサービスの監視を行えるため、非常に強力なツールです。
しかし、例えばEC2インスタンスのメモリ使用率など、デフォルトでは収集できないデータ(メトリクス)が有るんですね。
こうしたメトリクスを収集する文脈において、しばしばカスタムメトリクスを収集すると言われます。
カスタムメトリクスを収集する方法としては、収集スクリプトを作ってCloudWatchに投げ込む方法と、今回取り扱う「CloudWatchエージェント」に収集してもらう方法がメジャーかと思います。
本記事の執筆にあたって使用した環境は、東京リージョンで稼働する「CentOS7 64bit」です。
とはいえ、他のリージョンやOSでも、ところどころ読み替える必要はありますが、使える記事になっていると思います。
目次
大まかな流れ
公式手順はコチラです。
本記事では、公式手順をベースに必要な説明だけ抜粋してお届けします。
1.ロール類の調整(EC2からCloudWatchへのアクセス、AWS System Managerとの連携)
2.CloudWatchエージェントのインストール
3.CloudWatchエージェントの設定と開始
1. ロール類の調整
↓の辺りのお話です。
CloudWatch エージェントで使用する IAM ロールおよびユーザーを作成する - Amazon CloudWatch
監視対象のEC2に割り当てるIAMロールを作成します。ざっと以下の権限が必要になります。
- EC2からCloudWatchに情報を書き込むため
- AWS Systems Managerで設定した内容を読む
ロールの作成
EC2が、CloudWatchやAWS System Managerに接続するため、ロールを割り当てます。
公式手順ではポリシーを新規作成していますが、実はAWS管理ポリシーが存在しています。
「CloudWatchAgentAdminPolicy」というポリシー名なので、今回はこれを使いましょう。
「CloudWatchAgentServerPolicy」というポリシーでも良いですが、本記事ではこの後にAWS System Managerへの書き込み権限を要するため前者を使います。ちなみにAWS管理ポリシーとは、AWS側の様々な変更に合わせて、IAMポリシーの変更が必要になる場合、AWSが上手いこと調整してくれるポリシーのことです。
公式手順の様にJSONで書いちゃうと、自分で調整する必要があるため、AWS管理ポリシーは積極的に利用していきましょう。
では、ロールを作っていきましょう。
マネージメントコンソールにログインし、IAMのダッシュボードを開きます。
左ペインの[ロール]を選択し、[ロールの作成]を選択。
[AWSサービス] 内の [EC2] を選択し、[次のステップ: アクセス権限] を選択。
フィルターに以下を入力し、それぞれにチェックを付け、[次のステップ: 確認] を選択。AmazonEC2RoleforSSM , CloudWatchAgentAdminPolicy
ロール名やロールの説明を適当に入力し、「信頼されたエンティティ」に設定したポリシーが有ることを確認後、[ロールの作成] を選択して完了。
私は、ロール名を「CloudWatchAgentAdminRole」としました。
ロールを監視対象にアタッチ
作成した「CloudWatchAgentAdminRole」を、監視対象にアタッチします。
アタッチすると、監視対象がロールの持つアクセス権限を借りることができます。
「借りる」としたのは、ロールは付けて外してするものなので、「専用のロール」とすると違和感が有るためです。
EC2インスタンス画面で、監視対象にチェックを入れ [アクション]→[インスタンスの設定]→[IAMロールの割り当て/置換]を選択。
「IAMロール」のプルダウンリストから、作成したロール名を選択し、[適用]を選択することで、アタッチ完了。
私の場合は、[CloudWatchAgentAdminRole] を選択。
2. CloudWatchエージェントのインストール
↓の辺りのお話です。
開始方法: CloudWatch エージェントを最初のインスタンスにインストールする - Amazon CloudWatch
インストール方法として、 - AWS Systems Managerからインストールする
- コマンドラインでインストールする
の二通りが有ります。今回は、先に書いた通り前者のパターンで進めます。まずはSSM Agentをインストール
ページが少し移りまして、↓の辺りのお話です。
Amazon EC2 Linux インスタンスに SSM エージェント を手動でインストールする - AWS Systems Manager
監視対象にて、以下の手順を実施して下さい。# mkdir /tmp/ssm # yum install https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm ※URL中のリージョンは環境に合わせて変えて下さい # systemctl status amazon-ssm-agent ※起動していることを確認。してなかったら起動 # systemctl is-enabled amazon-ssm-agent ※enabledであることを確認。違ったら設定
AWS System Manager経由のCloudWatchエージェントのインストール
ページが戻りまして、↓の「Run Command を使用して CloudWatch エージェントパッケージをダウンロードする」の辺りからのお話です。
開始方法: CloudWatch エージェントを最初のインスタンスにインストールする - Amazon CloudWatch
正直「コマンドラインを使用して CloudWatch エージェントを~」の方が早いですが、せっかくなのでAWSサービス使っていきましょう。
AWS Systems Managerの[Run Command] を選択し、[コマンドを実行] を選択します。
検索フィールドで、[ドキュメント名のプレフィックス] [等しい] [AWS-ConfigureAWSPackage] という具合に入力し、表示された「AWS-ConfigureAWSPackage」にチェックを入れます。
ターゲットは[インスタンスの手動選択] を選択の上で監視対象インスタンスにチェックを入れます。
コマンドのパラメータでは、以下を設定します。Action : Install Name : AmazonCloudWatchAgent Version : latest
その他の設定項目は今回は無視し、[実行] を選択すると、インストールが実行されます。
コマンドの実行結果等が確認できるページに飛びますが、更新する前は「ターゲットと出力」のステータスは進行中になっていると思います。
監視対象インスタンスにチェックを入れて、[出力の表示] を選択してみましょう。
成功した様ですね。この状態ではまだ使えないので、設定と開始を行っていきましょう。
3. CloudWatchエージェントの設定と開始
↓の辺りのお話です。
ウィザードを使用して CloudWatch エージェント設定ファイルを作成する - Amazon CloudWatch
エージェントが収集するメトリクスは、設定ファイルに基づいています。
作成・編集は自らJSON形式の設定ファイルを作成するか、もしくは設定ウィザードを監視対象のPC上で行う必要があります。
今回は設定ウィザードを利用しますが、「作成した設定をAWS Systems Managerのパラメータストアに保管する」という機能があります。
このために、「CloudWatchAgentAdminPolicy」が必要だったわけですね。
パラメータストア上に設定ファイルを保管することで、他のサーバを監視する際に使い回せます。
言い換えると、二台目以降においては、このポリシーは不要です。
代わりに「CloudWatchAgentServerPolicy」を割り当てた方がセキュアです。設定ウィザードで設定ファイルを作成
ウィザードの実行は簡単です。監視対象での作業に移ります。
既に監視対象に設置されている、以下のプログラムを実行するのみです。
実行すると、いろいろ質問されるので、適宜答えます。# /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
執筆時点、質問は以下の通りでした。
1. 監視対象のOSはLinux?Windows? → linux 2. 監視対象はEC2?もしくはオンプレミス? → EC2 3. CPUとかメモリとか、ホストのメトリクスを収集する? → したい 4. CPUのメトリクスはコア毎に収集する?CloudWatchの追加料金が発生するけど。 → t2.microで作ったので要らない 5. 利用可能なディメンションを追加する? → 追加する 6. メトリクスは何秒単位で収集する?全部のメトリクスに適用されるけど、個別にしたかったらJSON編集してね。 → 60秒 7. 事前定義されたメトリクスセットの中から、どのレベルを収集しますか? → ベーシック。ただ入れたいだけだったので、メモリだけでも取れたら良いなと ※AWSドキュメントの「CloudWatch エージェントの事前定義されたメトリクスセット」または以下のスクショ参照 8. 表示した設定ファイルで大丈夫? → 大丈夫 9. インポートしたいCloudWatch Log Agentの設定ファイルは有る? → 無い 10. 何かのログ監視したい? → はい(ログファイルのパスを聞かれるので、ここでは[/var/log/messages]を指定。次はロググループ名を聞かれるが、デフォルトのmessagesを回答) 11. 他に監視したいログファイルは有る? → 無い 12. 表示した設定ファイルを確認した上で、これをSSMパラメータストアに保管したい? → したい 13. 保管する場合のパラメータストア名は何が良い? → AmazonCloudWatch-CentOS7 14. どこのリージョンに保管する? → ap-northeast-1 15. パラメータストアに転送するとき、どっちのクレデンシャルを使えば良い? → デフォルトの1を回答
※事前定義されたメトリクスセット
全ての回答後、以下が表示されたら成功です。Successfully put config to parameter store AmazonCloudWatch-CentOS7. Program exits now.
CloudWatchエージェントの開始
マネジメントコンソールでの作業に戻ります。
AWS Systems Managerの[Run Command] を選択し、[コマンドの実行] を選択します。(先ほどインストール時のコマンドが表示されてますが、無視して下さい)
検索フィールドで、[ドキュメント名のプレフィックス] [等しい] [AmazonCloudWatch-ManageAgent] という具合に入力し、表示された「AmazonCloudWatch-ManageAgent」にチェックを入れます。
ターゲットは[インスタンスの手動選択] を選択の上で監視対象インスタンスにチェックを入れます。
コマンドのパラメータでは、以下を設定します。Action : configure Mode : ec2 Optional Configuration Source : ssm Optional Configuration Location : AmazonCloudWatch-CentOS7 (ウィザードで指定した設定ファイル名を入力) Optional Restart : yes
その他の設定項目は今回は無視し、[実行] を選択すると、設定の適用とCloudWatchエージェントの開始が実行されます。
コマンドの実行結果等が確認できるページに飛びますが、更新する前は「ターゲットと出力」のステータスは進行中になっていると思います。
監視対象インスタンスにチェックを入れて、[出力の表示] を選択してみましょう。
成功していたら、無事CloudWatchエージェントによる、様々なメトリクスの取得が開始されていることでしょう!
CloudWatchのコンソールにて、[メトリクス] → [全てのメトリクス] → [CWAgent] と進めば、あとは好きなメトリクスを選択して確認して下さい。
まとめ
PSVRの値下げが発表されたので、みなさんも買ってSKYRIMの世界に移住しましょう!