Ubuntu

我可以遷移 ubuntu journald 日誌嗎?

  • June 23, 2021

我有一個在 Ubuntu 16.04 中註冊為服務的應用程序

如果我輸入:

journalctl -u myapp.service

我可以看到我的應用程序的日誌。

我正在將我的應用程序移動到一個新的虛擬機,在那裡將提供相同的服務。是否可以將日誌文件遷移到新的虛擬機,這樣如果我鍵入journalctl -u myapp.service它將無縫顯示所有舊日誌和任何新日誌?

我試圖將舊 /var/log/journal 目錄的內容交換到新 VM 中,並重新啟動 systemd-journald 服務,但它似乎不起作用。

更多細節:

  • 日誌儲存在 /var/log/journal/< machine-id >/
  • 目錄內容如下所示:

$ ls /var/log/journal/05b6b1e76c6040cc99b4d34977a98eca/ system@0005b3c2d13e0c14-f5dafb4f81b14546.journal~ system@0005bccfbf5ba0a3-489b00efc9586207.journal~ system@0005bd32e69bb664-572fb5c4ae0871b3.journal~ system@0005c4ce02fb0068-2e040749ddd4a06f.journal~ system@9b08b416ae4c47a78c24b4ed77c39ea2-0000000000000001-0005b3c2d1380bae .journal system@9b08b416ae4c47a78c24b4ed77c39ea2-0000000000000248-0005bccbf3f7d7c1.journal system@e5c655526bb54aa886764039cd37f897-0000000000000001-0005c4ce02f66caf.journal system.journal user-1000@0005b3c2d1bad476-9ffb04f7ed320462.journal~ user-1000@0005bccdb3bf35c7-f73e5bfc47f269c9.journal~ user-1000@0005bd32e724853a-f40e7f8131217c05 .journal~ user-1000@0005c4cf22d203b5-66cc27013c97695d.journal~ user-1000@7b4df282ccfe4816a30db088f2621493-00000000000000ab-0005b3c2d1be9c3b.journal user-1000.

  • /run/log/ 中沒有文件
  • 舊虛擬機和新虛擬機共享相同的服務、服務執行使用者和機器 ID(這是因為最終兩個虛擬機都源自(複製自)同一虛擬機,只是在不同的時間和次要的軟體/配置設置)
  • 我使用“ubuntu”訪問日誌的使用者在兩個虛擬機中具有相同的組:

$組

ubuntu adm dialout cdrom 磁片 sudo 音頻 dip 影片 plugdev netdev lxd

  • 兩個 VM 上的日誌版本是:

$ journalctl –version

系統 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”只能看到一些“目前”日誌,這很令人困惑,因為它們不是複製過來的

您將找到關係的所有條目都journalctl -u &lt;myapp.service&gt;對應於systemd給定主機的日誌內容。但是(來自man journalctl):

輸出來自所有可訪問的日誌文件,無論它們是旋轉的還是目前正在寫入的,也不管它們是屬於系統本身還是可訪問的使用者日誌。

問題可能歸結為這樣一個事實,即在“新 VM”(例如遠端 PaaS,甚至本地主機上的 VM)上,您$USER在該 VM 上可能無法訪問除他/她自己的私人日誌之外的任何內容. 對於任何其他日誌(如果您遷移的日誌文件位於正確的位置),您$USER將需要成為一些特殊授權組的一部分或成為 root。

這將適用於任何導入的期刊文件,因為這些文件不會被辨識為您$USER在新主機上的私人期刊。特殊組包括systemd-journaladmwheel。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將條目寫入以“.journal”後綴/run/log/journal/machine-id//var/log/journal/machine-id/帶有“.journal”後綴的文件。如果守護程序不干淨地停止,或者如果發現文件已損壞,則使用“.journal~”後綴將它們重命名,並systemd-journald開始寫入新文件。

$$ … $$

/run/.../var/log/journal不可用或Storage=volatile在 VM 的/etc/systemd/journald.conf配置文件中設置時使用。

  • 您的虛擬機$USER是該wheel組的成員(例如)。

其他建議和步驟可能適用,但我沒有足夠的資訊繼續執行。請在評論中報告,因此如果需要,我可以完成此答案。

引用自:https://unix.stackexchange.com/questions/655358