皆様あけましておめでとうございます。本年も
新年ということで、
Anemometerとanemoeaterに関して
Anemometerは、pt-query-digest
を利用して、
anemoeaterは、
環境設定
今回は、docker run
コマンドを実行するディレクトリに以下のファイルを置いて、
$ cat ./config/my.cnf [mysqld] slow_query_log=1 slow_query_log-file=/var/log/mysql/mysql-slow.sql long_query_time =0.01
一応各パラメータについて簡単に説明をしておくと、slow_
を1にすることでスローログが出力されるようになります。slow_
でスローログが出力される先を指定します。long_
は、
$ docker run --name michibushin -v "/tmp:/tmp" -v "$PWD/config:/etc/mysql/conf.d" -v "$PWD/logs/mysql:/var/log/mysql" -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 3306:3306 -d mysql:8.0.18 --secure-file-priv=/tmp
上記で起動をして、
$ mysql -h0.0.0.0 -uroot -pmy-secret-pw
ここで以下のコマンドを実行してmy.
mysql> show variables like 'slow%'; +---------------------+-------------------------------+ | Variable_name | Value | +---------------------+-------------------------------+ | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | /var/log/mysql/mysql-slow.sql | +---------------------+-------------------------------+ 3 rows in set (0.00 sec) mysql> show variables like 'long%'; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | long_query_time | 0.010000 | +-----------------+----------+ 1 row in set (0.01 sec)
スロークエリが出力される設定で、
検証用のデータとしては、
$ cat ken_all.sql CREATE DATABASE zipcode CHARACTER SET utf8mb4; CREATE TABLE zipcode.zipcode( code varchar(12) NOT NULL, old_zipcode varchar(5) NOT NULL, zip_code varchar(7) NOT NULL, prefecture_kana varchar(255) NOT NULL, city_kana varchar(255) NOT NULL, town_kana varchar(255) NOT NULL, prefecture varchar(128) NOT NULL, city varchar(128) NOT NULL, town varchar(128) NOT NULL ) DEFAULT CHARACTER SET= utf8mb4; $ mysql -h0.0.0.0 -uroot -pmy-secret-pw < ken_all.sql
データをインポートした後とりあえずスローログが出力されているか確認してみましょう。LOAD DATA INFILEは結構重いので出力されていると思います。
cat logs/mysql/mysql-slow.sql /usr/sbin/mysqld, Version: 8.0.18 (MySQL Community Server - GPL). started with: Tcp port: 0 Unix socket: /var/run/mysqld/mysqld.sock Time Id Command Argument /usr/sbin/mysqld, Version: 8.0.18 (MySQL Community Server - GPL). started with: Tcp port: 0 Unix socket: /var/run/mysqld/mysqld.sock Time Id Command Argument # Time: 2020-01-07T23:25:07.328935Z # User@Host: root[root] @ localhost [] Id: 7 # Query_time: 0.064265 Lock_time: 0.000048 Rows_sent: 0 Rows_examined: 0 use mysql; SET timestamp=1578612307; INSERT INTO time_zone_transition (Time_zone_id, Transition_time, Transition_type_id) VALUES (@time_zone_id, -2147483648, 0) ,(@time_zone_id, -1988164200, 2) ,(@time_zone_id, 403041600, 1) ,(@time_zone_id, 417034800, 2) ,(@time_zone_id, 1224972000, 1) ,(@time_zone_id, 1238274000, 2); # Time: 2020-01-09T23:25:09.384497Z # User@Host: root[root] @ localhost [] Id: 7 # Query_time: 0.017580 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 SET timestamp=1578612309; COMMIT;
このように出力が確認できました。
cpanmのインストール
anemoeaterを起動するためにはcpanmが必要なため、
Ubuntuで試す場合、
$ sudo apt install build-essential cpanminus
cpanm -V
とコマンドを実行して、
$ cpanm -V cpanm (App::cpanminus) version 1.9018 (/usr/local/bin/cpanm) perl version 5.018004 (perl) 〈以下省略〉
後は、.bash_
の末尾に以下のような設定を追加しました。
$ cat .bash_profile 〈省略〉 export PERL_CPANM_OPT="--local-lib=~/.perl5" export PERL5LIB=$HOME/.perl5/lib/perl5:$PERL5LIB;
anemoeaterを起動してみる
anemoeaterは、pt-query-digest
のバージョンへの追従が行われておらず、3.
以降のものだと利用ができません。そのため今回はバージョン問題が発生しないDocker版のものを利用して確認していきます。
GitHubのスタートに沿って実行してみましょう。まずは、
$ git clone https://github.com/yoku0825/anemoeater $ cd anemoeater $ cpanm --installdeps . $ ./anemoeater --use-docker-for-pt ../logs/mysql/mysql-slow.sql
しばらくすると以下のような表示がされるので、build-essential
をaptからインストールしてください。
Docker container starts with 172.17.0.2. URL will be http://127.0.0.1:32768/anemometer
すると次のような画面が表示されます。

これで、
まとめ
今回は、