LinuxでRsyslogを使用してセントラルログサーバーを設定する方法


ログは、ソフトウェアやオペレーティングシステムの重要な要素です。ログには通常、ユーザーの行動、システムイベント、ネットワークアクティビティなどが記録されています。 Linuxシステムで最も広く使用されているロギングシステムの1つは rsyslog です。

Rsyslog は、さまざまな種類のソース(システム/アプリケーション)からデータを受け取り、それを複数の形式に出力する、強力で安全で高性能なログ処理システムです。

それは通常のある[ syslog のデーモンからフル機能の、エンタープライズレベルのロギングシステムへと進化しました。クライアント/サーバーモデルで設計されているため、クライアントとして、および/または他のサーバー、ネットワークデバイス、およびリモートアプリケーション用の集中ログサーバーとして構成できます。

このガイドでは、次のホストを使用します。

  • Server: 192.168.241.140
  • Client: 172.31.21.58

Rsyslogサーバーをインストールして構成する方法

ほとんどのLinuxディストリビューションには rsyslog パッケージがプリインストールされています。インストールされていない場合は、図のようにLinuxパッケージマネージャツールを使用してインストールできます。

$ sudo yum update && yum install rsyslog 	#CentOS 7
$ sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04

rsyslog がインストールされたら、今すぐサービスを開始し、起動時に自動起動するように有効にしてsystemctlコマンドでステータスを確認する必要があります。

$ sudo systemctl start rsyslog
$ sudo systemctl enable rsyslog
$ sudo systemctl status rsyslog

メインのrsyslog設定ファイルは /etc/rsyslog.conf にあります。ここにはモジュールのロード、グローバルディレクティブの定義、ログメッセージの処理に関する規則、/etc内のすべての設定ファイルが含まれています。 /rsyslog.d/ さまざまなアプリケーション/サービス用。

$ sudo vim /etc/rsyslog.conf

デフォルトでは、 rsyslog systemd journal から構造化されたログメッセージをインポートし、syslogを受け入れるために imjournal imusock モジュールを使用します。それぞれUnixソケット経由でローカルシステム上で実行されているアプリケーションからのメッセージ。

rsyslogをネットワーク/セントラルロギングサーバーとして設定するには、リモートsyslog受信と同様にリモートsyslog受信に使用するプロトコル( UDP または TCP 、あるいはその両方)を設定する必要があります。待機するポート

高速ではあるが信頼できない UDP 接続を使用する場合は、以下の行を検索してコメント解除します( 514 を待ち受けたいポートに置き換えます)。クライアントがメッセージを送信するポートアドレスと一致させてください。rsyslogクライアントを設定するときにこれをもっと見ていきます。

$ModLoad imudp
$UDPServerRun 514

TCP 接続(低速だが信頼性が高い)を使用するには、以下の行を検索してコメントを外します。

$ModLoad imtcp
$InputTCPServerRun 514

この場合、UDPとTCPの両方の接続を同時に使用したいと思います。

次に、リモートログを処理するためのルールセットを次の形式で定義する必要があります。

facility.severity_level	destination (where to store log)

どこで:

  • facility: is type of process/application generating message, they include auth, cron, daemon, kernel, local0..local7. Using * means all facilities.
  • severity_level: is type of log message: emerg-0, alert-1, crit-2, err-3, warn-4, notice-5, info-6, debug-7. Using * means all severity levels and none implies no severity level.
  • destination: is either local file or remote rsyslog server (defined in the form IP:port).

RemoteLog テンプレートを使用して、リモートホストからログを収集するために次のルールセットを使用します。スクリーンショットに示すように、これらの規則はローカルメッセージを処理するための規則よりも前にくる必要があることに注意してください。

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs 
& ~

上記のルールセットを見ると、最初のルールは“ RemoteLogs”/var/log /%HOSTNAME%/%PROGRAMNAME%.log”” です。

ディレクティブ は、ホスト名に基づいて、受信したすべてのリモートメッセージを収集し、/var/log の下の個別のログに書き込むように指示します。テンプレートの[ RemoteLog ]で定義されているように、メッセージを生成したクライアントマシン名およびリモートクライアント機能(プログラム/アプリケーション)。

2行目の“ *。*?RemoteLog” は、 RemoteLog テンプレート設定を使用して、すべての重要度レベルですべての施設からのメッセージを録音することを意味します。

最後の行“& Aメッセージがファイルに書き込まれると、rsyslogにメッセージの処理を停止するように指示します。 "を含めない場合〜 "、メッセージは代わりにローカルファイルに書き込まれます。

他にも多くのテンプレートを使用できます。詳細については、rsyslog設定のmanページ( man rsyslog.conf )またはRsyslogのオンラインドキュメントを参照してください。

これでrsyslogサーバーの設定は完了です。構成ファイルを保存して閉じます。最近の変更を適用するには、次のコマンドでrsyslogデーモンを再起動します。

$ sudo systemctl restart rsyslog

今すぐrsyslogネットワークソケットを確認します。 ssコマンド(または同じフラグを付けたnetstat)コマンドを使用して、出力をgrepにパイプ処理してrsyslogd接続を除外します。

$ sudo ss -tulnp | grep "rsyslog"

次に、 CentOS 7 SELinux が有効になっている場合は、次のコマンドを実行してネットワークソケットの種類に基づいてrsyslogトラフィックを許可します。

$ sudo semanage -a -t syslogd_port_t -p udp 514
$ sudo semanage -a -t syslogd_port_t -p tcp 514 

システムでファイアウォールが有効になっている場合は、 514 のポートを開いて、 UDP/TCP 両方のrsyslogサーバーへの接続を許可します。

------------- On CentOS ------------- 
$ sudo firewall-cmd --permanent --add-port=514/udp
$ sudo firewall-cmd --permanent --add-port=514/tcp
$ sudo firewall-cmd --reload

------------- On Ubuntu -------------
$ sudo ufw allow 514/udp
$ sudo ufw allow 514/tcp
$ sudo ufw reload 

Rsyslogサーバーにログを送信するようにRsyslogクライアントを構成する方法

クライアントシステムで、次のコマンドを使用してrsyslogサービスが実行されているかどうかを確認します。

$ sudo systemctl status rsyslog

インストールされていない場合は、インストールして前述のようにサービスを開始します。

$ sudo yum update && yum install rsyslog 	#CentOS 7
$ sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04
$ sudo systemctl start rsyslog
$ sudo systemctl enable rsyslog
$ sudo systemctl status rsyslog

rsyslogサービスが起動して実行されたら、デフォルト設定への変更を実行するメイン設定ファイルを開きます。

$ sudo vim /etc/rsyslog.conf

rsyslogデーモンをログクライアントとして機能させ、ローカルで生成されたすべてのログメッセージをリモートのrsyslogサーバーに転送するには、次のスクリーンショットに示すように、ファイルの末尾にこの転送ルールを追加します。

*. *  @@192.168.100.10:514

上記のルールはすべての施設からすべての重大度レベルでメッセージを送信します。特定の施設(認証など)からメッセージを送信するには、次のルールを使用します。

auth. *  @@192.168.100.10:514

変更を保存して設定ファイルを閉じます。上記の設定を適用するには、rsyslogデーモンを再起動してください。

$ sudo systemctl restart rsyslog

Rsyslogサーバーでリモートログを監視する方法

最後のステップは、 hostname/programname.log の形式で、rsyslogが実際にクライアントからのメッセージを受信してログに記録しているかどうかを/var/log で確認することです。

lsコマンドを実行して親ログディレクトリの長いリストを表示し、 ip-172.31.21.58 という名前のディレクトリ(またはクライアントマシンのホスト名がなんであれ)があるかどうかを確認します。

 
$ ls -l /var/log/

ディレクトリが存在する場合は、実行してその中のログファイルを確認します。

$ sudo ls -l /var/log/ip-172-31-21-58/

Rsyslog は、クライアント/サーバーアーキテクチャで設計された高性能のログ処理システムです。このガイドで説明されているように、 Rsyslog を中央/ネットワークログサーバーとして、およびクライアントとしてインストールおよび設定できることを願います。

また、関連するrsyslogのマニュアルページを参照してください。フィードバックや質問をしてください。