もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

nginxのログをfluentdでS3へ送る

簡単な話ですが、めっちゃめちゃ久しぶりに触って完全に忘却の彼方だったので、備忘録のため残しておきます。

やってみた

1. td-agentインストール

今回はec2に入れたので、公式にあったコマンドを実行しました。

$ sudo curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent3.sh | sh

.
..
...
....
.....

インストール:
  td-agent.x86_64 0:3.2.0-0.el2                                                                                                                                                                                                                                                                                               

依存性関連をインストールしました:
  avahi-libs.x86_64 0:0.6.31-19.amzn2    cups-client.x86_64 1:1.6.3-35.amzn2          cups-libs.x86_64 1:1.6.3-35.amzn2                       m4.x86_64 0:1.4.16-10.amzn2.0.2                mailx.x86_64 0:12.5-19.amzn2    ncurses-compat-libs.x86_64 0:6.0-8.20170212.amzn2.1.2    patch.x86_64 0:2.7.1-10.amzn2.0.2   
  spax.x86_64 0:1.5.2-13.amzn2.0.1       system-lsb-core.x86_64 0:4.1-27.amzn2.3.5    system-lsb-submod-security.x86_64 0:4.1-27.amzn2.3.5    util-linux-user.x86_64 0:2.30.2-2.amzn2.0.4   

完了しました!

Installation completed. Happy Logging!

2. 確認

$ td-agent --version
td-agent 1.2.2

一応自動起動も行ってます。

$ sudo systemctl enable td-agent.service
$ sudo systemctl start td-agent.service

3. pluginのインストール

$ sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-s3
Fetching: fluent-plugin-s3-1.1.7.gem (100%)
Successfully installed fluent-plugin-s3-1.1.7
Parsing documentation for fluent-plugin-s3-1.1.7
Installing ri documentation for fluent-plugin-s3-1.1.7
Done installing documentation for fluent-plugin-s3 after 0 seconds
1 gem installed

4. 設定ファイル記載

公式の設定をほぼほぼ使ってます。

# nginx(access.log)
<source>
  @type    tail
  path     /var/log/nginx/access.log
  format   nginx
  tag      nginx.access
  pos_file /var/log/nginx/access.log.pos
</source>

# nginx(error.log)
<source>
  @type                    tail
  path                     /var/log/nginx/error.log
  tag                      nginx.error
  pos_file                 /var/log/nginx/error.log.pos
  format                   multiline
  format_firstline         /^\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} \[\w+\] (?<pid>\d+).(?<tid>\d+): /
  format1                  /^(?<time>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[(?<log_level>\w+)\] (?<pid>\d+).(?<tid>\d+): (?<message>.*)/
  multiline_flush_interval 3s
</source>

# upload(S3)
<match nginx.**>
  @type                s3
  aws_key_id           xxxxxxxxxxxxx
  aws_sec_key          zzzzzzzzzzzzzzzzzzz
  s3_bucket            nginx-logs
  s3_region            ap-northeast-1
  path                 ${tag}/
  s3_object_key_format %{path}%{time_slice}_%{index}.%{file_extension}

  <buffer tag,time>
    @type            file
    path             /var/log/td-agent/s3
    timekey          3600
    timekey_wait     10m
    timekey 60
    timekey_wait 60
    chunk_limit_size 256m
  </buffer>
</match>

5. 再起動

$ sudo systemctl restart td-agent

これで完成です。

f:id:kojirooooocks:20181122005337p:plain

f:id:kojirooooocks:20181122005345p:plain

こんな感じでアクセスログ上がってます。

終わりに

めちゃめちゃ久しぶりに触ったので、完全に忘れてました。

S3にあげたログをredshiftで拾ってそれをmetabaseで可視化するのが目標なので、とりあえずはここまでにしておきます。