2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

docker-composeでサービス運用しているなら設定しておきたいログローテート

Posted at

ことの始まり

社内で使用しているサービスにいくらリクエストを送っても返事がなくなったので調査。

原因

サーバーがdiskfull状態だったことでファイルの書き込み処理が行えず、ほぼほぼ何もできなくなっていたことが原因。
なぜ、そんなに容量が圧迫されてしまったのか調べたところdockerのログが膨れ上がって容量を圧迫していた。

対策

docker-composeを使用してサービスを運用しているケースだったので、コンテナごとにログファイルの上限サイズと保持するファイル数を設定した。
docker-compose.ymlに以下のように書くことで上限サイズとファイル数を設定できるみたい。

docker-compose.yml
version: '2'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
    logging: # ログ記録の設定
      driver: "json-file" # ロギングドライバの指定
      options:
        max-size: "1k" # 上限サイズを1KBに設定
        max-file: "2" # ファイル数は2まで

上記の設定で、webコンテナから吐き出されるlogファイルは1KBに到達するとロールオーバー(別ファイルに繰り出)されます。
実際に吐かれたログを見てみると、確かに1KB程で コンテナID-json.log.1 とロールオーバーされたものが出来ています。

# docker for macだと、このpathにログファイルは存在しません。(hyperkit vm上で動いているため)
/var/lib/docker/containers/8918bd3a1b22eb04f9538ca8df869ef1588f27aefffad37efe4c09d1bd079ab8 # ls -la
total 48
(略
-rw-r-----    1 root     root           424 Apr 28 02:51 8918bd3a1b22eb04f9538ca8df869ef1588f27aefffad37efe4c09d1bd079ab8-json.log
-rw-r-----    1 root     root          1020 Apr 28 02:51 8918bd3a1b22eb04f9538ca8df869ef1588f27aefffad37efe4c09d1bd079ab8-json.log.1
(略

これで、次のロールオーバーが発生すると max-file が2になっているため、 コンテナID-json.log.1 のものが削除されて今まで コンテナID-json.log だったものが コンテナID-json.log.1 となります。
このように、ロールオーバーする設定にすると、 docker-compose logs コンテナ名で表示されるログは コンテナID-json.logのみになるので、前のものを確認したいときは直接見に行ってください。

ログの設定についてもっとしたい場合は、 公式ドキュメントを確認してください。
また、オプションにどんなものが使えるか知りたい場合は、こちらを見てみてください。

設定できたか確認

しっかり設定できた確認したい場合は以下のコマンドで確認することができます。

docker inspect コンテナID | grep LogConfig -A 5
            "LogConfig": {
                "Type": "json-file",
                "Config": {
                    "max-file": "2",
                    "max-size": "1k"
                }

おまけ

docker for macでローテートされたログを見に行きたい場合は、特権コンテナに入って var/lib/docker/containers/コンテナID/ を見に行くと見れます。
特権コンテナの入り方は以下のような感じです。

docker run -it --rm --privileged --pid=host justincormack/nsenter1

終わりに

ログローテートの設定をせずにdockerを使ってサービスを運用していると、肥大し続けるlogファイルに障害を起こされます。
時限爆弾みたいなものなので、設定してなければ早めに対処することをお勧めします。

参考資料

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?