コンテナのログ管理は、運用やトラブルシューティングにおいて非常に重要です。Dockerでは、デフォルトではコンテナのログはJSON形式でstdoutに出力されますが、このログのローテーションについては設定されていません。
ログローテーションは、古いログを削除して新しいログを作成することでディスクスペースを節約し、ログファイルのサイズを制限することができます。Dockerでは、ログローテーションの設定を行うことで、コンテナのログを定期的にローテーションし、容易に管理することができます。
デフォルトのロギング・ドライバの設定
デフォルトのロギングドライバの設定はDockerのインストール時に合わせて設定しておいたほうがよいでしょう。
コンテナのデフォルトのログローテーションを設定するには、/etc/docker/daemon.json
ファイルを編集します。まず、以下のコマンドを使用して、/etc/docker/daemon.json
ファイルを作成します。
sudo touch /etc/docker/daemon.json
次に、以下のようにdaemon.jsonファイルを編集し、ログローテーションの設定を追加します。以下の例では、ログファイルの最大サイズを10MB、最大ファイル数を3つに設定しています。これにより、ログファイルが一定のサイズに達すると、古いログファイルが自動的にローテーションされ、新しいログファイルが生成されます。
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
上記ファイルを設定したあと以下のコマンドを実行して反映させます。
systemctl daemon-reload
systemctl restart docker
ログファイルの最大サイズは、"max-size"パラメータで指定します。この値を超えた場合、古いログファイルが削除され、新しいログファイルが生成されます。最大ファイル数は、"max-file"パラメータで指定します。この値を超えた場合、最も古いログファイルが削除されます。
docker-compose.ymlでのロギング・ドライバ設定
docker-compose.yml
ファイルでログローテーションの設定をするには、以下のようにlogging
セクションを追加し、options
にログローテーションの設定を追加します。
services:
my_service:
image: my_image
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
上記の例では、ログファイルの最大サイズを10MB、最大ファイル数を3つに設定しています。driver
パラメータには、使用するログドライバを指定します。上記の例では、json-file
ドライバを使用しています。
設定を変更した場合は、docker-compose up
コマンドを使用してサービスを再起動する必要があります。
docker-compose up -d
これで、docker-compose.yml
ファイルでログローテーションの設定を行うことができます。
コンテナログ を手動でクリアする場合
コンテナのstdoutとstderrは/var/lib/docker/containers/[container-id]/[container-id]-json.log
に書き込まれます。
手動でログをクリアする場合は以下のコマンドでクリアできます。
truncate -s 0 <logfile>
jsonログファイルを定期的にクリアするには、cronjobを設定することができます。しかし、長期的に考えるとログローテーションを設定する方が安全です。