Fluentdを活用してNginxのAccessログをS3に格納する

s3-Fluentd
環境(AWS)
  • ec2インスタンス : t2.micro
  • server1 (public-subnet)
  • server2 (private-subnet)
  • OS : Amazon Linux
  • Fluentd : td-agent-2.3.2-0
  • Nginx : nginx-1.8.1-3-27
  • S3

【概要】

server1で起動しているNginxのAccessログをFluentdを収集してs3に格納する

【作業の流れ】

  • AWS VPCを作成し、サブネットを二つ作成

  • Public-SubnetとPrivate-Subnetにインスタンスを一台ずつデプロイする

  • server1にてNginxとtd-agent2をインストールする

  • td-agent2をインストール
# curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
# /etc/init.d/td-agent start
  • Fluentdにてserver1に出力されるNginxのaccess.logを監視する

--- type tail path /var/log/nginx/access.log ---
  • server2にてtd-agent2をインストールする ※3番目と同様

  • server2のFluentdでs3APIを利用してバケットにログを格納できるように設定する

  • aws_key_id / aws_sec_key / s3_bucket / s3_region を指定する
  • s3のバケットは予め作成しておく

-- 省略 -- @type s3 aws_key_id aws_sec_key s3_bucket s3_region ap-northeast-1 -- 省略 --
  • server1にてでログを出力する
server1にログインして下記のコマンドを実行する
$ curl 127.0.0.1
  • s3でバケットの中にserver1のnginixログ(access.log)が格納されているかを確認する 下記のとおり、指定したBucketにログが格納されていることを確認できた。

s3-td-agent-pic1

server1/2のtd-agentのConfigを下記のように設定しました。

server1(Fluentdの送信側)の設定
  • NginxのAccess.logをltsv形式に出力させて送信する
  • /etc/td-agent/td-agent.conf

type tail format ltsv #time_format %Y-%m-%d %H:%M:%S format /^id:(?.+)[\t]*time:\[(?<time>.+)\][\t]*uri:(?.*)$/ path /var/log/nginx/access.log tag nginx.access pos_file /var/log/td-agent/access.log.pos </time> @type forward host 10.0.1.100 port 24224
server2(Fluentdの受信/送信)の設定

@type forward port 24224 @type s3 aws_key_id aws_sec_key s3_bucket s3_region ap-northeast-1 path log_ buffer_path /var/log/td-agent/s3 time_slice_format %Y%m%d%H time_slice_wait 10m utc buffer_chunk_limit 256m flush_interval 10s