AWS ELBのログ記録を有効化してアクセス解析する方法を初心者向けに解説!
生徒
「先生、AWSのロードバランサーでアクセスログを記録できると聞いたんですが、どうやって設定するんですか?」
先生
「良い質問ですね。AWSのElastic Load Balancer(エラスティックロードバランサー、略してELB)には、アクセスログを記録する機能があります。これを有効化すると、ユーザーがどのようにWebサイトにアクセスしているかを詳しく解析できますよ。」
生徒
「なるほど!ログを取ると、どんなことがわかるんですか?」
先生
「例えば、アクセス元のIPアドレス(アイピーアドレス)、利用しているブラウザ、通信にかかった時間、レスポンスのステータスコードなどがわかります。これを活用すれば、セキュリティ対策や性能改善にもつながりますよ。」
1. ELBのログ記録とは?仕組みをわかりやすく解説
ELB(イーエルビー)はElastic Load Balancer(エラスティックロードバランサー)の略称で、Webサイトへのアクセスを複数のサーバーにバランス良く振り分ける「交通整理」のような役割を担うAWSのサービスです。
ELBのログ記録(アクセスログ機能)とは、あなたのサイトに「いつ」「誰が」「どのページに」「どのような結果(成功かエラーか)」でアクセスしたかという詳細な足跡を、Amazon S3(エスリー)というクラウド上の保管庫に自動で保存する仕組みのことです。
Webサイトを「お店」に例えると、ELBのログは防犯カメラの映像や、来店者名簿のようなものです。これがあるおかげで、後から「昨日の夜、急にお客さんが増えたのはなぜか?」「エラーで入れなかったお客さんはいなかったか?」を正確に振り返ることができます。
ログは、以下のような形式で1行ずつ記録されていきます。専門的な用語が並んでいますが、左から「時間」「ELBの名前」「アクセス元IP」「応答時間」「結果コード」といった情報が整理されて出力されます。
ログのサンプルイメージ:
2026-02-01T12:00:01.123456Z my-load-balancer 192.168.1.1:54321 10.0.0.1:80 0.001 0.002 0.001 200 200 0 500 "GET http://example.com:80/index.html HTTP/1.1"
このログは通常、5分または60分の一定間隔でS3へファイルとして書き出されます。プログラミングの知識がなくても、設定をONにするだけで自動的に記録が溜まっていくため、運用管理の第一歩として非常に重要な機能です。
2. なぜログ記録が重要なのか?
ログを記録することで、以下のようなメリットがあります。
- 不正アクセスの検知
- レスポンス時間の計測とパフォーマンス改善
- ユーザーのアクセス傾向分析
- 障害発生時の原因追跡
例えば、ある時間帯にアクセスが急増した場合、ログからどの地域から集中しているのかを把握できます。これはWebサービスの拡張計画にも役立ちます。
3. ログ記録の仕組み
ELBのログはS3バケットに保存されます。S3(エスリー)はオブジェクトストレージで、ログファイルを長期間保管できます。ログファイル名には日付やロードバランサーの情報が含まれるため、簡単に整理できます。
ログ内容には以下が含まれます。
- リクエスト元のIPアドレス
- ターゲットサーバーの情報
- リクエストとレスポンスの時間
- HTTPステータスコード
- 転送されたデータサイズ
こうした詳細データは、アクセス解析ツールやセキュリティモニタリングに活用できます。
4. ELBログ記録の有効化手順
実際にELBでログ記録を有効化する手順は次の通りです。
- AWSマネジメントコンソールにログインします。
- サービス一覧から「EC2」を選択し、左メニューの「ロードバランサー」をクリックします。
- 対象のELBを選び、「属性」タブを開きます。
- 「アクセスログ」を有効化します。
- S3バケットを指定し、保存先を設定します。
- 保存して設定を反映します。
この設定を行うことで、アクセスログがS3に自動で出力されるようになります。
5. アクセスログを解析する方法
ログがS3に保存されたら、それを解析することで具体的なアクセス状況がわかります。解析にはいくつかの方法があります。
- 手動解析:ログファイルをダウンロードしてテキストエディタで確認。
- Amazon Athena(アテナ):S3に保存されたログに対してSQL(エスキューエル)クエリを実行して解析。
- 外部解析ツール:ログをSplunk(スプランク)やElasticsearch(エラスティックサーチ)に取り込み可視化。
Athenaを使えば、コードを書かなくても簡単に「特定のIPからのアクセス数」や「レスポンスコード別の件数」を集計できます。
6. ログ記録を利用する際の注意点
ログ機能は便利ですが、次のポイントに注意してください。
- ログ保存にはS3のストレージ料金がかかる。
- 保存期間を設定しないと、不要なログが増えてコストが上がる。
- 個人情報を含まないように取り扱いに注意する。
コストを抑えるためには、S3のライフサイクルルールを設定し、古いログを自動削除またはGlacier(グレイシャー、低コストストレージ)に移す方法がおすすめです。
まとめ
ここまで、AWSのELB(Elastic Load Balancer)におけるアクセスログの有効化から、その活用方法、さらには注意点について詳しく解説してきました。ロードバランサーは単にアクセスを振り分けるだけの装置ではなく、Webサービス全体の健康状態やユーザーの行動を把握するための「情報の窓口」としての役割も担っています。
ログを記録し、適切に解析することは、システムの安定運用において欠かせないプロセスです。特に大規模なトラフィックを扱う環境では、問題が発生した際に「何が起きたのか」を正確に把握するための唯一の手がかりがログになることも少なくありません。
ELBアクセスログ運用のポイント再確認
ELBのアクセスログを運用する上で、特に意識しておきたいポイントを改めて整理します。まず、ログの保存先となるAmazon S3のバケットポリシーの設定です。ELBがログを書き込めるように、正しい権限を付与したJSON形式のポリシーを設定する必要があります。
S3バケットポリシーの設定例
下記は、ELBがS3バケットにログを書き込むことを許可するためのバケットポリシーのサンプルです。これを適用することで、安全にログ転送が行われます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::elb-account-id:root"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::your-log-bucket-name/prefix/AWSLogs/your-aws-account-id/*"
}
]
}
※「elb-account-id」の部分は、リージョンごとに決められたAWSのアカウントIDを入力する必要があります。ご自身の利用しているリージョンに合わせて書き換えてください。
Amazon Athenaを用いたログ解析の準備
S3に保存された膨大なログデータを効率よく検索・集計するには、Amazon Athena(アテナ)が非常に強力です。Athenaを使用するためには、まずログの形式に合わせてテーブルを作成する必要があります。以下は、Application Load Balancer (ALB) のログを解析するためのテーブル作成クエリの例です。
CREATE EXTERNAL TABLE IF NOT EXISTS alb_logs (
type string,
time string,
elb string,
client_ip string,
client_port int,
target_ip string,
target_port int,
request_processing_time double,
target_processing_time double,
response_processing_time double,
elb_status_code int,
target_status_code int,
received_bytes bigint,
sent_bytes bigint,
request_verb string,
request_url string,
request_proto string,
user_agent string,
ssl_cipher string,
ssl_protocol string,
target_group_arn string,
trace_id string,
domain_name string,
chosen_cert_arn string,
matched_rule_priority string,
request_creation_time string,
actions_executed string,
redirect_url string,
lambda_error_reason string,
target_port_list string,
target_status_code_list string,
classification string,
classification_reason string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1',
'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) ([^ ]*) (- |[^ ]*)\" \"([^\"]*)\" ([A-Z0-9-]+) ([A-Za-z0-9.-]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^\"]*)\" ([-.0-9]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^ ]*)\" (.*) (.*) (.*) (.*)'
)
LOCATION 's3://your-log-bucket-name/prefix/AWSLogs/your-aws-account-id/elasticloadbalancing/region/';
このようにテーブルを定義しておけば、標準的なSQLを使って「どの時間帯に500エラー(サーバーエラー)が多発したか」などを一瞬で集計できるようになります。運用フェーズでは、こうしたツールを使いこなすことが重要です。
運用保守に役立つLinuxコマンドの活用
S3からローカル環境にログをダウンロードして、サクッと中身を確認したい場合には、AWS CLI(コマンドラインインターフェース)を利用するのが便利です。以下のコマンドを使って、特定のログファイルを同期したり表示したりできます。
aws s3 sync s3://your-log-bucket-name/ ./local-logs/
download: s3://your-log-bucket-name/AWSLogs/123456789012/elasticloadbalancing/ap-northeast-1/2026/01/29/123456789012_elasticloadbalancing_ap-northeast-1_app.my-load-balancer.abc123_20260129T0000Z_10.0.0.1_2j7k3l.log.gz to local-logs/sample.log.gz
ダウンロードしたログが圧縮されている場合は、`zcat`などのコマンドを組み合わせて、特定のステータスコードが含まれる行だけを抽出することも可能です。
zcat local-logs/sample.log.gz | grep "503" | head -n 5
https 2026-01-29T00:01:02.123456Z app/my-load-balancer/abc123 192.168.1.1:54321 - -1 -1 -1 503 - 123 456 "GET https://example.com:443/ HTTP/1.1" "Mozilla/5.0" - - - - - "-" "-" "-" - - "-" "-" "-"
最後に:継続的なモニタリングの重要性
クラウドの世界では、リソースの状況が刻一刻と変化します。ELBのログは単なる「過去の記録」ではなく、「未来の改善案」を導き出すための貴重なリソースです。 今回紹介した設定は、一度行えば自動的にデータが蓄積されていきますが、そのデータをどう料理するかがエンジニアの腕の見せ所です。コスト管理のためにS3のライフサイクルポリシーを設定することも忘れず、効率的なログ運用を目指しましょう。
生徒
先生、まとめまで読んでELBのログの重要性が本当によくわかりました。単に「オンにする」だけじゃなくて、S3のバケットポリシーやAthenaでの解析準備まで含めてセットなんですね。
先生
その通りです!設定自体は簡単ですが、いざトラブルが起きた時に「ログをどうやって見るか」が分かっていないと、宝の持ち腐れになってしまいますからね。今回紹介したSQLのクエリなどは、ぜひメモしておいてください。
生徒
はい!特に「S3のライフサイクルルール」の話が印象的でした。放置しておくとログが溜まりすぎて、AWSの請求金額を見てびっくりしちゃいそうですもんね(笑)。
先生
ははは、そうですね。不要なログは半年で削除したり、安いストレージのGlacierに移動させたりするのが賢い運用のコツです。コマンドを使って手元でサクッと確認する方法も覚えると、調査スピードが格段に上がりますよ。
生徒
コマンドラインで`grep`を使ってエラーを探すの、エンジニアっぽくて憧れます!さっそく自分のテスト環境でも設定してみようと思います。
先生
その意気です。実際に触ってみるのが一番の近道ですよ。もし権限エラーなどが出たら、先ほど解説したバケットポリシーをもう一度見直してみてくださいね。頑張りましょう!