Inside PRESSBLOG

PRESSBLOG / Instagram / SNS マーケティングとか

ある日突然インフラを任されることになった人のための障害対応、パフォーマンス改善の基本

僕のようにある日突然インフラを任されることになった人のために、メモを残しておきます。
一度に書ききれないので、随時更新していきます。

環境

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.27, for debian-linux-gnu (x86_64) using  EditLine wrapper
$ cat /etc/issue
Ubuntu 14.04.3 LTS \n \l

手順

アクセスログ解析

例えば、以下のコマンドでざっくりとしたアクセスログ解析ができます。

tail -f hoge.com-access.log | grep "GET /img" | awk -F "\t" '{print $1"\t"$2"\t"$4}'

hoge.com-access.logGET /imgが含まれているものを タブ区切りで分割したときの 1番目と2番目と4番目の要素を出力するという意味です。

アクセスログをタブ区切りにしているのは、僕はアクセスログをltsvで管理しているためです。 ltsvに関しては↓を参考にさせていただいています。
http://d.hatena.ne.jp/naoya/20130209/1360381374

特定のIPから1秒間に何十アクセスと来ていたら攻撃されている可能性もあるので、IP拒否しましょう。 アクセス拒否に関しては、別記事で説明してリンクを貼っておきます。

slow query解析

long_query_timeは実行時間が n秒 以上のクエリという意味です。 以下の設定では、実行時間が1秒以上のクエリが /var/log/mysql/mysql-slow.log に出力されます。

$ mysql -u root -p
mysql > SET GLOBAL slow_query_log=ON;
mysql > SET GLOBAL slow_query_log_file='/var/log/mysql/mysql-slow.log';
mysql > SET GLOBAL long_query_time=1;
mysql > show variables;

上記設定をした後に、slow queryのログを確認します。

$ tail -f /var/log/mysql/mysql-slow.log

実行時間が長い順で、一覧でみたい場合は

$ mysqldumpslow -s t /var/log/mysql/mysql-slow.log

上記で確認できたクエリに対して、どこがネックなのかを洗い出して、クエリ改善を行います。