tl;dr
On CentOS 7, you have to enable the persistent storage of log messages:
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
Otherwise, the journal log messages are not retained between boots.
Details
Whether journald
retains log messages from previous boots is configured via /etc/systemd/journald.conf
. The default setting under CentOS 7 is:
[Journal]
Storage=auto
Where the journald.conf man page explains auto
as:
One of "volatile", "persistent", "auto" and "none". If "volatile", journal log data will be stored only in memory, i.e. below the /run/log/journal hierarchy (which is created if needed). If "persistent", data will be stored preferably on disk, i.e. below the /var/log/journal hierarchy (which is created if needed), with a fallback to /run/log/journal (which is created if needed), during early boot and if the disk is not writable. "auto" is similar to "persistent" but the directory /var/log/journal is not created if needed, so that its existence controls where log data goes.
(emphasize mine)
The systemd-journald.service man page thus states that:
By default, the journal stores log data in /run/log/journal/. Since /run/ is volatile, log data is lost at reboot. To make the data persistent, it is sufficient to create /var/log/journal/ where systemd-journald will then store the data.
Apparently, the default was changed in Fedora 19 (to persitent storage) and since CentOS 7 is derived from Fedora 18 - it is still non-persisent there, by default. Persistency is implemented by default outside of journald via /var/log/messages
and the rotated versions /var/log/messages-YYYYMMDD
which are written by rsyslogd (which runs by default and gets its input from journald).
Thus, to enable persistent logging with journald under RHEL/CentOS 7 one has to
# mkdir /var/log/journal
and then fix permissions and restart journald, e.g. via
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald