Lightsail インスタンス上の WordPress のディスクとメモリのメトリクスを監視する方法
はじめに
バンクーバーでポケモン GO に勤しむオペレーションチームの者です。
さて今回は Lightsail インスタンス上の WordPress のディスクとメモリのメトリクスを取得する機会がありましたので、設定方法についてブログを書きたいと思います。
① IAM ユーザーの作成
CloudWatch にデータを送るための権限を持つ IAM ユーザーを作成します。
IAM コンソールからユーザーを選択し、「ユーザーを追加」をクリックします。
ユーザー名を「lightsail-cloudwatch-agent」とし、「アクセスキー - プログラムによるアクセス」を選択します。
次のステップに進み、「既存のポリシーを直接アタッチ」を選択、検索バーに「CloudWatchAgentServerPolicy」と入力してそのポリシーにチェックマークを入れます。
オプションのタグの追加はスキップし、レビュー画面で内容に問題ないことを確認したら、「ユーザーの作成」をクリックします。ユーザー作成時に生成される csv ファイルは後ほど使用するので保存しておいてください。
② ターミナルで SSH を使用してインスタンスに接続
ブラウザベースの SSH クライアントで接続を行うことも可能ですが、今回はターミナルで SSH 接続を行います。
対象インスタンスが実行中であることを確認し、対象インスタンス名をクリックします。
「接続」タブの一番下にある「独自の SSH クライアントを使用する」より、パブリック IPを確認します。
そして、このインスタンスはデフォルトのキーペアを使用しているため、「アカウントページ」をクリックしてプライベートキーをダウンロードをしに行きます。
デフォルトキーの「ダウンロード」を選択します。
ターミナルを開いて、ダウンロードしたデフォルトキーがあるパスに移動し、chmod
コマンドで読み取り・書き込み権限を変更します。
私はオレゴンリージョンでのデフォルトキーを利用しているので以下のようにコマンド入力しました。
$ sudo chmod 600 LightsailDefaultKey-us-west-2.pem
以下のコマンドのパブリック IP を先ほど確認したパブリック IP に置き換えた上で SSH 接続を行ってください。
WordPress は Certified by Bitnami インスタンス上で稼働しているので、ユーザー名は bitnami
です。
$ ssh -i LightsailDefaultKey-us-west-2.pem bitnami@パブリックIP
インスタンスに接続ができると、以下のようなメッセージが表示されます。
The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. ___ _ _ _ | _ |_) |_ _ _ __ _ _ __ (_) | _ \ | _| ' \/ _` | ' \| | |___/_|\__|_|_|\__,_|_|_|_|_| *** Welcome to the WordPress packaged by Bitnami 5.8.1-18 ***
③ CloudWatch エージェントのインストール
次に CloudWatch エージェントをダウンロードします。
Certified by Bitnami インスタンス上で稼働している WordPress の OS は Debian なので、以下のコマンドを実行します。
$ wget https://s3.amazonaws.com/amazoncloudwatch-agent/debian/amd64/latest/amazon-cloudwatch-agent.deb
次に以下のコマンドを実行します。
$ sudo dpkg -i -E ./amazon-cloudwatch-agent.deb Selecting previously unselected package amazon-cloudwatch-agent. (Reading database ... 32069 files and directories currently installed.) Preparing to unpack ./amazon-cloudwatch-agent.deb ... create group cwagent, result: 0 create user cwagent, result: 0 Unpacking amazon-cloudwatch-agent (1.247349.0b251399-1) ... Setting up amazon-cloudwatch-agent (1.247349.0b251399-1) ...
④ クレデンシャルのセットアップ
CloudWatch エージェントが AWS リソースにアクセスできるようにクレデンシャルのセットアップを行います。
$ sudo aws configure --profile AmazonCloudWatchAgent
IAM ユーザー作成時に生成された csv ファイルを参考にアクセスキーとシークレットアクセスキーを入力します。
AWS Access Key ID [None]:******************XK AWS Secret Access Key [None]: ******************7c Default region name [None]: Default output format [None]:
⑤ ウィザードを使用して CloudWatch 設定ファイルを生成する
以下のコマンドを実行し、ウィザードを起動します。
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
そしてAWS ナレッジセンターの記事を参考にしつつ、質問に回答していきます。
以下を除くすべての質問に対してデフォルトの回答を選択できるとのことで、その点だけ注意して進めていきます。
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:
2Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
2Do you want to monitor metrics from CollectD?
1. yes
2. no
default choice: [1]:
2Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply.
1. yes
2. no
default choice: [1]:
2Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
1. yes
2. no
default choice: [1]:
2Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
2Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
2
⑥ CloudWatch エージェントの設定を行う
CloudWatch エージェントに先程設定した profile を使用するように設定を行います。
$ sudo vim /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml
i
をタイプして入力モードに変更して、以下の設定をペーストします。
[credentials] shared_credential_profile = "AmazonCloudWatchAgent"
esc で入力モードを抜けた後、wq!
をタイプして vim から抜けます。
反映されているか以下で念のため確認しておきます。
$ sudo cat /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml # This common-config is used to configure items used for both ssm and cloudwatch access ## Configuration for shared credential. ## Default credential strategy will be used if it is absent here: ## Instance role is used for EC2 case by default. ## AmazonCloudWatchAgent profile is used for onPremise case by default. # [credentials] # shared_credential_profile = "{profile_name}" # shared_credential_file = "{file_name}" [credentials] shared_credential_profile = "AmazonCloudWatchAgent" (省略)
⑦ CloudWatch エージェントを有効にする
以下のコマンドで CloudWatch エージェントを有効にします。
「Configuration validation succeeded」が表示されることを確認します。
$ sudo amazon-cloudwatch-agent-ctl -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -a fetch-config -s (省略) Configuration validation first phase succeeded /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 succeeded Configuration validation succeeded
以下のコマンドで CloudWatch エージェントが問題なく起動されているかを確認します。
$ sudo amazon-cloudwatch-agent-ctl -a status { "status": "running", "starttime": "2021-11-29T18:48:28+00:00", "configstatus": "configured", "cwoc_status": "stopped", "cwoc_starttime": "", "cwoc_configstatus": "not configured", "version": "1.247349.0b251399" }
⑧ CloudWatch メトリクスを確認する
無事に CloudWatch にてメモリとディスクのメトリクスを確認することができました。
CloudWatch でメトリクスが表示されない場合
CloudWatch エージェントのログを以下のコマンドで確認し、エラーを解消する必要があります。
$ sudo cat /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
エラー別対処法
AccessDenied で IAM ユーザーの権限が足りてないというエラー
E! cloudwatch: code: AccessDenied, message: User: arn:aws:iam::XXXXXXXXXXXX:user/lightsail-cloudwatch-agent is not authorized to perform: cloudwatch:PutMetricData because no identity-based policy allows the cloudwatch:PutMetricData action, original error: <nil>
$ sudo aws configure --profile AmazonCloudWatchAgent
で正しい IAM ユーザーのアクセスキーなどが格納されているか、IAM ポリシーをつけ間違えていないかをご確認ください。
AccessDenied で IAM ロールの権限が足りてないというエラー
E! cloudwatch: code: AccessDenied, message: User: arn:aws:sts::XXXXXXXXXXXX:assumed-role/AmazonLightsailInstanceRole/i-XXXXXXXXXXXXXXXXX is not authorized to perform: cloudwatch:PutMetricData because no identity-based policy allows the cloudwatch:PutMetricData action, original error: <nil>
$ sudo vim /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml
で正しくクレデンシャルが入力されているかご確認ください。
権限不足でクレデンシャルファイルが開けないというエラー
E! cloudwatch: code: SharedCredsLoad, message: failed to load shared credentials file, original error: FailedRead: unable to open file caused by: open /root/.aws/credentials: permission denied
ウィザードを使用して CloudWatch 設定ファイルを生成するステップを見直してみてください。
おわりに
AWS ブログとナレッジセンターの記事をもとに設定を行ってきましたが、意外と詰まる部分がありました。 CloudWatch エージェント周りのことが勉強になりました。以上です!