読者です 読者をやめる 読者になる 読者になる

Debuginfo

思考とアウトプット

fluentd(td-agent)とfluent-agent-liteでログ集約

nginx reverse proxy以下に数台のアプリケーションサーバを配置してます。 Applictionサーバでログが分散してて、検証するのにかなり辛いのでFluentd(td-agent)とfluent-agent-liteを使ってログをまとめてみました。

ちょろっと調べてみると、

  1. アプリケーションでFluent::Logger等を使って集約サーバに流す方法
  2. Logをtailして集約サーバに流す方法

んで、つぶやいたら@repeatedly氏がアドバイスくれました:) Many thanks!

f:id:shoheik:20140902101925p:plain

検討した結果、下記の二点で"Logをtailして集約サーバに流す方法"をとることにしました。

  • アプリケーションとログ機能を分けたかった
  • appインスタンスが非力すぎてメモリを節約したい(fluent-agent-liteを使いたい)

下記のように簡単にメモリ使用量を見てみると(top's RES) td-agentが20Mとtd-agent-liteが8Mでした。

# Memory usage of td-agent(fluentd) just after installed package.
 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                      
 1649 td-agent  20   0  208m  17m    4 S  0.0  3.5   0:00.00 ruby                                                                                                                          
 1652 td-agent  20   0  236m  23m  388 S  0.0  4.8   0:00.85 ruby  

# fluent-agent-lite
 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                      
14675 root      20   0  152m 8332 2464 S  0.3  1.7   0:56.18 perl 

インストール方法

というより、ansible playbookを張っとく。

Ansible/roles/fluent-agent-lite at master · shohey1226/Ansible · GitHub

---
- name: resolve dependency 
  yum: name=perl-devel state=latest

- name: git clone fluent-agent-lite 
  shell: (cd /tmp; git clone https://github.com/tagomoris/fluent-agent-lite.git)
  args: 
    creates: /etc/fluent-agent-lite.conf 

- name: install fluent-agent-lite
  shell: /tmp/fluent-agent-lite/bin/install.sh
  args: 
    creates: /etc/fluent-agent-lite.conf 

- name: copy fluent-agent-lite.conf 
  copy: src=fluent-agent-lite.conf dest=/etc/fluent-agent-lite.conf force=yes
  notify: 
   - restart fluent-agent-lite

- name: setup monit
  copy: src=fluent-agent-lite.monit dest=/etc/monit.d/fluent-agent-lite force=yes
  notify: restart monit

- name: enable on boot 
  service: name=fluent-agent-lite state=started enabled=yes 

Ansible/roles/fluentd at master · shohey1226/Ansible · GitHub

---
- name: install fluentd 
  shell: sudo curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh 
  args: 
    creates: /etc/td-agent/td-agent.conf 

- name: install fluentd plugin
  shell: sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-file-alternative 

- name: copy td-agent.cnf 
  copy: src=td-agent.conf dest=/etc/td-agent/td-agent.conf force=yes
  notify: 
   - restart fluentd 

- name: setup monit
  copy: src=fluentd.monit dest=/etc/monit.d/fluentd force=yes
  notify: restart monit

- name: enable on boot 
  service: name=td-agent state=started enabled=yes