rsyslog
『rsyslog』は Linux で広く使われているシステムログ収集デーモンです。従来の syslog プロトコルを拡張し、ファシリティ(ログの発生源)とセベリティ(重大度)の組み合わせでログの出力先を柔軟に振り分けられます。設定ファイルは /etc/rsyslog.conf と /etc/rsyslog.d/ 以下に置き、@@ 記法でリモートサーバーへのログ転送も簡単に実現できます。セキュリティ監査や複数サーバーの集中ログ管理に欠かせないツールです。
構文
# -----------------------------------------------
# rsyslog.conf の基本構文
# -----------------------------------------------
# {ファシリティ}.{セベリティ} {アクション}
# → ファシリティとセベリティの組み合わせで
# ログの出力先(アクション)を決定します
# 例: auth.info /var/log/auth.log
# kern.crit /var/log/kernel-crit.log
# -----------------------------------------------
# ファシリティ・セベリティの特殊記法
# -----------------------------------------------
# * (ワイルドカード): すべてのファシリティ/セベリティにマッチします
# 例: *.emerg :omusrmsg:* # 全ファシリティの emerg を全ユーザーへ通知
# none: 指定したファシリティを除外します
# 例: *.info;mail.none;authpriv.none /var/log/messages
# → info 以上のログを /var/log/messages へ書き出しますが
# mail と authpriv は除外します
# -----------------------------------------------
# モジュール設定(UDP/TCP でログを受信する場合)
# -----------------------------------------------
# UDP でログを受信するモジュールを有効にします(ポート 514)
# module(load="imudp")
# input(type="imudp" port="514")
# TCP でログを受信するモジュールを有効にします(ポート 514)
# module(load="imtcp")
# input(type="imtcp" port="514")
# -----------------------------------------------
# リモートサーバーへのログ転送
# -----------------------------------------------
# @{ホスト}:{ポート} → UDP 転送(軽量だが信頼性は低い)
# @@{ホスト}:{ポート} → TCP 転送(信頼性が高い。本番環境推奨)
# 例: *.* @@log-server.example.com:514
# → すべてのログを TCP で log-server へ転送します
# -----------------------------------------------
# テンプレートを使ったカスタムフォーマット
# -----------------------------------------------
# $template {テンプレート名}, "{フォーマット文字列}\n"
# $ActionFileDefaultTemplate {テンプレート名}
# 例: $template KiryuFmt,"%timegenerated% %hostname% %syslogtag%%msg%\n"
# $ActionFileDefaultTemplate KiryuFmt
構文一覧
| ファシリティ / セベリティ | 説明 |
|---|---|
kern | カーネルが出力するメッセージです。ハードウェアエラーやドライバの問題が記録されます。 |
user | ユーザープロセスが出力する汎用メッセージです。アプリケーションのデフォルトファシリティです。 |
mail | メールシステム(Postfix・sendmail など)が出力するメッセージです。 |
daemon | システムデーモン(sshd・cron など)が出力する汎用メッセージです。 |
auth / authpriv | 認証・認可に関するメッセージです。ログイン試行・sudo の実行履歴などが記録されます。 |
syslog | rsyslog 自身が内部的に使用するファシリティです。 |
lpr | 印刷サブシステムのメッセージです。 |
local0 〜 local7 | カスタムアプリケーション用に予約されたファシリティです。Nginx・Apache など独自設定で使われます。 |
emerg(レベル 0) | システムが使用不能な状態です。即時対応が必要な最高重大度です。 |
alert(レベル 1) | 直ちに対処が必要な警告です。データベース破損・ディスク障害などが該当します。 |
crit(レベル 2) | 致命的な状態です。ハードウェア障害・カーネルパニックなどが該当します。 |
err(レベル 3) | エラー状態です。サービスの起動失敗・設定ファイルの読み込みエラーなどが該当します。 |
warning(レベル 4) | 警告です。異常ではないが注意が必要な状態(ディスク使用率が高いなど)です。 |
notice(レベル 5) | 正常だが特記すべきイベントです。サービスの起動・停止などが記録されます。 |
info(レベル 6) | 通常の情報メッセージです。一般的な動作ログが該当します。 |
debug(レベル 7) | デバッグ用の詳細メッセージです。通常は本番環境では無効にします。 |
*(ワイルドカード) | すべてのファシリティまたはすべてのセベリティにマッチします。 |
none | 指定ファシリティのログを除外します。mail.none のように使います。 |
使用例
/etc/rsyslog.d/kiryu-remote.conf
# ----------------------------------------------- # 桐生一馬の担当サーバーから中央ログサーバーへ転送する設定 # ファイル: /etc/rsyslog.d/kiryu-remote.conf # ----------------------------------------------- # ------------------------------------------------- # 転送先の定義(アクションキューを使って信頼性を高めます) # ------------------------------------------------- # すべてのファシリティ・セベリティを TCP でログサーバーへ転送します # @@ → TCP 転送(@ 1つは UDP。本番環境では TCP を推奨します) # Queue を設定しておくと、ログサーバーが一時的に停止しても # ローカルにバッファリングして後から送り直せます $ActionQueueType LinkedList # キューの種類(動的リスト) $ActionQueueFileName kiryu_fwd_queue # スプールファイルのプレフィックス $ActionQueueMaxDiskSpace 100m # ディスク使用の上限 $ActionQueueSaveOnShutdown on # シャットダウン時にキューを保存 $ActionResumeRetryCount -1 # 再試行回数(-1 = 無制限) # warning 以上のログをすべて中央ログサーバーへ TCP 転送します *.warning @@log.kiryu-corp.internal:514 # ------------------------------------------------- # auth ファシリティは info 以上を転送します # (ログイン試行・sudo の実行記録も必ず送ります) # ------------------------------------------------- auth.info @@log.kiryu-corp.internal:514 # ------------------------------------------------- # local7 ファシリティをアプリケーションログとして使用します # Nginx のカスタムログを local7 で転送する場合の例 # ------------------------------------------------- local7.* @@log.kiryu-corp.internal:514 # ------------------------------------------------- # debug レベルのログはローカルにのみ書き出します # (中央サーバーへは転送しません) # ------------------------------------------------- *.debug;*.!warning /var/log/kiryu-debug.log
実行するコマンドは次の通りです。
$ sudo rsyslogd -N1
rsyslogd: version 8.2102.0, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: End of config validation run. Bye.
$ sudo systemctl restart rsyslog
$ sudo systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-03-25 09:12:34 JST; 3s ago
Docs: man:rsyslogd(8)
https://www.rsyslog.com/doc/
Main PID: 4501 (rsyslogd)
Tasks: 4 (limit: 4681)
Memory: 3.2M
CPU: 18ms
CGroup: /system.slice/rsyslog.service
└─4501 /usr/sbin/rsyslogd -n -iNONE
Mar 25 09:12:34 kiryu-srv01 systemd[1]: Started System Logging Service.
/etc/rsyslog.d/majima-filter.conf
# ----------------------------------------------- # 真島吾朗の担当サーバー用ログ振り分け設定 # ファイル: /etc/rsyslog.d/majima-filter.conf # ----------------------------------------------- # info 以上のログを /var/log/messages へ書き出します # ただし mail・authpriv・cron は別ファイルへ振り分けるため除外します *.info;mail.none;authpriv.none;cron.none /var/log/messages # 認証関連ログ(authpriv)を専用ファイルへ書き出します # ログイン成功・失敗・sudo の実行がすべて記録されます authpriv.* /var/log/secure # メールシステムのログを専用ファイルへ書き出します mail.* -/var/log/maillog # ^ 先頭の - は非同期書き込み(パフォーマンス向上。クラッシュ時に # 最後の数行が失われる可能性がある点に注意してください) # cron デーモンのログを専用ファイルへ書き出します cron.* /var/log/cron # emerg レベルはシステム全ユーザーの端末に通知します *.emerg :omusrmsg:* # err 以上をメールで錦山彰へ通知します(omusrmsg モジュール使用) # *.err :ommail:;mailBody # ※ ommail モジュールの設定は別途 /etc/rsyslog.d/ommail.conf に記述します
実行するコマンドは次の通りです。
$ logger -p auth.warning "majima: sudo attempt from 192.168.10.50" $ sudo tail -n 3 /var/log/secure Mar 25 09:15:02 majima-srv02 root: majima: sudo attempt from 192.168.10.50 Mar 25 09:15:10 majima-srv02 sshd[4712]: Accepted publickey for nishikiyama from 192.168.10.30 port 51234 ssh2 Mar 25 09:15:10 majima-srv02 sshd[4712]: pam_unix(sshd:session): session opened for user nishikiyama by (uid=0)
中央ログサーバー側の受信設定(品田辰雄が管理するログ集約サーバー)
# ----------------------------------------------- # 品田辰雄が管理する中央ログサーバーの受信設定 # ファイル: /etc/rsyslog.conf(サーバー側) # ----------------------------------------------- # TCP でログを受信するモジュールを読み込みます module(load="imtcp") input(type="imtcp" port="514") # 送信元ホスト名ごとにディレクトリを分けてログを保存します # %HOSTNAME% → 送信元のホスト名に展開されるテンプレート変数です $template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log" # リモートから届いたログを上記テンプレートに従って保存します # *.* → すべてのファシリティ・セベリティを対象とします *.* ?RemoteLogs # ------------------------------------------------- # 保存先ディレクトリを事前に作成しておきます # sudo mkdir -p /var/log/remote # sudo chown syslog:adm /var/log/remote # -------------------------------------------------
実行するコマンドは次の通りです。
$ sudo ls /var/log/remote/ kiryu-srv01 majima-srv02 nishikiyama-srv03 $ sudo ls /var/log/remote/kiryu-srv01/ nginx.log rsyslogd.log sshd.log sudo.log $ sudo tail -n 2 /var/log/remote/kiryu-srv01/sshd.log Mar 25 10:02:11 kiryu-srv01 sshd[5301]: Accepted publickey for date_shin from 192.168.10.40 port 49122 ssh2 Mar 25 10:02:11 kiryu-srv01 sshd[5301]: pam_unix(sshd:session): session opened for user date_shin by (uid=0)
概要
『rsyslog』は POSIX の syslog 標準を拡張した高性能ログ収集デーモンで、RHEL・CentOS・Ubuntu・Debian など主要ディストリビューションのデフォルト実装です。設定は /etc/rsyslog.conf をメインとし、/etc/rsyslog.d/ 以下にアプリケーションごとのファイルを分割して配置します。ファシリティ(kern / user / mail / daemon / auth / local0〜7 など)とセベリティ(emerg / alert / crit / err / warning / notice / info / debug の 8 段階)を組み合わせた振り分けルールにより、目的に応じたログ管理が実現できます。@@host:port の TCP 転送とアクションキューを組み合わせることで、複数サーバーのログを中央サーバーへ安全に集約できます。ログファイルの肥大化を防ぐためのローテーション設定は logrotate を、ファイルに書き出されたログのリアルタイム監視やフィルタリングは /var/log のページを参照してください。systemd 環境では rsyslog と並行して journalctl(systemd-journald)も動作しており、両者を組み合わせてログを管理するのが現代的な運用スタイルです。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。