Bagaimana cara menampilkan pesan log dari boot sebelumnya di bawah CentOS 7?

78

Eksekusi di journalctlbawah sistem CentOS 7 hanya mencetak pesan yang dihasilkan setelah boot terakhir.

Perintah

# journalctl --boot=-1

cetakan

Failed to look up boot -1: Cannot assign requested address

dan keluar dengan status 1.

Membandingkannya dengan sistem Fedora saat ini, saya perhatikan bahwa CentOS 7 tidak memiliki /var/log/journal(dan journalctltidak menyediakan --list-boots).

Jadi pertanyaan saya bagaimana menampilkan pesan log yang ditulis sebelum tanggal boot terakhir.

Atau, mungkin fungsi ini harus diaktifkan pada CentOS 7?

( journalctlHalaman manual mencantumkan 'systemd 208' sebagai nomor versi.)

maxschlepzig
sumber

Jawaban:

99

tl; dr

Pada CentOS 7, Anda harus mengaktifkan penyimpanan pesan log yang persisten:

# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald

Kalau tidak, pesan jurnal log tidak disimpan di antara boot.

Detail

Apakah journaldmempertahankan pesan log dari boot sebelumnya dikonfigurasi melalui /etc/systemd/journald.conf. Pengaturan default di bawah CentOS 7 adalah:

[Journal]
Storage=auto

Di mana halaman manual journald.conf menjelaskan autosebagai:

Salah satu dari "volatile", "persistent", "auto" dan "none". Jika "volatile", data jurnal jurnal akan disimpan hanya dalam memori, yaitu di bawah hierarki / run / log / jurnal (yang dibuat jika diperlukan). Jika "persisten", data akan disimpan lebih disukai di disk, yaitu di bawah hierarki / var / log / jurnal (yang dibuat jika diperlukan), dengan fallback ke / run / log / jurnal (yang dibuat jika diperlukan), selama boot awal dan jika disk tidak dapat ditulisi. " auto " mirip dengan "persistent" tetapi direktori / var / log / jurnal tidak dibuat jika diperlukan, sehingga keberadaannya mengontrol ke mana data log dimasukkan .

(tekankan pada saya)

The halaman manual systemd-journald.service demikian menyatakan bahwa:

Secara default, jurnal menyimpan data log di / run / log / jurnal /. Karena / run / volatile, data log hilang saat reboot. Untuk membuat data tetap, cukup untuk membuat / var / log / jurnal / di mana systemd-journald kemudian akan menyimpan data.

Rupanya, defaultnya diubah di Fedora 19 (menjadi penyimpanan persitent) dan karena CentOS 7 berasal dari Fedora 18 - masih tidak ada di sana, secara default. Kegigihan diimplementasikan secara default di luar journald via /var/log/messagesdan versi /var/log/messages-YYYYMMDDyang dirotasi yang ditulis oleh rsyslogd (yang berjalan secara default dan mendapat masukan dari journald).

Jadi, untuk mengaktifkan pencatatan persisten dengan journald di bawah RHEL / CentOS 7, Anda harus melakukannya

# mkdir /var/log/journal

dan kemudian perbaiki izin dan mulai ulang journald, mis. via

# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
maxschlepzig
sumber
6
A systemctl restart systemd-journaldharus melakukannya. Jadi tidak perlu reboot.
xx4h
@ xx4h, perbarui jawabannya
maxschlepzig
9
Dalam debian ini didokumentasikan di /usr/share/doc/systemd/README.Debian: install -d -g systemd-journal /var/log/journal.
pevik
@pevik, saya telah melihat sistem CentOS 7 (di mana saya baru saja menggunakan mkdir) dan izin saat ini drwxr-sr-x. 3 root systemd-journal- mungkin journald memperbaiki izin / kepemilikan selama inisialisasi.
maxschlepzig
8
Mempelajari trik yang rapi: jika Anda mengirim USR1sinyal alih-alih memulai ulang, Anda tidak kehilangan konten jurnal saat ini. killall -USR1 systemd-journald
James B
1
systemctl restart systemd-journald

Anda dapat kehilangan log Anda: lihat https://github.com/systemd/systemd/issues/2236

mkdir /var/log/journal

Ada perubahan pada v208:

systemd-journald tidak akan lagi menyesuaikan grup file jurnal yang dibuatnya dengan grup "systemd-journal". Sebagai gantinya kami mengandalkan direktori jurnal yang akan dimiliki oleh grup "systemd-journal", dan setgid bit-nya diatur, sehingga lapisan sistem file kernel akan secara otomatis memberlakukan bahwa file jurnal mewarisi tugas grup ini.

Cuplikan tmpfiles.d (5) yang termasuk dalam systemd akan memastikan bit dan grup setgid diatur dengan benar pada direktori jurnal jika ada pada setiap boot.

Jadi, Anda harus menjalankan sesuatu seperti systemd-tmpfiles --create --prefix /var/log/journalsetelahmkdir /var/log/journal

Lihat juga :

Evgeny Vereshchagin
sumber
Hm, atau lakukan jurnal `chmod 4755 / var / log /; chown root: systemd-journal!: 2 '- atau hanya melakukan reboot. Saya akan memperbarui jawaban saya.
maxschlepzig
@maxschlepzig, reboot saja tidak berfungsi: github.com/systemd/systemd/pull/1398#issuecomment-144247498
Evgeny Vereshchagin
chmod 4755 /var/log/journal; chown root:systemd-journal !:2bekerja dengan baik. tetapi tmpfiles: gunakan sihir ACL di direktori jurnal
Evgeny Vereshchagin
ok, bug lain :) - Saya sudah memperbarui jawaban saya.
maxschlepzig