目次: Linux
最近のLinuxディストリビューションはsystemdを採用していることが多いと思います。systemdはシステムのログをjournalという仕組みで記録しますが、いつも使い方が覚えられませんのでメモしておきます。journalはsystemd-journaldが記録しており、バイナリファイルのためcatやlessで見てもなんだかわかりません。
root@blackbird:~# systemctl status systemd-journald
● systemd-journald.service - Journal Service
Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static)
Active: active (running) since xxx
Invocation: cc620fbf66b74baa95e018e975412219
TriggeredBy: ● systemd-journald.socket
○ systemd-journald-audit.socket
● systemd-journald-dev-log.socket
Docs: man:systemd-journald.service(8)
man:journald.conf(5)
Main PID: 654 (systemd-journal)
Status: "Processing requests..."
Tasks: 1 (limit: 76974)
FD Store: 62 (limit: 4224)
Memory: 52.6M (peak: 54M)
CPU: 2.267s
CGroup: /system.slice/systemd-journald.service
└─654 /usr/lib/systemd/systemd-journald
ちなみにsystemd-journaldの設定ファイルは/etc/systemd/journald.confにあります(Debianの場合)。私の環境では内容が全てコメントアウトされており、特に設定はありませんでした。
ファイルのありかは/var/log/jounal/(machine-id)/ディレクトリ以下です。journalはシステム用とユーザー用の2種類あり、system@〜.journalがシステム用、user-(UID)@〜.journalがユーザー用(たとえばuid=1000ならuser-1000@〜.journalみたいな名前)です。machine-idは/etc/machine-idに書いてあります。
最初に言った通りjournalはバイナリファイルで人間が読めないので、中身を知りたいときはjournalctlコマンドを使用します。システム用のログが見たければ--system、ユーザー用のログが見たければ--userを指定します。
#### システムのjournalを見る # journalctl --system #### ユーザーのjournalを見る $ journalctl --user
上記のように何も指定しない場合、今まで蓄積された全てのjournalが連結されて表示されます。journalの蓄積が多いと表示までかなり時間がかかります。
ログを1つのjournalに記録し続けるとファイルサイズが無限に増加してタチが悪いので、systemd-journaldは時々ログを適当な場所でぶった切って、新たなログの記録先を別のjournalファイルに変更(rotateと呼ばれる)します。放っておいても一定期間で勝手にrotateされますが、--rotateオプションを使って手動でrotateすることもできます。
# journalctl --rotate
特定のjournalのみ読むオプション-iを使って最新のjournalだけを見ると、手動でrotateした地点から前のログがjournalにない(古いログ用の別のjournalファイルに存在している)ことが確認できるはずです。
#### ユーザーの最新のjournalだけ見る $ journalctl -i /var/log/journal/`cat /etc/machine-id`/user-$UID.journal
複数のファイルを指定するときは-i a.journal -i b.journalのように並べます。ログは必ず時系列に整列されて表示されるので-iオプションで指定するファイルの順番は何でも良いです。オプション-Dを使用するとディレクトリ内の全てのjournalを読んでくれるので、ファイル数が多いときはディレクトリ指定の方が便利かも。
ずっと使っているシステムなどjournalが多くなりすぎて消したい場合があると思います。/var/log/journal以下にあるjournalファイルを直接消すこともできるっちゃできるんですけど、意図しないものまで消えてしまう場合があって危険です。消したいときはvacuumオプションで消せるようです。
#### 1年より前のjournalを消す # journalctl --vacuum-time=1y
削除の条件にはサイズ(--vacuum-size)、ファイル数(--vacuum-files)、時間(--vacuum-time)の条件が指定できます。
私は未だにsystemdのjournalはクセ強すぎで好きになれません。journalctlにjson出力機能があるところをみるに、journalをjson形式にしてクラウド上の監視システムに投げ飛ばして解析!みたいなとき便利なんでしょうかね……。
この記事にコメントする
| < | 2026 | > | ||||
| << | < | 01 | > | >> | ||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| - | - | - | - | 1 | 2 | 3 |
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
wiki
Linux JM
Java API
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
2018年
2019年
2020年
2021年
2022年
2023年
2024年
2025年
2026年
過去日記について
アクセス統計
サーバ一覧
サイトの情報合計:
本日: