このページの本文へ

FIXER Tech Blog - Development

FIXER cloud.config Tech Blog

AWSロードバランサーの応答時間をALBのログ分析で可視化する

2026年04月15日 15時00分更新

文● 日高祥矢/FIXER

  • この記事をはてなブックマークに追加
  • 本文印刷

 本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「ALB → ECS 構成でレスポンス時間を可視化する(AthenaでALBログ分析)」を再編集したものです。

 AWSで以下のような構成のアプリを運用しています。

クライアント → NLB → ALB → ECS

 その際に「リクエストが来てからレスポンスが返るまで遅い気がするけど、どこが遅いのか分からない」という問題にぶつかりました。

やりたかったこと

・NLBに到達してからレスポンスが返るまでの時間を知りたい
・どのAPIが遅いのかを特定したい

結論

 NLB単体では厳しいので、ALBアクセスログをAthenaで分析するのが現実解でした。

 ALBログには以下の3つの時間が含まれています。

・request_processing_time
ALBがリクエストを受け取ってから、ターゲット(ECS)に転送するまでの時間
・target_processing_time
ターゲット(ECS / アプリ)が処理して、レスポンスを返し始めるまでの時間
・response_processing_time
ALBがターゲットからのレスポンスを受け取って、クライアントへ返し始めるまでの時間

 これを合計すると、

ALBに到達してからレスポンスを返すまでの時間

 が分かります。

手順

1. ALBアクセスログをS3に出力

 ALBの設定からアクセスログを有効化し、S3に出力します。

2. Athenaのクエリ結果出力先を設定

 Athenaはデフォルトではクエリを実行できないため、S3に出力先を設定します。

・Athena コンソール → Settings
・「Query result location」にS3パスを設定

例:

s3://your-bucket/athena-results/

3. Athenaでテーブル作成

 S3上のログ(gz形式)をそのままクエリできます。

CREATE DATABASE IF NOT EXISTS alb_log_db;

(※CREATE TABLEは公式の定義を使用)

4. レスポンス時間をクエリ

SELECT
  request_url,
  count(*) AS req_count,
  avg(request_processing_time + target_processing_time + response_processing_time) AS avg_total_time,
  max(request_processing_time + target_processing_time + response_processing_time) AS max_total_time
FROM alb_log_db.alb_access_logs
WHERE time >= '2026-03-23T00:00:00'
  AND time <  '2026-03-24T00:00:00'
GROUP BY request_url
ORDER BY avg_total_time DESC
LIMIT 50;

結果

 実際に分析してみると、

・最大でも 約70ms
・多くは 5〜30ms

 で、サーバ側は特に遅くないことが分かりました。

まとめ

 今回はAthenaを使用したALBログの調査方法をまとめました。

 実際にやってみると簡単かつ短時間でログの解析ができたのでぜひ試してみてください。

おまけ:遅いリクエストを直接見る

 このあたりを整備しておくと、パフォーマンス調査がかなり楽になります。

日高祥矢/FIXER
「ひだか さちや」 2023年度入社の日高祥矢です。 出身は鹿児島県です。 高専を卒業しているんですけど工業高校から高専に編入しました。 小学校からバスケットをしていて、今も大好きです。

カテゴリートップへ

本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事
アクセスランキング