2016-05-30 12 views
0

ユーザーコードを実行するアプリケーションがあります。 Dockerがあまりにも多くのログを収集していないことを確認したいと思います。このため、私はの最後のだけを得るために、max-sizemax-fileのロギングオプションを使用しようとしています。残りのユーザーは数キロバイトを捨ててしまいますが、動作していないようです。ドッカーロギングを制限する

私が行う場合:

$ docker run --log-opt max-size=2 --log-opt max-file=1 python:2 python -c "for i in range(10): print i" 
0 
1 
2 
3 
4 
5 
6 
7 
8 
9 

そして、それはまだ画面上の完全な出力を表示します。ホスト上で手動でログを調べると、フル出力のファイルがそこにあることがわかります。

ここでは9\nしか得られませんか?私はここで間違って何をしていますか?

+0

使用しているオプションは、最大ファイルサイズとファイル数です。最大サイズはk/m/gです。設定しても、正確な行数を予測することはできません。それはファイルサイズでです – Shibashis

答えて

2

ドッカーJSON file log optionsは、dockerクライアントにストリーミングされたstdoutとstderrに影響を与えません。フォアグラウンドで実行すると完全な出力が表示されます。

docker logsを実行すると、情報がファイルから引き出されます。

最大サイズにはユニットが必要です。キロバイト、メガバイト、またはギガバイト。

--log-opt max-size=[0-9+][k|m|g] 

これはJSONログファイルのサイズを設定し、サイズに貢献する行の長さに比べて余分なメタデータが存在するようにします。

{"log":"1\n","stream":"stdout","time":"2016-05-30T07:39:31.265191929Z"} 

1kのスペースに最大14個のログエントリを収める必要があります。ドッカーが回転を記録するかどうかは正確であるかどうかは別の問題です。

どのような場合でも、4k未満のファイルサイズを扱うには時間が無駄でしょう。

+0

私は例がちょっと工夫されていることに同意します(私たちは出力の2バイトのみを保持するつもりはありません;-)。あなたが言うことは、保存された最後のN [k | m | g]バイトではないことを除いて、動作するようです。ログはロールオーバーされ、最大** ** N [k | m | g]バイトはユーザー出力から保存されます。つまり、FIFO付きの循環バッファとしては実装されていません。これは、ドキュメントで少し良く説明することができます。 –

+0

これはUNIXでのファイルロギングのためのかなり標準的な設定です。円形ファイルバッファは、標準のlinuxファイルシステムでは提供されていないため、まれです。カーネルはメモリバッファを小さくすることができます。何も設定しなくても、[journald logger](https://docs.docker.com/engine/admin/logging/journald/)をリングバッファに記録することができます。 – Matt

関連する問題