ログとシステムログの表示: コマンド journalctl
1. ログを扱う理由は?
ログって、システム内のすべての重要な操作を記録してくれる、あなた専属の「探偵」みたいな存在だよ。カーネル、アプリ、サービス、その他のシステムコンポーネントの動きをしっかり記録するんだ。ログは問題の診断やシステムの動作を監視するための重要なツールだね。
例えば、サーバーが突然反応しなくなったとする。シャーロック・ホームズみたいに推測する代わりに、ログを覗いてみれば一発でわかるんだよ! 例えば、「ssh
サービスが落ちた」とか、「ディスクが満杯になった」とか、「猫がキーボードを走り回って重要なサービスを止めちゃった」とかね。ログが全部教えてくれるんだ。
システムログを扱うことで、以下のことができるようになるよ:
- 問題を診断する。 何かがおかしいとき、ログにエラーや警告が記録されているかもしれない。
- サービスの動作を監視する。 例えば、PostgreSQLデータベースがなぜ停止したのかとか、Webサーバーが最後に更新されたのはいつかとかが分かる。
- 分析情報を集める。 サービスのパフォーマンスやメトリクスを監視するんだ。
- セキュリティを向上させる。 SSHを使った侵入試行や不正アクセスの記録を見つけるのにも役立つよ。
2. journalctl
入門
journalctl
は、Linuxでシステムジャーナルを表示・フィルタリングするための強力なコマンドです。このコマンドは、ログを収集・保存するシステムsystemd-journald
と連携して動作し、systemd
によって管理されています。
journalctl
の基本操作
まずはこのユーティリティの使い方を見てみましょう。ターミナルを開いて以下を入力してください:
journalctl
このコマンドは、全てのシステムジャーナルを表示します。表示は時系列順に並んでいます。「少しだけ出るかな」と思ったら、驚くかもしれません。ログが数画面分あることはよくあります。でも大丈夫です、あとでフィルタリングする方法を学びます。
ログの表示を終了するには、q
を押してください。(less
とjournalctl
が似ていることに気づきましたか?)
時間でログをフィルタリング
ここではログをもっと便利に絞り込む方法を紹介します。
過去1時間分のログを見る
journalctl --since "1 hour ago"
特定の日のログを見る
journalctl --since "2023-10-31"
特定の時間範囲を指定
例えば、朝8時から9時までのイベントを見たい場合は、こうすればOK:
journalctl --since "2023-10-31 08:00:00" --until "2023-10-31 09:00:00"
時間で絞り込むのは便利です。たとえば、ある問題が特定の時刻から始まったと知っている場合などに使えます。例えるなら、本を全部読まずに最後のページだけを見て犯人を知るような感じです。
特定のサービスのログを操作する
システム全体を確認するのではなく、一つのサービスに焦点を当てることもできます。例えば、nginx
ウェブサーバーについて確認したい場合:
journalctl -u nginx
最新の情報だけを見たい場合(みんな新鮮なデータが好きですよね):
journalctl -u nginx --since "1 hour ago"
簡単な例一覧:
-u ssh
: SSHサービスのログ。-u cron
: CRONタスクのログ。-u mysql
: MySQLデータベースのログ。
リアルタイムでログを読み取る
現在進行中で何かを修正している時、ログをリアルタイムで観察するのが便利です。まるでサッカーの試合をライブで見るような感覚です。そのためのコマンドは:
journalctl -f
-f
オプションはtail -f
と似た動作をし、新しいログエントリが表示され続けます。
例えば、このコマンドを実行しつつ、別ターミナルで何かサービスを再起動してみてください:
sudo systemctl restart ssh
ログに変更が表示され、再起動の記録が見えるはずです。
ログ内のエラーを探す
ログは長いことが多く、手作業で必要な情報を探すのは「干し草の中から針を探す」ようなものです。そのため、キーワード検索を利用しましょう。
簡単な使い方:
journalctl | grep "ERROR"
この例では、ERROR
という単語を含む行だけが表示されます。ERROR
をWARNING
、failed
やpanic
などに置き換えることもできます。
3. journalctl
の特別なオプション
再起動後のエントリだけを表示
最後にシステムが起動してから何が起こったか知りたい?気になるよね?そんな時はこうしよう:
journalctl -b
システムの再起動ごとにそれぞれが「ブロック」として記録されるよ。もし前回の起動後のエントリを見たい場合(そう、時に役に立つよね!):
journalctl -b -1
ユーザーやPIDでフィルタリング
特定のユーザーやプロセスの動きを追跡したい場合があるよね。例えばこんな感じ:
journalctl _UID=1000
1000
をユーザーIDに置き換えてね(IDは id
コマンドで確認できるよ)。
プロセスID(PID)でフィルタリングする場合は:
journalctl _PID=1234
4. 実践的な例
SSHサービスのエラーチェック。
SSHがなぜ接続を拒否しているか確認したい場合、以下を使用します:
journalctl -u ssh | grep "ERROR"
過去24時間のCRONログを分析。
例として、日々のスクリプトがなぜ実行されなかったのかチェックする場合:
journalctl -u cron --since "yesterday"
リアルタイムでのウェブサーバーログ監視。
ウェブサーバーが負荷に耐えられているか? エラーログを確認してみましょう:
journalctl -u nginx -f
自習用の演習
- 過去24時間のSSHサービスのエラーログを探す。
journalctl
を使用して、朝だけのCRONログを出力する。適切な時間範囲でコマンドが動作していることを確認する。- リアルタイムで
systemd
ログ監視を設定し、いくつかのシステムサービスを開始してログでそれらの状態を確認する。
ログ記録は単なるエラーのリファレンスや問題診断のためのものではないよ。それはシステム全体を監視する秘密のエージェントみたいなもの。journalctl
コマンドをマスターすれば、Linuxシステムをどんな状況でも安定して動作させるための強力なツールになるんだ。
GO TO FULL VERSION