journalctlでsystemdのログを確認する方法|サービス障害の調査方法も解説

  • URLをコピーしました!

前の記事では、 systemctlを使ってLinuxサービスの 状態確認・起動・停止・再起動を行う方法を学習しました。

では、systemctl statusを実行して サービスがfailedになっていた場合、 どのように原因を調べればよいのでしょうか。

nginxが起動しない。
SSHサービスでエラーが発生している。
サービス停止前に何が起きていたのか確認したい。

こうした場面で重要になるのが、 systemdのログを確認できる journalctlコマンドです。

🐧 LINUX INTERMEDIATE

この記事はLinux中級講座の一部です。 journalctlを使ったsystemdログの確認方法を学習します。

Linux中級講座を見る →
LESSON GOAL この記事のゴール

journalctlの基本を理解し、 サービス・時間・件数・重要度などでログを絞り込み、 サービス障害の原因を調査できる状態を目指します。

目次

Linuxのログとは?

Linuxでは、 OSやサービスで発生したさまざまな出来事が ログ(記録)として保存されます。

たとえば、次のような情報です。

START サービス起動

いつサービスが起動したか

STOP サービス停止

いつ停止したか

ERROR エラー

何らかの問題が発生した

LOGIN 認証・接続

SSHなどの認証情報

障害対応では、 現在の状態だけを見るのではなく、 問題が発生するまでに何が起きたのかを ログから確認することが重要です。

systemd-journaldとjournalctlの関係

systemdを利用するLinuxでは、 systemd-journaldという仕組みが さまざまなログを収集します。

SERVICE nginx / sshd サービスでイベント発生
COLLECT systemd-journald ログを収集
VIEW journalctl ログを確認
journalctlはログを見るためのコマンド

journalctl自体がログを作っているわけではありません。 systemd-journaldが収集したjournalを、 journalctlを使って確認します。

systemctlとjournalctlはどう使い分ける?

SYSTEMCTL サービスの状態を見る systemctl status nginx

active・inactive・failedなど、 現在のサービス状態を確認します。

JOURNALCTL ログから原因を調べる journalctl -u nginx

サービスで何が起きたのか、 過去のログを確認します。

01 異常を発見 systemctl status nginx
02 原因を調査 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では「絞り込み」が重要

実務では、サービス・時間・件数・重要度などを指定して 必要なログへ絞り込んでいきます。

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に関連するログへ絞って確認できます。

-u = unit

「どのサービスのログを見たいか」を指定する

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のように 新しいログを追跡する用途で利用できます。

USE CASE 設定変更後の動作確認

journalctl -fを開いた状態でサービスを操作し、 その瞬間にどのようなログが出力されるか確認できます。

–since:時間を指定してログを確認する

「今日発生したログだけ見たい」 という場合は、 –sinceを利用できます。

journalctl --since today

特定サービスと組み合わせる場合は、

journalctl -u nginx --since today

と指定できます。

日時を指定することも可能です。

journalctl --since "2026-08-19 10:00:00"
09:00 対象外
10:00 –since
11:00 表示
12:00 表示

–until:終了時刻も指定できる

--since–untilを組み合わせると、 時間範囲を指定できます。

journalctl --since "10:00" --until "11:00"

たとえば 「10時30分ごろに障害が発生した」 と分かっている場合、 前後の時間帯へ絞って調査できます。

09:00
10:00 調査対象
10:30 障害発生
11:00 調査対象
12:00

journalctl -p:重要度でログを絞り込む

journalctlでは、 ログのpriority(重要度)を指定して 絞り込むこともできます。

journalctl -p err

この場合、 errorレベル以上のログへ絞り込めます。

0 emerg
1 alert
2 crit
3 err
4 warning
5 notice
6 info
7 debug

最初からすべて覚える必要はありません。 まずは 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を組み合わせてみましょう。

SCENARIO Webサーバへアクセスできなくなった

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.

ここから重要な行を探します。

ERROR FOUND unexpected "}" in /etc/nginx/nginx.conf:42 nginx.confの42行目付近に 不正な「}」がある

つまり今回の問題は、 nginxそのものが壊れているのではなく、 設定ファイルの記述ミスが原因だと推測できます。

障害対応の基本的な流れを覚えよう

01 症状を確認

Webへアクセスできない

02 サービス状態を確認 systemctl status nginx
03 ログを確認 journalctl -u nginx -n 20
04 エラーを特定 nginx.conf:42
05 原因を修正

設定ファイルを修正

06 再起動・状態確認 systemctl restart nginx
IMPORTANT 「再起動したら直った」で終わらせない

障害対応では、なぜ問題が発生したのかを ログから確認することが重要です。 原因を理解せず再起動だけ行うと、 同じ問題が再発する可能性があります。

ここで実際に試してみよう:ログ調査シミュレーター

nginxが起動しない疑似Linuxサーバで、 systemctlとjournalctlを使って原因を調査してみましょう。

INTERACTIVE LAB

Linux Log Troubleshooting

INCIDENT
SERVICE nginx.service
STATUS unknown
MISSION 原因を特定
user@web01
Incident: Webページへアクセスできません。
nginxの状態とログを確認して原因を特定してください。
user@web01:~$
STEP 1

まずサービス状態を確認してみましょう

systemctl status nginx を実行すると、 現在のnginxの状態を確認できます。

理解度チェック:どのログが原因につながる?

次のログが表示されました。 障害原因を特定するうえで、 特に注目すべきログはどれでしょうか。

ログを選択してください

「失敗したことを示すログ」と 「なぜ失敗したのかを示すログ」の違いを考えてみましょう。

確認問題:journalctlの基本を確認しよう

QUESTION 01

nginxサービスのログだけを確認したい場合、 適切なコマンドはどれですか?

正解:B

-uはunitを指定するオプションです。 nginx.serviceに関連するログへ絞り込めます。

QUESTION 02

nginxの直近20件のログを確認したい場合、 適切なコマンドはどれですか?

正解:C

-u nginxでサービスを指定し、 -n 20で直近20件へ絞り込めます。

QUESTION 03

新しく出力されるログをリアルタイムで確認したい場合、 使用するオプションはどれですか?

正解:A

-fを利用すると、 新しく追加されるログをリアルタイムで追跡できます。

YOUR SCORE 0 / 3

3問に挑戦してみましょう。

まとめ

01

systemd環境では、 systemd-journaldがログを収集している

02

journalctlを使うことで、 journalに保存されたログを確認できる

03

-u-n-f--sinceなどを使って 必要なログへ絞り込むことが重要

04

systemctlでサービスの状態を確認し、 journalctlなぜ異常が発生したのかを調査する

05

障害対応では「failed」という結果だけでなく、 原因につながるエラーログを探すことが重要

NEXT LESSON

次は「Linuxパッケージ管理の基本を理解する」を学びましょう

ここまでで、 Linuxのプロセス・サービス・ログという Linux運用の基本的な流れを学習しました。

次は、Linuxへ新しいソフトウェアを導入したり、 アップデート・削除したりするために必要となる パッケージ管理を学習します。

aptやdnfなどが何をしているのかを理解すると、 Linuxへソフトウェアを導入する仕組みが見えてきます。

Linuxパッケージ管理の基本を理解する
LINUX INTERMEDIATE

Linux中級講座の一覧へ戻る

Linux中級の学習順を確認したい場合は、 講座一覧へ戻りましょう。

← Linux中級講座へ戻る
目次