ISUCONの最初の30分にやること[計測編]

今日はバ先の人と3人で ISHOCON1をやりました。

今回はチームではやらずに各個人で黙々とやりましたが、僕以外はisuconやるのも初めてという事でかなり苦戦していた様子でした。(僕も無事に死にましたが、、、)

ISUCONの最初の30分で秘伝のタレを入れたり、使い慣れた計測ツールを入れたりするのは定石となっていますが、初めてやる方はそこで詰まるというのもあるかと思いました。

計測してしまえばあとは取り除くだけ!という事で、最初の30分 ~ 1時間でやりたい計測ツール導入をドキュメント化しようと思います。 (推測するな。計測しろ!という名言は私の言葉です)

取り敢えず僕の使っているツール(コマンド)はこんな感じです。

sarやtopなどの負荷状況確認についてはこちらが参考になるので見ていただくとして、alpやpt-query-digestのセットアップなどについて書いていこうと思います。

alp

alpはアクセスログ集計ツールです。 このようにアクセスログを食わせるとuriごとの処理時間の合計や平均、何回リクエストが来たかなどを見やすく集計してくれます。

f:id:htilcs1115:20190602214431p:plain
alp

インストールはこげな感じや。

wget https://github.com/tkuchiki/alp/releases/download/v0.4.0/alp_linux_amd64.zip
sudo apt install unzip
unzip alp_linux_amd64.zip
sudo mv alp_linux_amd64 alp
sudo mv alp /usr/local/bin/alp

alpはログフォーマットをltst形式にする必要があります。 なのでnginxやapacheの設定ファイルをいじってログフォーマットを変えなければいけません。

nginx.の場合はこのような感じになるかと思います。

log_format ltsv "time:$time_local"
                "\thost:$remote_addr"
                "\tforwardedfor:$http_x_forwarded_for"
                "\treq:$request"
                "\tstatus:$status"
                "\tmethod:$request_method"
                "\turi:$request_uri"
                "\tsize:$body_bytes_sent"
                "\treferer:$http_referer"
                "\tua:$http_user_agent"
                "\treqtime:$request_time"
                "\tcache:$upstream_http_x_cache"
                "\truntime:$upstream_http_x_runtime"
                "\tapptime:$upstream_response_time"
                "\tvhost:$host";

access_log /var/log/nginx/access.log ltsv;

普段使っているalpインストール用のスクリプトを掲載しておきます。

https://github.com/k-nasa/isucon_secret_sauce/blob/master/alp_setup.sh

pt-query-digest

次はスロークエリログを集計してくれるツールです。どのクエリが何回実行され、最大,平均、何秒かかったかを出してくれます。(便利!) ツワモノは生ログを見てフムフム言ってるらしいですが、大人しくこの子を使うのが良いかと思います。

f:id:htilcs1115:20190602215751p:plain
slow_log

インストールはこのような感じです。

wget https://github.com/percona/percona-toolkit/archive/3.0.5-test.tar.gz
tar zxvf 3.0.5-test.tar.gz
./percona-toolkit-3.0.5-test/bin/pt-query-digest --version
sudo mv ./percona-toolkit-3.0.5-test/bin/pt-query-digest /usr/local/bin/pt-query-digest

mysqlのスローログはデフォルトではOFFになっていると思うので有効化する必要があります。

my.confに以下の設定を追加しましょう。 ここでは全ログを収集するためにlong_query_time=0を設定しています。 各々好みで変えましょう。 slow_query_log_fileも各々(ry

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 0

確認はこれ!mysqlコンソールに入っていかのコマンドを実行すると設定が有効になっているか確認することができます。

show variables like 'slow%';

これらのツールを駆使してどこが遅いのか探せるかと思います。 あとは修正して爆速にするだけ!簡単!

ということでよきisuconライフを!

ps. タイトルに計測編とありますが続く予定は無いぞ