journalctl でサービスの起動ログを抽出する
systemd で管理しているサービスが いつ立ち上がったのか を確認したい場面は多いです。 ここでは journalctl
を使って、特定サービスの起動ログを抽出する方法をまとめます。
journalctl とは?
journalctl
は systemd のログ管理ツールです。 Linux システムで稼働しているサービスやカーネルメッセージなどを統合的に管理しており、systemd-journald
が記録したログを閲覧・検索するために利用します。
特徴として:
- サービス単位でのログ参照が可能(
-u
) - 時間範囲でのフィルタリングが可能(
--since
,--until
) - grep などと組み合わせることで柔軟な抽出が可能
つまり、systemd 環境では標準的なログ確認手段です。
基本コマンド
journalctl -u <サービス名> --since "YYYY-MM-DD 00:00:00" --until "YYYY-MM-DD 00:00:00" \
--output=short-iso --no-pager \
| grep -Ei "<パターン>"
オプションの意味
-u
systemd サービス名を指定。--since
/--until
期間を指定してログを絞り込み。--output=short-iso
ISO形式で日時を見やすく表示。--no-pager
less などのページャを使わず、そのまま出力。grep -Ei ""
ログから特定の文字列を抽出。
例1: JupyterHub の起動確認
JupyterHub が サーバー準備完了を出力したログを抽出する場合:
journalctl -u jupyterhub --since "2020-08-01 00:00:00" --until "2020-09-01 00:00:00" \
--output=short-iso --no-pager \
| grep -Ei "Server .* is ready"
例2: nginx の起動確認
nginx が 起動したタイミングを確認する場合:
journalctl -u nginx --since "2020-08-01" --until "2020-09-01" \
--output=short-iso --no-pager \
| grep -Ei "started"
注意: grepパターンの汎用性
"Server .* is ready"
(JupyterHub)"started"
(nginx)これらのパターンは一般的ですが、実際のログメッセージは各サービスのバージョンや設定によって異なる場合があります。
他サービスでも応用可能
同じパターンは以下のようなサービスでも使えます:
docker
sshd
httpd
mysqld
他のパターン
-
エラー検出
| grep -Ei "error|failed"
-
セッション確認(例: sshd ログイン履歴)
| grep -Ei "session opened"
まとめ
journalctl
は systemd の標準ログ管理ツールjournalctl -u
で特定サービスのログを確認できる- grep と組み合わせれば、起動完了やエラー、セッション履歴などを柔軟に抽出可能
- JupyterHub に限らず、nginx, docker, sshd など あらゆる systemd サービスに応用できる