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 エントリに反映されない。 |
CONTAINER_TAG |
コンテナのタグ( ログのタグに関するドキュメント ) |
使い方¶
デフォルトのロギング・ドライバを設定するには、Docker デーモンに --log-driver
オプションを使います。
docker daemon --log-driver=journald
特定のコンテナに対してロギング・ドライバを指定する場合は、 docker run
に --log-driver
オプションを指定します。
docker run --log-driver=journald ...
オプション¶
--log-opt NAME=VALUE
フラグで journald ロギング・ドライバのオプションを追加できます。
label と env¶
label
と env
オプションは、どちらもカンマ区切りでキーを指定できます。 label
と env
キーが重複する場合は、 env
の値が優先されます。どちらのオプションもロギング・メッセージの特別属性(extra attributes)に追加フィールドを加えます。
コンテナ名に関する考慮点¶
CONTAINER_NAME
フィールドに記録される値は、起動時のコンテナ名が使われます。 docker rename
でコンテナの名前を変更しても、 journal エントリの名前には反映されません。journal のエントリはオリジナルの名前を表示し続けます。
journalctl でログメッセージを表示¶
journalctl
コマンドを使って、ログメッセージを表示できます。フィルタ表現を追加することで、特定のコンテナに関するメッセージしか表示しないようにできます。たとえば、特定のコンテナ名に関する全てのメッセージを表示するには、次のようにします。
# journalctl CONTAINER_NAME=webserver
メッセージの制限だけでなく、他のフィルタも利用できます。たとえば、システムが直近で部ブートした以降のメッセージを生成するには、次のように実行します。
# journalctl -b CONTAINER_NAME=webserver
あるいは、全てのメタデータを含む JSON 形式でメッセージを表示するには、次のようにします。
# journalctl -o json CONTAINER_NAME=webserver
journal 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)
参考
- Journald logging driver
- https://docs.docker.com/engine/admin/logging/journald/