ログ管理 · 1 min read · Nov 15, 2025
Debian 9でRsyslogを使用して集中ログサーバーをインストールする
Linuxでは、ログファイルはシステムの機能に関するメッセージを含むファイルであり、システム管理者がマシン上の問題を特定するために使用します。ログは、管理者がシステムで発生したイベントを時間の経過とともに視覚化するのに役立ちます。通常、すべてのログファイルはLinuxの/var/logディレクトリに保管されます。この場所には、システムイベントを記録するためのログファイル、セキュリティ関連のメッセージのためのログファイル、カーネル、ユーザー、またはcronジョブ専用の他のログファイルなど、さまざまなメッセージを保存するためのいくつかの種類のログファイルがあります。ログファイルの主な目的は、システムの問題をトラブルシューティングすることです。Linuxのほとんどのログファイルはrsyslogdサービスによって制御されています。新しいLinuxディストリビューションのリリースでは、ログファイルはsystemd初期化プログラムの一部であるjournaldシステムサービスによっても制御および管理されます。ジャーナルデーモンによって保存されたログはバイナリ形式で書き込まれ、主に揮発性で、RAMおよび/run/log/journal/のリングバッファに保存されます。ただし、ジャーナルサービスはSyslogメッセージを永続的に保存するように構成することもできます。
Linuxでは、rsyslogサーバーを構成して、サービス-クライアントモデル方式で中央ログマネージャーを実行し、TCPまたはUDPトランスポートプロトコルを介してネットワーク上でログメッセージを送信したり、ログを生成するネットワークデバイス、サーバー、ルーター、スイッチ、または他のシステムや組み込みデバイスから受信したりできます。
Rsyslogデーモンは、クライアントとサーバーの両方として同時に実行するように設定できます。サーバーとして実行するように構成されたRsyslogは、デフォルトのポート514 TCPおよびUDPでリッスンし、リモートシステムによってネットワーク経由で送信されたログメッセージを収集し始めます。クライアントとして、Rsyslogは内部ログメッセージを同じTCPまたはUDPポートを介してリモートRyslogサーバーに送信します。
Rsyslogは、選択したプロパティとアクションに従ってsyslogメッセージをフィルタリングします。rsyslogフィルタは以下の通りです:
- ファシリティまたは優先度フィルタ
- プロパティベースのフィルタ
- 式ベースのフィルタ
ファシリティフィルタは、ログを生成するLinux内部サブシステムによって表されます。以下のように分類されます:
- auth/authpriv = 認証プロセスによって生成されたメッセージ
- cron = cronタスクに関連するログ
- daemon = 実行中のシステムサービスに関連するメッセージ
- kernel = Linuxカーネルメッセージ
- mail = メールサーバーメッセージ
- syslog = syslogまたは他のデーモンに関連するメッセージ(DHCPサーバーはここにログを送信します)
- lpr = プリンタまたは印刷サーバーメッセージ
- local0 - local7 = 管理者の制御下にあるカスタムメッセージ
優先度または重大度レベルは、以下のようにキーワードと番号に割り当てられます。
- emerg = 緊急 – 0
- alert = アラート – 1
- err = エラー – 3
- warn = 警告 – 4
- notice = 通知 – 5
- info = 情報 – 6
- debug = デバッグ – 7 最高レベル
また、すべてのファシリティまたは優先度を定義するためのアスタリスク(*)記号、優先度を指定しないnoneキーワード、特定の優先度のみを選択する等号(=)、優先度を否定する感嘆符(!)など、特別なRsyslogキーワードもいくつかあります。
syslogのアクション部分は、宛先ステートメントによって表されます。ログメッセージの宛先は、ファイルシステムに保存されたファイル、/var/log/システムパス内のファイル、名前付きパイプまたはFIFOを介した別のローカルプロセスの入力である可能性があります。ログメッセージは、ユーザーに送信されたり、ブラックホール(/dev/null)に破棄されたり、stdoutに送信されたり、TCP/UDPプロトコルを介してリモートsyslogサーバーに送信されたりすることもできます。ログメッセージは、MySQLやPostgreSQLなどのデータベースに保存することもできます。
Rsyslogをサーバーとして構成する
Rsyslogデーモンは、ほとんどのLinuxディストリビューションに自動的にインストールされます。ただし、システムにRsyslogがインストールされていない場合は、以下のコマンドのいずれかを実行してサービスをインストールできます。コマンドを実行するには、root権限が必要です。
Debianベースのディストリビューションでは:
sudo apt-get install rsyslogRHELベースのディストリビューション(CentOSなど)では:
sudo yum install rsyslogRsyslogデーモンがシステムで起動しているかどうかを確認するには、ディストリビューションのバージョンに応じて以下のコマンドを実行します。
systemdを使用した新しいLinuxディストリビューションでは:
systemctl status rsyslog.serviceinitを使用した古いLinuxバージョンでは:
service rsyslog status/etc/init.d/rsyslog statusrsyslogデーモンを起動するには、以下のコマンドを実行します。
initを使用した古いLinuxバージョンでは:
service rsyslog start/etc/init.d/rsyslog start最新のLinuxディストリビューションでは:
systemctl start rsyslog.serviceサーバーモードで実行するようにrsyslogプログラムを設定するには、/etc/rsyslog.confのメイン構成ファイルを編集します。このファイルで、以下のサンプルに示すように変更を加えます。
sudo vi /etc/rsyslog.confUDPログメッセージの受信を514ポートで許可するために、以下の行を見つけて、ハッシュタグ(#)を削除してコメントを解除します。デフォルトでは、UDPポートはsyslogがメッセージを送受信するために使用されます。
$ModLoad imudp
$UDPServerRun 514UDPプロトコルはネットワーク上でデータを交換するために信頼性がないため、Rsyslogを設定してTCPプロトコルを介してリモートサーバーにログメッセージを出力することができます。TCP受信プロトコルを有効にするには、/etc/rsyslog.confファイルを開き、以下のようにコメントを解除します。これにより、rsyslogデーモンはポート514のTCPソケットにバインドしてリッスンすることができます。
$ModLoad imtcp
$InputTCPServerRun 514 両方のプロトコルをrsyslogで同時に有効にすることができます。
rsyslogデーモンへのアクセスを許可する送信者を指定したい場合は、有効にしたプロトコルの行の後に以下の行を追加します:
$AllowedSender TCP, 127.0.0.1, 10.110.50.0/24, *.yourdomain.com受信ログを保存する場所を指示する新しいテンプレートを作成する必要があります。テンプレートは、$AllowedSender行の直後に定義します。以下のサンプルのようにします。
$template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
**.* *?Incoming-logs
& ~** kernファシリティによって生成されたメッセージのみをログに記録するには、以下の構文を使用します。
kern.* ?Incoming-logs受信したログは上記のテンプレートによって解析され、/var/log/ディレクトリ内のローカルファイルシステムに保存され、メッセージを生成したクライアントホスト名クライアントファシリティにちなんで名付けられたファイルに保存されます:%HOSTNAME%および%PROGRAMNAME%変数。
以下の& ~リダイレクトルールは、Rsyslogデーモンが上記の変数名で指定されたファイルにのみ受信ログメッセージを保存するように構成します。そうでない場合、受信したログはさらに処理され、/var/log/syslogファイルなどのローカルログの内容にも保存されます。
メールに関連するすべてのログメッセージを破棄するルールを追加するには、以下のステートメントを使用できます。
mail.* ~ファイル名を出力するために使用できる他の変数は、%syslogseverity%、%syslogfacility%、%timegenerated%、%HOSTNAME%、%syslogtag%、%msg%、%FROMHOST-IP%、%PRI%、%MSGID%、%APP-NAME%、%TIMESTAMP%、%$year%、%$month%、%$day%です。
Rsyslogバージョン7以降、新しい構成形式を使用してRsyslogサーバーでテンプレートを宣言できます。
バージョン7のテンプレートサンプルは以下のようになります。
template(name="MyTemplate" type="string"
string="/var/log/%FROMHOST-IP%/%PROGRAMNAME:::secpath-replace%.log"
)上記のテンプレートを記述する別の方法は、以下のようになります。
template(name="MyTemplate" type="list") { constant(value="/var/log/") property(name="fromhost-ip") constant(value="/") property(name="programname" SecurePath="replace") constant(value=".log") }* ***
rsyslog構成ファイルに加えた変更を適用するには、デーモンを再起動して新しい構成を読み込む必要があります。
sudo service rsyslog restartsudo systemctl restart rsyslogDebian Linuxシステムでリッスン状態のrsyslogソケットがどれかを確認するには、root権限でnetstatコマンドを実行できます。結果をgrepなどのフィルタユーティリティに渡します。
sudo netstat –tulpn | grep rsyslog受信接続を確立できるようにするために、ファイアウォールでRsyslogポートも開く必要があることに注意してください。
Firewalldが有効なRHELベースのディストリビューションでは、以下のコマンドを実行します:
firewall-cmd --permanent --add-port=514/tcpfirewall-cmd --permanent --add-port=514/tcpfirewall-cmd –reloadUFWファイアウォールがアクティブなDebianベースのディストリビューションでは、以下のコマンドを実行します:
ufw allow 514/tcpufw allow 514/udpIptablesファイアウォールルール:
iptables -A INPUT -p tcp -m tcp --dport 514 -j ACCEPTiptables -A INPUT -p udp --dport 514 -j ACCEPTRsyslogをクライアントとして構成する
rsyslogデーモンをクライアントモードで実行し、ローカルログメッセージをリモートRsyslogサーバーに出力するには、/etc/rsyslog.confファイルを編集し、以下のいずれかの行を追加します:
*. * @IP_REMOTE_RSYSLOG_SERVER:514*. * @FQDN_RSYSLOG_SERVER:514この行は、Rsyslogサービスがすべての内部ログをUDPポート514で遠隔のRsyslogサーバーに出力することを有効にします。
TCPプロトコルを介してログを送信するには、以下のテンプレートを使用します:
*. * @@IP_reomte_syslog_server:514すべての優先度のcron関連のログのみをrsyslogサーバーに出力するには、以下のテンプレートを使用します:
cron.* @ IP_reomte_syslog_server:514Rsyslogサーバーにネットワーク経由で到達できない場合は、サーバーがオンラインになるまで、クライアント側の/etc/rsyslog.confファイルに以下の行を追加して、ログをディスクバッファファイルに一時的に保存します。
$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1上記のルールを適用するには、rsyslogデーモンを再起動してクライアントとして機能させる必要があります。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。