読者です 読者をやめる 読者になる 読者になる

Studio3104::BLOG.new

uninitialized constant Studio3104 (NameError)

Percona Cloud Tools を試した

インストールや設定などは、pt-agent のドキュメントの通りに進めれば難なくこなせるはずですので割愛します。

感想

以下の点などを加味して考慮した結果、思っていたほどいいモノではないような気がしました。
ざっと使ってみただけなので誤っている点などあるかも知れませんが、ご容赦を。
「ここちがうよ!」「こうすればもっといいよ!」みたいなのよろしくお願い申し上げます。

pt-agent というエージェントを root 権限で動かさなくてはならない

pt-agent の設定は、Percona Cloud Tools の WEB 画面からも設定変更を行えます。
例えば以下画像だと、How often to report のところをいじるとサーバ上にある cron のファイルが書き換えられます。

f:id:studio3104:20131107163428p:plain

インターネットから操作するのに root 権限あげちゃうのか、、、って感じ。

[追記]
root じゃなくても動かすことは出来る模様。ドキュメントに書いてあった。
でも「面倒な手順で手動インストールが必要で、わかんなかったら Percona に問い合わせてね!」みたいな感じだ。

pt-agent must be installed and ran as root.
It is possible to run as a non-root user, but this requires a more complicated and manual installation.
Please contact Percona for help if you need to run pt-agent as a non-root user.

pt-agentMySQL に作成する pt_agent なるユーザに SUPER 権限がつく

上の画像を例にすると、Long query time を書き換えて Save した場合に、サーバ上の MySQLSET GLOBAL long_query_time=0.000000 とか実行されます。

インターネットから操作するのに SUPER 権限あげちゃうのか、、、って感じ。

mysql> SHOW GRANTS FOR 'pt_agent'@'localhost';
+-----------------------------------------------------------------------------------------------------------------+
| Grants for pt_agent@localhost                                                                                   |
+-----------------------------------------------------------------------------------------------------------------+
| GRANT SUPER ON *.* TO 'pt_agent'@'localhost' IDENTIFIED BY PASSWORD '*16CED81DAC5917722E82063353A27E11178399F0' |
+-----------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MySQL サーバに pt-agent を泳がせなければならない

(このへんはあまり深くタッチしてないので、うまいやり方があるのかもしれないです。)

ひとつの pt-agent プロセスが ひとつの mysqld と対になるようなので、サーバごとにエージェントを泳がせなくてはなりません。
そうすると、一旦ログを集約サーバなどに集めておいて、そこからだけ投げるみたいなことがやりにくくなります。
ファイルやクエリごとにタグを付けられるわけではなさそうだし、どのクエリがどのサーバのモノなのかを一意に識別させる手段が、どのエージェントから送られてきたログなのか、というところだけなので。
タスクが JSON (/var/lib/pt-agent/servicesにあるファイル) で定義されているので、それをうまいことなんとかすればもしかしたらどうにか出来るのかも知れません。未検証。でもやれたとしても面倒な感じがする。

あとDB サーバが直接インターネットに繋ぎにいけないような構成をとっている場合には proxy を経由させたりとかしなくてはならないかも。面倒。

上述のエージェントに与える権限についてだけど、サーバごとにエージェントが要るのであれば、WEB から設定変えられるほうがまぁいいとは思うけど、権限過多ではないかという気がする。 サーバ もイントラで動かせるんだったらよいと思うけど、クラウドだしなぁ。

こんな感じのサマリー画面

ひとつの DB サーバ全体

f:id:studio3104:20131107170510p:plain

クエリの種類ごと

f:id:studio3104:20131107170640p:plain

これだったら EXPLAIN までしてから結果を表示して欲しい感じがする。。

f:id:studio3104:20131107170738p:plain

これも。。

f:id:studio3104:20131107170848p:plain