
ブログを運営していると、「どんなアクセスがきているのか」「サーバーでエラーは起きていないか」を把握することが重要になってきます。
しかし、サーバーに毎回ログインして黒い画面(ターミナル)でログを確認するのは面倒ですよね。そこで今回は、Amazon Lightsailで動かしているWordPressのアクセスログとエラーログを、AWSの「CloudWatch Logs」へ自動的に転送・集約する仕組みを作ります。
月間数万PV以下の個人ブログなら、AWSの「無料枠」に収まるため維持費は実質0円!初心者の方でもコピペで進められるように、手順を1つずつ丁寧に解説していきます。
前提条件
- Amazon LightsailでWordPressを構築済みであること(標準的なBitnami版を想定)
- AWSマネジメントコンソールにログインできること
- nano もしくは vi などコマンドライン操作にアレルギーがないこと
全体像
全体像としては単純で、単にEC2のログをcloudwatch に送るだけですが、少々コマンドラインのところがめんどくさいのでこの記事では詳細に書きます。特にエージェントのインストールとか、nanoでチャカチャカ編集するところがあるので、そこのところはご了承ください。

ログ送信用の「鍵(IAMユーザー)」を作成する
Lightsailのサーバーが、AWSのCloudWatchにログを書き込むための「許可証」を作成します。
AWSマネジメントコンソールにログインし、検索バーで**「IAM」**と検索して開きます。

左のメニューから**「ユーザー」をクリックし、「ユーザーの作成」**ボタンを押します。

ユーザー名に lightsail-cloudwatch-user (お好きな名前でOK)と入力し、「次へ」をクリックします。

許可のオプションで**「ポリシーを直接アタッチする」**を選択します。

検索窓に CloudWatchAgentServerPolicy と入力し、出てきたチェックボックスにチェックを入れて「次へ」→「ユーザーの作成」を押します。

作成したユーザー(lightsail-cloudwatch-user)の名前をクリックします。

**「セキュリティ認証情報」タブを開き、少し下にある「アクセスキーを作成」**をクリックします。

ユースケースは「CLI」などを選び、作成を進めます。

最後に**「アクセスキー」と「シークレットアクセスキー」が表示されます。※これは後ですぐ使うので、必ずメモ帳などにコピーしておいてください!**(画面を閉じると二度と確認できません)

Lightsailサーバーに接続する
次に、Lightsailのサーバーに入って作業をします。
- Lightsailの管理画面を開きます。

- 対象のWordPressインスタンスにある**「>_」のアイコン(SSH接続)**をクリックして、ブラウザ上で黒いターミナル画面を開きます。

CloudWatch Agentをインストールする
サーバーのログをAWSへ運んでくれる「配達員(Agent)」をインストールします。以下のコマンドを1行ずつコピーして、ターミナルに貼り付け(右クリックで貼り付け)、Enterキーを押してください。
agent のプログラムをダウンロード
wget https://amazoncloudwatch-agent.s3.amazonaws.com/debian/amd64/latest/amazon-cloudwatch-agent.deb
プログラムをインストール
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
これでインストールは完了です!
サーバーに「鍵(認証情報)」をセットする
先程作成した「アクセスキー」をサーバーに教え込みます。
鍵を置くためのフォルダを作成
sudo mkdir -p /root/.aws
2. 鍵ファイルを作成して編集モードに入る
sudo nano /root/.aws/credentials
3. 以下の内容を貼り付けて、キーの部分を書き換える 以下のテキストをコピーして貼り付け、あなたのアクセスキー と あなたのシークレットキー の部分を、ステップ1でメモしたものに書き換えてください。
[default]
aws_access_key_id = あなたのアクセスキー
aws_secret_access_key = あなたのシークレットキー
region = ap-northeast-1
※ ap-northeast-1 は東京リージョンの意味です。
保存して閉じる 書き換えたら、キーボードの Ctrl + O を押し、そのまま Enter を押して保存。その後、 Ctrl + X で編集画面を閉じます。
ログの収集ルール(設定ファイル)を作る
「どのログファイルをCloudWatchに送るか」という指示書を作成します。LightsailのWordPress(Bitnami)は、通常 /opt/bitnami/apache2/logs/ という場所にログが貯まっています。
設定ファイルを作成して編集モードに入る
sudo nano /opt/aws/amazon-cloudwatch-agent/bin/config.json2. 以下の内容をそのまま丸ごとコピーして貼り付ける
JSON
{
"agent": {
"run_as_user": "root"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/opt/bitnami/apache2/logs/access_log",
"log_group_name": "lightsail-wp-access-log",
"log_stream_name": "{instance_id}"
},
{
"file_path": "/opt/bitnami/apache2/logs/error_log",
"log_group_name": "lightsail-wp-error-log",
"log_stream_name": "{instance_id}"
}
]
}
}
}
}
※古いバージョンのBitnamiだと apache2 が apache になっていることがあります。
保存して閉じる 先ほどと同じように、 Ctrl + O → Enter → Ctrl + X で保存して閉じます。
Agentに鍵(IAMユーザー)を強制する
Lightsailの黒い画面(ターミナル)に戻って、以下の3ステップを実行してください。
共通設定ファイル(common-config.toml)を作成・編集する
以下のコマンドで、Agentの全体設定ファイルを開きます。
sudo nano /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml
2. 以下の内容を貼り付ける
開いたファイル(おそらく空っぽです)に、以下の4行をそのままコピーして貼り付けてください。 これが「/root/.aws/credentials に置いてある鍵を使ってね」という絶対命令になります。
[credentials]
shared_credential_profile = "default"
shared_credential_file = "/root/.aws/credentials"
貼り付けたら、Ctrl + O → Enter で保存し、Ctrl + X で閉じます。
Agentを「オンプレミスモード」で再起動する
ここが一番重要です!Agentを起動する際、-m ec2 ではなく -m onPremise というオプションを指定して起動します。 これにより、Lightsailの隠しロールを無視して、先ほど指定した鍵を読んでくれるようになります。
以下のコマンドをコピーして実行してください。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m onPremise -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
確認してみましょう

上記のように
Configuration validation second phase succeeded
Configuration validation succeeded
まで出力されればOKです
AWS画面でログが届いているか確認する
最後に、AWSの画面で本当にログが見れるか確認しましょう。
- AWSマネジメントコンソールで**「CloudWatch」**を検索して開きます。

- 左のメニューから「ログ管理」の中にある**「ロググループ」**をクリックします。


一覧の中に lightsail-wp-access-log と lightsail-wp-error-log が作成されているはずです!

クリックして中に入ると、サーバーのアクセス履歴がリアルタイムで表示されているのが確認できます。

まとめ
お疲れ様でした!これで、サーバーに毎回ログインしなくても、AWSの画面上で安全かつ簡単にWordPressのログを確認できるようになりました。
CloudWatch Logsは月に5GBまで無料なので、個人ブログであれば料金を気にする必要はありません。
次回は、この集めたログを使って**「Kinesis Data Firehose」経由でS3へ永久保存する仕組み(しかも実質無料!)」**を構築していきます。お楽しみに!



