はじめに
docker logsに出力される内容でgrepし、処理を変更するシェルスクリプトを書こうとしたとき、そのままではgrepされなかったので、調べたことをメモ。
docker logs | grep doesn't work · Issue #9508 · moby/moby
docker logs -f doesn't cut it with a busy log file. 🙂
docker logs をgrepする場合の注意 - 自分の仕事を憎むには人生は余りにも短い
docker logs をgrepしたりsedawkする場合、Logがエラー出力に吐かれることに注意しないとはまります。 こんな感じで、エラー出力を標準出力にマージしてからgrepするとよい。 docker logs 2>&1 | grep...
結論から言うと
ログエントリが標準エラー用であり、grepをかけるためのパイプ処理が標準出力で動作するため、だそうで。
実際の方法
以下のようにして実行してやればdocker logsに対してgrep処理を実行できる。
docker logs 2>&1 | grep hello
# OR
docker logs 2>/dev/null | grep hello
他にも以下のような方法もあるらしいのですが、ちょっと試してみた感じでは分からなかったので調べてみたい。
docker logs -f --tail 0 container
https://gomiba.co.in/blog/archives/1790
docker logs で表示されるログの保存場所とローテート方法 - Qiita
docker でコンテナを起動したとき、コマンドとして指定したプロセスが標準出力・標準エラー出力に吐いたログは docker logs ${コンテナID} で閲覧できる。自分で docker のサ…
各containerのlogの格納場所は以下のコマンドを実行することで確認できる。
docker inspect <container id> | grep 'LogPath'
dockerのlogのグローバル設定
/etc/docker/daemon.json
に設定を行うことで、logサイズの制限と、ローテーション設定を行うことが出来る。
JSON File logging driver
Learn how to use the json-file logging driver with Docker Engine
Option | Description | Example |
---|---|---|
max-size | rotateされる前のログの最大サイズ。正の整数と、単位(k、m、またはg)を表す修飾子を加えたもの。デフォルトは-1(無制限)。 | --log-opt max-size=10m |
max-file | 保存されるログファイルの最大数。ログをロールバックして余分なファイルが作成された場合は、最も古いファイルが削除される。 max-size も設定されている場合にのみ有効。正の整数デフォルトは1。 | --log-opt max-file=3 |
compress | rotateしたログの圧縮を切り替える。デフォルトはdisabled 。 | --log-opt compress=true |
--log-opt max-size=[0-9]+[kmg]
--log-opt max-file=[0-9]+
{
"log-driver": "json-file",
"log-opts": {"max-size": "10m", "max-file": "3"}
}