※当サイトの記事には、広告・プロモーションが含まれます。

Dockerのようなコンテナのログはホストのログとは別の場所に保存される

scienceportal.jst.go.jp

インスリンを作る細胞が増えるための前提条件とか、落とし穴が無いことを祈りますか。

日本の糖尿病の状況は、

seikatsusyukanbyo.com

⇧ 上記サイト様によりますと、1000万人を超えてるそうなので、

www.stat.go.jp

総務省が公開している統計によると、日本の総人口が概算で1億2431万人らしいので、8%ぐらいの割合で糖尿病に関係してるってことですか。

何て言うか、糖尿病の割合も衝撃ではあるけど、統計の推移グラフから読み取れる10年で300万人以上の人口減が気になるけど...

仮に、このペースで減少し続けた場合、ザックリ単純計算で、100年後では3000万減、300年後では9000万減、400年後だと1億2000万減と。

へぇ~、統計の人口減の推移がこれから先も変わらないとしてシュミレーションすると、420年後ぐらいには、そして誰もいなくなった、的な状態になるってことですか。

西暦2500年まで日本が存続できないって可能性もあるんですね。

Dockerのようなコンテナのログはホストのログとは別の場所に保存される

今時は、Dockerのようなコンテナ環境でアプリケーションを稼働させてるケースが多くなってきていると思うのですが、

qiita.com

ホストファイルディレクトリのマウント

コンテナでテキストログファイルを収集する最も簡単な方法は、ホストファイルのディレクトリをコンテナのログのディレクトリにマウントすることです。これは、次の図のようにコンテナを起動したときにバインドマウントまたはボリュームメソッドを使用することで行うことができます。

コンテナログ処理の技術的なベストプラクティス:Dockerのケーススタディ #Docker - Qiita

⇧ とあるように、コンテナ内のログは、ホストのログとは独立していることから、

をマウントしておいてあげる必要がありますと。

で、Dockerの公式のドキュメントによると、

docs.docker.com

Tip: use the local logging driver to prevent disk-exhaustion

By default, no log-rotation is performed. As a result, log-files stored by the default json-file logging driver logging driver can cause a significant amount of disk space to be used for containers that generate much output, which can lead to disk space exhaustion.

https://docs.docker.com/config/containers/logging/configure/

⇧ コンテナのログは、デフォルトだと、json-file logging driverを利用するようになっているらしく、

Usage

To use the json-file driver as the default logging driver, set the log-driver and log-opts keys to appropriate values in the daemon.json file, which is located in /etc/docker/ on Linux hosts or C:\ProgramData\docker\config\ on Windows Server.

https://docs.docker.com/config/containers/logging/json-file/

Linux環境だと、/etc/docker/ のディレクトリに蓄積されるようになっているらしい、コンテナログのデフォルトの出力先が分かり辛いな...

と言うか、デフォルトだとログローテーションされないって、罠過ぎるでしょ...

コンテナの長期稼働は想定されていないってことなんですかね?

あと、

docs.docker.com

The daemon logs may help you diagnose problems. The logs may be saved in one of a few locations, depending on the operating system configuration and the logging subsystem used:

https://docs.docker.com/config/daemon/logs/

⇧ コンテナログ以外にも、daemon logなるものが蓄積されるそうですが、こちらは、ホスト側のディレクトリに蓄積されるかと。

というのも、ドキュメントによると、

docs.docker.jp

⇧ となっているので、「Docker デーモン」に関連するものは、ホスト側に蓄積されるかと。

脱線しましたが、例えば、ホスト側でログローテーションとかしている場合、コンテナ側でログが出力されるディレクトリがホスト側のディレクトリにマウントされていないと、コンテナのログはログローテーションの対象と認識されないと思われるので、コンテナ側が稼働し続ける限りコンテナのログが蓄積され続けていきますと。

ログローテーションはと言うと、

linuc.org

ログローテーションとは、ログファイルが一定のファイルサイズに達したり、一定の期間が経過したらファイル名を変更しログファイルを切り分け、古くなったログファイルは消去する作業を言います。これによって、ログファイルの肥大化を防ぎます。

ログローテーションとは - Linux技術者認定 LinuC | LPI-Japan

www.itmedia.co.jp

 前述した「ログを回す」という表現について補足しておこう。logrotateがログを世代管理させる意味は,管理ツールなどで扱いやすいよう容量の肥大化を回避させることにある。数百MBものログファイルになってしまうと,ログ解析する場合にCPUやメモリに必要以上の負担がかかってしまう。そこで,特定の日時でそれまでのログをバックアップファイルとして切り替えるわけだ。

ログローテートツール「logrotate」を使いこなしたい - ITmedia エンタープライズ

⇧ とあるように、サーバーのメモリなどが逼迫しないようにしてくれるなどの役割を担っていますと。

Dockerのコンテナ内でも、ログローテーションができそうなことがドキュメントに記載されてるっぽいけど、ホスト側のログローテーションの対象にコンテナのログも含めるようにして、ログを一元管理できるようにした方が良さそうな気がするんだけど、どうなんだろうか?

正常に稼働し続けることが障害の起因になり得るかもしれんとか、ログファイルの扱いは難しいですな。

データベースの復旧とかもログファイルが必要だったような気がしたので、Dockerのようなコンテナのログファイルに限らず、ログファイルの管理は大変ですな。

毎度モヤモヤ感が半端ない...

今回はこのへんで。