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 に ログが保管されていることを確認できた。