2017年12月3日日曜日

ytkit - Yoku-san no ToolKITの紹介

このエントリーは OSS紹介 Advent Calendar 2017 の3日目の記事です。
ytkit はMySQLの運用に使いそうなちょっとしたスクリプト群です。
2017/12/03現在、ytkitには2つのスクリプトが存在しています。

yt-binlog-groupby

mysqlbinlog の出力結果をパイプで受け取って、テーブルや時間単位でGROUP BYするためのスクリプトです。
前身は mysqlbinlog_lister.pl というスクリプトで、これをテスタブルに書き直して機能を追加したものが yt-binlog-groupby になります。
↑2年前のブログ記事から使い方は特に変わっていないですが、「バイナリーログから更新のホットスポットを探す」ために使います。
最近、 --verboseexec_time の中央値と最大値を出す機能を追加しました。スレーブ側のバイナリーログ( log_slave_updates が指定されている時)では exec_time が「マスターで実行された時刻」と「スレーブで実行された時刻」の差になるので、スレーブ遅延の時などにどの辺に問題があったのかを切り分けるのに使えるんじゃないかと期待しています。
$ mysqlbinlog -vv /path/to/binary-log | yt-binlog-groupby --cell=10m --group-by=time,table --verbose
binlog entries between 171018 14:40 and 171130 19:30
171018 14:40    healthcheckdb.test3     13071   mid:0   max:1
171020 19:00    d1.t1   1       mid:0   max:0
171020 19:20    mysqlslap.t1    3976    mid:0   max:1
171020 19:30    d1.t1   1       mid:0   max:0
171023 14:10    d1.t2   1       mid:0   max:0
171023 14:10    d1.t3   1       mid:0   max:0
171025 19:20    d1.t1   1       mid:0   max:0
171116 18:00    mysql.time_zone 1       mid:0   max:0
171117 20:20    d1.t2   2       mid:0   max:0
171117 20:20    d1.t3   2       mid:0   max:0
171121 19:10    d1.t1   1       mid:0   max:0
171124 17:00    d1.t1   1       mid:0   max:0
171128 12:40    test.t1 16      mid:0   max:0

yt-healthcheck

Nagiosの check_mysql を置き換えるために書いたスクリプトです。
MySQLを割と一人で300台管理する技術 の時に紹介した監視テクニックが実装されています(あ、生ログをダンプする部分移植してないことに気付いた…)
「パラメーターのチューニングをしなくてもある程度動く」「マスターとスレーブを入れ替えてもパラメーターを変更する必要はない」「案外忘れそうなものをワーニングで拾う」あたりを念頭に作られています。
$ yt-healthcheck -h 127.0.0.1 -P 5638 -umsandbox -pmsandbox
WARNING on slave: read_only should be ON but current setting is OFF
どちらも日々のMySQL運用で「ちょっとほしい」ものをまとめているので、どんな環境に持って行ってもある程度は動く気がします。 MySQLと仲良くなるためにご利用いただければ幸いです。
明日は @fujiwaraさん の「alp と Plack::Middleware::QueryCounter を合わせて使う話を書きます」 です!

0 件のコメント :

コメントを投稿