例のGCEインスタンスでログが大量発生してディスク容量が100%になる問題について


日本語のドキュメントがググってもなかったので、とりあえず自分用メモを晒します。

こういうエラーが/var/log/messagesに大量に吐かれて、ファイル容量を圧迫するのが原因です。

Cannot read proc file system: 9 - Bad file descriptor.

これはGCEのバグだとされています。
https://groups.google.com/forum/#!topic/gce-discussion/Eyf_ZUoK7Nc

このディスカッションによると、この問題に対して2/7にパッチが当たっています。

2018.3.6 追記
2018.3.6日現在、まだ問題が継続して発生していました。

2018.3.28 追記
https://issuetracker.google.com/issues/72874427
ここで書かれているとおりに、下記のようにプロセスの再起動を行うと、今の所落ち着いています。

sudo pkill syslogd 
sudo umount -l /proc
sudo mount proc /proc -t proc 
sudo service rsyslog start

とりあえず解決したいなら

すぐにでも解決したい人は、sshで入って下記のコマンドを実行すれば解決します。
ただそれだとエビデンスが取れないので、下記の手順で確認していくことをおすすめします。

sudo su -
rm -rf /var/log/messages*

サーバーのディスク状況を確認する

SSHでサーバーに接続して

df -h
# を実行すると
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  9.8G     0 100% /
tmpfs           851M     0  851M   0% /dev/shm
# こんな感じで出力されます

/dev/sda1 というのが、GCEインスタンスのディスクとしてマウントされたものです。
Sizeが9.8に対して、Usedが9.8なのAvailが0になり、Use%は100%になっています。

ディスクを埋めている場所を探す

# rootになって
sudo su -
# ファイルを大きい順にリストアップさせます。
ls -lhS / | sort -nr -k5 | head -10
# リストアップしたもの
9690    /
7926    /var
7661    /var/log
3886    /var/log/messages
3708    /var/log/messages-20180204
742 /usr
633 /lib
570 /lib/modules
350 /usr/share
159 /opt/rh/python27/root/usr

こうすると上から順に見ていくので、まずルートディレクトリの容量が大きい(当たり前)ので、それから順に容量の大きい順になっています。
このバグの場合は、/var/log/messagesとその子どもたち/var/log/messages-<日付>のファイルに大量にCannot read proc file system: 9 - Bad file descriptor.と吐かれてしまうのが原因です。