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%くらいになった。
(あくまで一例ね。)
だた、アクセスログなんかは、比較的繰り返しが多い項目もあるので、
その辺は効果的にやるとよいかもね。