2013-06-19

MySQLのslow logに過去n分間に出力されたクエリ数をカウントする

MySQL5.6.12の場合こんな感じでslow logが出力されていました

# Time: 130619 11:11:44
# User@Host: root[root] @ localhost [] Id:  5189
# Query_time: 2.001664 Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1371607904;
select sleep(2);

SET timestamp=1371607904;
のところがユリウス秒になっているのでこの値が10分前のユリウス秒よりも大きい行をカウントしてあげれば良さそうです
tailとawkを使って実現してみました

tail -50 /var/log/mysql/slow.log | awk -F'[=;]' "BEGIN{c=0} /^SET timestamp/ {if(\$2>\"`date --date "10 min ago" +%s`\"){c++}} END{print c}"

tail -50として最新の50行しか見ないようにしていますが環境によって変更すれば良いと思います
とりあえず過去10分ということでdate --date "10 min ago" +%sの値と比較しています
状況によって1 min agoとか1 days agoのように変更すれば過去1分間、過去1日間の出力クエリ数をカウントできます

0 件のコメント:

コメントを投稿