14Room

みんな泣きながらオトナになったんだ。

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>

結果

f:id:naked123:20170522100412p:plain 実際にS3に置かれたログファイルのプロパティを見ると暗号化されたことが確認できる。