14Room

みんな泣きながらオトナになったんだ。

mysqldumpslowの結果をslackに投げてみた

概要

以前、mysqlのslow query数をslackに投稿させていましたが、数だけでなく質も見ないとダメだなということで、今回はmysqldumpslowによる統計結果を投稿させるようにしました。

mysqldumpslow

MySQLに付属しているツールで、スロークエリログを集計してくれます。

mysqldumpslow実行

例)

mysqldumpslow -s t mysql-slow.log

mysqldumpslow実行結果

回数、平均実行時間などを総消費時間数順に表示してくれます。

Reading mysql slow query log from mysql-slow.log
Count: 1179  Time=1.88s (2222s)  Lock=0.00s (0s)  Rows=10.0 (11790), naked[naked]@33hosts
  SELECT  `timeline_threads`.* FROM `timeline_threads` INNER JOIN `naked_friends` ON `naked_friends`.`naked_id` = N and `naked_friends`.`friend_naked_id` = `timeline_threads`.`naked_id` WHERE `timeline_threads`.`deleted_at` IS NULL ORDER BY `timeline_threads`.`created_at` DESC, `timeline_threads`.`id` DESC LIMIT N

Count: 88  Time=17.08s (1502s)  Lock=0.00s (0s)  Rows=1.0 (88), naked[naked]@24hosts
  SELECT COUNT(DISTINCT `naked_items`.`id`) FROM `naked_items` INNER JOIN `naked_item_countries` ON `naked_item_countries`.`naked_item_id` = `naked_items`.`id` LEFT OUTER JOIN `nakeds` ON `nakeds`.`id` = `naked_items`.`naked_id` WHERE `naked_item_countries`.`country_id` = 'S' AND `nakeds`.`banned_at` IS NULL AND `nakeds`.`deleted_at` IS NULL AND `naked_items`.`target_type` != 'S' AND (`naked_items`.deleted_at IS NULL)

Count: 76  Time=9.09s (690s)  Lock=0.00s (0s)  Rows=0.8 (59), naked[naked]@[10.10.0.4]
  SELECT  `nakeds`.* FROM `nakeds`  WHERE `nakeds`.`reset_password_token` = 'S' LIMIT N

・
・
・
・
・

slack.sh

mysqldumpslowの結果を全部送ると見切れないので上から3つまでの結果をmessageに入れて投稿するシェルスクリプトを作りました。

#!/bin/bash
date=`date '+%Y-%m-%d'`
server_name=`hostname`
url="https://hooks.slack.com/services/zzzzzzz/xxxxxx/123456789aaa?parse=full"

num=`mysqldumpslow -s t /var/log/mysql/mysql-slow.log | head -8`
message="($date)  $server_name のslow-query top3は\n \`\`\` $num \`\`\` です。"
payload="payload={\"text\": \"${message}\", \"username\": \"naked\"}"
curl --data "${payload}" ${url}

定期実行

cronで定期実行します。

# 
# m h  dom mon dow   command
30 6 * * * /root/work/slack.sh

あとがき

この仕組みで今度こそ他のメンバーの興味を引ければと考えています。。。