logrotate confファイル書式メモ

Logrotate Linux
Logrotate

対象

  • とにかく毎日ログを圧縮したい人
  • dockerのログをローテーションしたい人

環境

  • ubuntu18.04
  • dockerでログを出力しており、logフォーマットをjson形式にしていること

本題

/etc/logrotate.d/docker-logs↓

/var/lib/docker/containers/*/*.log {
 rotate 3
 compress
 daily
 # copytruncate
 dateext
 missingok
 # delaycompress
 olddir /var/log/docker/
}

上記を参考に行う

dockerログはjson形式をフォーマットにしている限り、/var/lib/docker/containers/{container_id}/に配置されるので、/var/lib/docker/containers/*/*.log を指定している

rotate 3 3世代までローテーションをし、それ以降は削除する
compress ローテーションのタイミングでgzipに圧縮する。圧縮しない場合はnocompressを指定する
daily 毎日ローテーションする
copytruncate cpを使ってファイルコピーを行い、元ファイルの中身を消すというもの。cpから中身を消すまでに書かれたログは消えてしまうので注意する
dateext リネーム時に日付を含める (-YYYYMMDD)
missingok ログファイルがなくてもエラー扱いにしない
delaycompress 1世代目は圧縮せず、2世代目から圧縮するようにする。compressと同時に設定する必要あり
oldire /var/log/docker/ ローテートしたファイルを/var/log/dockerに移動する。移動先は同デバイスである必要あり。

テスト

logrotate -fv /etc/logrotate.conf このコマンドを叩けば、実際にローテーションされ、ファイルが圧縮されるのが確認できる

logrotate -dv /etc/logrotate.conf 実際に叩く必要がない場合(本番など)ではこのコマンドを使用できる。dry runを行い、ローテートはされないがconfファイルの妥当性は確認できる

課題

  • /var/log/docker配下に古いログは格納できるが、最新ログは格納できない
  • copytruncateのメリットがわからないので、未使用。デフォルトのmvする方式との比較が必要。
  • delaycompressも使用するケースが掴めずコメントアウトにしている。一つ前のログは圧縮したくないケースが想定できないため保留。

コメント

タイトルとURLをコピーしました