「ログを別サーバーに転送する設定をしたいが、どこに何を書けばいいのか。」
Linuxのログ管理を担うrsyslogは、設定ファイル rsyslog.conf の書き方を知っているかどうかで、運用効率が大きく変わります。
この記事では、rsyslog.conf の基本構造から、ログ転送・フィルタリング・テンプレートの実践的な設定例まで体系的に解説します。RHEL 9 / AlmaLinux 9 / Ubuntu 24.04 LTSで動作確認済みです。
この記事のポイント
・ rsyslog.conf はファシリティ.プライオリティ+アクションの組み合わせで書く
・ @@サーバーIPでTCP転送、@サーバーIPでUDP転送を切り替えられる
・ filterとtemplateでログの整形・選別・個別ファイル保存が可能
・ トラブル時は rsyslogd -N1 で設定ファイルの構文エラーを検出できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
rsyslog.confの基本構造
rsyslog.confは大きく3つのブロックで構成されています。・モジュール読み込み():機能を追加するモジュールを宣言する
・グローバル設定( 等):ログディレクトリのパーミッションやファイルサイズ制限
・ルール設定:「どのログを」「どこに送るか」を定義するメインの部分
実際のファイルを確認してみましょう。
# rsyslog.confの場所を確認する [root@sv1 ~]# cat /etc/rsyslog.conf | head -30 # rsyslog configuration file # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html # or latest version online at http://www.rsyslog.com/doc/rsyslog_conf.html #### MODULES #### module(load="imuxsock") # local system logging support module(load="imjournal" # provides access to systemd journal StateFile="imjournal.state") #### GLOBAL DIRECTIVES #### global(workDirectory="/var/lib/rsyslog") RSYSLOG_TraditionalFileFormat #### RULES #### # Log all kernel messages to the console. kern.* /dev/console # Log anything (except mail) of level info or higher. *.info;mail.none;authpriv.none;cron.none /var/log/messages # The authpriv file has restricted access. authpriv.* /var/log/secure # Log all the mail messages in one place. mail.* -/var/log/maillog # Log cron stuff cron.* /var/log/cron
ファシリティとプライオリティの読み方
rsyslogのルールは「ファシリティ.プライオリティ アクション」の形式で書きます。1. ファシリティ(ログの種別)
ファシリティはどのサービス・カテゴリのログかを示します。| ファシリティ | 対象 |
|---|---|
| kern | カーネルのメッセージ |
| auth / authpriv | 認証関連(SSH、suなど) |
| メールシステム(Postfix、Sendmailなど) | |
| cron | cronジョブのログ |
| daemon | システムデーモン全般 |
| local0~local7 | カスタム用途(アプリケーションログなど) |
| *(アスタリスク) | すべてのファシリティ |
2. プライオリティ(ログレベル)
プライオリティは重要度を示し、指定したレベル以上のログが対象になります。| プライオリティ | レベル | 説明 |
|---|---|---|
| emerg | 0(最高) | システムが使用不能な緊急事態 |
| alert | 1 | 即時対応が必要 |
| crit | 2 | 重大な障害 |
| err | 3 | エラー |
| warning | 4 | 警告 |
| notice | 5 | 通常だが注目すべき状態 |
| info | 6 | 一般的な情報 |
| debug | 7(最低) | デバッグ情報 |
| none | - | そのファシリティを除外する |
3. アクション(出力先)
・ファイルパス:指定したファイルに書き込む(例: /var/log/messages)・-ファイルパス:非同期書き込み(書き込みのたびにディスクフラッシュしない)
・@@ホスト名:ポート:TCP転送
・@ホスト名:ポート:UDP転送
・|パイプ:外部コマンドへパイプ
実践的な設定例
1. エラー以上のログだけを別ファイルに保存する
infoレベルのログは大量になりがちです。errレベル以上だけを絞り込んで別ファイルに残す設定は、障害発生時の調査を大幅に効率化します。# /etc/rsyslog.d/error-only.conf # err以上のログを /var/log/errors.log に保存する *.err /var/log/errors.log
# errレベルのテストログを送信する [root@sv1 ~]# logger -p user.err "テストエラーログ" # /var/log/errors.log に記録されたか確認する [root@sv1 ~]# tail -5 /var/log/errors.log Jun 9 10:23:15 sv1 root: テストエラーログ
2. 認証ログをサーバーに転送する(TCP)
複数のサーバーがある環境では、ログを中央のログサーバーに集約するのが運用の基本です。SSHの不正アクセス(authpriv)ログを、ログ収集サーバー(192.168.1.100)にTCPで転送する設定です。
# /etc/rsyslog.d/remote-auth.conf(送信側サーバーの設定) # TCPモジュールを有効化する module(load="omfwd") # authprivファシリティをTCPでログサーバーに転送する(ポート514) authpriv.* @@192.168.1.100:514
# /etc/rsyslog.d/receive.conf(受信側サーバーの設定) # TCPでのログ受信を有効化する(ポート514) module(load="imtcp") input(type="imtcp" port="514") # 受信したログをホスト名別のファイルに保存する RemoteLogs, "/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?RemoteLogs
# rsyslogを再起動する [root@sv1 ~]# systemctl restart rsyslog # 起動状態を確認する [root@sv1 ~]# systemctl status rsyslog * rsyslog.service - System Logging Service Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled) Active: active (running) since Mon 2026-06-09 10:30:00 JST; 3s ago
3. 特定のプログラムのログを個別ファイルに分離する
nginxやPostfixなど特定のプログラムのログだけを独立したファイルに保存したい場面は多いです。プロパティベースのフィルター(:programname)を使うと、プログラム名で絞り込めます。
# /etc/rsyslog.d/nginx-separate.conf # programname が "nginx" と一致するログを /var/log/nginx/rsyslog.log に保存する :programname, isequal, "nginx" /var/log/nginx/rsyslog.log # 一致したログをデフォルトの /var/log/messages にも残したくない場合は # & stop を追加する :programname, isequal, "nginx" /var/log/nginx/rsyslog.log & stop
4. テンプレートでログの出力形式をカスタマイズする
デフォルトのrsyslogのログ形式は「月 日 時刻 ホスト名 プロセス: メッセージ」ですが、ISO 8601形式(YYYY-MM-DDTHH:MM:SS)に変更したい、JSON形式で保存したいといった要件も現場ではよくあります。
# /etc/rsyslog.d/custom-template.conf # ISO 8601タイムスタンプ形式のテンプレートを定義する ISO8601Log,"%timereported:::date-rfc3339% %HOSTNAME% %syslogtag%%msg% " # 全ログに適用する *.* /var/log/syslog_iso8601.log;ISO8601Log
[root@sv1 ~]# tail -3 /var/log/syslog_iso8601.log 2026-06-09T10:35:22+09:00 sv1 systemd[1]: Started System Logging Service. 2026-06-09T10:35:22+09:00 sv1 rsyslogd: imjournal: journal files changed, reloading. 2026-06-09T10:35:23+09:00 sv1 root: テストメッセージ
応用Tips:/etc/rsyslog.d/ でモジュール管理する
rsyslog.conf 本体を直接編集すると、OSアップデート時にコンフリクトが発生するリスクがあります。実務では /etc/rsyslog.d/ 配下に個別のコンフィグファイルを置くことで、管理しやすくなります。
# rsyslog.d配下のファイル構成例 [root@sv1 ~]# ls /etc/rsyslog.d/ 50-default.conf error-only.conf remote-auth.conf nginx-separate.conf # rsyslog.confの末尾でrsyslog.dを読み込んでいることを確認する [root@sv1 ~]# grep "rsyslog.d" /etc/rsyslog.conf /etc/rsyslog.d/*.conf
【注意】rsyslog.d/ のファイルはアルファベット順に読み込まれます。
設定の優先順位を意識してファイル名を付けてください(例: 10-error-only.conf、50-remote-auth.conf)。
後からロードされたルールが先のルールを上書きする場合があります。
設定ファイル管理のベストプラクティスはLinux DNS設定の解説でも紹介しています
トラブルシュート:rsyslogが期待通りに動かない時の対処法
【確認1】設定ファイルの構文エラーを検出する
rsyslogを再起動して「なぜかログが出ない」という場合、まず構文チェックをします。# rsyslog設定ファイルの構文チェック(ドライラン) [root@sv1 ~]# rsyslogd -N1 rsyslogd: version 8.2310.0, config validation run (level 1), master config /etc/rsyslog.conf rsyslogd: End of config validation run. Bye.
【確認2】ポートが開放されているか確認する(転送設定の場合)
ログ転送がうまくいかない場合は、ポート514(UDP/TCP)が開放されているか確認します。# ssコマンドでポート514の状態を確認する [root@sv1 ~]# ss -lnpt | grep 514 LISTEN 0 25 0.0.0.0:514 0.0.0.0:* users:(("rsyslogd",pid=12345,fd=6)) # firewalldでポート514を開放する [root@sv1 ~]# firewall-cmd --add-port=514/tcp --permanent success [root@sv1 ~]# firewall-cmd --reload success
【確認3】journaldの転送設定を確認する(systemd連携)
RHEL 9 / Ubuntu 24.04では、systemdのjournaldがログを一元管理しているため、rsyslogにログが届かないケースがあります。
/etc/systemd/journald.conf の ForwardToSyslog 設定を確認してください。
# journald.confのForwardToSyslogを確認する [root@sv1 ~]# grep ForwardToSyslog /etc/systemd/journald.conf ForwardToSyslog=yes
本記事のまとめ
rsyslog.confの設定ポイントをまとめます。| やりたいこと | 設定例 |
|---|---|
| errレベル以上だけを保存する | *.err /var/log/errors.log |
| TCPでログサーバーに転送する | *.* @@192.168.1.100:514 |
| UDPでログサーバーに転送する | *.* @192.168.1.100:514 |
| 特定プログラムのログを分離する | :programname, isequal, "nginx" /var/log/nginx/rsyslog.log |
| ISO 8601形式でタイムスタンプを記録する | ISO8601Log,"%timereported:::date-rfc3339% ..." |
| 設定ファイルの構文チェックをする | rsyslogd -N1 |
| ファシリティを除外する | *.info;mail.none /var/log/messages |
特にログ転送の設定を入れることで、複数サーバーのログを一か所で確認できるようになり、
障害発生時の調査がぐっとスムーズになります。
私のセミナーでも「ログを見る習慣と仕組み作り」は必ず取り上げるテーマです。
3,100名以上の受講生を指導してきた中で、ログ管理を体系的に押さえているかどうかが、
現場で通用するエンジニアとそうでないエンジニアの差になっていると実感しています。
ネットワーク診断のdigコマンドの使い方はこちら
Linux無料マニュアルを受け取る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 前のページへ:renameコマンドでファイル名を一括変更する方法|正規表現・連番・拡張子変更の実践例
- この記事の属するカテゴリ:Linuxtips・Linuxトラブルシューティングへ戻る

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