極めて初心者でした。。。うっかり
なんとなくCloudFrontを使ってみて、S3にLogを出力して、内容を見てみたのですが、クエリパラメータ1つしか書かれていない!?となってしまいました。
クエリ文字列パラメータと CloudFront アクセスログ
公式documentにはCloudFront は、クエリ文字列パラメータを含む完全な URL をログに記録しますと書いてありました。。。
原因としてはcurl
の使い方は不適切でした。
curl -v https://<domain>/items?goods=tray&price=100&order=1554958
正しくは、curl -v https://<domain>/items?goods=tray\&price=100\&order=1554958
でエスケープが必要でした( ;∀;)
curlで複数パラメータのGETを投げる
こんなポン超すなミスする方は他にはいらっしゃならいと思いますが、自分への戒めのために、記録しておきます。
Amazon Linux で CloudFrontのログ解析
コピペコマンド
毎分のキャッシュヒットとクライアントIP、パス、クエリパラメータを確認することができます。
aws s3 sync s3://<backetname>/cloudfront/ ./logs
gunzip -dc * | awk '$8 == "/items"' | sort | awk '{print substr($2, 0, 5), $1, $5, $8, $12, $23}' | sort | awk '{print $2, $1, $6, $3, $4, $5}' | uniq -c
1 2019-08-08 08:03 Miss 126.193.5.58 /items goods=tray&price=100&order=1554958
コピペで使えるELBのアクセスログ解析による事象分析 (ShellScript, Athena)
Amazon Athenaでログ解析
Amazon CloudFront ログのクエリ
めちゃくちゃ簡単にログが見れる-
*末尾2行目のLOCATION のbacketnameの変更を忘れることなく!!
特定のuriの最新のログを確認する
SELECT date, time request_ip, uri, query_string
FROM cloudfront_logs
WHERE uri LIKE '_items'
Order by date DESC ,time DESC
Limit 10
Amazon Glueと組み合わせつことで簡単にテーブルを作成することも可能だが、スキーマががたがたですな。