サーバのストレージ容量が半分切ったので原因を調べた。

Logwatch、普段はストレージサイズの項目読んでないのですが、久しぶりに見てみたらこんな感じで半分切っててびっくりしたので原因を調べました。

 --------------------- Disk Space Begin ------------------------ 

 Filesystem                               Size  Used Avail Use% Mounted on
 /dev/mapper/centos_tk2--212--15517-root   28G   14G   15G  48% /
 devtmpfs                                 487M     0  487M   0% /dev
 /dev/vda1                                497M  291M  207M  59% /boot

やったこと

以下コマンドで誰がどれだけ容量を占めているか確認する。

cd /
sudo  du -sh ./*
(略)
4.0K    ./tmp
3.8G    ./usr
8.6G    ./var

なるほど、var配下が怪しそうです。多分wwwかログでしょうね。

cd /var
sudo  du -sh ./*
(略)
7.2G    ./log

あっ…。

原因

mongodbのログが7GB超えてた。
そういえば、今まで特にトラブルなかったからmongoのログ見たこと無いんですよね。やばい。以下のドキュメントを見てローテートの設定を行いました。
Rotate Log Files — MongoDB Manual 3.2
あとは定期的に古いログを圧縮すればOKですね。
おかげでストレージ利用率27%まで落とせました。良かったです。

自分のサイトの広告にこーどあいきゅーの問題出されても答え合わせできない。

ほんとどうでもいい話でしかもオチも解決法もないです解決しました。Tumblrに書こうと思ったんだけど、こちらのブログに出てきた広告の話だったので。

誰だこのおっさん。

誰だこのおっさん。

人生でPHP書いたことある時間が1時間未満の人間だけどさすがにこれはわかる、というかわからないとさすがに怒られる(誰に)。答え:何も出力されない
PHPの変数宣言とかスコープ周りってクセがあるなぁと思います。なんでgrobalがあるのにlocalがないんだろ、とか。

問題は「答え合わせしたいけど、自分のブログのアドセンスをクリックすると不正とみなされてクリックできない」ことで、やっぱり答え気になるなぁっていう。自分でアドセンスクリックしたらどうなるんだろうと思ってヘルプを見たのですが、誤クリックしたときは特に何もしなくていいそうです。
アカウントを適正に運営する – AdSense ヘルプ
でも誤クリックじゃなくて、広告で紹介されているリンクの内容を知りたい場合にどうすればいいのかわかりませんでした。下手にクリックして何かあっても嫌だし、仕方ないのでラズパイ2のPHP 5.6.26-0+deb8u1で答え合わせをしました。

そもそもこの問題公式ドキュメントの内容そのまんまですね。実際にスクリプト動かすまでもなかった。
PHP: 変数のスコープ – Manual

追記

コメントで、Google Publisher Toolbarを導入すると広告がクリックできる、との情報をいただいたので導入して解決しました。ありがとうございました。
参考サイトは以下
あ、安西先生・・・adsenseの広告を自己クリックしたいです・・・。[解決編] – 日なたと木陰

splapiがDoS攻撃されたっぽい。

各サイトではDoS/DDoS攻撃っぽいアクセスを受けたらアラートが飛ぶようになってるのですが、初めてアラートが飛びました。ちゃんと動いてよかったです。よくないけど。ちなみにsplapiは1秒以内に規定値以上のアクセスがあったり、同一IPで同時接続数が規定値以上を超えたりすると429が返るようになっています。(ブログは503)

time:27/Sep/2016:19:30:30 +0900 host:157.7.174.40       request:GET /regular/now HTTP/1.0       status:200   size:132 referer:-       ua:-    reqtime:0.017   upsttime:0.016
time:27/Sep/2016:19:30:30 +0900 host:157.7.174.40       request:GET /gachi/next HTTP/1.0        status:200   size:151 referer:-       ua:-    reqtime:0.015   upsttime:0.014
time:27/Sep/2016:19:30:30 +0900 host:157.7.174.40       request:GET /regular/next HTTP/1.0      status:200   size:126 referer:-       ua:-    reqtime:0.016   upsttime:0.014
time:27/Sep/2016:19:30:30 +0900 host:157.7.174.40       request:GET /gachi/now HTTP/1.0 status:200      size:163      referer:-       ua:-    reqtime:0.022   upsttime:0.021
time:27/Sep/2016:19:30:30 +0900 host:157.7.174.40       request:GET /regular/now HTTP/1.0       status:200   size:132 referer:-       ua:-    reqtime:0.015   upsttime:0.014
time:27/Sep/2016:19:30:30 +0900 host:157.7.174.40       request:GET /gachi/next HTTP/1.0        status:200   size:151 referer:-       ua:-    reqtime:0.020   upsttime:0.018
(以下429が出るまで続く)

splapiが攻撃されてるっぽいですが、攻撃するなら一番処理が重いはずの/gachiを狙えばいいはずなのでよくわかりません。

 ~  nslookup  157.7.174.40                                                876ms  2016年09月27日 20時12分00秒
Server:         210.188.224.11
Address:        210.188.224.11#53

Non-authoritative answer:
40.174.7.157.in-addr.arpa       name = cpanel01wh.tyo1.cloud.z.com.

Authoritative answers can be found from:

GMO系列ですね。403を返すようにしておきました。
GMOってレンタルサーバがDDoS受けたら解約迫るようなとこだったと思うのですが、自分がDDoSしてる場合はどうするのでしょう。ちなみにServersMan@VPS使ってた時にお名前VPSから攻撃食らったときは調査依頼送って無視されました。今回はどうでしょう。
DDoS攻撃されたらそこで試合終了!? レンサバから利用停止を宣告される前にできる8つの対策 – Qiita

巻き添えくらってアクセスできなくなった方は連絡いただければ対応しますので、お手数ですが連絡ください。

追記

アクセスログ見たら単体攻撃っぽかったのでタイトルをDDoSからDoSに変えました。
Dos攻撃とDDos攻撃の違いと対策についてまとめてみた
対象IPから攻撃はされてないけどちょくちょくアクセスされてますね。動かしてたスクリプトバグってただけなのかなぁ。

追記2

攻撃元から連絡があったので解除しました。サーバサイドで動かしているAPIを呼び出すスクリプトがDoS攻撃を受けて、そのスクリプトが(結果的に)踏み台になってDoS攻撃してたそうです。いくらなんでも理由がひでえと思ったのですが、パニックラビリンス聴いてたら脳みそキャンパスごじげんでどうでもよくなりました。
以下Qiitaのデザインパターンは参考になります。
サーバサイドで複数Web APIを呼び出すときのデザインパターン – Qiita
結局GMOからは連絡きませんでした。きました。

追記3

– (お客様センター) – 2016/10/03 18:54
xxxx 様

いつもご利用いただき、まことにありがとうございます。
Z.com お客様センター です。

ご案内にお時間を要しまして、申し訳ございません。

該当のユーザー特定を行い、弊社にて対応を行わせて
頂きました。

本件につきまして情報のご提供を頂き、誠にありがとうございました。

今後ともZ.comをよろしくお願いいたします。

なんというか…今後自分で契約してGMO系のサーバは使うことはないだろうな…。ドメインvalue-domainだけど…。

zshを諦めてfishを導入した。

fish-shellを使ってみませんか – Qiita
zsh から fish にした。 – yoshiori.github.io

なんだかんだで大学院いたときから周りがzsh使ってたのでzsh使っていたのですが、やっぱり使いこなせなかったのでユーザーフレンドリーだと話題のfishに移行しました。シェル食って生きてる人間とマウスないと何もできない私みたいな人間を一緒にすべきではなかった。

やったこと

omfの導入

oh-my-fish/oh-my-fish: The Fishshell Framework.
マウスが友達の人はomfコマンド使えないと辛いので導入します。

pecoプラグインの導入

oh-my-fish/plugin-peco: Browse your fish history with peco.

zプラグインの導入

oh-my-fish/plugin-z: Integration with z (autojump alternative).

vimのビルド

yumで入れたvimはfishに対応していないので、8.0をcloneしてビルドしました。
vim/vim: The official Vim repository

lessをvimのマクロに変更

config.fishはこんな感じになりました。

set -gx LANG ja_JP.UTF-8
set -gx LC_ALL ja_JP.UTF-8
set -gx LANGUAGE ja_JP.UTF-8

set -gx Z_SCRIPT_PATH ~/z/z.sh

set vim_version (vim --version | head -1 | sed 's/^.*\ \([0-9]\)\.\([0-9]\)\ .*$/\1\2/')
alias less "/usr/local/share/vim/vim$vim_version/macros/less.sh"

function fish_user_key_bindings
  bind \cr 'peco_select_history (commandline -b)'
end

themeはbobthefishを使いました。
oh-my-fish/theme-bobthefish: A Powerline-style, Git-aware fish theme optimized for awesome.

フォントはPowerline適用済みRictyDiminishedを使ってるのですが、mobaXtermとの相性が悪いのか原因不明で矢印がかけちゃいますね。なんだろうこれ。

fishを導入した

fishを導入した

サブマシンでスクショとったのでザギザギしてますがメインマシンはmactype入れてるのでもっときれいです。

追記

Z_SCRIPT_PATHはinit.fishが読み込まれる前に設定しないと、ログイン時に「Please install ‘z’ first!」というメッセージと一緒にエラーコード(リターンコードは1)を吐いてしまうので、WinSCPとかSFTP使おうとした時に「大きなSFTPパケット(1416128883 B)を受信しました。サポートしている最大パケットサイズは 102400 B です。(中略)メッセージが “Plea” で始まっています。」のようなエラーが発生します。
$OMF_CONFIG配下にbefore.init.fishを作って、その中でZ_SCRIPT_PATHを設定すると解消します。参考サイトは以下。
How can I install 'z' in fish? · Issue #2 · oh-my-fish/plugin-z
余計なお世話感がすごい。最悪プラグインいじってもいい気がします。

Nginx Helperで個別記事のキャッシュをパージできない。

Nginx Helper — WordPress Plugins
FastCGI Cacheを使ってるので、このプラグインを導入しているのですが、個別記事のキャッシュがうまくパージできないのでログを出して原因を調べました。

原因

パージ対象になっている記事のURLの末尾にスラッシュがついている。

このブログは個別記事のパーマリンク設定が/archives/%post_id%なのですが、キャッシュをパージする対象がなぜか/archives/hoge/ になってたせいで、キャッシュが削除できていませんでした。
WordPressかNginx Helper側のバグだと思うのですが、調べる元気が無いので諦めました。

対策

purge.phpのpurgeUrlメソッドに以下を追加して、archivesがURLに含まれる場合は末尾のスラッシュを削除するようにしました。

if(strpos($_url_purge,'archives') !== false){
  //URLのなかに'archives'が含まれている場合、スラッシュを削除
  $_url_purge = rtrim($_url_purge,"/");
}

なんかファルシがルシしそうですね。

(2016/12/23)追記

バージョン上がりましたがやっぱり改善されないですね。これはバグ原因みつけてPR出したほうがいいかもしれないと思い始めました。

(2017/03/16)追記

修正されたみたいです。よかった。