CloudFront 액세스 로그를 BigQuery로 분석
16593 단어 CloudFrontS3BigQueryEmbulk
배경
여러가지로 CloudFront의 로그를 Athena라든지가 아니라 BigQuery로 분석하고 싶었기 때문에 시행착오한 이야기.
했던 일
CloudFront에서 로그 검색
로그를 저장하는 버킷 만들기
S3에 적당하게 버킷을 작성해 둔다.
CloudFront에서 로그 검색 설정
CloudFront에서 로그 검색
로그를 저장하는 버킷 만들기
S3에 적당하게 버킷을 작성해 둔다.
CloudFront에서 로그 검색 설정
이상의 설정을 함으로써, S3에 액세스 로그가 보존되어 간다.
로그에 대한 자세한 내용은 htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 아마 존 C ぉ dF 롱 t / ㅁ st / ゔ ぇ ぺ ぺ ぐ い / 어쩌 ss gs. HTML을 참조하십시오.
Embulk에서 S3에서 BigQuery로 로그 전송
Embulk 취득
적절한 디렉토리를 작성하십시오.
% wget https://dl.embulk.org/embulk-latest.jar
Gem 설치
Embulk는 Java9 이후를 지원하지 않으므로 Java8을 사용하도록 설정합니다.
jenv 등등으로 설정하는 것도 가능.
% export JAVA_HOME=$(/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home -v 1.8)
다음 Gem을 설치하십시오.
% java -jar embulk-latest.jar gem install \
embulk-input-s3 \
embulk-output-bigquery \
embulk-filter-concat \
embulk-filter-column \
embulk-filter-eval \
embulk-filter-timestamp_format
Config 만들기
config.yml
in:
type: s3
bucket: [バケット名]
path_prefix: [CloudFrontで設定したプレフィックス][ディストリビューションID].2019-08-29-09 # 適宜変更すること
decoders:
- {type: gzip}
endpoint: s3-ap-northeast-1.amazonaws.com
auth_method: profile # ほかにも認証方法はあるので embulk-input-s3 のドキュメントを参照
profile_name: [AWSのプロファイル名]
parser:
charset: UTF-8
type: csv
delimiter: "\t"
quote: '"'
escape: null
skip_header_lines: 2
columns:
- {name: date, type: string}
- {name: time, type: string}
- {name: edge_location, type: string}
- {name: sc_bytes, type: long}
- {name: c_ip, type: string}
- {name: cs_method, type: string}
- {name: cs_host, type: string}
- {name: cs_uri_stem, type: string}
- {name: c_status, type: string}
- {name: cs_referer, type: string}
- {name: cs_user_agent, type: string}
- {name: cs_uri_query, type: string}
- {name: cs_cookie, type: string}
- {name: edge_result_type, type: string}
- {name: edge_result_id, type: string}
- {name: host_header, type: string}
- {name: cs_protocol, type: string}
- {name: cs_bytes, type: long}
- {name: time_taken, type: double}
# 以降のカラムは不要だったので書いてない
allow_extra_columns: true
filters:
- type: concat # date と time が別のカラムになってるので繋げてから
name: datetime
columns:
- {name: date}
- {name: time}
- type: timestamp_format # string -> timestamp に変換
columns:
- {name: datetime, type: timestamp, from_format: ["%Y-%m-%d %H:%M:%S"]}
timestamp_parser: auto_java
- type: eval
eval_columns:
- cs_user_agent: value.gsub("%2520", " ") # UserAgentのスペースが %2520 として記録されているため
- type: column
columns:
- {name: datetime}
- {name: sc_bytes}
- {name: c_ip}
- {name: cs_method}
- {name: cs_uri_stem}
- {name: c_status}
- {name: cs_user_agent}
- {name: edge_result_type, type: string}
- {name: host_header, type: string}
- {name: cs_protocol, type: string}
- {name: cs_bytes, type: long}
- {name: time_taken, type: double}
out:
type: bigquery
auth_method: authorized_user
json_keyfile: [キーファイルのパス]
project: [GCPのプロジェクト名]
dataset: [BigQuery上のデータセット名]
auto_create_table: true
table: [テーブル名]
mode: append
formatter: {type: csv, charset: UTF-8, delimiter: ',', header_line: false}
path_prefix: /tmp/cloudfront-logs/
file_ext: .csv.gz
encoders:
- {type: gzip}
source_format: CSV
Embulk에서 로그를 BigQuery에 입력
% java -jar embulk-latest.jar run config.yml
BigQuery에 이런 식으로 데이터가 들어 있으면 OK
Reference
이 문제에 관하여(CloudFront 액세스 로그를 BigQuery로 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gion/items/5812dfe94833cd9b60cf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)