Amazon Linux上でfluentd + Elasticsearch + Kibanaな構成を導入するため、fluentdのインストールを行いました。fluentdのインストールはRubyのgemでもできるのですが、今回はTreasure Dataのパッケージであるtd-agentを導入してみます。

td-agentはRHEL / CentOS用にパッケージを用意しているので、↓を実行するとyumのパッケージリポジトリにtd-agentのリポジトリが追加されtd-agentのrpmがインストールされます。

$ sudo curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

ただ、残念ながらAmazon Linuxで実行するとエラーになります。そのためインストールするにはTreasure Data のリポジトリから直接rpmを入手してインストールするか、Amazon Linux上で直接ビルドする必要があります。

今回は後者で直接ビルドしてみました。

環境
  • Amazon Linux 2014.09
  • インスタンススペック:t2.medium
    ※ bundle install でdep-selector-libgecodeのmakeがえらいメモリをバカ食いするので、t2.microだとメモリが不足しアロケーションに失敗します。ということでビルドはメモリ4GB載ってるt2.mediumにして行いました。
  • RPM 4.11.2
  • Ruby 2.1
    td-agentビルド時のgem installでexplainオプションが必要なため
fluentdのセットアップ

omnibus-td-agent でビルドします。omnibus-td-agentはopscodeが公開しているomnibus-rubyというツールをベースにしてます。このツールはソフトウェアを各プラットフォーム向けに配布するパッケージ(rpmとかdebとか)として生成してくれます。

以下ビルドのステップです。

$ sudo yum groupinstall -y "Development Tools" 
$ sudo yum install fakeroot
$ sudo yum remove -y ruby ruby20
$ sudo yum install -y ruby21 ruby21-devel
$ gem install bundler
$ git clone https://github.com/treasure-data/omnibus-td-agent.git
$ cd omnibus-td-agent/
$ bundle install --binstubs

続いて、予め必要となるgemをgem_downloaderを使ってダウンロードします。

$ bin/gem_downloader core_gems.rb
$ bin/gem_downloader plugin_gems.rb

必要なディレクトリとパーミッションを設定。

$ sudo mkdir -p /opt/td-agent /var/cache/omnibus
$ sudo chown ec2-user /opt/td-agent
$ sudo chown ec2-user /var/cache/omnibus

いよいよtd-agentをビルドするわけですが、ビルド時にgitのユーザ情報(user.nameとuser.email)が定義されてないとエラーになるので、設定されてなければ設定が必要です。

$ bin/omnibus build td-agent2
..
                    [Packager::RPM] I | Creating .rpm file
                       [Compressor] I | No compressor defined for `rhel'.

ビルドが成功するとpkg/td-agent-2.1.2-0.x86_64.rpm が生成されます。あとはインストールするだけ↓

$ sudo rpm -i pkg/td-agent-2.1.2-0.x86_64.rpm
adding 'td-agent' group...
adding 'td-agent' user...
Installing default conffile...
cp: `/opt/td-agent/usr/sbin/td-agent-ui' を stat できません: そのようなファイルやディレクトリはありません
chmod: `/usr/sbin/td-agent-ui' にアクセスできません: そのようなファイルやディレクトリはありません
Configure td-agent to start, when booting up the OS...

インストール時にtd-agent-uiファイルが存在しないためエラーが発生します。これは fluentd のWebインタフェースである fluentd-ui がインストールされていないためです。gem_downloaderでui_gems.rbの内容も一緒にダウンロードするとfluetnd-uiも一緒にビルドされますが、今回は利用しないので外してます。fluentd-uiのファイルが存在しないためのエラーでfluentd自体はインストールされているで特に問題は無いはず。

無事インストールできれば、後は起動するだけ。

$ sudo service td-agent start
Starting td-agent:                                         [  OK  ]

ちゃんと起動してます。

$ ps aux | grep td-agent
td-agent  2170  0.0  1.7 210480 18092 ?        Sl   08:27   0:00 /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log --use-v1-config --daemon /var/run/td-agent/td-agent.pid
td-agent  2173  0.0  2.9 243488 30204 ?        Sl   08:27   0:00 /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log --use-v1-config --daemon /var/run/td-agent/td-agent.pid
ec2-user  2288  0.0  0.0 114500   896 pts/0    S+   08:35   0:00 grep td-agent

プロセスが2つ起動してるのは、TCPとUDP用でデータ転送と死活監視用のようです。
(プロセス数が1つだったり3つ以上ある場合は異常な状態)