Ubuntu Weekly Recipe
第545回 systemdのログ「ジャーナル」を見る・ためる
systemd環境では標準のログ収集・
ジャーナルを見る
早速ですが,journalctl
コマンドを使います。
$ journalctl
ずらっと,
less
でジャーナルの内容が表示されていますので,q
を押すと,
-x
をつけて実行すると,
grep
などをしたい場合は,--no-pager
とつければless
を介さず,
- ※1
- manページにも記載のとおり
journalctl
には--grep
というオプションがあるのですが,Ubuntuではコンパイル時にこのオプションは有効にされておらず, Compiled without pattern matching support
というメッセージが表示されます。
$ 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ファイルあたりの最大サイズです
- ※2
- 詳細はmanページをご確認ください。
ここで設定された制限により,
- ジャーナルのサイズがファイルシステムの容量の10%もしくは4GBの小さいほうに到達する
- ファイルシステムの空き容量が15%もしくは4GBの小さいほうに到達する
ログをディスク上に残していると,
- ※3
- もちろん,
MaxFileSize等の上限に当たっている場合は, 古いものから消えていきます。最初から最後まで完全なものが残っているかは設定と状況次第です。
システムの起動単位でログを確認する
過去のシステム起動時のログをためる設定にしている場合,
$ journalctl -b -1
残る設定のうち,ForwardToSyslog=
,ForwardToKMsg=
,ForwardToConsole=
,ForwardToWall=
はjournaldが受けっ取ったログをどこへ転送するかを設定するものです。rsyslogへのログの転送についての詳細は次回に解説します。
以上,journalctl
の使い方やjournaldの設定から,
お詫びと訂正 (2018年11月19日)
本記事の公開時点では,/var/
へのジャーナルの蓄積について,
「Ubuntuのデフォルトでは
Storage=auto
ですが,/var/
ディレクトリが存在しません。そのため,log/ journal 実際のデフォルトの挙動は Storage=volatile
で,過去のジャーナルは保管されていません。」
しかしながら,
誤った内容を記載していたことを,
バックナンバー
Ubuntu Weekly Recipe
- 第556回 SMR方式のHDDでも実用できるか検証する
- 第555回 いま,あらためてudev
- 第554回 Athlon 200GEで低価格コンパクトPCを構築する
- 第553回 Ubuntuで写真のメタデータを扱う方法
- 第552回 デスクトップ環境の2018-2019年
- 第551回 asciinemaで端末操作を「録画」し共有する
- 第550回 Ubuntu 18.10リリース記念 オフラインミーティング 18.12 参加レポート
- 第549回 Windows 10 のHyper-VにUbuntu 18.04 LTSをインストールする
- 第548回 書籍制作を支援するソフトウェア「Re:VIEW」を使う
- 第547回 Amazon LightsailでUbuntuサーバーを構築する
関連記事
- 2018年7月20日号 18.04.1 Server InstallerのCall for Testing,“Spectre” Variant 1.1/1.2。Bounds Check Bypass Store (BCBS)
- 2018年7月13日号 Ubuntu Minimal Cloud image,ArtfulのEOL
- 2018年6月15日号 Ubuntu Studio For Musicians handbook・CanonicalのIPO
- 2018年6月1日号 18.04.1のリリース時期, 18.10のDesktop Plan, Ubuntu搭載テニスボール自動拾い機
- 2018年5月25日号 “Spectre” Variant 3a/4への対応・Windows Server環境でのWSL