ALBアクセスログのフィールドとして「traceability_id」が追加されました

2024年5月、Application Load Balancer (ALB)のアップデートにより、「traceability_id」がアクセスログと接続ログのフィールドとして追加されました。この新しいフィールドを利用することで、アクセスログと接続ログの確実な突き合わせが可能になりました。
2024.05.29

2024年5月、Application Load Balancer (ALB)のアップデートにより、 アクセスログと接続ログのフィールドとして「traceability_id」が追加されました。

アップデート後のALBのアクセスログ、接続ログを調査し、 新しく追加された「traceability_id」が、 アクセスログ、接続ログの突き合わせに利用できる事を確かめる機会がありましたので、紹介させていただきます。

ELB設定

ELBの設定画面 「属性を編集」を利用して、アクセスログ、接続ログをS3に出力する設定としました。

ロードバランサー属性を編集

ロードバランサーの詳細

※ログ出力先のS3バケット、バケットポリシーは事前にELBアクセスログ許可済みのものを利用しました。

ステップ 2: S3 バケットにポリシーをアタッチする

ログ確認

アクセスログ、接続ログ、それぞれの最終フィールドに、「TID_」で始まる、 traceability_idの記録が確認できました。

アクセスログ

http 2024-05-28T13:34:14.804475Z app/**/7bba4eaafdb3bbc6 18.180.78.**:42088 172.31.11.**:80 0.006 0.000 0.000 200 200 115 124 "GET http://alb-**.ap-northeast-1.elb.amazonaws.com:80/ HTTP/1.1" "curl/8.5.0" - - arn:aws:elasticloadbalancing:ap-northeast-1:**:targetgroup/**/f8e61ed9c1a9**** "Root=1-6655dd56-7bd889385aff85131b10****" "-" "-" 0 2024-05-28T13:34:14.797000Z "waf,forward" "-" "-" "172.31.11.**:80" "200" "-" "-" TID_dc57cebed65b444ebc8177bb698fe166
フィールド名 サンプル値
time 2024-05-28T13:34:14.804475Z
elb app/**/7bba4eaafdb3bbc6
client:port 18.180.78.**:42088
target:port 172.31.11.**:80
request_processing_time 0.006
target_processing_time 0.000
response_processing_time 0.000
elb_status_code 200
target_status_code 200
received_bytes 115
sent_bytes 124
"request" "GET http://alb-**.ap-northeast-1.elb.amazonaws.com:80/ HTTP/1.1"
"user_agent" "curl/8.5.0"
ssl_cipher -
ssl_protocol -
target_group_arn arn:aws:elasticloadbalancing:ap-northeast-1::targetgroup//f8e61ed9c1a9****
"trace_id" "Root=1-6655dd56-7bd889385aff85131b10****"
"domain_name" "-"
"chosen_cert_arn" "-"
matched_rule_priority 0
request_creation_time 2024-05-28T13:34:14.797000Z
"actions_executed" "waf,forward"
"redirect_url" "-"
"error_reason" "-"
"target:port_list" "172.31.11.**:80"
"target_status_code_list" "200"
"classification" "-"
"classification_reason" "-"
traceability_id TID_dc57cebed65b444ebc8177bb698fe166

接続ログ

2024-05-28T13:34:14.797274Z 18.180.78.** 42088 80 - - - "-" - - - TID_dc57cebed65b444ebc8177bb698fe166
フィールド名 サンプル値
timestamp 2024-05-28T13:34:14.797274Z
client_ip 18.180.78.**
client_port 42088
listener_port 80
tls_protocol -
tls_cipher -
tls_handshake_latency -
leaf_client_cert_Subject "-"
leaf_client_cert_validity -
leaf_client_cert_serial_number -
tls_verify_status -
traceability_id TID_dc57cebed65b444ebc8177bb698fe166

trace_id

アクセスログのフィールドとして従来から存在していた 「trace_id」について確認を試みました。

ターゲットのEC2で ELB経由のリクエストを確認、 「trace_id」と、「traceability_id」が異なる値である事を確認しました。

ELBターゲット(Ec2のUserData抜粋)

dnf install nmap-ncat
while true; do ( echo "HTTP/1.0 200 Ok"; echo; echo "Hello" ) | nc -l 80; [ $? != 0 ] && break; done

ターゲットのEC2に記録されたELB経由のリクエスト

GET / HTTP/1.1
X-Forwarded-For: 35.77.119.**
X-Forwarded-Proto: http
X-Forwarded-Port: 80
Host: **-**.ap-northeast-1.elb.amazonaws.com
X-Amzn-Trace-Id: Root=1-665566b8-7bd889385aff85131b10****
User-Agent: curl/8.5.0
Accept: */*

まとめ

従来、接続ログとアクセスログの突き合わせには、当該時間帯の接続元IP、ポートで調査する必要がありましたが、2つのログのタイムスタンプは完全には一致しない事を考慮した利用が必要でした。

今回、アクセスログ、接続ログで記録されるようになった「traceability_id」を利用する事で、アクセスログと接続ログの確実な突き合わせが可能になりました。

アクセスログに含まれない、詳細なTLS関連情報などを接続ログと結合して取得する必要がある場合、2つのログを結合する項目として「traceability_id」をお試しください。

なお、今回のアップデートの影響により、 Amazon Athenaを利用して ALBアクセスログを解析している環境では、Athenaのテーブル定義の更新が必要となる場合があります。

Athenaの修正が必要となる場合、 「traceability_idと、今後増えるカラムに備えた設定が紹介されている、Athenaの公式ドキュメントをご参照ください。

Querying Application Load Balancer logs

  • 追加されたテーブル項目
            traceability_id string,
            unknown_fields string
  • 追加されたinput.regex の定義
\"([^ ]*)\" ?([^ ]*)?

関連リンク

AWSドキュメント Elastic Load Balancing アプリケーション ロード バランサ