ALB(Application Load Balancer)のアクセスログとエラーログには、リクエストの内容やエラーの発生状況が記録されています。これらのログから、AWS環境のトラブルシューティングや最適化が行いやすくなります。以下に、ALBのアクセスログの項目と、よく見られるエラーとその解釈について説明します。
1. ALBのアクセスログ項目一覧
ALBのアクセスログは、リクエストごとに詳細な情報を記録し、特定のS3バケットに保存されます。主な項目は以下の通りです:
-
type: リクエストの種類(httpまたはhttps)
エラー特定: ALBアクセスログのフォーマットに関する情報。通常エラーとは直接関係ありませんが、ログ形式が予期したものか確認するのに役立ちます。 -
timestamp: リクエストのタイムスタンプ
エラー特定: 特定の時間帯でエラーが集中している場合に、負荷やトラフィックの急増がエラーの原因かどうかを確認できます。 -
elb: 使用されたロードバランサーのID
例: app/my-alb/12345678abcdef)
エラー特定: エラー発生時に特定のALBに集中しているかどうかを確認できます。 -
client:port: リクエスト元のクライアントIPとポート
エラー特定: 特定のIPアドレスからのリクエストが異常に多い場合や、不正アクセスの可能性がある場合に確認します。4xxエラーが多い場合、不正なリクエストやクライアント側の問題が疑われます。 -
target:port: リクエストが転送されたターゲット(EC2インスタンスなど)IPとポート
エラー特定: 特定のターゲットに対してエラーが集中している場合、ターゲットのネットワークや設定に問題がないか確認します。接続拒否エラー(502)などが発生する場合、このフィールドで原因を特定できます。 -
request_processing_time: ロードバランサーがリクエストを処理するのに要した時間
エラー特定: リクエスト処理が遅い場合(高い値の場合)、ALBでの負荷や接続待ちの問題が疑われます。この値が異常に高い場合、ALBの処理に遅延が発生している可能性があります。 -
target_processing_time: ターゲットがリクエストを処理するのに要した時間
エラー特定: ターゲットが遅延している場合、アプリケーションのパフォーマンス問題や負荷過多が疑われます。応答が遅すぎると504(ゲートウェイタイムアウト)エラーが発生します。 -
response_processing_time: ロードバランサーがレスポンスをクライアントに返すのに要した時間
エラー特定: ALBからクライアントへのレスポンスが遅れている場合、ネットワークやALBの負荷が原因かどうか確認できます。 -
elb_status_code: ロードバランサーが返したHTTPステータスコード
エラー特定: ALBから返されるエラーコードにより、エラーの種類を特定します。
4xx(クライアントエラー): クライアントからの不正リクエストや認証エラー。
5xx(サーバーエラー): ターゲットが正常に応答していないか、ALB側での問題が原因。 -
target_status_code: ターゲットが返したHTTPステータスコード
エラー特定: ターゲットから返されるエラーコードを確認し、アプリケーションエラー(500など)や認証エラー(401など)を特定できます。ALB側で正常(200)でもターゲットが500エラーを返す場合、アプリケーションやターゲット側の問題が疑われます。 -
received_bytes / sent_bytes: 受信および送信されたバイト数
エラー特定: 不正なリクエストや、異常に大きなデータ送信がないかを確認し、リソースの無駄遣いを防ぐのに役立ちます。 -
request: HTTPメソッド、ホスト、およびURLパス、プロトコル(例: HTTP/1.1)
エラー特定: 特定のURLやHTTPメソッドでエラーが多発している場合、そのエンドポイントや操作に問題がある可能性があります。 -
user_agent: クライアントのユーザーエージェント(例: Mozilla/5.0)
エラー特定: 特定のユーザーエージェントからの不正リクエストやスクリプトによるアクセスがないかを確認します -
ssl_cipher / ssl_protocol: SSL通信時の暗号スイートおよびプロトコル
(例: ECDHE-RSA-AES128-GCM-SHA256 / TLSv1.2)
エラー特定: SSL/TLSエラーの特定やセキュリティ要件の確認に使用されます。 -
target_group_arn: ターゲットグループのARN
エラー特定: 特定のターゲットグループにエラーが集中している場合、そのグループ内のインスタンスや設定に問題がある可能性が考えられます。 -
trace_id: リクエストの一意の識別子
-
domain_name / chosen_cert_arn: ドメイン名および証明書ARN(HTTPSリクエストの場合)
2.ALBのアクセスログから読み取れる代表的なエラーとその原因、およびそれぞれに関係するAWSリソース、対策と対処法について以下に一覧化しました。
エラーステータス | エラー内容 | 考えられる原因 | 関連するAWSリソース | 対策 | 対処 |
---|---|---|---|---|---|
400 Bad Request | 不正なリクエスト | URLフォーマットエラーやヘッダーの誤り | ALB, クライアントアプリ | リクエストの構成を正確に確認し、HTTP仕様に準拠する | クライアントアプリケーションのリクエストフォーマットを修正 |
401 Unauthorized | 認証が必要 | 認証情報不足、IAMポリシーの設定ミス | IAM, ALB | IAMポリシーの見直しと適切な権限付与 | 認証情報を提供、IAMポリシーの調整 |
403 Forbidden | アクセス拒否 | 許可されていないリソースへのアクセス | IAM, ALB, S3 | IAMポリシー、セキュリティグループ、S3バケットポリシーの確認 | ポリシーの修正やターゲットリソースへの権限追加 |
404 Not Found | リソースが見つからない | リソースのパスが誤っている | ALB, アプリケーション | URLパスを正確に設定、アプリケーションのルーティング確認 | クライアントまたはアプリケーションでのパス設定の修正 |
408 Request Timeout | リクエストのタイムアウト | クライアントのリクエスト処理が遅い | ALB, クライアントアプリ | クライアントのリクエスト処理速度を改善 | クライアントアプリケーションのリクエスト処理を最適化 |
500 Internal Server Error | サーバー内部エラー | アプリケーションのバグやリソース不足 | EC2, Lambda, RDS | アプリケーションコードのレビュー、インフラのリソースを増強 | アプリケーションコードのバグ修正やインフラリソースの増加 |
502 Bad Gateway | 無効なレスポンス | バックエンドのエラーや設定ミス | ALB, EC2, Lambda | ALBとターゲットの接続設定を見直し、ターゲットアプリケーションを最適化 | ターゲットアプリケーションの接続や応答設定の修正 |
503 Service Unavailable | サービスが一時的に利用不可 | 過負荷やメンテナンス中 | Auto Scaling, EC2, Lambda | Auto Scaling設定の適正化、ターゲットのヘルスチェック設定を確認 | リソースの増強やAuto Scalingの最適化 |
504 Gateway Timeout | タイムアウト | ターゲットからの応答遅延 | ALB, EC2, RDS, Lambda | タイムアウト設定の適切化、長時間処理を非同期化 | リクエスト処理を高速化、タイムアウト設定調整 |
エラーごとの詳細な対策と対処
1. クライアントエラー(4xxエラー)
- 400 Bad Request: クライアントアプリがリクエストを正しいフォーマットで送信しているかを確認し、リクエストフォーマットを適切に修正。
- 401 Unauthorized: IAMポリシーに必要な権限が付与されているかを確認し、不足があれば付与。
- 403 Forbidden: S3などのリソースでアクセス許可が正しく設定されているかを確認し、必要に応じてバケットポリシーやIAMポリシーを修正。
- 404 Not Found: アプリケーションでのルーティング設定が正しいかを確認し、URLパスを適切に修正。
2. サーバーエラー(5xxエラー)
- 500 Internal Server Error: アプリケーションコードのバグや過負荷でないかを確認し、処理負荷が高ければEC2のスケーリングを検討。
- 502 Bad Gateway: ALBとバックエンド(EC2やLambda)の接続設定に問題がないか確認。設定ミスがあれば修正し、ターゲットの健康状態が悪い場合は調整。
- 503 Service Unavailable: Auto Scalingの設定を確認し、ターゲットが過負荷に陥っていないか、スケーリングが適切に行われているか確認。
- 504 Gateway Timeout: 応答に時間がかかる処理については非同期処理を導入し、ALBやターゲットでのタイムアウト設定が適切かを確認し、リソースの拡張や調整を行う。
これらのエラーログから、設定ミスやリソース不足といった問題点を特定し、必要な対策を講じることでAWS環境の安定性が向上します。