akms道東

ITイベント,勉強会への参加記録や趣味のことが書いてあるブログです.

RDS for PostgreSQL のスロークエリログのファイルから開始時間、実行時間、終了時間を出すワンライナー

はじめに

タイトル通りの短い内容です。 また自分用の備忘メモです。

RDS for PostgreSQL でスロークエリログのファイルから開始時間、実行時間、終了時間を出すワンライナー

RDSでPostgreSQLを利用している中で、slowqueryのログをダウンロードして処理にどれくらい時間が掛かっているか出力します。

またログの時刻がUTCなのでJSTに変換するのと、durationから終了時刻を算出するところまで行います。

利用しているのは awkdate です。

macを利用している人は GNU date をインストールして利用してください。

awk '$1 ~/^[0-9]*-/ && $4 == "duration:" {a = $1" "$2; b=int($5 / 1000);"gdate --date \""a" 9hours\" \"+%Y-%m-%d %H:%M:%S\""|getline var; "gdate --date \""var" "b"seconds ago\" \"+%Y-%m-%d %H:%M:%S\""|getline val; print "start: "val" "$4" "$5" end: "var;close("gdate --date \""a" 9hours\" \"+%Y-%m-%d %H:%M:%S\"");close("gdate --date \""var" "b"seconds ago\" \"+%Y-%m-%d %H:%M:%S\"")}' postgresql_logfile_name
  • 実行結果
start: 2017-11-12 07:58:03 duration: 3230.013 end: 2017-11-12 07:58:06
以下略

start,end,durationのcsv形式で出す場合は以下のようにする

awk '$1 ~/^[0-9]*-/ && $4 == "duration:" {a = $1" "$2; b=int($5 / 1000);"gdate --date \""a" 9hours\" \"+%Y-%m-%d %H:%M:%S\""|getline var; "gdate --date \""var" "b"seconds ago\" \"+%Y-%m-%d %H:%M:%S\""|getline val; print val","var","$5; close("gdate --date \""a" 9hours\" \"+%Y-%m-%d %H:%M:%S\"");close("gdate --date \""var" "b"seconds ago\" \"+%Y-%m-%d %H:%M:%S\"")}' postgresql_logfile_name
  • 実行結果
2017-11-11 19:15:00,2017-11-11 19:15:09,9322.90
以下略

出力された結果を元にdurationの値をファイルでgrepすればクエリを確認することができます。

おわりに

RDS for PostgreSQLのスロークエリログ整形に使うワンライナーでした。

単純に解析するだけならツールなどはOSSなどでもあるようなので、そちらを使った方が早いかも。