CentOS / RHEL 7でRsyslogを使用して集中ログサーバーを作成する方法


システム管理者が CentOS 7 または RHEL 7 サーバーシステムの問題を特定またはトラブルシューティングするには、特定のシステムでシステムで発生したイベントを把握して表示する必要があります。システムの/var/log ディレクトリに保存されているログファイルの期間。

Linuxマシン上のsyslogサーバーは、特定の内部問題に関連しているか、単に情報メッセージに関連しているかにかかわらず、ログを生成するすべてのサーバー、ネットワークデバイス、ルーター、スイッチ、およびそれらの内部サービスの中央監視ポイントとして機能します。 。

CentOS/RHEL 7 システムでは、 Rsyslog デーモンがプレインストールされたメインログサーバーで、その後に Systemd Journal Daemon があります( journald )。

ある[ Rsyslog のサーバークライアント/サーバーアーキテクチャサービスとして構築し、同時に両方の役割を達成することができます。サーバーとして動作し、ネットワーク内の他のデバイスによって送信されたすべてのログを収集することも、ログ記録されたすべての内部システムイベントをリモートエンドポイントsyslogサーバーに送信することによってクライアントとして動作することもできます。

rsyslogがクライアントとして設定されている場合、ログはローカルファイルシステム上のファイルにローカルに保存されるか、またはマシンに保存されたファイルに書き込まれるか、または同時に。

syslogサーバは、次の方式を使用してログメッセージを処理します。

type (facility).priority (severity)  destination(where to send the log)

A. 施設またはタイプデータは、メッセージを生成する内部システムプロセスによって表されます。 Linuxでは、ログを生成する内部プロセス(ファシリティ)は次のように標準化されています。

  • auth = messages generated by authentication processes (login).
  • cron= messages generated by scheduled processes (crontab).
  • daemon = messages generated by daemons (internal services).
  • kernel = messages generated by the Linux Kernel itself.
  • mail = messages generated by a mail server.
  • syslog = messages generated by the rsyslog daemon itself.
  • lpr = messages generated by local printers or a print server.
  • local0 – local7 = custom messages defined by an administrator (local7 is usually assigned for Cisco or Windows).

B. 優先度(重要度)のレベルも標準化されています。各優先順位には、下記のように標準の略語と番号が割り当てられています。 7番目の優先順位は、すべての上位レベルです。

  • emerg = Emergency – 0
  • alert = Alerts – 1
  • err = Errors – 3
  • warn = Warnings – 4
  • notice = Notification – 5
  • info = Information – 6
  • debug = Debugging – 7

特別なRsyslogキーワード:

  • * = all facilities or priorities
  • none = the facilities have no given priorities Eg: mail.none

C. syslogスキーマの3番目の部分は destination ディレクティブによって表されます。 Rsyslogデーモンは、ローカルファイルシステム上のファイル(主に/var/log/ディレクトリ内のファイル)に書き込まれるログメッセージを送信したり、別のローカルプロセスにパイプされたりするためにログメッセージを送信できますローカルユーザコンソール(標準出力)、またはTCP/UDPプロトコル経由でリモートsyslogサーバにメッセージを送信するか、あるいは/dev/null にメッセージを破棄します。

CentOS/RHEL 7 を中央のLog Serverとして設定するには、まず、すべてのログファイルが記録されている/var パーティションが十分に大きいことを確認し、確認する必要があります(他のデバイスから送信されるすべてのログファイルを保存できるようにするため/var/log/ディレクトリをマウントするには、別のドライブ(LVM、RAID)を使用することをお勧めします。

  1. CentOS 7.3 Installation Procedure
  2. RHEL 7.3 Installation Procedure

CentOS / RHEL 7サーバーでRsyslogを設定する方法

1. デフォルトでは、 Rsyslog サービスが自動的にインストールされ、 CentOS/RHEL 7 で実行されているはずです。システムでデーモンが起動されているかどうかを確認するには、root権限で次のコマンドを発行します。

# systemctl status rsyslog.service

サービスがデフォルトで実行されていない場合は、rsyslogデーモンを起動するために以下のコマンドを実行してください。

# systemctl start rsyslog.service

2. 集中ログサーバーとして使用する予定のシステムにrsyslogパッケージがインストールされていない場合は、次のコマンドを発行してrsyslogパッケージをインストールします。

# yum install rsyslog

3. rsyslogデーモンを集中型のログサーバーとして設定し、外部クライアントのログメッセージを受信するためにシステムで実行する必要がある最初のステップは、あなたのサイトを使用して開いて編集することです。以下の抜粋に示すように、お気に入りのテキストエディタ、 /etc/rsyslog.conf のメイン設定ファイル。

# vi /etc/rsyslog.conf

514 を介してRsyslogサーバーにUDPトランスポート受信を提供するために、rsyslogメイン設定ファイルで、次の行を検索してコメント解除し(行頭のハッシュタグ記号を削除)港。 UDPはRsyslogによるログ送信に使用される標準プロトコルです。

$ModLoad imudp 
$UDPServerRun 514

4. UDPプロトコルにはTCPオーバーヘッドがないため、TCPプロトコルよりもデータ転送が高速になります。一方、UDPプロトコルは送信データの信頼性を保証するものではない。

ただし、ログ受信にTCPプロトコルを使用する必要がある場合は、514でTCPソケットをバインドして待機するように /etc/rsyslog.conf ファイルから次の行を検索してコメント解除する必要があります。港。受信用のTCPおよびUDPリスニングソケットは、Rsyslogサーバー上で同時に構成できます。

$ModLoad imtcp 
$InputTCPServerRun 514 

5. 次の手順では、まだファイルを閉じないで、リモートメッセージの受信に使用する新しいテンプレートを作成します。このテンプレートは、syslogネットワーククライアントから送信された受信メッセージを保存する場所をローカルのRsyslogサーバーに指示します。以下の抜粋に示すように、テンプレートは GLOBAL DIRECTIVES ブロックの開始前に追加する必要があります。

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

上記の RemoteLog ディレクティブは、定義されたプロパティに基づいてメッセージを生成したクライアントマシン名とリモートクライアント機能(アプリケーション)に基づいて、受信したすべてのログメッセージを収集して個別のファイルに書き込むテンプレート設定に%HOSTNAME%%PROGRAMNAME%が表示されます。

これらのログファイルはすべてローカルファイルシステムに、クライアントマシンのホスト名にちなんで/ var/log /ディレクトリに格納された専用ファイルに書き込まれます。

& 〜リダイレクトルールは、受信したログメッセージの処理を中止してメッセージを破棄するようにローカルのRsyslogサーバーに指示します(内部ログファイルには書き込まない)。

RemoteLog の名前は、このテンプレートディレクティブに付けられた任意の名前です。テンプレートに最も適していると思われる任意の名前を使用できます。

メッセージを生成したファシリティをフィルタリングせずに、リモートクライアントのIPアドレスにちなんで名付けられた単一のログファイルにクライアントから受信したすべてのメッセージを書き込むためには、以下の抜粋を使用してください。

$template FromIp,"/var/log/%FROMHOST-IP%.log" 
. ?FromIp & ~ 

認証機能フラグを持つすべてのメッセージが「 TmplAuth 」という名前のテンプレートに記録されるテンプレートのもう1つの例です。

$template TmplAuth, "/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
authpriv.*   ?TmplAuth

以下は、Rsyslog 7サーバーからのテンプレート定義の抜粋です。

template(name="TmplMsg" type="string"
         string="/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
        )

上記のテンプレートの抜粋は、次のようにも書くことができます。

template(name="TmplMsg" type="list") {
    constant(value="/var/log/remote/msg/")
    property(name="hostname")
    constant(value="/")
    property(name="programname" SecurePath="replace")
    constant(value=".log")
    }

複雑なRsyslogテンプレートを作成するには、 man rsyslog.conf コマンドを発行してRsyslog設定ファイルのマニュアルを読むか、またはRsyslogのオンラインドキュメントを参照してください。

6. 上記の説明に従ってRsyslog設定ファイルを独自の設定で編集したら、次のコマンドを発行してRsyslogデーモンを再起動して変更を適用します。

# service rsyslog restart

7. これで、Rsyslogサーバーは集中ログサーバーとして機能し、syslogクライアントからのメッセージを記録するように設定されるはずです。 Rsyslogネットワークソケットを確認するには、root権限でnetstatコマンドを実行し、grepを使用してrsyslog文字列をフィルタリングします。

# netstat -tulpn | grep rsyslog 

8. CentOS/RHEL 7 でSELinuxが有効になっている場合は、次のコマンドを発行してネットワークソケットの種類に応じてrsyslogトラフィックを許可するようにSELinuxを設定します。

# semanage -a -t syslogd_port_t -p udp 514
# semanage -a -t syslogd_port_t -p tcp 514 

9. ファイアウォールが有効でアクティブな場合は、以下のコマンドを実行してFirewalldでrsyslogポートを開くために必要なルールを追加します。

# firewall-cmd --permanent --add-port=514/tcp
# firewall-cmd --permanent --add-port=514/udp
# firewall-cmd –reload

それで全部です!これで、Rsyslogはサーバーモードで構成され、リモートクライアントからのログを一元管理できます。次回の記事では、CentOS/RHEL 7サーバー上でRsyslogクライアントを構成する方法を説明します。

Rsyslogサーバーをリモートログメッセージの中央監視ポイントとして使用すると、システムがクラッシュしたときやある種の攻撃を受けたときに、ログファイルを調べてクライアントの正常性状態を監視したり、クライアントの問題をより簡単にデバッグできます。