[docker][log][自分用メモ] docker logsに対してgrep処理を行う

AIX、UNIX、LinuxContainer

はじめに

docker logsに出力される内容でgrepし、処理を変更するシェルスクリプトを書こうとしたとき、そのままでは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

ちなみにdocker logsは、デフォルトではjson-fileで管理されるが、logのローテーションなどはされないようなので、あまりに出力が多いと、気が付いたらvolumeを圧迫する可能性がある。
そのため、保管場所の確認とローテート設定はしておいた方が良い。

各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
OptionDescriptionExample
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"}
}
この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。 Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

kometchtechをフォローする
タイトルとURLをコピーしました