運用でよく使う journalctl コマンド tips

素早いシステムトラブル解決のために


Posted on Sat, Oct 17, 2020
Tags linux, journalctl

journalctl とは

jounarld.service が記録してくれているログをみるためのコマンド。

linux でアプリケーションを動かす場合は、systemd に登録し、journalctl でログを見るというのがベストプラクティスになっている。

新しいもの順に表示するようにする

journalctl -r

最新のログをフォローする場合は、

journalctl -f

起動してからのものを取得する場合 (boot) は、

journalctl -b

特定の時間から調べる

障害が起きた特定の時間からのログを調べたいということがある。

journalctl --since="2020-10-13 22:15:00"
# もちろん、until もある
journalctl --until="2020-10-14 22:15:00"

障害が起きた間のみのログに絞りたい場合は

journalctl --since="2020-10-13 22:15:00" --until="2020-10-14 22:15:00"

何時間前などで絞りたい場合は、date コマンドと組み合わせると便利

journalctl --since="$(date -d '12 hour ago' '+%Y-%m-%d %H:%M:%S')" --until="$(date -d '11 hour ago' '+%Y-%m-%d %H:%M:%S')"

複数の unit のログを見る

問題となっていそうな複数のコンポーネントにしぼってみる

journalctl -u fluentd -u block-storage

カーネルのログを見るときは -k をつける。OS が突然死した、CPU の異常などが起きた場合はよく使う

journalctl -k

エラーの種類でフィルターする

通常ログは見ずに、エラーレベルのものだけみたいという時がある

journalctl -p 4 -xb

-x は追加情報、-b は起動してからのログ エラーレベルは下記の通り。

0 | emerg
1 | alert
2 | crit
3 | err
4 | warning
5 | notice
6 | debug

あまり使わないが、-p0..4 という指定方法ができる。

問題となっていそうなキーワードから絞る

2021/05/15 更新: journalctl のデフォルトの pager が less のため、& でパターンを絞ることが可能。また、&! でパターン否定でフィルタリングもできる。

& を入力してから err などでフィルタリングするととても便利(less すごい)


journalctl --grep "kube"

systemd が grep をサポートしてコンパイルされていないと下記のエラーが出る

Compiled without pattern matching support

#890265 - systemd: journalctl compiled without pattern matching support - Debian Bug report logs

ファイルがローテートされた古いログを確認する

データサイズが大きくなると、ローテートされてしまうが保存されている fileから読める

journalctl --file=/var/log/journal/hogehoge.log

ディレクトリ内の journal ログをまとめて見ることもできる

journalctl -D /var/log/journal/b1eae0134

表示されるログが wrap されるようにする

そのまま journalctl だと、一行が長くて画面に収まらないことがある。

2021/05/15 更新: journalctl の pager がデフォルトだと less のため、-S を入力することで wrap の on/off が可能。

参考:systemd - journalctl: how to prevent text from truncating in terminal - Unix & Linux Stack Exchange

journalctl -xn | less

# あるいはそもそも pager を利用しない手もある
journalctl --no-pager

デフォルトでは PAGER が less に設定されているため、これを例えば vim に変えたい場合は

PAGER=vim journalctl

とできる

参考