設定変更後はsudo systemctl restart XXXXを行うこと

nginx周り

ログ形式の変更

p60
/etc/nginx/nginx.confhttpの該当箇所のみ以下のように変更する。

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のインストール(踏み台サーバー用)

  1. https://go.dev/doc/install
  2. “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"