Journald ロギング・ドライバ¶
journald
ロギング・ドライバは、コンテナログを systemd journal に送信します。ログエントリは、 journalctl
コマンドを使ってログエントリを確認できます。使うには journal API か docker logs
コマンドを通します。
ログメッセージ自身の文字列に加え、 journald
ログドライバは各メッセージの journal に以下のメタデータを保管できます。
フィールド |
説明 |
---|---|
|
コンテナ ID の先頭から 12 文字。 |
|
64 文字の完全なコンテナ ID。 |
|
開始時のコンテナ名。 |
|
コンテナのタグ( ログのタグに関するドキュメント ) |
使い方¶
デフォルトのロギング・ドライバを設定するには、Docker デーモンに --log-driver
オプションを使います。
docker daemon --log-driver=journald
特定のコンテナに対してロギング・ドライバを指定する場合は、 docker run
に --log-driver
オプションを指定します。
docker run --log-driver=journald ...
オプション¶
--log-opt NAME=VALUE
フラグで journald ロギング・ドライバのオプションを追加できます。
タグ¶
journald のログに CONTAINER_TAG
値でテンプレートを指定します。ログのタグ形式をカスタマイズするには ログ用タグのオプションについてのドキュメント をご覧ください。
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