前の記事では、
systemctlを使ってLinuxサービスの
状態確認・起動・停止・再起動を行う方法を学習しました。
では、systemctl statusを実行して
サービスがfailedになっていた場合、
どのように原因を調べればよいのでしょうか。
SSHサービスでエラーが発生している。
サービス停止前に何が起きていたのか確認したい。
こうした場面で重要になるのが、 systemdのログを確認できる journalctlコマンドです。
journalctlの基本を理解し、
サービス・時間・件数・重要度などでログを絞り込み、
サービス障害の原因を調査できる状態を目指します。
Linuxのログとは?
Linuxでは、 OSやサービスで発生したさまざまな出来事が ログ(記録)として保存されます。
たとえば、次のような情報です。
いつサービスが起動したか
いつ停止したか
何らかの問題が発生した
SSHなどの認証情報
障害対応では、 現在の状態だけを見るのではなく、 問題が発生するまでに何が起きたのかを ログから確認することが重要です。
systemd-journaldとjournalctlの関係
systemdを利用するLinuxでは、 systemd-journaldという仕組みが さまざまなログを収集します。
journalctl自体がログを作っているわけではありません。 systemd-journaldが収集したjournalを、 journalctlを使って確認します。
systemctlとjournalctlはどう使い分ける?
systemctl status nginx
active・inactive・failedなど、 現在のサービス状態を確認します。
journalctl -u nginx
サービスで何が起きたのか、 過去のログを確認します。
systemctl status nginx
journalctl -u nginx
journalctl:systemdのログを表示する
まず基本となるコマンドが、
オプションを付けない
journalctlです。
journalctl
実行すると、 journalに保存されているログが表示されます。
$ journalctl
Aug 19 09:00:01 linux systemd[1]: Started System Logging Service.
Aug 19 09:00:02 linux NetworkManager[720]: NetworkManager started
Aug 19 09:01:15 linux sshd[1052]: Server listening on 0.0.0.0 port 22.
Aug 19 09:02:10 linux systemd[1]: Started nginx.service
Aug 19 09:15:32 linux sudo[1382]: user : COMMAND=/usr/bin/systemctl status nginx
ただし、Linuxサーバでは大量のログが保存されているため、 すべてのログをそのまま読むのは効率的ではありません。
実務では、サービス・時間・件数・重要度などを指定して 必要なログへ絞り込んでいきます。
journalctl -u:特定サービスのログを確認する
最もよく利用する方法の一つが -uです。
journalctl -u nginx
-uはunitを指定するオプションです。
$ journalctl -u nginx
Aug 19 10:00:01 linux systemd[1]: Starting nginx.service...
Aug 19 10:00:01 linux nginx[2140]: nginx: configuration file syntax is ok
Aug 19 10:00:01 linux systemd[1]: Started nginx.service.
Aug 19 11:20:15 linux systemd[1]: Stopping nginx.service...
Aug 19 11:20:15 linux systemd[1]: nginx.service: Deactivated successfully.
これにより、 nginxに関連するログへ絞って確認できます。
「どのサービスのログを見たいか」を指定する
journalctl -n:直近のログを確認する
大量のログから
直近だけ確認したい場合は
-nを利用します。
journalctl -n 20
これで直近20件のログを表示できます。
サービス指定と組み合わせることもできます。
journalctl -u nginx -n 20
-u nginxでnginxへ絞り込み、
-n 20でその中から直近20件を表示できます。
journalctl -f:ログをリアルタイムで確認する
新しく出力されるログを リアルタイムに追いかけたい場合は、 -fを利用します。
journalctl -u nginx -f
-fは、
一般的なtail -fのように
新しいログを追跡する用途で利用できます。
journalctl -fを開いた状態でサービスを操作し、 その瞬間にどのようなログが出力されるか確認できます。
–since:時間を指定してログを確認する
「今日発生したログだけ見たい」 という場合は、 –sinceを利用できます。
journalctl --since today
特定サービスと組み合わせる場合は、
journalctl -u nginx --since today
と指定できます。
日時を指定することも可能です。
journalctl --since "2026-08-19 10:00:00"
–until:終了時刻も指定できる
--sinceと
–untilを組み合わせると、
時間範囲を指定できます。
journalctl --since "10:00" --until "11:00"
たとえば 「10時30分ごろに障害が発生した」 と分かっている場合、 前後の時間帯へ絞って調査できます。
journalctl -p:重要度でログを絞り込む
journalctlでは、 ログのpriority(重要度)を指定して 絞り込むこともできます。
journalctl -p err
この場合、 errorレベル以上のログへ絞り込めます。
最初からすべて覚える必要はありません。 まずは err・warning・info あたりを理解しておけば十分です。
journalctl -b:今回のOS起動後のログを確認する
-bを使うと、 現在のOS起動(boot)以降のログを確認できます。
journalctl -b
サービスと組み合わせる場合は、
journalctl -u nginx -b
と指定できます。
OS再起動後にサービスが起動しなくなった場合など、 今回のbootに絞って確認できます。
journalctlの基本オプションを整理しよう
journalctl
journal全体を表示
journalctl -u nginx
nginxのログを表示
journalctl -n 20
直近20件を表示
journalctl -f
新しいログをリアルタイム表示
journalctl --since today
今日以降のログを表示
journalctl --since "10:00" --until "11:00"
時間範囲を指定
journalctl -p err
重要度で絞り込み
journalctl -b
現在のboot以降を表示
実務ではどう使う?サービス障害の調査例
ここからは、 前の記事で学習したsystemctlと journalctlを組み合わせてみましょう。
nginxが動作しているLinuxサーバで、 Webページへ突然アクセスできなくなりました。
まず、 サービス状態を確認します。
$ systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
Active: failed (Result: exit-code)
nginxがfailedになっています。
ここで、単純に再起動を繰り返すのではなく、 ログを確認します。
journalctl -u nginx -n 20
$ journalctl -u nginx -n 20
Aug 19 15:02:10 linux systemd[1]: Starting nginx.service...
Aug 19 15:02:10 linux nginx[4210]: nginx: [emerg] unexpected "}" in /etc/nginx/nginx.conf:42
Aug 19 15:02:10 linux nginx[4210]: nginx: configuration file /etc/nginx/nginx.conf test failed
Aug 19 15:02:10 linux systemd[1]: nginx.service: Main process exited, status=1/FAILURE
Aug 19 15:02:10 linux systemd[1]: nginx.service: Failed with result 'exit-code'.
Aug 19 15:02:10 linux systemd[1]: Failed to start nginx.service.
ここから重要な行を探します。
unexpected "}" in /etc/nginx/nginx.conf:42
nginx.confの42行目付近に
不正な「}」がある
つまり今回の問題は、 nginxそのものが壊れているのではなく、 設定ファイルの記述ミスが原因だと推測できます。
障害対応の基本的な流れを覚えよう
Webへアクセスできない
systemctl status nginx
journalctl -u nginx -n 20
nginx.conf:42
設定ファイルを修正
systemctl restart nginx
障害対応では、なぜ問題が発生したのかを ログから確認することが重要です。 原因を理解せず再起動だけ行うと、 同じ問題が再発する可能性があります。
ここで実際に試してみよう:ログ調査シミュレーター
nginxが起動しない疑似Linuxサーバで、 systemctlとjournalctlを使って原因を調査してみましょう。
Linux Log Troubleshooting
まずサービス状態を確認してみましょう
systemctl status nginx を実行すると、 現在のnginxの状態を確認できます。
理解度チェック:どのログが原因につながる?
次のログが表示されました。 障害原因を特定するうえで、 特に注目すべきログはどれでしょうか。
「失敗したことを示すログ」と 「なぜ失敗したのかを示すログ」の違いを考えてみましょう。
確認問題:journalctlの基本を確認しよう
nginxサービスのログだけを確認したい場合、 適切なコマンドはどれですか?
-uはunitを指定するオプションです。 nginx.serviceに関連するログへ絞り込めます。
nginxの直近20件のログを確認したい場合、 適切なコマンドはどれですか?
-u nginxでサービスを指定し、 -n 20で直近20件へ絞り込めます。
新しく出力されるログをリアルタイムで確認したい場合、 使用するオプションはどれですか?
-fを利用すると、 新しく追加されるログをリアルタイムで追跡できます。
3問に挑戦してみましょう。
まとめ
systemd環境では、 systemd-journaldがログを収集している
journalctlを使うことで、 journalに保存されたログを確認できる
-u・-n・-f・
--sinceなどを使って
必要なログへ絞り込むことが重要
systemctlでサービスの状態を確認し、
journalctlで
なぜ異常が発生したのかを調査する
障害対応では「failed」という結果だけでなく、 原因につながるエラーログを探すことが重要
次は「Linuxパッケージ管理の基本を理解する」を学びましょう
ここまでで、 Linuxのプロセス・サービス・ログという Linux運用の基本的な流れを学習しました。
次は、Linuxへ新しいソフトウェアを導入したり、 アップデート・削除したりするために必要となる パッケージ管理を学習します。
aptやdnfなどが何をしているのかを理解すると、 Linuxへソフトウェアを導入する仕組みが見えてきます。
Linuxパッケージ管理の基本を理解する →
