Linuxのログ管理・トラブルシュート入門!ログとは何か?仕組みと役割を徹底解説
生徒
「先生、Linuxの勉強をしていると『ログを確認して』という言葉をよく聞くのですが、ログって一体何のことですか?」
先生
「ログというのは、簡単に言うと『コンピュータのシステムが行った活動の記録』のことですよ。人間でいうところの『日記』や『家計簿』、あるいは飛行機の『フライトレコーダー』のようなものですね。」
生徒
「日記ですか!なんだか親しみやすそうですが、黒い画面(ターミナル)で見るのは難しそうですね。プログラミング未経験の私でも理解できますか?」
先生
「もちろんです。ログには何が起きたのかが順番に書かれているだけなので、読み方さえ分かればトラブルの原因も自分で探せるようになります。まずは基本から一緒に見ていきましょう。」
1. ログとは何か?初心者向けの分かりやすい例え
Linuxにおけるログ(Log)とは、OS(オペレーティングシステム)やアプリケーションが、いつ、誰が、何をしたか、あるいは何が起きたかという出来事を時系列で記録したテキストデータのことです。
パソコンを触ったことがない方向けに例えると、銀行の「通帳の記帳」をイメージしてください。通帳には「いつ」「いくら」「どこで」お金が動いたかが記録されていますよね。もし残高が合わないときは、通帳を見返して原因を探すはずです。Linuxのログも全く同じで、システムに不具合が起きたときに「どこでおかしくなったのか」を突き止めるための証拠書類として使われます。
普段、私たちがパソコンを使っていてもログを意識することはありませんが、裏側では「ユーザーがログインした」「インターネットに繋がった」「ファイルを保存した」といった動作が休まず記録され続けています。
2. なぜログが必要なの?ログの重要な役割
ログには主に3つの大きな役割があります。これを理解すると、なぜエンジニアがログを大切にするのかが見えてきます。
- トラブルシューティング(原因究明): パソコンの動作が重くなったり、アプリが急に終了してしまったりしたとき、ログを見れば「メモリが足りなくなった」「設定ファイルが読み込めなかった」といったエラー原因が判明します。
- セキュリティの監視: 外部から不正なアクセスがないか、怪しいログインの失敗が続いていないかをチェックできます。誰かが勝手にシステムを操作しようとした形跡もログに残ります。
- 動作状況の確認(監査): システムが正常に動いているか、予定していた処理が時間通りに終わったかを確認するために使います。
つまり、ログはシステムの「健康診断書」であり、何かあった時の「防犯カメラ」の役割も果たしているのです。
3. ログが保存されている場所を確認しよう
Linuxでは、ほとんどのログファイルは特定の決まった場所にまとめられています。その場所は /var/log というディレクトリ(フォルダのようなもの)です。
初心者の方はまず、「ログを見たくなったら /var/log を見に行く」と覚えておけば間違いありません。ここでは、実際の中身を覗いてみるためのコマンドを紹介します。まずは今いる場所から移動せずに、その中身にどんなファイルがあるか確認してみましょう。
ls /var/log
alternatives.log auth.log boot.log dpkg.log journal syslog
このように、用途に合わせていくつかのファイルに分かれて記録されています。代表的なものに syslog(システム全体の記録)や auth.log(認証・ログインの記録)などがあります。Linuxの種類(UbuntuやCentOSなど)によって、ファイル名が少し異なることもありますが、役割は似ています。
4. ログを管理する仕組み「rsyslog」と「systemd-journald」
ログが勝手に記録されるわけではありません。Linuxの裏側では、ログを専門に扱う「記録係」のようなプログラムが動いています。主に以下の2つが有名です。
1. rsyslog(アールシスログ): 昔からの伝統的な記録係です。送られてきたメッセージを、設定に基づいてテキストファイル(私たちが読める文字ファイル)として保存します。
2. systemd-journald(システムディー・ジャーナルディー): 最近のLinuxで主流の記録係です。ログを「バイナリデータ」というコンピュータ専用の形式で高速に保存します。この形式は直接メモ帳などで開くことはできませんが、専用の命令を使うと非常に便利に検索できます。
この2つが協力して、私たちの代わりにせっせと日記を書き溜めてくれているのです。初心者の方は「ログには2種類の管理方法があるんだな」くらいの認識で大丈夫です。
5. ログの中身を実際に見てみよう(catコマンドとtailコマンド)
ログはただの文字の集まりなので、特別なソフトは不要です。コマンドを使って表示させることができます。ただし、ログは膨大な量になることが多いため、ファイルの最後の方(最新の記録)だけを表示するのが一般的です。
まずは tail(テイル)というコマンドを使ってみましょう。これは動物の「しっぽ」という意味で、ファイルの末尾を表示する命令です。
tail /var/log/syslog
Jan 9 15:00:01 ubuntu systemd: Starting Periodic Command Scheduler...
Jan 9 15:00:01 ubuntu CRON[1234]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Jan 9 15:10:01 ubuntu systemd: session-123.scope: Deactivated successfully.
実行結果を見ると、左側に日付と時刻が表示されているのがわかりますね。これが「いつ起きたか」を示しています。その右側にシステム名、そして具体的なメッセージが続きます。
6. リアルタイムでログを監視する便利なテクニック
トラブルシューティングの際、最もよく使われるのが「ログをリアルタイムで眺める」という方法です。例えば、ウェブサイトが表示されないとき、ログを表示したままブラウザでアクセスを試みると、その瞬間にエラーメッセージが画面に流れてきます。
これには tail コマンドに -f というオプションを付けて実行します。-f は「follow(追従する)」の略です。
tail -f /var/log/auth.log
Jan 9 15:20:05 ubuntu sshd[2000]: Accepted password for user1 from 192.168.1.10
Jan 9 15:21:10 ubuntu sudo: user1 : TTY=pts/0 ; PWD=/home/user1 ; USER=root ; COMMAND=/usr/bin/ls
このコマンドを実行すると、新しいログが書き込まれるたびに画面が自動で更新されます。終了したいときはキーボードの「Ctrlキー」を押しながら「C」を押してください。これは初心者が最初に覚えるべき、エンジニア必須のテクニックです。
7. ログの重要度(ログレベル)を知っておこう
ログには「どれくらい緊急か」を表すランク(重要度)があります。これを「ログレベル」と呼びます。これを知っていると、大量のログの中から何に注目すべきかが分かります。
| レベル名 | 意味 | 深刻度 |
|---|---|---|
| EMERG / ALERT | システムが使えない、即対応が必要 | 最高(超危険) |
| ERROR / CRIT | エラーが発生。一部の機能が動いていない | 高(危険) |
| WARNING | 警告。放置すると将来問題になるかも | 中(注意) |
| INFO | 通常の動作記録。問題なし | 低(正常) |
| DEBUG | 開発者向けの細かい記録 | 最低(詳細) |
トラブルが起きたときは、まず ERROR や CRIT(Critical:致命的)という文字をログの中から探すのが鉄則です。
8. ログがいっぱいにならない工夫「ログローテーション」
ログは24時間365日記録され続けるため、放っておくとハードディスクがログだけでいっぱいになってしまいます。これを防ぐための仕組みがログローテーション(Log Rotation)です。
これは、一定の期間(例えば1週間)が過ぎたログを別の名前にして保存し、さらに古いものは自動的に削除する仕組みです。これを行うのが logrotate というツールです。
具体的には、以下のようにファイル名が変わっていきます。
syslog(最新のログ)syslog.1(1日前のログ)syslog.2.gz(2日前のログ、容量を節約するために圧縮されている)
「昔のログが見たい」と思ったときは、このように数字がついたファイルを探せば良いわけです。
9. 管理者権限(root)でログを確認する方法
ログファイルはセキュリティ上、非常に重要な情報が含まれているため、一般ユーザーでは中身が見られないことがあります。そのような場合は、管理者権限(root権限)を使ってコマンドを実行する必要があります。
sudo(スードゥー)という言葉をコマンドの頭に付けることで、「一時的に管理者として実行する」ことができます。システムの深い部分にあるログを見る際に必要になります。
sudo tail -n 5 /var/log/kern.log
[ 1234.567890] EXT4-fs (sda1): mounted filesystem with ordered data mode.
[ 1235.012345] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
このように、sudo を使うことで普段は見ることのできないカーネル(OSの核心部分)のログなども確認できるようになります。パスワードを求められたら、自分のログインパスワードを入力しましょう(入力した文字は見えませんが、しっかり入力されています)。
10. 現代的なログ検索ツール「journalctl」の使い方
第4項で説明した「systemd-journald」が管理するログを見るには、journalctl(ジャーナルコントロール)という専用のコマンドを使います。これが非常に強力で、初心者の方でも使いやすい特徴があります。
例えば、今日発生したログだけを表示したい場合は、以下のように入力します。テキストファイルを自力で探すよりもずっと簡単です。
journalctl --since today
Jan 09 09:00:15 ubuntu systemd[1]: Started Daily Cleanup of Temporary Directories.
Jan 09 10:30:42 ubuntu NetworkManager[555]: <info> [1673227842.123] connectivity: check...
他にも「特定のプログラム(サービス)のログだけ見たい」「1時間前のログだけ見たい」といった絞り込みが自由自在です。トラブルシュートの現場では、この journalctl と /var/log のファイルを使い分けるのが一般的です。