awsにtd-agentを導入して、
httpのアクセスログと、phpの任意のログを、
td-agent -> s3 -> redshift
の流れで投入してみた。
awsのEC2ではtd-agentのバージョン2の導入が大変なので、
バージョン1を導入してみた。
インストールは公式ドキュメントにある通り、以下です。
$ curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh
※v2はcentos7での動作は確認しましたが、awsではv1を利用
いろいろ情報が混在していたのですが、
S3プラグインは最初から入っていて、
フォーマットはjsonでS3に送信することが可能です。
こんな感じ。
/etc/td-agent/td-agent.conf
<source> type tail path /var/www/test/logs/access.log tag apache.test.access pos_file /var/log/td-agent/test.access.log.pos format /^\[(?<date>.*?)\]\[(?<ip>.*?)\]\[(?<header>.*?)\]\[(?<code>.*?)\]\[(?<size>.*?)\]\[(?<aaa>.*?)\]\[(?<bbb>.*?)\]\[(?<ccc>.*?)\]\[(?<second>.*?)\]$/ </source> <match apache.test.access> type s3 aws_key_id XXX aws_sec_key YYY s3_bucket MYBUCKET s3_endpoint s3-ap-northeast-1.amazonaws.com path logs/httpd/ buffer_path /var/log/td-agent/httpd/test-access.log time_slice_format %Y%m/%d/test-acccess.log.%Y%m%d%H%M retry_wait 30s retry_limit 5 flush_interval 1m flush_at_shutdown true format json </match>
※httpdアクセスログのフォーマットは、
LogFormat “[%{%Y-%m-%d %H:%M:%S %Z}t][%h][%r][%>s][%b][%{X-AAA}i][%{X-BBB}i][%{X-CCC}i][%T]” hoge
です。
でもって、S3には
test-acccess.log.201501270938_0.gz
こんな感じのログが保存されている。
中身は、
{“date”:”2015-01-27 09:38:10 JST”,”ip”:”182.118.55.177″,”header”:”GET / HTTP/1.1″,”code”:”200″,”size”:”11″,”aaa”:”-“,”bbb”:”-“,”ccc”:”-“,”second”:”0″}
みたいな感じ。
んでもって、
s3上にlogs/httpd/test_access_log_jsonpath.jsonってファイルを作成しておく
{ "jsonpaths": [ "$['date']", "$['ip']", "$['header']", "$['code']", "$['size']", "$['aaa']", "$['bbb']", "$['ccc']", "$['second']" ] }
そして、テーブルを作成しておく。
CREATE TABLE test_access_logs ( date datetime sortkey, ip varchar(64), header varchar(256), code varchar(16), size varchar(16), aaa varchar(64), bbb varchar(128), ccc varchar(128), second varchar(16) );
この状態でredshift上から、
# COPY test_access_logs FROM 's3://MY-BUCKET/logs/httpd/201501/26/' credentials 'aws_access_key_id=XXX;aws_secret_access_key=YYY' JSON AS 's3://MY-BUCKET/logs/httpd/test_access_log_jsonpath.json' GZIP COMPUPDATE ON;
ってやれば、あらかじめ作成しておいたテーブルにデータが突っ込まれる。
上記のcreateでは、圧縮オプションはつけていないが、
繰り返しが多い項目に圧縮オプションつけておくと、
かなり削減になる。
【参考】
1000万件のデータを突っ込んだ際、元容量の70%くらいになった。
(あくまで一例ね。)
だた、アクセスログなんかは、比較的繰り返しが多い項目もあるので、
その辺は効果的にやるとよいかもね。
コメントがあればどうぞ