割とググればいろいろ出てくるネタだけど、忘れないように書いておこうと思います。
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に突っ込んだデータを検索するなり、秒数順にソートするなりして見やすいように出力してあげたら完了です。