読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】再起動したら journalctl のログが消えた。絞り込み・永続化・サイズ・古いログの削除と systemd-cat【LPICレベル1】

24レスカテゴリ:Linux
1: 名無しさん

サービスが落ちた原因を調べようと思ったら、再起動する前のログが journalctl で見られへん

2: 名無しさん

前提のおさらい。rsyslog はファシリティとプライオリティで分けて、テキストのファイルにログを書く。systemd のシステムには、それとは別に systemd-journald がいる

3: 名無しさん

>>1
journald の保存先が、メモリ上の /run/log/journal になってると、再起動で消える
/var/log/journal に保存されてれば残る。どっちになるかは /etc/systemd/journald.conf の Storage=

4: 名無しさん

>>3
Storage= の値は?

5: 名無しさん

>>4
volatile:メモリだけ(/run/log/journal)
persistent:ディスク(/var/log/journal、なければ作る)
auto:/var/log/journal があれば persistent、なければ volatile。既定は auto
none:保存しない
つまり auto なら mkdir /var/log/journal して journald を再起動するだけで残るようになる

6: 名無しさん

>>5
試したマシンは /var/log/journal はあるけど、journald が動いてないコンテナでジャーナルのファイルは1つもなかった。journalctl --disk-usage は 0B やった

7: 名無しさん

絞り込みのやり方を教えて

8: 名無しさん

>>7
-u ユニット:そのサービスのログ(journalctl -u ssh.service)
-p err:err 以上(番号なら -p 3)
-b:今回の起動から、-b -1:1つ前の起動。起動の一覧は --list-boots
--since と --until:時間(--since "1 hour ago"、--since today など)
-k:カーネルのメッセージ(dmesg と同じもの)

9: 名無しさん

>>8
重ねられるんか。journalctl -u ssh.service -p err -b -1 で、前の起動の ssh のエラー以上

10: 名無しさん

>>8
ほかによう使うのは?

11: 名無しさん

>>10
-f で増えていくのを見続ける(tail -f と同じ)、-n 20 で最後の20件、-r で新しい順、-o verbose や -o json で出力の形、-x で説明を付ける、-g で中身を正規表現で探す
_PID=1234 や _UID=1000 のようにフィールドで絞ることもできる

12: 名無しさん

>>8
journalctl は全部が見られるん?

13: 名無しさん

>>12
一般ユーザーは自分のログだけ。全部見るには root か、systemd-journal グループ(Debian では adm も)に入る

14: 名無しさん

>>3
ずっと溜めたらディスクがいっぱいにならん?

15: 名無しさん

>>14
journald.conf の SystemMaxUse= で上限を決められる。既定はファイルシステムの10%で、4G まで(journald.conf の man)
たとえば 32G のファイルシステムなら

が上限

16: 名無しさん

>>15
手で減らすなら?

17: 名無しさん

>>16
journalctl --vacuum-size=500M(その大きさまで減らす)、--vacuum-time=2weeks(それより古いのを消す)、--vacuum-files=5(ファイルの数)
テキストのログみたいに rm で消すもんやない。logrotate の代わりは journald 自身がやってる

18: 名無しさん

壊れたマシンのディスクを別のマシンにつないで、そのログを読みたい

19: 名無しさん

>>18
journalctl -D /mnt/var/log/journal でディレクトリを指定する。1つのファイルなら --file。試したら、空のディレクトリでは No journal files were found. と出た

20: 名無しさん

>>2
スクリプトの出力を journal に入れたい

21: 名無しさん

>>20
systemd-cat。systemd-cat -t backup -p warning /usr/local/bin/backup.sh でコマンドの出力を、タグ backup、プライオリティ warning で journal に送る。echo hi | systemd-cat みたいにパイプでも使える
logger でも journal に入る(journald が /dev/log を受けてるから)

22: 名無しさん

>>3
rsyslog と両方使うこともあるん?

23: 名無しさん

>>22
ある。journald が受けたものを rsyslog にも渡して(ForwardToSyslog= や rsyslog の imjournal)、テキストのファイルにも残す構成。Red Hat 系はこの形が多い

24: 名無しさん

>>5
/var/log/journal があるかと Storage= で残るかが決まる、-u -p -b で絞る、減らすのは --vacuum、別のディスクは -D。前の起動のログが消えたのは volatile やったからか

管理人のひとこと