ウェブサイト検索

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


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

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

CentOS/RHEL 7 システムでは、Rsyslog デーモンがプリインストールされているメインのログ サーバーで、次に Systemd Journal デーモン (journald ) が続きます。)。

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

rsyslog がクライアントとして構成されている場合、ログは、ローカル ファイル システム上のファイルにローカルに保存したり、マシンに保存されたファイルに書き込んだり、イベント ログ ファイルをローカルに書き込んでリモート syslog サーバーに送信したりするのではなく、リモートに送信することができます。同じ時間です。

Syslog サーバーは、次のスキームを使用してログ メッセージを操作します。

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

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

  • 認証=認証プロセス (ログイン) によって生成されるメッセージ。
  • cron= スケジュールされたプロセス (crontab) によって生成されるメッセージ。
  • デーモン=デーモン (内部サービス) によって生成されるメッセージ。
  • カーネル=Linux カーネル自体によって生成されるメッセージ。
  • メール=メール サーバーによって生成されたメッセージ。
  • syslog=rsyslog デーモン自体によって生成されるメッセージ。
  • lpr=ローカル プリンタまたはプリント サーバーによって生成されたメッセージ。
  • local0 – local7=管理者によって定義されたカスタム メッセージ (local7 は通常、Cisco または Windows に割り当てられます)。

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

  • 緊急=緊急 – 0
  • アラート=アラート – 1
  • エラー=エラー – 3
  • 警告=警告 – 4
  • 通知=通知 – 5
  • 情報=情報 – 6
  • デバッグ=デバッグ – 7

特別な Rsyslog キーワード:

  • *=すべての施設または優先事項
  • なし=施設には優先順位がありません。例: mail.none

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

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

要件

  1. CentOS 7.3のインストール手順
  2. RHEL 7.3 のインストール手順

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

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

$ModLoad imudp 
$UDPServerRun 514

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

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

$ModLoad imtcp 
$InputTCPServerRun 514 

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

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

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

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

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

RemoteLogs 名は、このテンプレート ディレクティブに与えられる任意の名前です。テンプレートに最適な名前を任意に使用できます。

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

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

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

$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 サーバーをリモート ログ メッセージの中央監視ポイントとして使用すると、ログ ファイルを検査してクライアントの健全性ステータスを観察したり、システムがクラッシュしたり何らかの攻撃を受けたときにクライアントの問題をより簡単にデバッグしたりできます。