Perpetuate journal log
journalログはcentos7のデフォルトでは/run/log/journal/
以下に格納されるが、/run
はメモリベースファイルシステムなので揮発的であり、再起動時には消えてしまう。
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/vda1 20G 4.2G 15G 23% /
devtmpfs 236M 0 236M 0% /dev
tmpfs 245M 0 245M 0% /dev/shm
tmpfs 245M 304K 245M 1% /run
tmpfs 245M 0 245M 0% /sys/fs/cgroup
tmpfs 49M 0 49M 0% /run/user/1001
永続的なファイルシステムへjournalログを書き出すようにしてみる。
journaldの設定は/etc/systemd/journald.conf
にある。デフォルトでは以下のように[journal]
セクション内のオプションは全てコメントアウトされている(オプションはたぶんすべてデフォルトの値)。
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See journald.conf(5) for details.
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
今回journal.logを永続化する上で関わってくるオプションはStorage
となる。Storage
の設定は以下の様な意味を持つ。
- auto(default):
/var/log/journal/
があればそこに、なければ/run/log/journal/
に保存する。 - volatile:
/run/log/journal/
に保存する(/run/log/journal/
がなければ作成する)。 - persistent:
/var/log/journal/
に保存する(/var/log/journal/
がなければ作成する)。 - none: ログデータを残さない。
変更した設定はsystemd-journald
を再起動することで適用される。今回デフォルトのauto
を使う(ので設定ファイルの変更は無し!)。/var/log/journal/
を作成し、systemd-journald
を再起動する。
例によってansibleでやるぞい!
tasks/main.yml
- name: journal log is perpetuated
file: path=/var/log/journal state=directory owner=root group=root mode=0644
notify:
- restart systemd-journald daemon
tags: journal
handlers/main.yml
- name: restart systemd-journald daemon
shell: systemctl restart systemd-journald
ローテートはsystemdが勝手にやってくれるので気にしないでおっけー!ひゅ~!
参考
Journal はデフォルトでは、ログファイルをメモリーか /run/log/journal/ ディレクトリー内の小さいリングバッファーにのみ保存します。これは、journalctl の最近のログ履歴を表示するには十分なものです。このディレクトリーは揮発性なので、ログデータは永続的には保存されません。デフォルト設定では、syslog は journal ログを読み取り、/var/log/ ディレクトリーに保存します。永続的なロギングが有効になると、journal ファイル /var/log/journal に保存され、再起動後も維持されます。
Storage=
Controls where to store journal data. 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. "none" turns off
all storage, all log data received will be dropped. Forwarding to
other targets, such as the console, the kernel log buffer, or a
syslog socket will still work however. Defaults to "auto".