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

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


Posted on 2020年 10月 17日 (土)
Tags linux, journalctl, ops
linux, journalctl, ops

journalctl とは

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

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

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

1
journalctl -r

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

1
journalctl -f

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

1
journalctl -b

特定の時間から調べる

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

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

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

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

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

1
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 のログを見る

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

1
journalctl -u fluentd -u block-storage

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

1
journalctl -k

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

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

1
journalctl -p 4 -xb

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

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

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

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

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

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


1
journalctl --grep "kube"

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

1
Compiled without pattern matching support

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

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

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

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

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

1
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

1
2
3
4
journalctl -xn | less

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

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

1
PAGER=vim journalctl

とできる。

参考

Share


See also