はじめに
journalctlは systemd のログ閲覧ツールです。その中でも -u オプションは、特定のユニット(サービスやタイマー)に絞ってログを取得する際に非常に便利です。本記事では journalctl -u の基本的な使い方と応用例を解説します。
基本構文
journalctl -u ユニット名 と実行するだけで、指定したユニットに関連するログがすべて表示されます。
journalctl -u nginx.service
上記例は nginx.service のログを全て出力します。
主なオプションとの組み合わせ
ユニット単位のログ取得は、他のオプションと組み合わせることでさらに使い勝手が向上します。
-b:現在のブート起動分だけを表示
例:journalctl -u nginx.service -b--since/--until:期間指定
例:journalctl -u nginx.service --since "2024-08-01" --until "2024-08-23 12:00"-f:リアルタイムで追跡(tail -f 相当)
例:journalctl -u nginx.service -f
ユニット名の書き方
ユニット名は拡張子を含める必要があります。
例: nginx.service, cron.timer, docker.socket など。
複数ユニットのログを同時に取得
複数のユニットを対象にしたい場合は、-u を複数回指定します。
journalctl -u nginx.service -u redis.service
このコマンドは nginx と redis の両方のログを統合して表示します。
実務での活用例
- サービス障害時の原因調査:
journalctl -u myapp.service -bで最新起動分のログを確認。 - 定期ジョブの結果確認:
journalctl -u backup.timer --since "yesterday"で昨日以降のバックアップ結果を取得。 - 開発環境でデバッグ:
journalctl -u nginx.service -fでリアルタイムにログを追いながら設定変更をテスト。
まとめ
journalctl -u は、システム全体の膨大なログから特定のユニットに関する情報だけを抽出できる強力なフィルタです。ブート単位や期間指定、リアルタイム追跡と組み合わせることで、トラブルシューティングや運用監視が格段に効率化します。ぜひ実際の業務で活用してみてください。