我可以迁移 ubuntu 日志日志吗?

我可以迁移 ubuntu 日志日志吗?

我有一个应用程序在 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/ [电子邮件受保护][电子邮件受保护][电子邮件受保护][电子邮件受保护]〜系统@9b08b416ae4c47a78c24b4ed77c39ea2-0000000000000001-0005b3c2d1380bae.journal系统@9b08b416ae4c47a78c24b4ed77c39ea2-0000000000000248-0005b ccbf3f7d7c1.journal 系统@e5c655526bb54aa886764039cd37f897-0000000000000001-0005c4ce02f66caf.journal 系统.journal[电子邮件受保护][电子邮件受保护][电子邮件受保护][电子邮件受保护]~ user-1000@7b4df282ccfe4816a30db088f2621493-00000000000000ab-0005b3c2d1be9c3b.journal user-1000.journal

  • /run/log/ 中没有文件
  • 新旧 VM 共享相同的服务、服务运行用户和计算机 ID(这是因为最终两个 VM 都源于(复制自)同一个 VM,只是在不同时间且具有较小的软件/配置设置)
  • 我使用“ubuntu”访问日志的用户在两个虚拟机中具有相同的组:

$ 组

ubuntu adm dialout cdrom 软盘 sudo 音频dip 视频plugdev 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):

所有可访问的日志文件的输出都是交错的,无论它们是轮换的还是当前正在写入的,也无论它们是属于系统本身还是可访问的用户日志。

这个问题可能归结为这样一个事实:在“新虚拟机”(例如远程 PaaS,甚至本地主机上的虚拟机)上,您$USER在该虚拟机上可能无法访问除他/她自己的私人日记之外的任何内容。对于任何其他期刊(假设您迁移的日志文件位于正确的位置),您$USER将需要成为一些特殊授权组的一部分或成为 root。

$USER这将适用于任何导入的日记文件,因为这些文件在新主机上不会被识别为您的私人日记。特殊组包括systemd-journaladm、 和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/将条目写入带有“.journal”或/var/log/journal/machine-id/“.journal”后缀的文件。如果守护进程不正常停止,或者发现文件已损坏,则会使用“.journal~”后缀重命名它们,并systemd-journald开始写入新文件。
[...]在不可用或在 VM 的配置文件中设置时
/run/...使用。/var/log/journalStorage=volatile/etc/systemd/journald.conf

  • 您的虚拟机$USER是该组的成员wheel(例如)。

其他建议和步骤可能适用,但我没有足够的信息来继续操作。请在评论中报告,以便我可以在需要时完成此答案。

相关内容