fluentd (td-agent) , fluent-agent-liteを使ってMySQLのslowqueryをmongoDBに突っ込んで見やすくする

2014-01-14

割とググればいろいろ出てくるネタだけど、忘れないように書いておこうと思います。

slowqueryはなるべく早めに対応したいので、管理画面などで常にチェックできるようにしたい。そこでfluentd!

MySQLサーバーにfluentdのクライアントを入れて、slowqueryをfluentdサーバーに送り、そいつがmongoDBに突っ込むってわけです。

td-agentを入れる

td-agentはfluentdの安定版バッケージらしいです。なのでこっちを入れるのがよいとおも。

まずはリポジトリの登録


vi /etc/yum.repos.d/td.repo

して、中に以下を書きます


[treasuredata]
name=TreasureData
baseurl=http://packages.treasure-data.com/redhat/$basearch
gpgcheck=0

そしたらこう


yum install td-agent

td-agentが入ったら、slowqueryとmongoのプラグインをいれます。


/usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-mongo
/usr/lib64/fluent/ruby/bin/fluent-gem install bson_ext
/usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-mysqlslowquerylog

td-agentの設定

td-agentの設定ファイルは「/etc/td-agent/td-agent.conf」です。

中身はこんな感じにしてみました。


<match td.*.*>
   type tdlog
   apikey YOUR_API_KEY
   auto_create_table
   buffer_type file
   buffer_path /var/log/td-agent/buffer/td
</match>

<match debug.**>
   type stdout
</match>

<source>
   type forward
</source>

## mysql-slowquery
<match mysql.slowlog.*>
   type mysqlslowquerylog
   add_tag_prefix cocatenated.
</match>
<match cocatenated.mysql.slowlog.*>
   type mongo
   database mysql
   collection slowquery
   host localhost
   port 27017
   flush_interval 10s
</match>

大事なのは18行目からのmysql-slowlogのところ

これで、localhostのmongodbにデータベース名「mysql」コレクション名「slowquery」でデータが入るようになりました。

そしたら「/etc/init.d/td-agent start」して、サーバー側は完了です。

fluent-agent-liteを入れる

クライアント側の設定です。

クライアントはなんか設定が簡単そうなfluent-agent-liteを使います。

これをMySQLに入れていきます。


yum install perl-ExtUtils-MakeMaker
git clone https://github.com/tagomoris/fluent-agent-lite
cd fluent-agent-lite
./bin/install.sh

インケンの環境ではperl-Extなんちゃらが必要って言われたので入れました。

fluentd-agent-liteの設定ファイルは「/etc/fluent-agent-lite.conf」です。

これの中身はこんな感じで書きました。


# fluentd tag prefix of all LOGS
TAG_PREFIX="mysql"

LOGS=$(cat <<"EOF"
slowlog.db01 /var/lib/mysql/mysql-slow.log
EOF
)

# port number is optional (default: 24224)
PRIMARY_SERVER="http://192.168.0.2:24224"

PRIMARY_SERVERの192.168.0.2って言うのは上のtd-agentサーバーを指しています。

これで、「/etc/init.d/fluent-agent-lite start」したら完了です。

あとはmongoDBに突っ込んだデータを検索するなり、秒数順にソートするなりして見やすいように出力してあげたら完了です。