こういった疑問を持つ方は多いです。RHEL8/9以降はrsyslogとsystemd-journaldが共存しており、どちらをどう設定すればいいかが分かりにくいですよね。
この記事では、rsyslogとjournaldの設定方法と使い分け、logrotateによるログローテーション、journalctlコマンドの実践的な使い方を解説します。
この記事のポイント
・RHEL9ではrsyslogとjournaldが共存。journaldがカーネルログを受け取りrsyslogに転送する
・rsyslogの設定は/etc/rsyslog.confで「ファシリティ.プライオリティ 出力先」の形式で記述
・journalctlで過去のログを柔軟に検索できる(-u, --since, --until, -p)
・ログローテーションはlogrotate。/etc/logrotate.d/に設定ファイルを追加して管理する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
Linuxのログ管理の仕組み:rsyslogとjournaldの関係
RHEL9/Rocky Linux9では2つのログ管理機構が並行して動作しています。・systemd-journald:systemdのコンポーネント。起動直後からカーネルログ・サービスログをバイナリ形式で収集する
・rsyslog:従来からあるsyslogデーモン。/etc/rsyslog.confの設定に従いテキスト形式のログファイルに書き出す
デフォルトではjournaldがログを収集し、rsyslogに転送(imjournalモジュール経由)することで両方が機能します。
# ログ管理プロセスの確認 [root@server ~]# systemctl status rsyslog * rsyslog.service - System Logging Service Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; preset: enabled) Active: active (running) since Tue 2026-04-07 09:00:00 JST; 2h ago Main PID: 1234 (rsyslogd) [root@server ~]# systemctl status systemd-journald * systemd-journald.service - Journal Service Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static) Active: active (running) since Tue 2026-04-07 09:00:00 JST; 2h ago Main PID: 567 (systemd-journald)
rsyslogの設定:/etc/rsyslog.conf
rsyslogの動作設定を行うのが/etc/rsyslog.confファイルです。このファイルを編集することで、どのログをどこに出力するかを指定できます。1. 設定ファイルの書式
# 書式 ファシリティ.プライオリティ 出力先
2. ファシリティ(メッセージの出力元)
| ファシリティ | 対象 |
|---|---|
| kern | カーネルメッセージ |
| user | ユーザープログラムメッセージ |
| メールサービス関連メッセージ | |
| daemon | システムデーモンメッセージ |
| auth | 認証・セキュリティ関連(su、loginなど) |
| authpriv | プライベートな認証情報(SSH、sudoなど) |
| syslog | syslogd自身が生成するメッセージ |
| cron | cronデーモンメッセージ |
| local0~local7 | ローカルで自由に使えるファシリティ(アプリ別ログ振り分けに使用) |
| * | すべてのファシリティ |
3. プライオリティ(ログの重要度レベル)
| プライオリティ | 意味 | 重要度 |
|---|---|---|
| debug | デバッグに有益な詳細情報 | 低 |
| info | 通常の情報メッセージ | |
| notice | 通常動作だが注意すべき状況 | |
| warning | 警告(動作に支障はない) | |
| err | エラーが発生している | |
| crit | 致命的な問題 | |
| alert | すぐに対処が必要な問題 | |
| emerg | システム不能の非常事態 | 高 |
| none | メッセージを送らない(除外設定用) | — |
*.warningと設定するとwarning・err・crit・alert・emergのすべてが記録されます。特定のプライオリティのみを記録したい場合は「=」を付けます(例:*.=warning)。4. 出力先の種類
| 出力先の書式 | 意味 |
|---|---|
| /var/log/messages | ファイルに出力(フルパスで指定) |
| -/var/log/maillog | ファイルに出力(先頭の-は非同期書き込みを意味する) |
| @192.168.1.100 | リモートホストにUDPで送信(syslogサーバーに集約する場合) |
| @@192.168.1.100 | リモートホストにTCPで送信(@@は信頼性の高い転送) |
| root | rootユーザーの端末に表示 |
| * | ログイン中の全ユーザーの端末に表示 |
| /dev/console | コンソールに出力 |
5. /etc/rsyslog.confの設定例(RHEL9)
[root@server ~]# cat /etc/rsyslog.conf # モジュール読み込み module(load="imuxsock") # ローカルのsyslog送信を受け付ける module(load="imjournal" StateFile="imjournal.state") # journaldからログを取得 #### GLOBAL DIRECTIVES #### global(workDirectory="/var/lib/rsyslog") $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat #### RULES #### # mail,authpriv,cron以外のinfo以上のログを/var/log/messagesに出力 *.info;mail.none;authpriv.none;cron.none /var/log/messages # 認証系のログは/var/log/secureに出力 authpriv.* /var/log/secure # メールログは/var/log/maillogに出力(-は非同期書き込み) mail.* -/var/log/maillog # cronのログは/var/log/cronに出力 cron.* /var/log/cron # 緊急度emegのメッセージを全ユーザーに通知 *.emerg :omusrmsg:* # 追加設定ファイルを読み込む $IncludeConfig /etc/rsyslog.d/*.conf
6. 設定変更後はrsyslogを再起動する
# rsyslog.confを編集後に反映 [root@server ~]# systemctl restart rsyslog # 設定ファイルの構文チェック [root@server ~]# rsyslogd -N 1 rsyslogd: version 8.2102.0-105.el9, config validation run (level 1), master config /etc/rsyslog.conf rsyslogd: End of config validation run. Bye.
journaldの設定:/etc/systemd/journald.conf
systemd-journaldの設定は/etc/systemd/journald.confで行います。ログの保存場所・保存期間・最大サイズなどを設定できます。[root@server ~]# cat /etc/systemd/journald.conf [Journal] #Storage=auto #Compress=yes #Seal=yes #SplitMode=uid #SyncIntervalSec=5m #RateLimitIntervalSec=30s #RateLimitBurst=10000 #SystemMaxUse= #SystemKeepFree= #SystemMaxFileSize= #RuntimeMaxUse= #RuntimeKeepFree= #RuntimeMaxFileSize= #MaxRetentionSec= #MaxFileSec=1month #ForwardToSyslog=yes #ForwardToKMsg=no #ForwardToConsole=no #ForwardToWall=yes
| 設定項目 | 意味 |
|---|---|
| Storage=auto | ログの保存場所。auto=/var/log/journalが存在すればそこに保存、なければメモリのみ |
| SystemMaxUse=100M | ディスクに保存するログの最大サイズ(例:100M) |
| MaxRetentionSec=1month | ログの最大保存期間(例:1week、1month) |
| ForwardToSyslog=yes | journaldのログをrsyslogに転送する(デフォルトyes) |
1. journaldのログを永続化する
デフォルトではjournaldのログは再起動後に消える場合があります。永続化するには/var/log/journalディレクトリを作成します。# ログを永続化するディレクトリを作成 [root@server ~]# mkdir -p /var/log/journal # パーミッション設定 [root@server ~]# systemd-tmpfiles --create --prefix /var/log/journal # journaldを再起動して設定を反映 [root@server ~]# systemctl restart systemd-journald # 確認(Storageが変わる) [root@server ~]# journalctl --disk-usage Archived and active journals take up 120.0M in the file system.
journalctlコマンド:ログを検索・確認する
journalctlコマンドはjournaldが収集したログを検索・表示します。grepよりも柔軟な条件指定ができるのが特徴です。1. 基本的な使い方
# 全ログを表示(新しい順) [root@server ~]# journalctl -r | head -20 # リアルタイムにログを監視(tail -fと同等) [root@server ~]# journalctl -f # 起動してから現在までのログ [root@server ~]# journalctl -b # 特定サービスのログを表示(-uオプション) [root@server ~]# journalctl -u httpd -- ジャーナルの始め -- 4月 07 09:00:00 server systemd[1]: Starting The Apache HTTP Server... 4月 07 09:00:01 server systemd[1]: Started The Apache HTTP Server.
2. 時間範囲でフィルタリングする
# 2026-04-07の9時以降のログ [root@server ~]# journalctl --since "2026-04-07 09:00:00" # 2026-04-07の8時から10時までのログ [root@server ~]# journalctl --since "2026-04-07 08:00:00" --until "2026-04-07 10:00:00" # 1時間前からのログ [root@server ~]# journalctl --since "1 hour ago" # 昨日のログ [root@server ~]# journalctl --since yesterday --until today
3. 重要度でフィルタリングする
# err以上の重要度のログのみ表示(-pオプション) [root@server ~]# journalctl -p err 4月 07 11:00:00 server kernel: EXT4-fs error (device sdb): ext4_validate... # warningのみを表示(=を付けて特定レベルのみ) [root@server ~]# journalctl -p warning # サービス指定+重要度指定の組み合わせ [root@server ~]# journalctl -u sshd -p err --since "2026-04-07"
4. その他の便利なオプション
# カーネルログのみ表示(dmesgと同等) [root@server ~]# journalctl -k # 最後のN行を表示(-nオプション) [root@server ~]# journalctl -n 50 # ログをgrepする(パイプで使用) [root@server ~]# journalctl -u httpd | grep "error" # ディスク使用量を確認 [root@server ~]# journalctl --disk-usage # 古いログを削除して容量を確保(2週間以上古いものを削除) [root@server ~]# journalctl --vacuum-time=2weeks # 500MB以上のログを削除 [root@server ~]# journalctl --vacuum-size=500M
5. journalctlのオプション一覧
| やりたいこと | コマンド |
|---|---|
| リアルタイム監視 | journalctl -f |
| 起動以降のログ | journalctl -b |
| サービス別ログ | journalctl -u サービス名 |
| 時間範囲指定 | journalctl --since "日時" --until "日時" |
| 重要度フィルタ | journalctl -p err |
| カーネルログ | journalctl -k |
| ディスク使用量確認 | journalctl --disk-usage |
| 古いログを削除 | journalctl --vacuum-time=2weeks |
ログローテーション:logrotate
ログファイルは放置すると際限なく増え続けます。logrotateはログを定期的にローテーション(世代管理)するツールです。1. logrotateの設定ファイル
・/etc/logrotate.conf:デフォルト設定(全サービス共通)・/etc/logrotate.d/:サービス別の個別設定(このディレクトリに追加する)
[root@server ~]# cat /etc/logrotate.conf # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file dateext # uncomment this if you want your log files compressed #compress # packages drop log rotation information into this directory include /etc/logrotate.d
2. サービス別設定の例(/etc/logrotate.d/)
# /etc/logrotate.d/httpd の内容例 [root@server ~]# cat /etc/logrotate.d/httpd /var/log/httpd/*log { missingok notifempty sharedscripts delaycompress postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript }
3. 主な設定オプション
| オプション | 意味 |
|---|---|
| daily / weekly / monthly | ローテーションの頻度(毎日・毎週・毎月) |
| rotate 7 | 世代数。7を指定すると7世代分のログを保持する |
| compress | 古いログをgzipで圧縮する |
| delaycompress | 圧縮を1世代遅らせる(プロセスがまだ使用中の場合に有効) |
| missingok | ログファイルが存在しなくてもエラーにしない |
| notifempty | ログが空の場合はローテーションしない |
| create 644 root root | ローテーション後に指定した権限で新しいログファイルを作成する |
| size 100M | ファイルサイズが指定値を超えたらローテーションする |
| postrotate / endscript | ローテーション後に実行するコマンドを記述する |
4. logrotateを手動で実行する
# 設定のテスト実行(実際にはローテーションしない) [root@server ~]# logrotate -d /etc/logrotate.conf reading config file /etc/logrotate.conf ... log needs rotating # 強制的にローテーションを実行(テスト確認後に使用) [root@server ~]# logrotate -f /etc/logrotate.conf # 特定サービスの設定だけを実行 [root@server ~]# logrotate -f /etc/logrotate.d/httpd
loggerコマンド:手動でsyslogにメッセージを送信する
loggerコマンドを使うと、シェルスクリプトや手動でsyslogにメッセージを送信できます。rsyslogの設定テストや、スクリプトのログ記録に活用できます。# 書式 logger [-p ファシリティ.プライオリティ] [-t タグ] "メッセージ" # info優先度でsyslogにメッセージを送信 [root@server ~]# logger -p syslog.info -t TEST "logger動作テスト" # /var/log/messagesで確認 [root@server ~]# tail -3 /var/log/messages Apr 7 09:30:00 server TEST: logger動作テスト # journalctlでも確認できる [root@server ~]# journalctl -t TEST 4月 07 09:30:00 server TEST[12345]: logger動作テスト
よく確認するログファイルと用途
| ログファイル | 内容 |
|---|---|
| /var/log/messages | システム全般のメッセージ(mail・authpriv・cronは除く) |
| /var/log/secure | SSH接続・sudo・su・認証関連のログ |
| /var/log/maillog | Postfix・Sendmailなどのメール送受信ログ |
| /var/log/cron | cronジョブの実行ログ |
| /var/log/boot.log | システム起動時のログ |
| /var/log/dmesg | カーネルメッセージ(ハードウェア検出など) |
| /var/log/httpd/ | Apacheのアクセスログ・エラーログ |
| /var/log/audit/audit.log | SELinuxの監査ログ |
本記事のまとめ
| やりたいこと | コマンド・ファイル |
|---|---|
| rsyslogの設定を変更する | /etc/rsyslog.conf を編集して systemctl restart rsyslog |
| rsyslogの設定構文チェック | rsyslogd -N 1 |
| journaldのログを永続化する | mkdir -p /var/log/journal |
| journaldの設定を変更する | /etc/systemd/journald.conf を編集して systemctl restart systemd-journald |
| リアルタイムでログ監視する | journalctl -f |
| サービスのログを確認する | journalctl -u サービス名 |
| エラーログだけ確認する | journalctl -p err |
| 古いjournalログを削除する | journalctl --vacuum-time=2weeks |
| logrotateを手動で実行する | logrotate -f /etc/logrotate.conf |
| syslogにテストメッセージを送る | logger -p syslog.info -t TEST "メッセージ" |
Linuxのログ管理を含むサーバー運用スキルをより深く学びたい方は、無料のLinuxマニュアル(図解60P)もご活用ください。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:WSL2でLinuxを始める手順|インストールから基本コマンドまで初心者向け解説
- 前のページへ:Linuxのタイムゾーンを変更する方法|timedatectl・/etc/localtime・TZ環境変数【RHEL9対応】
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます