ALBアクセスログのフィールドとして「traceability_id」が追加されました
2024年5月、Application Load Balancer (ALB)のアップデートにより、 アクセスログと接続ログのフィールドとして「traceability_id」が追加されました。
アップデート後のALBのアクセスログ、接続ログを調査し、 新しく追加された「traceability_id」が、 アクセスログ、接続ログの突き合わせに利用できる事を確かめる機会がありましたので、紹介させていただきます。
ELB設定
ELBの設定画面 「属性を編集」を利用して、アクセスログ、接続ログをS3に出力する設定としました。
※ログ出力先のS3バケット、バケットポリシーは事前にELBアクセスログ許可済みのものを利用しました。
ログ確認
アクセスログ、接続ログ、それぞれの最終フィールドに、「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の公式ドキュメントをご参照ください。
- 追加されたテーブル項目
traceability_id string, unknown_fields string
- 追加された
input.regex
の定義
\"([^ ]*)\" ?([^ ]*)?