Giter Site home page Giter Site logo

anemoeater's Introduction

anemoeater

anemo eat erは box/Anemometer をdockerコンテナーとして起動して、percona-toolkitpt-query-digestの結果を食わせるためのラッパースクリプトです。

注意

  • pt-query-digestの仕様変更により、percona-toolkit 3.0.11とそれ以降のpt-query-digestでは本家 box/Anemometer が動きません。 --pt-query-digest=/path/to/pt-query-digest で3.0.10とそれ以前のpt-query-digestを指定するか、 --use-docker-for-pt でコンテナ版のpt-query-digestを使うようにしてください。

クイックスタート

  • dockerとpercona-toolkitがインストールされている必要があります。
$ git clone https://github.com/yoku0825/anemoeater
$ cd anemoeater
$ cpanm --installdeps .
$ ./anemoeater path_to_slow_log
  • オプションなしの起動では、yoku0825/anemoeaterdocker runします。
  • スローログを分割しながらpt-query-digestに食わせます。分割して渡さないとpt-query-digestが(checksum, ts_min, ts_max)という粒度で集計してしまうため、一括で食わせた場合に綺麗なグラフにならないからです(ts_minの時刻にクエリーが集中してプロットされてしまう)
  • anemoeaterの起動後にブラウザーからアクセスするためのURLをペロっと吐きます。コンテナーの80番がEXPOSEされてるだけです。
  • --sinceと--untilを指定して(ログが多いと重い)スローログを食わせてブラウザで見てコンテナーを止める、みたいな使い方を想定しています。

何故anemo eat erが必要だったのか

  • pt-query-digestはスローログをパースする際に時間の情報を「クエリーが最初に記録された時間からクエリーが最後に記録された時間」に集計してしまうからです。
  • それを考慮せずにそのままAnemometerに食わせるとこうなります。Anemometerは時間軸に対してts_minの点でプロットするため、そのクエリーが最初に記録された時刻にいっぱい出たことになってしまいます。

  • なのでanemo eat erの中でスローログを分割し、(ts_min, ts_max)が綺麗に分かれるようにpt-query-digestを呼び出してAnemometerにインポートさせています。

  • あとはAnemometerを使い捨てる(見たくなったら起動、見終わったら破棄)ためにDockerを使っていましたが、毎回インポートするのが面倒になったからです。

オプション

オプション 意味 デフォルト
--socket=s Dockerコンテナーを使わずに既存のAnemometerにスローログを食わせる場合の接続先MySQLソケット DBD::mysql依存
--host=s Dockerコンテナーを使わずに既存のAnemometerにスローログを食わせる場合の接続先MySQLホスト DBD::mysql依存
--port=i Dockerコンテナーを使わずに既存のAnemometerにスローログを食わせる場合の接続先MySQLポート DBD::mysql依存
--user=s Dockerコンテナーを使わずに既存のAnemometerにスローログを食わせる場合のMySQLユーザー "anemometer"
--password=s Dockerコンテナーを使わずに既存のAnemometerにスローログを食わせる場合のMySQLパスワード ""
--parallel=i この数値までフォークして並列でpt-query-digestを起動する CPUスレッド数 * 1.5
--since=s スローログ読み取りの開始時刻(これ以前の時刻のログを読み飛ばす) 現在時刻マイナス1か月
--unti=s スローログ読み取りの終了時刻(これ以降の時刻のログを読み飛ばす) "9999/12/31"
--report=i この数値までpt-query-digestを起動したら標準出力に現在処理中のログ時刻を出力 15
--cell=i 何分単位でログをpt-query-digestに送るか 5
--no-docker Dockerコンテナーを使わずに既存のAnemometerにスローログを食わせる N/A
--local yoku0825/anemoeaterをpullせず、Dockerfileからローカルホストにanemoeaterイメージをビルドする N/A
--pt-query-digest=s pt-query-digestのパスを指定する。/usr/bin/pt-query-digest 以外のパスにある場合に指定 /usr/bin/pt-query-digest
--use-docker-for-pt --pt-query-digestで指定されたファイルの代わりに yoku0825/percona-toolkit のDockerイメージをを使う 0
--type=s 入力ファイルとして利用するファイルの種類を指定する。サポートしているファイルの種類はslowlog、binlog、tcpdump slowlog

引数

  • スローログファイルを渡します。複数指定可能。
  • スローログファイルの名前がAnemometer上のhostname_maxになります(Filter By Hostとかで使うやつ)

anemoeater's People

Contributors

yokogawa-k avatar yoku0825 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

anemoeater's Issues

mysqlが起動しないため、dockerのコンテナが上がってこない

概要

./anemoeter /path/to/slow.logを実行した時にmysqlが起動していないため、
https://github.com/yoku0825/anemoeater/blob/master/anemoeater#L119-L120
で接続できず、処理が進みません。

実行環境

CentOS Linux release 7.4.1708
Docker version 1.13.1, build 774336d/1.13.1
perl v5.16.3
pt-tookkit 3.0.4

再現手順

概要にある通り、./anemoeter /path/to/slow.log (dockerhunのanemoeaterを利用)を実行した際に、https://github.com/yoku0825/anemoeater/blob/master/anemoeater#L119-L120
のMySQL接続部分で起動していないMySQLへの接続を待ってしまい、処理が先に進みません。
その時のdocker側のlogを確認しますと、

# docker logs e2a1674593f3
Starting MySQL (Percona Server)..... ERROR! The server quit without updating PID file (/var/lib/mysql/e2a1674593f3.pid).

とでており、MySQLが起動しきれていない状況になっていました。
Dockerfileのmysql起動部分を下記のように編集し --localオプションを利用して起動すると正常に起動することができました。

# git diff
diff --git a/Dockerfile b/Dockerfile
index 8479707..41722ab 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -13,7 +13,8 @@ RUN yum install -y Percona-Server-client-56 Percona-Server-shared-56 Percona-Ser
 RUN yum install -y httpd php php-mysql php-bcmath && yum clean all

 RUN git clone https://github.com/box/Anemometer.git /var/www/html/anemometer
-RUN /etc/init.d/mysql start && mysql -uroot < /var/www/html/anemometer/install.sql && mysql -uroot < /var/www/html
+RUN chown -R mysql. /var/lib/mysql && /etc/init.d/mysql start && mysql -uroot < /var/www/html/anemometer/install.s
+
 RUN ln -sf /var/www/html/anemometer/conf/sample.config.inc.php /var/www/html/anemometer/conf/config.inc.php

 COPY . /opt/setup
@@ -21,5 +22,5 @@ RUN patch /etc/php.ini /opt/setup/php.ini.patch
 RUN patch /var/www/html/anemometer/lib/Anemometer.php /opt/setup/Anemometer.patch

 EXPOSE 80
-CMD /etc/init.d/mysql start && /etc/init.d/httpd start && tail -f /dev/null
+CMD chown -R mysql. /var/lib/mysql && /etc/init.d/mysql start && /etc/init.d/httpd start && tail -f /dev/null

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.