Dockerログを正しく使う方法
(insight.infograb.net)- Dockerでアプリケーションをデプロイしてサービスを運用しているLinuxサーバーで、ディスク容量不足のメッセージが表示されることがある
- 実際にアプリケーションが生成・保存するデータやログの容量がそれほど多くなくても、システム全体のストレージ容量がいっぱいになることがある
- Dockerを使う際にストレージ容量不足を招く原因の1つが「Dockerコンテナログ」
- Dockerのロギングドライバーとログの保存場所
- ロギングドライバー: Dockerには、実行中のコンテナやサービスから情報を取得するのに役立つロギングメカニズムが含まれており、これがロギングドライバー
docker logsコマンド: 実行中のコンテナが記録した情報を表示docker service logsコマンド: サービスに参加しているすべてのコンテナが記録した情報を表示- Dockerは、すべてのコンテナログの標準出力(stdout)または標準エラー(stderr)をキャプチャしてJSON形式のファイルに記録する
json-fileロギングドライバーを使用 docker runまたはdocker-compose upコマンドでDockerコンテナを実行すると、/var/lib/docker/containers/[Container-ID]/[Container-ID]-json.logファイルが生成され、ログが記録されるjson-fileロギングドライバーはログローテーションを行わない- このロギングドライバーで保存されたログファイルは、大量の出力を生成するコンテナの場合、かなりのディスク容量を消費し、その結果ディスク容量が枯渇する可能性がある
- Dockerコンテナログのサイズを減らす
docker rmまたはdocker-compose downコマンドを実行するとDockerコンテナが削除され、/var/lib/docker/containers配下の [Container-ID] に対応するディレクトリも削除される- これにより、多くのディスク容量を占有していた
[Container-ID]-json.logファイルも一緒に削除され、システム全体のディスク容量を確保できる
- これにより、多くのディスク容量を占有していた
truncate -s 0 <json-log-file>コマンドを実行すると、ログファイルのサイズを0にできる
- ログローテーションの設定
- ログファイルの最大サイズ(
max-size)と最大ファイル数(max-file)を指定してログローテーションを有効化できる - ファイルサイズが設定した最大値に達すると新しいファイルに切り替わり、既存ファイルは
...-json.log.1、...-json.log.2のように最大数までログファイルが生成される - 上限を超えると最も古いファイルが削除され、Dockerコンテナのログファイルサイズが無制限に増え続けるのを防げる
- ログファイルの最大サイズ(
まだコメントはありません。