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つ以上ある場合は異常な状態)