systemd環境では標準のログ収集・
ジャーナルを見る
早速ですが、journalctl
コマンドを使います。
$ journalctl
ずらっと、
less
でジャーナルの内容が表示されていますので、q
を押すと、
-x
をつけて実行すると、
grep
などをしたい場合は、--no-pager
とつければless
を介さず、
$ journalctl --no-pager | grep -e 'err'
オプションを使ってログを絞る
journalctl
は確認したいユニット、grep
で頑張る必要はないかもしれません。
ユニット単位で確認するときは-u
を使います。このオプションはパターンも引数に取れます。
$ journalctl -u systemd-resolved.service $ journalctl -u 'systemd*'
また、-k
でカーネルのログを見ることができます。
ログを時間帯を絞るときは開始時刻を指定する-S
または終了時刻を指定する-U
、
$ journalctl -S "2018-11-01 00:00:00" -U "2018-11-02 00:00:00"
プライオリティで絞るときは-p
を使います。プライオリティ自体は数字もしくは文字で指定します。syslog
と同じで、
なお、${FROM}..${TO}
の形でおこない、
$ journalctl -p 3 # "err"以上("emerg", "alert", "crit", "err"のログを表示する) $ journalctl -p 3..4 # "err"〜"warning"を表示 $ journalctl -p err..warning # 同上。別表現。
覚えておきたいオプション
-f
はtail -f /var/
のように何かを動かしながらログを見るときに便利です。
各オプションは矛盾しなければ併用できます。例えば次のコマンドは、
$ journalctl -f -u systemd-resolved.service
-f
の出力からはCtrl+Cで抜けることができます。
また、-e
や順序を新しいものから並べる-r
も覚えておくとよいでしょう。
ジャーナルをためる
journaldの設定は/etc/
で変更できます。
初期状態では、[Journal]
以下を取り出してみます。
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitIntervalSec=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#LineMax=48K
すべての設定がコメントアウトされています。ファイルの冒頭に記載されているとおり、
このうちStorage=
は収集したログの保管先を指定するものです。
Storage=
は収集したログの保管先を指定するものです。取れる値と挙動は次のとおりです。
値 | 挙動 |
---|---|
volatile | メモリ上/run/ 以下) |
persistent | ディスク上/var/ 以下) |
auto | /var/ ディレクトリがなければvoltaile 、persistent の挙動をする。デフォルト値。 |
none | ジャーナルを保管しない。 |
UbuntuのデフォルトではStorage=auto
ですが、/var/
ディレクトリの存在の有無は利用しているUbuntuやsystemdのバージョンにより異なります。Ubuntu 18./var/
ディレクトリが存在しますので、
ジャーナルを残すときの設定のポイント
Storage=auto
で/var/
ディレクトリを作成したり、Storage=persistent
に設定変更したりすることで、
その際は、SystemMaxUse=
、SystemKeepFree=
、SystemMaxFileSize=
、SystemMaxFiles=
、RuntimeMaxUse=
、RuntimeKeepFree=
、RuntimeMaxFileSize=
、RuntimeMaxFiles=
なども併せて設定しておくのがよいでしょう。というのも、
それぞれの設定について、
System
から始まるものは、/var/
)Runtime
から始まるものはメモリ上/run/
)
*MaxUse=
はそれぞれの最大容量、*KeepFree=
はディレクトリの容量をこれだけ空けておく、*MaxFiles=
はファイルの最大数、*MaxFileSize=
は1ファイルあたりの最大サイズです
ここで設定された制限により、
- ジャーナルのサイズがファイルシステムの容量の10%もしくは4GBの小さいほうに到達する
- ファイルシステムの空き容量が15%もしくは4GBの小さいほうに到達する
ログをディスク上に残していると、
システムの起動単位でログを確認する
過去のシステム起動時のログをためる設定にしている場合、
$ journalctl -b -1
残る設定のうち、ForwardToSyslog=
、ForwardToKMsg=
、ForwardToConsole=
、ForwardToWall=
はjournaldが受けっ取ったログをどこへ転送するかを設定するものです。rsyslogへのログの転送についての詳細は次回に解説します。
以上、journalctl
の使い方やjournaldの設定から、