We all need logs!
Docker で作業をしているとき、特にコミュニティからの Docker イメージを再生していて、期待どおりの結果が得られないと、ブラックボックスと格闘しているような気持ちになることがしばしばあります。多くの場合、ログの読み込みはデバッグのために多くの時間を要します。
この記事では、Docker コンテナのログローテーションの設定について解説します。
デフォルトのロギング・ドライバ
コンテナには異なるロギング・ドライバを設定することが可能です。デフォルトではコンテナの stdout と stderr は /var/lib/docker/containers/[container-id]/[container-id]-json.log にある json ファイルに書き込まれます。これをそのまま放置すると、以下のように大量のディスクスペースを使ってしまう可能性があります。
ログをマニュアルでパージする
json ログファイルがディスクスペースを圧迫している場合は、以下のコマンドを使用してパージすることが可能です。
|
|
こうした json ログファイルを定期的にパージするために cronjob を設定することも可能ですが、長期的に考えるとログローテーションを設定したほうが無難でしょう。
ログローテーションの設定
デフォルトのロギング・ドライバを設定する
デフォルトのロギング・ドライバを設定するために、/etc/docker/daemon.json に以下値を追加します。このファイルが存在しない場合は新たに作成しましょう。
|
|
json-file のロギング・ドライバにはいくつかのオプションがあり、syslog などの他のロギング・ドライバに変更することも可能です。詳細は Docker Docs - Configure logging drivers をご参照ください。
以下のコマンドを実行して、アップデートされた daemon.json をリロードします。新しい設定は、再起動後に新しく作成されたすべてのコンテナに適用されます。
|
|
コンテナにロギング・ドライバを設定する
グローバルコンフィギュレーションにしたくない場合は、コンテナレベルで設定することも可能です。
docker run コマンドを使用する
docker run コマンドを使えば、以下のようにロギング・ドライバとオプションを指定することができます。
|
|
docker-compose を使用する
ロギング・ドライバとオプションは、以下のように docker-compose を使用して設定することも可能です。
|
|
設定が機能していることを確認しましょう。
まとめ
デフォルトの設定は正常に機能しますが、ディスクスペースがいつコンテナログでいっぱいになってしまうかわかりません。今回はそうした問題を回避するための方法をお伝えしました。また、ログが重要な資産であることも忘れてはいけません。トラブルがあった際に役立つだけでなく、隠された価値があるのです。ログは大切に保管するようにしましょう。
ログマネジメントSAASソリューションをお探しの場合は、Boatswain をぜひご利用ください。ログの管理と Docker サーバーの監視をお手伝いします。💫