技術(tech)

Webパフォーマンスチューニングのために必要なログの設定やコマンド準備

「達人が教えるwebパフォーマンスチューニング」を読んで、Webパフォーマンスチューニングに必要なログの設定や、インストールしたコマンドをまとめました。

達人が教えるWebパフォーマンスチューニング ~ISUCONから学ぶ高速化の実践 [ 藤原 俊一郎 ]

created by Rinker

パフォーマスチューニングを行う際に、これだけ準備したいね。というものをまとめています。

事前の環境構築が終わっていない方は、以下の記事を参考にしてください。

達人が教えるwebパフォーマンスチューニングの実戦 - ハンズオン環境構築この記事では、Webパフォーマンスチューニングのための環境構築手順を紹介。AWS上にISUCONアプリケーションを構築する方法を提供。注意事項と具体的な手順を含む。続きもチェック。...

 

事前準備

前回までの環境構築が終わっていれば、スポットインスタンスのEC2が準備されているはずです。

なるべく課金が発生しないように、インスタンスを停止している場合は、インスタンスを起動しておきます。
(作業が終わったら、最後にインスタンスを停止しておきましょう。)

 

環境構築

 

後の作業が楽になるよう、諸々設定しておきます。

Session Managerのデフォルトシェルをbashに変更する

Session Managerを使用してログインした際、デフォルトシェルがshになっています。

これだと、ターミナル上で補完が効かなかったりで、操作しづらいので変えます。

こちらの記事を参考に設定します。

 

Homebrewを入れる

コマンドを追加で入れるためにHomebrewをインストールします。

brew公式ページに記載されているインストールコマンドをターミナルに貼り付けます。

Homebrewインストール中に、「echo xxx を実行してね」とか色々表示されるので、それに従いましょう。

gccも入れておいてね と表示されるので、「brew install gcc」で入れましょう。

# pathが通っていない旨のwarningが出たら
echo 'export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"' >>  ~/.bashrc
source ~/.bashrc

 

諸々必要なコマンドをインストールする

 

アクセスログ集計用のコマンド

brew install alp

 

ベンチマーカー実行コマンド

$ apt update
$ apt install apache2utils

 

サーバメトリクス監視コマンド

apt install dstat

 

ログの出力設定をする

 

nginxのログ出力形式をjsonに変更する

「/etc/nginx/nginx.conf」を編集します。

httpのブロックの中に、以下を追記します。

log_format json escape=json '{"time":"$time_iso8601",'
                            '"host":"$remote_addr",'
                            '"port":$remote_port,'
                            '"method":"$request_method",'
                            '"uri":"$request_uri",'
                            '"status":"$status",'
                            '"body_bytes":$body_bytes_sent,'
                            '"referer":"$http_referer",'
                            '"ua":"$http_user_agent",'
                            '"request_time":"$request_time",'
                            '"response_time":"$upstream_response_time"}';

 

 

nginxの設定ファイルの構文チェックを行います。
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

問題がなければ、nginxを再起動します。
$ sudo systemctl reload nginx

適当にWebページにリクエストを送って、ログがjson形式になったことを確認します。
$ sudo cat /var/log/nginx/access.log

 

mysqlのスロークエリを出力するように設定する

「/etc/mysql/mysql.conf.d/mysql.cnf」を編集します。

以下を追記します。

パフォーマンスチューニングのために、全ての実行クエリの情報が出力されるように「long_query_time = 0」としています。

実際に運用する際には、全てのクエリがログに書き込まれるだけでも負荷になるので、0ではなく、何秒以上のクエリをログに出力するのか調整しましょう。

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

 

設定変更を反映させるために、mysqlを再起動します。

sudo systemctl restart mysql

 

 

その他、書籍を読み進める中で、気付いたタイミングで追記します。

達人が教えるWebパフォーマンスチューニング ~ISUCONから学ぶ高速化の実践 [ 藤原 俊一郎 ]

created by Rinker

 

コマンドの実践編を知りたい方は以下をご覧ください。

負荷試験中のメトリクスやログを確認・集計できる便利コマンドを紹介サンプルアプリのパフォーマンスを向上させる手法を紹介します。記事では、負荷試験の進め方や便利なコマンドを紹介し、性能試験を行いたい人やコマンドを探している人向けに役立つ情報が満載です。パフォーマンスの向上方法についての詳細は、関連書籍をご参照いただくことをおすすめします。...