LoginSignup
0
0

More than 5 years have passed since last update.

td-agent に fluent-plugin-mysql をインストールするための yum リポジトリを作る

Posted at

td-agent に fluent-plugin-mysql を yum でインストールできるように、gem から rpm を作って yum リポジトリにしてみました。

  • for CentOS 7.2.1511

手順

必要そうなパッケージをインストールします。

sudo yum -y install yum-utils createrepo rpm-build gcc make mysql-devel ruby rubygems ruby-devel
sudo gem install fpm

td-agent をインストールします。

curl -fsSL https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

td-agent の rpm をダウンロードします。

yumdownloader --enablerepo=treasuredata --destdir=td-agent/rpm td-agent

fpm コマンドを使って td-agent の rpm と同じディレクトリに gem から rpm を作ります。

cd td-agent/rpm

fpm -s gem -t rpm --gem-package-name-prefix=td-agent --gem-gem=td-agent-gem \
  --depends=td-agent mysql2

fpm -s gem -t rpm --gem-package-name-prefix=td-agent --gem-gem=td-agent-gem \
  --depends=td-agent mysql2-cs-bind

fpm -s gem -t rpm --gem-package-name-prefix=td-agent --gem-gem=td-agent-gem \
  --depends=td-agent --gem-disable-dependency=multi_json jsonpath

fpm -s gem -t rpm --gem-package-name-prefix=td-agent --gem-gem=td-agent-gem \
  --depends=td-agent --gem-disable-dependency=fluentd fluent-plugin-mysql

もとのディレクトリに戻って createrepo で yum リポジトリを作成します。

cd -
createrepo td-agent/

インストールしてみる

↑で作成した yum リポジトリには td-agent も含んでいるので、既にインストールしているなら一旦削除します。

sudo yum erase td-agent

treasuredata のリポジトリも無効にしておきます。

sudo mv /etc/yum.repos.d/td.repo{,.bak}

ローカルのディレクトリを参照する yum リポジトリの設定ファイルを作ります。

sudo tee /etc/yum.repos.d/td-agent-local.repo <<EOS
[td-agent-local]
name = td-agent-local
baseurl = file://$PWD/td-agent
gpgcheck = 0
EOS

repolist でリポジトリが有効になっていることを確認します。

sudo yum repolist

yum で td-agent と fluent-plugin-mysql をインストールします。

sudo yum install td-agent td-agent-fluent-plugin-mysql

使ってみる

うまいことインストールされていることを確かめるために、試しに使ってみます。

MariaDB をインストールして適当なテーブルを作ります。

sudo yum install mariadb-server
sudo systemctl start mariadb.service
mysql test <<'EOS'
create table logs (
  id int not null primary key auto_increment,
  log_date datetime not null,
  message text not null
);
EOS

td-agent の設定ファイルを作って td-agent を開始します。

sudo tee /etc/td-agent/td-agent.conf <<'EOS'
<source>
  @type tail
  path /var/log/oreore.log
  pos_file /var/log/td-agent/oreore.log.pos
  format ltsv
  tag oreore.log
</source>
<match oreore.log>
  @type mysql_bulk
  host localhost
  database test
  username test
  column_names log_date,message
  key_names ${time},message
  table logs
  flush_interval 10s
</match>
EOS

sudo systemctl start td-agent.service

ログを書きます。

echo "message:ore"  | sudo tee -a /var/log/oreore.log
echo "message:are"  | sudo tee -a /var/log/oreore.log
echo "message:sore" | sudo tee -a /var/log/oreore.log
echo "message:dore" | sudo tee -a /var/log/oreore.log
echo "message:hore" | sudo tee -a /var/log/oreore.log

DB に書き込まれているか見てみます。

mysql test -e 'select * from logs'

次のように書き込まれていました。

+----+---------------------+---------+
| id | log_date            | message |
+----+---------------------+---------+
|  1 | 2016-10-04 13:33:32 | ore     |
|  2 | 2016-10-04 13:33:32 | are     |
|  3 | 2016-10-04 13:33:32 | sore    |
|  4 | 2016-10-04 13:33:32 | dore    |
|  5 | 2016-10-04 13:33:32 | hore    |
+----+---------------------+---------+

fpm について

手順の途中で fpm で下記のように gem から rpm を作成していますが・・・

fpm -s gem -t rpm --gem-package-name-prefix=td-agent --gem-gem=td-agent-gem \
  --depends=td-agent mysql2

fpm -s gem -t rpm --gem-package-name-prefix=td-agent --gem-gem=td-agent-gem \
  --depends=td-agent mysql2-cs-bind

fpm -s gem -t rpm --gem-package-name-prefix=td-agent --gem-gem=td-agent-gem \
  --depends=td-agent --gem-disable-dependency=multi_json jsonpath

fpm -s gem -t rpm --gem-package-name-prefix=td-agent --gem-gem=td-agent-gem \
  --depends=td-agent --gem-disable-dependency=fluentd fluent-plugin-mysql

-s gem -t rpm は gem から rpm を作るという意味です。

--gem-package-name-prefix=td-agent は rpm の名前のプレフィックスを td-agent にするという意味です。例えば fluent-plugin-mysql という gem であれば td-agent-fluent-plugin-mysql という rpm になります。デフォルトは rubygems かなにかだったと思うんですけど、td-agent の embedd ではないシステムデフォルトの ruby と紛らわしそうなのでプレフィックを td-agent に変更しています。

--gem-gem=td-agent-gem は gem コマンドに td-agent-gem を使うという意味です。デフォルトだと gem なのででシステムにインストールされている gem が使われます。td-agent-gem が使われるように指定しています。

--depends=td-agent は rpm の依存関係に td-agent を追加します。

--gem-disable-dependency=multi_json--gem-disable-dependency=fluentd は、gem の依存からこれらを省きます。gem の依存を元に rpm の依存が自動で追加されるため、これを指定しておかないと td-agent-multi_json とか td-agent-fluentd とかに依存するようになります。これらの gem は td-agent にバンドルされているので、td-agent を依存に追加しているならこれらの依存は不要です。

さいごに

オフラインで fluent-plugin-mysql をインストールできるように rpm にしてみましたが、よく考えれば下記のように gem をダウンロードしておくだけでも良かったでした。

td-agent-gem fetch mysql2
td-agent-gem fetch mysql2-cs-bind
td-agent-gem fetch jsonpath
td-agent-gem fetch fluent-plugin-mysql

mysql2 が native extension なのでインストール時に gcc とかのビルド環境は必要ですが。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0