自社サービスの運営のために fluentd を使っているとrpmでインストールできる td-agent が大変便利だ。
便利だが、自社内で使うんだから、もう最初から自社用の設定とかその設定に必要なプラグインとか入っててほしい。そんで yum install td-agent をサーバ上で実行したら設定とかいじらないでいいようにしたい。みんなラクをしたいでしょ!?
もちろん td-agent のリポジトリをforkしてあれこれ手を入れればできるが、そうするとその後のメンテナンスが面倒だ。リポジトリ自体のアップデートはTreasure Dataの人に頑張っていただいて、我々は spec をいじる程度に収めておきたい。みんなラクをしたいよねー。
した
いろいろと td-agent のビルドスクリプトに手を入れる必要はあったが、もうその修正は当たっているのでみなさんは以下の手順を実行するだけでよろしい。
td-agent gitリポジトリのclone
まずビルドに必要なものがあれこれあるので、td-agent のリポジトリをcloneしてきてそこで作業する。tarballだけではいろいろあってビルドできない。めんどくさい。
$ git clone https://github.com/treasure-data/td-agent.git $ cd td-agent
自社向け td-agent.conf の準備
cloneしたリポジトリに redhat/td-agent.conf.custom というパスで自社内用の設定を書く。これを置いておくと rpm パッケージ内で /etc/td-agent/td-agent.conf になる。*1
内容は普通に fluentd の設定を書くだけ。イチから書いてもいいし、redhat/td-agent.conf からコピペして変更してもいい。
specの変更
redhat/td-agent.spec を変更する。キモは以下のとおり。
- "Release" に自社向けリリースリビジョンを入れる
- ex: 0.tagomoris
- 設定ファイルの変更なんかがあったときに上げるのに使う
- '%configure' セクションでプラグインを追加
これ以外には基本的にいじらなくてよいはず。
pluginのダウンロード
td-agentパッケージビルド前に、同梱するプラグインのgemをあらかじめダウンロードして plugin_gems ディレクトリに配置しておこう。ビルド時のダウンロードにまかせてもいいが、数が多くなると rubygems.org が503を返して拒否ることがあってやっかいだからだ。
また自社内リポジトリで管理しているgemもこのときいっしょにダウンロードしてディレクトリに入れておく。rubygems.orgに無いプラグインはそうしておかないとビルドに失敗する。
なお td-agent が必要とするプラグインは Makefile.am の先頭のほうに PLUGINS として書いてあるので、そいつを対象に適当に wget でもなんでも回そう。
mkdir plugin_gems cd plugin_gems PLUGINS="td-client-0.8.56.gem td-0.10.96.gem fluent-plugin-td-0.10.17.gem \ thrift-0.8.0.gem fluent-plugin-scribe-0.10.10.gem \ fluent-plugin-flume-0.1.1.gem \ bson-1.8.6.gem bson_ext-1.8.6.gem mongo-1.8.6.gem fluent-plugin-mongo-0.7.1.gem \ nokogiri-1.5.10.gem aws-sdk-1.8.3.1.gem fluent-plugin-s3-0.3.5.gem \ webhdfs-0.5.3.gem fluent-plugin-webhdfs-0.2.1.gem \ fluent-plugin-rewrite-tag-filter-1.3.1.gem \ fluent-plugin-td-monitoring-0.1.0.gem \ fluent-plugin-ping-message-0.1.0.gem fluent-plugin-file-alternative-0.1.4.gem \ fluent-mixin-plaintextformatter-0.2.5.gem" for p in $PLUGINS ; do wget http://rubygems.org/downloads/$p -O $p || break done cd ..
rpathまわり
RPATHが云々言われてビルドが通らないことがある。RHEL6/CentOS6以降とかですね。ビルド済みモジュールをrubyごと入れたりするのでしょうがない感が高い、ので、無視するようにしてしまおう。
export QA_RPATHS=$[ 0x0001|0x0002|0x0004|0x0010 ] ./make-rpm.sh
解決!
.debは?
知らん! 誰かがんばって! 共通部分はどうにかなるように直したはずなので! 仕事で使わないとモチベーションが維持できないくらいつらい作業なの!
おしまい
このエントリは Fluentd Advent Calendar 2014 の24日目でした!
Fluentd Advent Calendar 2013 - Qiita
*1:なぜとか言わないでくれ、深遠な理由によりそのようにせざるをえなかった。俺がいちばんつらい。