Mesos の sandbox のログローテーションをする

Posted on Fri 01 December 2017 in blog

結論

  • http://mesos.apache.org/documentation/latest/logging/#logrotatecontainerlogger
  • LogrotateContainerLogger を使って、 module parameter を設定する

概要

Mesos + Marathon 環境でdockerを動かしている。
基本的にコンテナのログは fluentd で飛ばしているのだけど、日に日に mesos slave のディスク容量が圧迫されていた。
調べてみると、 /var/lib/mesos-slave/slaves/ 以下にあるフォルダのうち、sandbox のログが肥大化していた。
sandbox には stdout, stderr があって、それぞれコンテナのstdout, stderrを記録しているファイルで、mesosからファイルとして取得することができる。
長期的なものは fluentd で飛ばしているので問題ないため、障害時や直近の確認のために sandbox を使うことにして、
短期間でのログローテーションを行うことにした。

設定方法

LogrotateContainerLogger の利用が可能か調べる

共有オブジェクト /usr/lib/liblogrotate_container_logger.so にあることを確認する。
パスが違っても良いが、その場合は以下で出てくるパスも変更する。

モジュールの設定ファイルを書く

/etc/mesos_slave_modules.json として以下を書く。

{
  "libraries": [{
    "file": "/usr/lib/liblogrotate_container_logger.so",
    "modules": [{
      "name": "org_apache_mesos_LogrotateContainerLogger"
      # パラメータを指定するときはここに書く
    }]
  }]
}

モジュールの有効化

/etc/mesos-slave/modules として、以下が書かれたファイルを置く。

file:///etc/mesos-slave-modules.json

/etc/mesos-slave/container_logger として、以下が書かれたファイルを置く。

org_apache_mesos_LogrotateContainerLogger

mesos-slave の起動

mesos-slave を起動する。

動作確認

sandbox を見ると、 stdout.logrotate.conf, stderr.logrotate.conf が出来ている。

ファイルの中身は

/path/to/stdout/ {
## logrotate オプション: パラメータで指定してない場合は size 10481664 くらいしかない
}

となっている。