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の設定から、