ISUCON本のモニタリング周りを簡潔にまとめてみた

設定変更後は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

インデックス作成

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"

コメント

タイトルとURLをコピーしました