🐕
[AWS]Application Load BalancerのログがAthenaでクエリできなくなった
事象
おおよそ2024年6月以降のデータがクエリできなくなっていた。
原因
ALBのアクセスログに「conn_trace_id」というフィールドが追加されたため、input.regex
で指定した正規表現と乖離が発生したため。
所感
追加されたのは知っていたが、影響範囲は把握できていなかった。
対処方法
公式ドキュメントに記載のALBアクセスログ用テーブル作成クエリを参考にする。
正規表現でハマるのが嫌なので、テーブル削除して新しいテーブルを作成した。
DROP TABLE IF EXISTS alb_logs;
下記実際のコード(一部改変)
Code
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 string,
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,
conn_trace_id 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]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^ ]*)\" \"([^\\s]+?)\" \"([^\\s]+)\" \"([^ ]*)\" \"([^ ]*)\" ?([^ ]*)?( .*)?'
)
LOCATION 's3://amzn-s3-demo-bucket/access-log-folder-path/'
これで出力できなかった5月、6月以降のアクセスログをAthenaでクエリ可能となった。
参考
Discussion