rsyslog.confの設定ガイド|ログ転送・フィルタリング・テンプレートの実践例

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips, Linuxトラブルシューティング > rsyslog.confの設定ガイド|ログ転送・フィルタリング・テンプレートの実践例
「サーバーのログをもっと細かく制御したいのに、rsyslog.confの書き方がよくわからない。」
「ログを別サーバーに転送する設定をしたいが、どこに何を書けばいいのか。」

Linuxのログ管理を担うrsyslogは、設定ファイル rsyslog.conf の書き方を知っているかどうかで、運用効率が大きく変わります。
この記事では、rsyslog.conf の基本構造から、ログ転送・フィルタリング・テンプレートの実践的な設定例まで体系的に解説します。RHEL 9 / AlmaLinux 9 / Ubuntu 24.04 LTSで動作確認済みです。

この記事のポイント

・ rsyslog.conf はファシリティ.プライオリティ+アクションの組み合わせで書く
・ @@サーバーIPでTCP転送、@サーバーIPでUDP転送を切り替えられる
・ filterとtemplateでログの整形・選別・個別ファイル保存が可能
・ トラブル時は rsyslogd -N1 で設定ファイルの構文エラーを検出できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

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など)
mail メールシステム(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

実際に動いているか確認するには、loggerコマンドでテストログを送ります。

# 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: テストエラーログ

loggerコマンドの詳細な使い方はこちら

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

ログ収集サーバー側(192.168.1.100)では、TCP受信モジュールを有効にします。

# /etc/rsyslog.d/receive.conf(受信側サーバーの設定) # TCPでのログ受信を有効化する(ポート514) module(load="imtcp") input(type="imtcp" port="514") # 受信したログをホスト名別のファイルに保存する RemoteLogs, "/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?RemoteLogs

設定変更後はrsyslogを再起動して反映します。

# 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

ポート514の通信をssコマンドで確認する方法はこちら

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

firewall-cmdの詳細な使い方はこちら

【確認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

「ForwardToSyslog=no」になっている場合は「yes」に変更し、systemd-journaldを再起動します。

本記事のまとめ

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
rsyslog.confをうまく使いこなすと、ログ管理の手間が大幅に減ります。
特にログ転送の設定を入れることで、複数サーバーのログを一か所で確認できるようになり、
障害発生時の調査がぐっとスムーズになります。

私のセミナーでも「ログを見る習慣と仕組み作り」は必ず取り上げるテーマです。
3,100名以上の受講生を指導してきた中で、ログ管理を体系的に押さえているかどうかが、
現場で通用するエンジニアとそうでないエンジニアの差になっていると実感しています。

ネットワーク診断のdigコマンドの使い方はこちら
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、20年以上の運用経験を持つ現役エンジニアが基礎から教えます。
Linux無料マニュアルを受け取る >>

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。