systemd-nspawn

systemd-nspawnのログ連携

systemd-nspawn Advent Calendar 2017 9日目の記事です。

systemd-nspawnでは--link-journal=オプションによってjournaldの制御が可能です

これによって、ホスト側からコンテナをジャーナルログを見れたりします。
以下のうちどれかを指定します

  • "no" => journalはリンクしない
  • "host" => ホスト側にjournalログを置く
  • "guest" => ゲスト側にjournalログを置く
  • "try-host" => hostと同じだけどログディレクトリ(/var/log/journal)が無くても失敗しない
  • "try-guest" => guestと同じだけどログディレクトリ(/var/log/journal)が無くても失敗しない
  • "auto" => /var/log/journalの中にコンテナIDに対応するディレクトリがあれば使う

ちょっと分かりにくいかと思いますので以下にまとめました

link-journalの指定 ログの実体
no リンクしない
host host側の/var/log/journal/machine-id
guest guest側の/var/log/journal/machine-id
try-host host側の/var/log/journal/machine-id
try-guest guest側の/var/log/journal/machine-id
auto 前回と同じ

"try-host", "try-guest"はhost側に/var/log/journalがなくても下のようなエラーにならずに進めてくれます

Failed to symlink /var/lib/machines/./ubuntu/var/log/journal/e60dfec6da884e6eafc17391c925fb23 to /var/log/journal/e60dfec6da884e6eafc17391c925fb23: No such file or directory

"auto"もその挙動なのですが、前回が"host"ならhost側に置くように、前回が"guest"ならguest側に置くように計らってくれます
またmachine-idに対応するディレクトリが無ければ何もしません

なおどのオプションでもホストからjournalctl -M コンテナ名とすればコンテナ内部のログは見れます