設定変更後はsudo systemctl restart XXXX
を行うこと
nginx周り
ログ形式の変更
p60/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"'
'}';
access_log /var/log/nginx/access.log json;
alpでアクセスログを分析する
以下を参考にalpをインストールする。
https://github.com/tkuchiki/alp
p112
/var/log/nginx/access.log
に出力されたログを確認。「形式変更」の前のデータが残っていると失敗する。
more access.log | alp json --sort sum -r -m "/posts/[0-9]+,/@\w+" -o count,method,uri,min,avg,max,sum
mysql
スロークエリの分析(手動)
スロークエリの出力設定をする
p76, 124
/etc/mysql/mysql.conf.d/mysqld.cnf
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 0
mysqldumpslow で分析する
sudo mysqldumpslow /var/log/mysql/mysql-slow.log
またはpt-query-digest で分析する
以下のコマンドでpt-query-digestをインストール
sudo apt update
sudo apt install percona-toolkit
mkdir ~/tmp
sudo pt-query-digest /var/log/mysql/mysql-slow.log > ~/tmp/digest_$(date +%Y%m%d%H%M).txt
スロークエリの分析(自動)
p127
https://github.com/kazeburo/query-digester
からクローンし、query-digesterを/usr/local/binに配置する
query-digester で分析する
10秒間の分析結果が/tmp/sloq_query_20220811172244.digestに保存される
sudo query-digester -duration 10
mysqlのroot userのパスワードがあると使えない(?)ので以下の手順でパスワードなしに変更する
$ mysql -u root -p # 通常のパスワードでログイン
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘’; # 空文字をパスワードにする
インデックス作成
ALTER TABLE comments ADD INDEX post_id_idx (post_id)
インデックス削除
ALTER TABLE comments DROP INDEX post_id_idx
大会前に用意しておくもの
Makefile(本番サーバー用)
nginxログを新しいファイルに書き込むようにし、指定秒数の間SQLスロークエリを取る
receive-bench:
if [ -e /var/log/nginx/access.log ] ; then cat /var/log/nginx/access.log >> /var/log/nginx/access_${date +%Y%m%d%H%M}.log; rm /var/log/nginx/access.log; fi
sudo query-digester -duration 500
golangのインストール(踏み台サーバー用)
- https://go.dev/doc/install
- “terminal.integrated.shellArgs.linux”: [ “-l” ]をVSCodeのsettnig jsonに書かないとパスが通らない
Makefile(踏み台サーバー用)
goのビルドとデプロイをする
include .env
build:
cd webapp/golang/ && go build -o app
push:
ssh isucon@${WEB_2_IP} "sudo systemctl stop isu-go"
scp webapp/golang/app isucon@${WEB_2_IP}:/home/isucon/private_isu/webapp/golang/app
ssh isucon@${WEB_2_IP} "sudo systemctl start isu-go"