Bagaimana cara melihat log jurnalctl yang lebih lama (setelah rotasi mungkin?)

23

Saya menjalankan buruh pelabuhan di ubuntu 16.04 dan ingin melihat log. Namun, saya tidak dapat melihat log setelah apa yang saya tebak adalah semacam rotasi atau log tumbuh ke ukuran tertentu.

Saya belum membuat perubahan pada journald.conf saya, jadi saya menggunakan default di sana.

Contoh dari apa yang saya lihat:

systemctl docker statusmengonfirmasi layanan telah aktif since Thu 2016-10-13 18:56:28 UTC.

Namun, ketika saya menjalankan sesuatu seperti journalctl -u docker.service --until "2016-10-13 22:00"- satu-satunya output yang saya dapatkan adalah -- Logs begin at Fri 2016-10-14 01:18:49 UTC, end at Fri 2016-10-14 16:18:25 UTC. --saya dapat melihat log dalam kisaran itu seperti yang diharapkan.

Pertanyaan saya adalah mengapa saya tidak bisa melihat log lama dengan journalctl, dan bagaimana saya bisa memperbaiki masalah ini sehingga saya bisa melihat log?

jdf
sumber

Jawaban:

15

Mungkin karena Anda mencoba untuk meninjau jurnal sejak boot terakhir, yang tampaknya menjadi kasus di dalam gambar buruh pelabuhan.

Pada Ubuntu 16.04, penyimpanan jurnal secara default menjadi dalam memori. Anda dapat mengubah default menjadi persisten dengan membuka /etc/systemd/journald.confdan mengubah Storage=jalur dari automenjadi persistent. Anda mungkin perlu me-restart journald systemctl restart systemd-journaldsetelah mengedit file konfigurasi.

Saya pikir jurnal harus persisten-oleh-default , jadi saya membuka bug tentang itu.

Mark Stosberg
sumber
Saya setuju dengan Anda itu harus persisten secara default (dan akan mengubah pengaturan itu), tetapi saya yakin mesin ini belum di-boot ulang, jadi saya tidak 100% yakin bahwa sendirian akan menyelesaikan masalah saya. Masih senang Anda mengajukan masalah itu.
jdf
Dalam kondisi tertentu, log dapat mendarat di jurnal dengan metadata yang tidak lengkap, sehingga mereka dapat ditemukan ketika meninjau journalctloutput penuh tetapi tidak log unit. Ini diketahui terjadi pada masalah log tepat sebelum unit dimatikan. Log dikirim ke journald, dan kemudian journald mengeluarkan kueri untuk metadata. Kadang-kadang sementara itu proses itu ada. Itu juga tidak terdengar seperti itu sangat cocok untuk kasus Anda.
Mark Stosberg
3

Alasan ini terjadi adalah karena default pada ukuran file journald yang disimpan. Ada lebih banyak detail tentang ini dalam dokumen . Ada baiknya membaca seluruh bagian yang saya tautkan, tetapi defaultnya berfungsi seperti ini:

journald will use 10% of the disk or 4G, whichever is smaller.

journald will leave free 15% of the disk or 4G, whichever is larger.

Untuk melihat log dari boot terakhir, dengan asumsi Anda ada Storage=persistentdi journald.conf Anda, seperti yang dicatat oleh catatan lain, Anda dapat menggunakan --boot=-1flag pada journalctlperintah untuk mendapatkan log dari hanya boot sebelumnya.

Dalam kasus OP di mana mereka yakin host tidak di-reboot, hilangnya log hanya disebabkan oleh SystemMaxUsedan / atau SystemKeepFreedefault.

Catatan: Saya OP dan pertanyaan ini masih memiliki upvotes yang masuk, jadi karena saya telah memperoleh lebih banyak pengalaman dengan journald (dan rtfm) saya memposting ini di sini dengan harapan membantu orang lain.

jdf
sumber