RDS for PostgreSQL のスロークエリログのファイルから開始時間、実行時間、終了時間を出すワンライナー
はじめに
タイトル通りの短い内容です。 また自分用の備忘メモです。
RDS for PostgreSQL でスロークエリログのファイルから開始時間、実行時間、終了時間を出すワンライナー
RDSでPostgreSQLを利用している中で、slowqueryのログをダウンロードして処理にどれくらい時間が掛かっているか出力します。
またログの時刻がUTCなのでJSTに変換するのと、durationから終了時刻を算出するところまで行います。
利用しているのは awk
と date
です。
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などでもあるようなので、そちらを使った方が早いかも。