リモートログドライバーを使った docker logs の利用
読む時間の目安: 3 分
概要
Docker Engine 20.10 より前は、docker logs
を実行してコンテナーログを参照する際には、ログドライバーとしてlocal
、json-file
、journald
しかサポートされていませんでした。
他にもサードパーティー製のログドライバーはあったのですが、docker logs
を使ってローカルでログを参照することはサポートされていませんでした。
そういった状態でログデータを収集するのは、自動化されていようが普通に行うのであろうが、大いに問題を引き起こしていました。 サードパーティー製のログソリューションを利用した場合、ログ情報はそのサードパーティーが提供するツールが指定する書式でしか、アクセスできず参照もできませんでした。
Docker Engine 20.10 からは、ログドライバーやプラグインを設定するしないに関わらず、コンテナーのログを参照するにはdocker logs
を使えばよいことになりました。
この機能は「デュアルログ」(dual logging)と呼ばれることがあります。
この機能を利用すると、リモートログドライバーが利用されていたとしても、docker logs
を実行してローカルなコンテナーログを参照するだけでよく、一定の書式でログが得られることになります。
というのも、Engine が「ローカルな」ログドライバーに合わせて、ログ情報を設定してくれるからです。
詳細な情報については デフォルトのログドライバーの設定 を参照してください。
デュアルログでは local
ログドライバーが利用され、これを使ってコンテナーの最新ログを読み込むキャッシュとして動作します。
デフォルトでそのキャッシュは、ログファイルのローテーションを有効にしており、このログファイルはコンテナーごとに最大 5 ファイルまで、また各ファイルは(圧縮前サイズとして)20 MB までの範囲で利用可能です。
このデフォルトを変更する方法は 設定オプション の節を参照してください。 またこの機能を無効にする方法は デュアルログの無効化 の節を参照してください。
前提条件
デュアルログを利用するために設定変更する必要はありません。 Docker Engine 20.10 またはそれ以降においては、設定されたログドライバーにログ読み込み機能がサポートされていない場合には、自動的にデュアルログ機能が有効になります。
以下の例は、デュアルログ機能がある場合とない場合において、docker logs
コマンドを実行した結果を示すものです。
デュアルログ機能がない場合
コンテナーに対してsplunk
のようなリモートログドライバーが設定されていて、さらにデュアルログが無効化されている場合、ローカルのコンテナーログを参照しようとすると、エラーが表示されます。
-
手順 1: Docker デーモンを設定します。
$ cat /etc/docker/daemon.json { "log-driver": "splunk", "log-opts": { "cache-disabled": "true", ... ("splunk" ログドライバーのオプション指定) } }
-
手順 2: コンテナーを起動します。
$ docker run -d busybox --name testlog top
-
手順 3: コンテナーログを確認します。
$ docker logs 7d6ac83a89a0 Error response from daemon: configured logging driver does not support reading
デュアルログ機能がある場合
デュアルログによるキャッシュを有効にしていればdocker logs
によってログを参照できます。
これはログドライバーがログ読み込みに対応していなくても可能になります。
以下の例は、デーモン設定においてデフォルトとしてリモートログドライバーにsplunk
を利用し、デュアルログキャッシュを有効にするものです。
-
手順 1: Docker デーモンを設定します。
$ cat /etc/docker/daemon.json { "log-driver": "splunk", "log-opts": { ... ("splunk" ログドライバーのオプション指定) } }
-
手順 2: コンテナーを起動します。
$ docker run -d busybox --name testlog top
-
手順 3: コンテナーログを確認します。
$ docker logs 7d6ac83a89a0 2019-02-04T19:48:15.423Z [INFO] core: marked as sealed 2019-02-04T19:48:15.423Z [INFO] core: pre-seal teardown starting 2019-02-04T19:48:15.423Z [INFO] core: stopping cluster listeners 2019-02-04T19:48:15.423Z [INFO] core: shutting down forwarding rpc listeners 2019-02-04T19:48:15.423Z [INFO] core: forwarding rpc listeners stopped 2019-02-04T19:48:15.599Z [INFO] core: rpc listeners successfully shut down 2019-02-04T19:48:15.599Z [INFO] core: cluster listeners successfully shut down
メモ
デュアルログ機能を有効にする前後において、ログ読み込みに対応する
local
、json-file
、journald
といったローカルドライバーの機能は何も変わりません。 そのドライバーにおいてローカルのログは、上のどちらのケースにおいても参照可能です。
Configuration options
The “dual logging” cache accepts the same configuration options as the
local
logging driver, but with a cache-
prefix. These options
can be specified per container, and defaults for new containers can be set using
the daemon configuration file.
By default, the cache has log-file rotation enabled, and is limited to a maximum of 5 files of 20MB each (before compression) per container. Use the configuration options described below to customize these defaults.
Option | Default | Description |
---|---|---|
cache-disabled |
"false" |
Disable local caching. Boolean value passed as a string (true , 1 , 0 , or false ). |
cache-max-size |
"20m" |
The maximum size of the cache before it is rotated. A positive integer plus a modifier representing the unit of measure (k , m , or g ). |
cache-max-file |
"5" |
The maximum number of cache files that can be present. If rotating the logs creates excess files, the oldest file is removed. A positive integer. |
cache-compress |
"true" |
Enable or disable compression of rotated log files. Boolean value passed as a string (true , 1 , 0 , or false ). |
Disable the dual logging cache
Use the cache-disabled
option to disable the dual logging cache. Disabling the
cache can be useful to save storage space in situations where logs are only read
through a remote logging system, and if there is no need to read logs through
docker logs
for debugging purposes.
Caching can be disabled for individual containers or by default for new containers, when using the daemon configuration file.
The following example uses the daemon configuration file to use the “splunk’ logging driver as a default, with caching disabled:
$ cat /etc/docker/daemon.json
{
"log-driver": "splunk",
"log-opts": {
"cache-disabled": "true",
... (options for "splunk" logging driver)
}
}
Note
For logging drivers that support reading logs, such as the
local
,json-file
andjournald
drivers, dual logging is not used, and disabling the option has no effect.
制限事項
- コンテナーにおいて利用するログドライバーやプラグインが、リモートに向けてログ送信を行うものである場合、突然「ネットワーク的な」問題や、ローカルキャッシュへの書き込み不能となる事態が発生する場合があります。
logdriver
への書き込みが何らかの理由(ファイルシステムがいっぱい、書き込み権限消失)により失敗した場合、キャッシュの書き込みが失敗し、このことはデーモンのログに記録されます。 キャッシュへのログエントリーは、リトライされることはありません。ed.- デフォルトの設定のままでは、ログがキャッシュから失われる場合があります。 低速なファイル書き込みなどの際に、コンテナーの標準入出力からの情報をブロックしないように、リングバッファーが利用されるからです。 管理者はデーモンがシャットダウンする前に、この状況を修復する必要があります。