fluentd を使って S3 にログを集約する

環境

ソフトウェア バージョン
Ubuntu 16.04
td-agent 1.2.6
Apache 2.4

期待値

apacheアクセスログを s3 のバケット内に保管する。

設定方法

1. Fluentd をインストール

インストールスクリプトが公開されているため実行してインストールする。 URLにOSのバージョンが含まれているため、インストール対象のOSバージョンに合ったURLを確認すること。

Ubuntu のバージョン確認

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.5 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.5 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
$

インストール実行。

curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-xenial-td-agent3.sh | sh

td-agentがインストールされる。fluentdではない。

$ which td-agent
/usr/sbin/td-agent
$
$ td-agent --version
td-agent 1.2.6
$

2. Fluentdの設定

/etc/td-agent/td-agent.confを編集する。 対象となるログについて指定するsourceとログの出力設定を指定するmatchを設定する。

apache2 のログを転送対象にする。

<source>
  @type tail
  path /var/log/apache2/access.log
  tag td.apache2.access
  pos_file /var/log/td-agent/apache2.access.log.pos
  format apache2
</source>

続けてログをS3へ転送する設定も追記する。

<match td.apache2.access>
  @type s3
  s3_bucket logi-fluentd
  s3_region ap-northeast-1
  time_slice_format %Y%m%d%H%M
</match>

今回使用しないmatchコメントアウトする。(残したままにしているとエラーになったため)

#<match td.*.*>
#  @type tdlog
#  @id output_td
#  apikey YOUR_API_KEY
#
#  auto_create_table
#  <buffer>
#    @type file
#    path /var/log/td-agent/buffer/td
#  </buffer>
#
#  <secondary>
#    @type file
#    path /var/log/td-agent/failed_records
#  </secondary>
#</match

ログに対するアクセス権限でエラーにならないようにする。 /etc/init.d/td-agentを編集し、以下の箇所をrootに変更する。

TD_AGENT_USER=root
TD_AGENT_GROUP=root

EC2にS3に対する書き込みを許可するIAMを設定する。 今回は検証なのでAmazonS3FullAccessのポリシーで設定。

fluentd のプロセスを再起動する。

$ sudo /etc/init.d/td-agent restart

apache にアクセスしてしばらく待つと、S3 に ログが保管されていることを確認できた。