身近であった怖い話(Linux環境)#1

2019 年 4 月 8 日 by hiro-k

お疲れ様です。
身近であった怖い話(Linux環境)の情報を展開していこうと思います。

今回は皆さんもよく利用する(と思われる)viewコマンドであった怖い話です。

ある開発者がアラーム調査のため、ログを参照しようとviewコマンドを利用して
ログファイルを開いたそうです。
コマンド実行後、しばらく応答がなく、どうしたのかと思った時、
マシンリブートが走りました。
この調査作業を本番環境で実施していたということもあり
マシンリブートによるアラーム通知が大量に上がり、
さらに専用マシンではなく、他のシステムでも利用している
共用マシンであったため、被害が広がりました。

さて、なぜマシンリブートが発生したのか・・・ですが、
開こうとしたログファイルが1日1ファイル等の分割されたファイルではなく
1ファイルに出力し続けるログファイルらしく
ファイルサイズが3GByteを超えていたそうです。
そのため、viewコマンドで対象マシンのメモリを食いつぶし、
何もできない状態となったことで、生きていないマシンと監視で判断され
マシンリブートが行われました。
これはviewコマンドだけではなく、viコマンドでも同様のことが起こります。

この問題について、大きく以下の点があげられました。
1.なぜログファイルが日付・時間単位等のファイルではないのか。
2.なぜログファイルがローテートされていないのか。
3.なぜ本番環境でvi/viewコマンドといったファイルを更新できるコマンドを
  利用したのか。

それぞれの対応・対処として決まった内容です。
※皆さんとは環境が異なると思われるため、以下については
 あくまで参考としてみてください。
1について:プログラム改修を行うということで対応
      ※当初この対処はなく、2のローテートで
       対処しようとしていたようですが、
       問題が発生したためにプログラム改修となりました。
       問題について詳細なことは聞いていないので判りませんが、
        ・常駐プロセスである
        ・1ファイルに出力し続ける
       ということから、
       ファイルをopenしたままのプロセスだったのではないかと
       思われます。
2について:既に対象マシン上に存在するローテートツールで対応
3について:本番環境でvi/viewコマンドを利用するのが問題であるため、
      利用できないようaliasでlessコマンドに置き換えで対応

皆さんもvi/viewコマンドを常日頃から利用していると思います。
もし、本番環境などで利用するとき、このことを少しでも思い出して
参照するファイルのサイズを確認したり、設計時点でファイルサイズが
肥大化しないように設計してもらえるとうれしいです。

※ちなみにファイルサイズを気にするのはvi/viewコマンドだけではありません。
他にもあるかもしれませんが、sortコマンドでも気にする必要があります。
こちらは特にオプション指定しなければsortの一時領域として
/tmpが利用されるのですが、ファイルサイズが大きなものだと
/tmpの使用率が100%になることがあります。
注意してください。

タグ:

TrackBack