Ubuntu 16.04にサービスとして登録されたアプリケーションがあります。
次のように入力すると:
journalctl -u myapp.service
私のアプリケーションのログを見ることができます。
同じサービスを提供する新しい仮想マシンにアプリケーションを移動しようとしています。journalctl -u myapp.service
入力時に古いログと新しいログの両方がシームレスに表示されるように、ログファイルを新しい仮想マシンに移行できますか?
以前の/var/log/journalディレクトリの内容を新しい仮想マシンに置き換えて、systemd-journaldサービスを再起動してみましたが、機能しないようです。
詳細は:
- ログは /var/log/journal/<machine-id>/ に保存されます。
- ディレクトリの内容は次のとおりです。
$ls /var/log/journal/05b6b1e76c6040cc99b4d34977a98eca/ [Eメール保護]~ [Eメール保護]~ [Eメール保護]~ [Eメール保護]~system@9b08b416ae4c47a78c24b4ed77c39ea2-0000000000000001-0005b3c2d1380bae.journal system@9b08b416ae4c47a78c2400 00 5 b ccbf3f7d7c1.journal system@e5c655526bb54aa886764039cd37f897-0000000000000001-0005c4ce02f66caf.journal system.journal[Eメール保護]~ [Eメール保護]~ [Eメール保護]~ [Eメール保護]~user-1000@7b4df282ccfe4816a30db088f2621493-00000000000000ab-0005b3c2d1be9c3b.journal user-1000.journal
- /run/log/ にファイルがありません。
- 古いVMと新しいVMは同じサービス、サービス実行ユーザー、およびコンピュータIDを共有します(これは最終的に2つのVMが異なる時間にマイナーなソフトウェア/構成設定を使用して同じVMで起動(コピー)されたためです)
- ログにアクセスするために「ubuntu」を使用するユーザーは、両方の仮想マシンで同じグループを持っています。
$グループ
Ubuntu admダイヤルアウトcdromフロッピーsudoオーディオディープビデオプラグデブnetdev lxd
- 両方の仮想マシンのログバージョンは次のとおりです。
$journalctl - バージョン
システム229
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN
- ログ設定で設定したよりも長い間ログを保持したくありません。
どうしたの?
- ログフォルダの内容を完全に置き換えます。
- 以前と同様に、ファイルの所有権をroot:systemd-journalに調整します。
- これで、「root」がログ全体を見ることができます。
- 「ubuntu」はいくつかの「現在の」ログのみを見ることができますが、これはコピーされないので混乱しています。
答え1
関係を見つけることができるすべてのエントリは、そのホストのログ内容に対応しますjournalctl -u <myapp.service>
。systemd
しかし(からman journalctl
):
アクセス可能なすべてのログファイルの出力は、回転しているのか、現在作成中であるのか、システム自体に属するのか、アクセス可能なユーザーログに属しているのかに関係なくインターリーブされます。
$USER
問題は、おそらく、「新しいVM」(たとえば、リモートPaaSまたはローカルホストのVM)から自分の個人ジャーナルコンテンツを除いて、そのVMのいずれにもアクセスできないという事実に起因する可能性があります。他のジャーナルの場合(マイグレーションされたログ・ファイルが正しい場所にあると仮定)、$USER
特別な許可グループの一部またはルートにする必要があります。
$USER
これは、新しいホストでプライベートジャーナルとして認識されないため、インポートされたすべてのジャーナルファイルに適用されます。特殊グループにはsystemd-journal
、adm
およびが含まれますwheel
。 Ubuntuには他のものを含めることができます。
移行されたファイルにアクセスするには、次の手順を実行する必要があります。確認開始それ:
では、ジャーナルを単一の中央ジャーナルにマイグレーションします
/{run,var}/log/journal/
。 Ubuntu VMでどのパス/run
が/var
起動するのかわかりません。とにかく、$ man 5 journald.conf
端末でコマンドを実行してJournald.conf(5)を見てください。ファイルは次の場所にあります。/run/log/journal/machine-id/*.journal, /run/log/journal/machine-id/*.journal~, /var/log/journal/machine-id/*.journal, /var/log/journal/machine-id/*.journal~
Ubuntuのマニュアルページから:
systemd-journald
/run/log/journal/machine-id/
/var/log/journal/machine-id/
「.journal」または「.journal」サフィックスが付いたファイルにエントリを書き込みます。デーモンが異常終了した場合、またはファイルが破損していると見つかった場合は、「.journal〜」サフィックスに名前が変更され、新しいsystemd-journald
ファイルへの書き込みが開始されます。
[...]使用できない場合、またはVMの設定ファイルに設定されている場合に使用されます
/run/...
。/var/log/journal
Storage=volatile
/etc/systemd/journald.conf
- あなたの仮想マシンは
$USER
このグループのメンバーですwheel
(例:)。
他の提案やステップを適用することができますが、続行するのに十分な情報がありません。必要に応じて回答を完了できるようにコメントで報告してください。