td-agentでログをS3に送る、ついでに暗号化もする。
概要
ある程度の規模になると、日々サーバ上に溜まるログを何処かに集約したくなります。 オートスケールなどを利用するとサーバ停止時にログも一緒に失われるので、サーバ上のストレージ以外の場所に待避した方が良さそうです。 今なら安価で安全なS3に置くのが吉でしょう。また昨今、セキュリティ的に暗号化の機運が高まって来てる?のでS3に置く際に暗号化もしてみました。
td-agentの設定
td-agentのインストールは割愛します。あとログを送る側のサーバはIAM roleでS3のバケツへのフルアクセス権限があるものとします。
<source> type tail format none path /var/log/audit/audit.log pos_file /var/tmp/td-agent/aws_s3_logs.audit.audit.pos tag aws_s3_logs.audit.audit @label @raw </source> <label @raw> <match aws_s3_logs.**> type forest subtype s3 <template> format single_value s3_bucket "server-logs-naked-com" s3_region "#{`curl -s -m 1 http://169.254.169.254/latest/meta-data/placement/availability-zone`.chop}" s3_object_key_format "%{path}.%{time_slice}.%{index}.%{file_extension}" path "${tag_parts[1]}/%Y/%m/%d/${tag_parts[1]}.${tag_parts[2]}.#{`hostname -s`.chomp}.#{`curl -s -m 1 http://169.254.169.254/latest/meta-data/instance-id`.chomp}" time_slice_format "%Y%m%dT%H00Z" time_slice_wait 10m use_server_side_encryption AES256 utc buffer_type file buffer_path "/var/tmp/td-agent/s3.${tag}" buffer_chunk_limit 128m disable_retry_limit true </template> </match> </label>
結果
実際にS3に置かれたログファイルのプロパティを見ると暗号化されたことが確認できる。