時間範囲でログをフィルタリング
全てのログや最新のログを表示するだけでなく、特定の時間範囲でコンテナログをフィルタリングすることも可能です。これは特定の期間に発生したイベントを調査する際に有用です。
docker logsコマンドは時間ベースのログフィルタリングのために--sinceと--untilオプションを提供しています。これらのオプションは RFC3339 タイムスタンプ、Unix タイムスタンプ、相対時間(例:10mで 10 分、1hで 1 時間)など様々な時間形式を受け付けます。
ログフィルタリングを試してみましょう。まず、異なる時間にいくつかのログを生成する必要があります。Nginx コンテナに再度curlリクエストを送信することでこれを行えます。
新しいターミナルタブを開き、curlコマンドを数回実行します(各実行の間に短い遅延を入れます)。
curl http://localhost:80
sleep 5
curl http://localhost:80
sleep 5
curl http://localhost:80
次に、my-nginxコンテナのログをタイムスタンプ付きで表示し、これらのリクエストの時間を確認します。
docker logs -t my-nginx
curlコマンドによって生成されたログエントリのタイムスタンプを確認してください。
特定の時間以降のログをフィルタリングするには--sinceオプションを使用します。例えば、過去 1 分間に生成されたログを表示するには:
docker logs --since 1m my-nginx
このコマンドはmy-nginxコンテナから過去 1 分間に生成された全てのログエントリを表示します。
--untilオプションを使用して特定の時間までのログをフィルタリングすることも可能です。例えば、1 分以上前に生成されたログを表示するには:
docker logs --until 1m my-nginx
このコマンドはmy-nginxコンテナから 1 分以上前に生成された全てのログエントリを表示します。
--sinceと--untilを組み合わせて特定の時間ウィンドウ内のログを表示できます。例えば、5 分前から 1 分前までのログを表示するには:
docker logs --since 5m --until 1m my-nginx
正確な出力はcurlコマンドを実行したタイミングとdocker logsコマンドを実行したタイミングによって異なることに注意してください。