
はじめに
LightsailのWordPressから始まり、CloudWatchでのログ集約、FirehoseとS3を使った永久保存、そしてログイン画面への攻撃検知アラームと、これまで3回にわたってAWSの本格的な「ログ分析・監視基盤」を自作してきました。
「AWSでこれだけ色々なサービスを組み合わせたら、毎月数千円くらい請求が来るのでは…?」と不安に思うかもしれません。
しかし結論から言うと、月間数万PV以下の個人ブログであれば、この超本格的なデータパイプラインは**「月額ほぼ0円」**で運用可能です!今回はその驚きのコスト内訳と、S3に保存したログを「Amazon Athena」を使って一瞬で分析する方法をご紹介します。
なぜ0円?自作ログ基盤のコストパフォーマンス検証
今回のシステムで使っているAWSサービス群の「料金の仕組み」と、月間数千PVのブログを想定した「実際の請求額」をまとめました。(※東京リージョンの料金です)
| 使っているAWSサービス | 料金の仕組み(課金ポイント) | 今回の想定コスト |
| CloudWatch Logs | データの収集量と保存量 | 0円(毎月5GBまで永久無料枠) |
| Data Firehose | 処理したデータ量 | 0円(1GBあたり約5円。数MBなら0円) |
| Amazon S3 | 保存したデータ容量 | 0円(1GBあたり約3.8円。数MBなら0円) |
| CloudWatch アラーム | アラームの設置数 | 0円(毎月10個まで永久無料枠) |
| Amazon SNS (メール) | メールの送信回数 | 0円(毎月1000件まで永久無料枠) |
| Amazon Athena | 検索(スキャン)したデータ量 | 0円(1TBあたり約750円。数MBなら0円) |
ご覧の通り、AWSには「Always Free(永久無料枠)」が豊富に用意されており、さらに従量課金のサービス(S3やFirehoseなど)も、個人ブログのデータ量(月に数MB〜数十MB程度)であれば**「1円未満のため請求なし($0.00)」**となります。
サーバーの負荷を一切上げずに、これだけのエンタープライズ級の環境を無料で維持できるのが、自作の最大のメリットです!
全体像
簡単にではありますが、下記の図で全体像がわかると思います

lightsail のログをcloudwatch で吐き出して、Firehorse経由でS3におくり、Athena で分析という形です。SNSの通知はオプションですのでまたの機会があれば、別の記事で書こうと思います
Amazon AthenaでS3のログをSQL分析してみよう!
S3にログを永久保存できたのは良いですが、S3の画面から直接ファイルの中身を見ることはできません。(ダウンロードして解凍する必要があります)
そこで活躍するのが**「Amazon Athena(アテナ)」**です。Athenaを使えば、S3に置いてある大量のログファイルに対して、データベースを構築することなく直接「SQL」を打ち込んで検索・分析ができます。
ステップ1:Athenaの「結果保存用フォルダ」を作る
Athenaを使うには、まず「検索結果を一時的に保存するS3フォルダ」を指定する必要があります。
- AWSマネジメントコンソールで**「S3」**を開きます。

- 前回作ったバケット(例:polepolelife-logs)を開きます。

- **「フォルダの作成」**をクリックし、名前に
athena-resultsと入力して作成します。


フォルダを作成します

ステップ2:Athenaを開いて初期設定をする
- 検索バーで**「Athena」**と検索して開きます。

- 左メニューの「クエリエディタ」を開きます。

- 画面の上部に「クエリ結果の場所を設定してください」という青い警告文が出るので、**「設定を編集」**をクリックします。

クエリ設定のタブで クエリ結果の場所と暗号化を管理する があるので、そこでBrowse S3 を押して先程のS3のロケーションをクエリ結果として指定します
下記の画面で「管理」をクリック

Browse S3 で検索結果の場所を指定する

先程作成した Athena-result を指定します

ログを読み込む「テーブル(表)」を作成する
S3にあるテキストデータをAthenaに「これはアクセスログだよ」と認識させるための設定(テーブル作成)を行います。
クエリエディタの広くて白い入力欄に、以下のSQL文をすべてコピーして貼り付け、右上の**「実行」**ボタンを押してください。
CREATE EXTERNAL TABLE IF NOT EXISTS wp_access_logs (
client_ip string,
client_id string,
user_id string,
request_date string,
request string,
status_code string,
object_size string,
referer string,
user_agent string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "^([^ ]+) ([^ ]+) ([^ ]+) \\[([^\\]]+)\\] \"([^\"]+)\" ([0-9]+) ([0-9]+|-) \"([^\"]*)\" \"([^\"]*)\".*"
)
LOCATION 's3://polepolelife-logs/ athena-results/';

※注意:一番最後の LOCATION の部分は、前回自分が作ったS3のパスに書き換えてください。
例:s3://yourblog-logs-2026/ (必ず最後に / をつけてください)
左側の「テーブル」という欄に wp_access_logs が表示されれば準備完了です!

Firehoseの設定変更
CloudWatch Logsは、データをFirehoseに渡す際、通信量を節約するために**「全体をGZIPでガチガチに圧縮した上で、AWS特有の複雑なJSON形式で包んで」**送っています。
そのため、今のS3には「WordPressの綺麗なアクセスログ」ではなく、「解凍できない謎の暗号データ(バイナリ)」が保存されてしまっています。Athenaはそれをテキストとして読もうとして「なんだこれ?読めないから結果0件にしとこう」と無視してしまっている状態です。
Firehoseの「自動解凍&抽出機能」をオンにする!
わざわざAthena側で難しいSQL(UNNESTなど)をこねくり回す必要はありません。AWSが最近追加した神機能を使って、Firehoseに「S3に保存する前に解凍して、中身のログだけを綺麗に取り出して!」と指示するだけで解決します。
Firehoseの設定を変更する
- AWSマネジメントコンソールで 「Data Firehose」 を開きます

- 対象のストリーム(
wp-log-delivery-stream)をクリックします。

- 「設定 (Configuration)」 タブを開きます。

- 下にスクロールし 「レコードの変換と形式変換 (Transform and convert records)」 の右上にある 「編集」 をクリックします。

- 以下の2つのチェックを「オン」にします。
- Amazon CloudWatch Logsからのソースレコードを解凍する:
解凍をオンにするを選択
- Amazon CloudWatch Logsからのソースレコードを解凍する:
- ログイベントからメッセージフィールドのみを抽出する:
メッセージ抽出をオンにするを選択 (※この2つ目のチェックが超重要です!AWS特有のJSONの殻を破り捨てて、純粋なApacheログだけをS3に保存してくれます)

「変更の保存」をクリックします。
実際にSQLで分析してみよう!
これでS3のログを自由に分析できるようになりました。クエリエディタの「+」ボタンを押して新しいタブを開き、いくつか便利なSQLを試してみましょう!
例1:直近のアクセスを10件だけ見てみる
SELECT * FROM wp_access_logs LIMIT 10;
これを実行すると、Excelのような綺麗な表形式でアクセスログが表示されます!

例2:どのページに一番アクセスが来ているかランキングを出す
SELECT request, count(*) as count
FROM wp_access_logs
GROUP BY request
ORDER BY count DESC
LIMIT 10;

例3:不審なアクセス(404エラー)を出しているIPアドレスを特定する
SELECT client_ip, count(*) as error_count
FROM wp_access_logs
WHERE status_code = '404'
GROUP BY client_ip
ORDER BY error_count DESC
LIMIT 10;

このように、Athenaを使えば「いつ・誰が・どこにアクセスして・どんなエラーが出たのか」を一瞬で丸裸にできます!
まとめ:自分だけの最強ログ基盤が完成!
全4回にわたって構築してきた「AWSサーバーログ分析基盤」、いかがだったでしょうか。
- CloudWatch でサーバーを見に行かずにログを確認し
- Firehose + S3 で容量を気にせず実質0円で永久保存し
- EventBridge(CloudWatchアラーム) + SNS で攻撃を即座に検知し
- Athena で好きな時にビッグデータ分析ができる
大企業が数百万円かけて構築するようなシステムを、個人ブログの規模なら**「月額0円」**で運用できる。これこそがクラウド(AWS)の最大の魅力であり、エンジニアとしての大きな武器になります。
ぜひご自身のブログでも、この記事を参考に最強の監視基盤を作ってみてください!



