Journald ロギング・ドライバ

journald ロギング・ドライバは、コンテナログを systemd journal に送信します。ログエントリは、 journalctl コマンドを使ってログエントリを確認できます。使うには journal API か docker logs コマンドを通します。

ログメッセージ自身の文字列に加え、 journald ログドライバは各メッセージの journal に以下のメタデータを保管できます。

フィールド 説明
CONTAINER_ID コンテナ ID の先頭から 12 文字。
CONTAINER_ID_FULL 完全な 64 文字のコンテナ ID。
CONTAINER_NAME 開始時のコンテナ名。 docker rename でコンテナの名称を変えても、新しい名前は journal エントリに反映されない。

使い方

デフォルトのロギング・ドライバを設定するには、Docker デーモンに --log-driver オプションを使います。

docker daemon --log-driver=journald

特定のコンテナに対してロギング・ドライバを指定する場合は、 docker run--log-driver オプションを指定します。

docker run --log-driver=journald ...

オプション

--log-opt NAME=VALUE フラグで journald ロギング・ドライバのオプションを追加できます。

label と env

labelenv オプションは、どちらもカンマ区切りでキーを指定できます。 labelenv キーが重複する場合は、 env の値が優先されます。どちらのオプションもロギング・メッセージの特別属性(extra attibutes)に追加フィールドを加えます。

コンテナ名に関する考慮点

CONTAINER_NAME フィールドに記録される値は、起動時のコンテナ名が使われます。 docker rename でコンテナの名前を変更しても、 journal エントリの名前には反映されません。journal のエントリはオリジナルの名前を表示し続けます。

journalctl でログメッセージを表示

journalctl コマンドを使って、ログメッセージを表示できます。フィルタ表現を追加することで、特定のコンテナに関するメッセージしか表示しないようにできます。たとえば、特定のコンテナ名に関する全てのメッセージを表示するには、次のようにします。

# journalctl CONTAINER_NAME=webserver

メッセージの制限だけでなく、他のフィルタも利用できます。たとえば、システムが直近で部ブートした以降のメッセージを生成するには、次のように実行します。

# journalctl -b CONTAINER_NAME=webserver

あるいは、全てのメタデータを含む JSON 形式でメッセージを表示するには、次のようにします。

# journalctl -o json CONTAINER_NAME=webserver

jounal API でログメッセージを表示

この例は systemd Python モジュールを使い、コンテナのログを取得しています。

import systemd.journal

reader = systemd.journal.Reader()
reader.add_match('CONTAINER_NAME=web')

for msg in reader:
  print '{CONTAINER_ID_FULL}: {MESSAGE}'.format(**msg)