redashで誰が何のクエリを投げたのかMySQL側で確認する

はじめに

MySQLはredashで最も多く使われるデータソースの一つです。

MySQLにつなぐ際、用途ごとにユーザーを作成するのが一般的な運用だと思います。

我々はredashも例外ではなく、redash用に”redash”というアカウントをDBに登録しています。つまり、redashからMySQLに接続する際”redash”というユーザーが繋ぎに行くことになります。

そのため、DB側でみると、すべてが”redash”ユーザーになってしまうと思い込んでいたので、MySQL側から「誰が何をやったのか」はわからないはず。と思ってました。

※ redashは version 6 bata版を使っています。

実際はどうなのか

実はredashからMySQLに送られるデータはコメント欄にredashのアカウントが記載されています。

+-------+-------------+---------------------+-----------+-------------+---------+-----------------------------------------------------------------------------+------------------+|
| Id | User | Host | db | Command | Time | State | Info |
|+-------+-------------+---------------------+-----------+-------------+---------+-----------------------------------------------------------------------------+------------------+| 
| 23745 | redash | 172.1.2.25:58582 | mysqldb | Query | 123 | preparing | /* Username: tsukada@sumito.jp, Task ID: 86611845-6b88-4b82-b1e3-6951236f8ad6, Query ID: adhoc, Queue: queries, Query Hash: f175924439bfb73a2df8c81234567890 */ SELECT s.id, s.date FROM sample s |https://tsukada.sumito.jp/wp-admin/post.php?post=691&action=edit# | 

上記からわかる通り、実施するクエリの前に以下の部分がコメントとして追加されてます。

/* Username: tsukada@sumito.jp, Task ID: 86611845-6b88-4b82-b1e3-6951236f8ad6, Query ID: adhoc, Queue: queries, Query Hash: f175924439bfb73a2df8c81234567890 */

このUsernameはredashに登録されているユーザのメールアドレスになるのが注意です。

show processlist;

と組み合わせて、誰が重いクエリを投げているのか、DB側からも誰が何を実施したのかトレースが可能です。

さいごに

他のデータソースは試してないので、
もしご存知の方いらっしゃったら

Redash Advent Calendar ( https://adventar.org/calendars/3299 )

に記載してぜひ教えてください。