GNU/Linux >> Linux の 問題 >  >> Linux

集中ログの Rsyslog 構成を作成する方法

ログはアプリケーションとサーバー インフラストラクチャの重要な部分ですが、ログがいたるところに散らばっていると分析が困難になる可能性があります。集中ログシステムを作成してみませんか? Rsyslog はまさにあなたが探しているものかもしれません!

集中ログ システムにより、複数のサーバー/アプリケーションから中央ログ サーバーにログを収集できます。このチュートリアルでは、Linux サーバーで Rsyslog 構成を使用して集中ログを設定する方法を学習します。

準備をしてすぐに飛び込みましょう!

前提条件

このチュートリアルは実践的なデモンストレーションです。フォローしたい場合は、次のものが揃っていることを確認してください:

  • 2 つ以上の Linux サーバー – このチュートリアルでは、central-rsyslog という名前の 3 つの Debian 11 サーバーを使用します。 、client01client02 .
  • すべてのサーバーで sudo/root 権限を持つユーザー

すべてのサーバーで Rsyslog サービスを確認しています

Rsyslog は、Linux ディストリビューション用の高性能ログ処理であり、Debian ベースおよび RHEL ベースのディストリビューションにデフォルトでインストールされます。

Rsyslog は、Syslog プロトコルの信頼性の高い拡張バージョンであり、最新の機能が追加されています。これらの追加機能は、複数の入力と出力、モジュール式、および豊富なフィルタリング機能です。

この記事の執筆時点で、Rsyslog の最新バージョンは v8.2112.0 です。そのため、システムにインストールされている Rsyslog のバージョンと Rsyslog サービスのステータスを確認します。そうすることで、Rsyslog の最新機能を取得し、Rsyslog が問題なく実行されていることが保証されます。

1. ターミナルを開き、すべてのサーバーにログインして、sudo su を実行します 以下のコマンドで root 権限を取得します。プロンプトが表示されたら、ユーザーのパスワードを入力します。

sudo su

2. 次に、rsyslogd を実行します コマンドを使用して、システムにインストールされている Rsyslog のバージョンを確認します。

一部の構成は Rsyslog v8.xxx でのみ使用できるため、システムに Rsyslog v8.xxx があることを確認してください。

# checking rsyslog version
rsyslogd -v

以下に示すように、Debian 11 システムにはデフォルトの Rsyslog v8.2102.0 が付属しています。

3. 最後に、systemctl を実行します 以下のコマンドを実行して、Rsyslog サービスを確認します。 Rsyslog サービスが active (running) であることを確認してください .

# verify rsyslog service status
sudo systemctl status rsyslog

以下に示すように、Rsyslog サービスはアクティブ (実行中) です。

集中ログ用の Rsyslog の構成

Rsyslog の最新バージョンが実行されたので、central-rsyslog の Rsyslog 構成を使用して集中ログを設定します。 サーバー。

集中ログを設定するには、Rsyslog UDP 入力モジュール imudp を有効にします。 他のサーバーからログ メッセージを受信するための Rsyslog テンプレートを作成します。 imudp 入力モジュールは central-rsyslog の機能を提供します サーバーは、UDP プロトコルを介して Syslog メッセージを受信します。

1. Rsyslog 設定ファイルを編集します(/etc/rsyslog.conf ) 好みのエディタを使用して、下の画像に示す設定を有効にし、変更を保存してエディタを終了します。

このチュートリアル全体で、各構成のコメントを外して有効にし、各行の先頭にある # 記号を削除します。

この構成により、imudp 入力モジュールをデフォルトの UDP ポート 514 で実行できるようになります。

2. 次に、新しい Rsyslog テンプレートを作成します(/etc/rsyslog.d/50-remote-logs.conf ) 任意のエディタを使用して、以下の構成でテンプレートを入力します。変更を保存してエディターを終了します。

以下の Rsyslog テンプレートにより、central-rsyslog が有効になります リモート サーバーからのログを /var/log/remotelogs/ ディレクトリに保存します。

# define template for remote loggin
# remote logs will be stored at /var/log/remotelogs directory
# each host will have specific directory based on the system %HOSTNAME%
# name of the log file is %PROGRAMNAME%.log such as sshd.log, su.log
# both %HOSTNAME% and %PROGRAMNAME% is the Rsyslog message properties
template (
    name="RemoteLogs"
    type="string"
    string="/var/log/remotelogs/%HOSTNAME%/%PROGRAMNAME%.log"
)

# gather all log messages from all facilities
# at all severity levels to the RemoteLogs template
*.* -?RemoteLogs

# stop the process once the file is written
stop

3. 以下のコマンドを実行して、新しいログ ディレクトリを作成します (/var/log/remotelogs/ ) root が所有 adm のユーザー グループ。そうすることで、Ryslog サービスが /var/log/remotelogs にログを書き込むことができます。 ディレクトリ。

# create /var/log/remotelogs/ directory
mkdir -p /var/log/remotelogs/

# change the ownership to root:adm
sudo chown -R root:adm /var/log/remotelogs/

4. rsyslogd を実行します 以下のコマンドで Rsyslog 構成を確認します(/etc/rsyslog.conf および /etc/rsyslog.d/50-remote-logs.conf ).

Rsyslog 構成を編集した後は、必ず Rsyslog 構成を確認して検証し、構成にエラーがないことを確認してください。

# verify /etc/rsyslog.conf
rsyslogd -N1 -f /etc/rsyslog.conf

# verify /etc/rsyslog.d/50-remote-logs.conf
rsyslogd -N1 -f /etc/rsyslog.d/50-remote-logs.conf

エラーがなければ、以下のような出力が得られます。

5. 構成を確認したら、次のコマンドを restart に対して実行します。 rsyslog サービスを提供し、新しい構成を適用します。

Rsyslog サービスは既に imudp 入力モジュールを有効にして実行されており、Syslog プロトコル用にデフォルトの UDP ポート 514 を開いています。 central-rsyslog サーバーは他のホストからログ メッセージを受信する準備ができました。

# restart rsyslog
sudo systemctl restart rsyslog

6. 最後に、ss を実行します 以下のコマンドを実行して、システムで開いているポートを確認します。

# check open ports
ss -plntu

以下では、imudp 入力モジュールが有効になっている Rsyslog サービスが、デフォルトの UDP ポート 514 で実行されていることがわかります。

一元化された Rsyslog サーバーへのログの送信

ここまでで、central-rsyslog で Rsyslog 構成を使用して集中ログ管理を構成しました。 サーバ。しかし、どうやって central-rsyslog を知ることができますか? サーバーはログを受信しますか?集中型の Rsyslog サーバー(central-rsyslog)にログをリモートで送信します ) クライアント マシンで Rsyslog 出力モジュールを有効にして構成します。

このデモでは、クライアント マシン(ホスト名は client01) Rsyslog 出力モジュール omfwd を使用します central-rsyslog にログを送信する サーバー。

omfwd module は、Rsyslog テンプレートを介してメッセージ/ログを処​​理する組み込みモジュールです。その後、モジュールは、Rsyslog アクション オブジェクトを使用して、UDP および TCP 経由でさまざまなターゲットにメッセージを転送します。

1. client01 に移動します central-rsyslog にログを送信するためのマシン サーバー。

2. 新しい Rsyslog 構成を作成します (/etc/rsyslog.d/20-forward-logs.conf ) 好みのエディタを使用して、次の構成を入力します。

この構成は、SendRemote テンプレート を使用してログ メッセージをフォーマットし、ログ メッセージを UDP プロトコル経由でターゲット central-rsyslog に転送します。 サーバー (172.16.1.10)。 IP アドレスを中央の Rsyslog サーバーの IP アドレスに変更してください。

Rsyslog テンプレートは、ログ メッセージの形式を指定する Rsyslog メッセージ プロパティの構成要素です。 Rsyslog テンプレートのドキュメントをチェックして、さまざまなタイプのテンプレートを確認してください。

# process all log messages before sending
# with the SendRemote template
template(
    name="SendRemote"
    type="string"
    string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"
)

# forward log messages using omfwd module
# to the target server 172.16.1.10
# via UDP porotocol on port 514
# log messages is formatted using the SendRemote template
# setup queue for remote log
action(
    type="omfwd"
    Target="172.16.1.10"
    Port="514"
    Protocol="udp"
    template="SendRemote"

    queue.SpoolDirectory="/var/spool/rsyslog"
    queue.FileName="remote"
    queue.MaxDiskSpace="1g"
    queue.SaveOnShutdown="on"
    queue.Type="LinkedList"
    ResendLastMSGOnReconnect="on"
)

# stop process after the file is written
stop

3. 次に、以下の rsyslogd を実行します コマンドを実行して Rsyslog 構成を確認し、エラーがないことを確認します。

# verify rsyslog configuration
rsyslogd -N1 -f /etc/rsyslog.d/20-remote-logs.conf

4. systemctl を実行します 以下のコマンドを実行して Rsyslog サービスを再起動し、新しい構成を適用します。

# restart rsyslog on client01 machine
sudo systemctl restart rsyslog

5. 次に、central-rsyslog に戻ります。 client01 からのログを検証するためのサーバー 機械。

次のコマンドを実行して /var/log/remotelogs ディレクトリに移動し、そのディレクトリ内のファイルとディレクトリを一覧表示して、client01 を確認します。 ディレクトリが存在します。

# navigate to /var/log/remotelogs directory
cd /var/log/remotelogs/
# checking available directories
ls -lah

以下では、client01 ディレクトリが /var/log/remotelogs に存在することがわかります。 ディレクトリ。

6. 以下の各コマンドを実行して client01 に切り替えます ディレクトリとリスト (ls -lah ) ディレクトリ内のログ ファイル。

# navigate to client01 directory
cd client01/
# checking files inside client01 directory
ls -lah

一元化されたログ システムにより、管理者は 1 台のマシンで数百のサーバーからのログ データを分析できます。

表示して分析するログを 1 つ選択してください。

7. 最後に、cat を実行します 以下のコマンドを実行して、ターゲット ログの内容を確認します。 logfile を置き換えます ログ ファイルの名前を使用しますが、このデモは sshd.log の内容を返します ファイル。

cat logfile

以下に、client01 からのログを示します。 sshd.log に保存されたマシン Rsyslog サーバーのファイル (central-rsyslog ).

ここまでは、集中ログ システムがログ ファイルの安全性を高めていることを説明してきました。これは、アプリケーションやサーバーが終了しても、中央サーバーにログ ファイルが残っているためです。

特定のプログラムのログを Rsyslog サーバーに送信する

client01 からすべてのアプリケーション ログを送信しました 中央 Rsyslog サーバー (central-rsyslog )。しかし、ssh などの特定のアプリケーション ログのみが必要な場合はどうでしょうか。 または su ? Rsyslog アクション オブジェクトに Rsyslog rainerscript 制御構造を実装します。

このデモでは client02 を使用しています Rsyslog サーバーのみに sshd ログを送信するためのマシン(central-rsyslog ).

1. client02 に移動します central-rsyslog にログを送信するためのマシン サーバー。

2. 新しい Rsyslog 構成を作成します(/etc/rsyslog.d/50-sshd.conf ) 好みのエディタを使用して、次の構成を入力します。

以下のこの構成は、sshd という名前のアプリケーション(プログラム名)のログのみを Rsyslog サーバー(172.16.1.10)に転送します。ログ メッセージも SendRemote テンプレートによってフォーマットされます。

# create new Rsyslog tempate for formatted logs
template(
    name="SendRemote"
    type="string"
    string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"
)

# implementation of if conditional on rsyslog
# to send specific logs for programname sshd
# stop the process after sending logs
if $programname == "sshd" then {
        action(type="omfwd" target="172.16.1.10" port="514" protocol="udp" template="SendRemote")
        stop
}

3. 次に、rsyslogd を実行します 以下のコマンドを実行して Rsyslog 構成を確認し、エラーがないことを確認します。

# verify rsyslog configuration
rsyslogd -N1 -f /etc/rsyslog.d/50-sshd.conf

4. 以下のコマンドを実行して Rsyslog サービスを再起動し、新しい構成を適用して、client02 からログアウトします。 新しい sshd を生成するサーバー ログ。

この時点で、central-rsyslog サーバーは、すべてのシステム ログではなく、sshd ログのみを受信して​​います。

# restart rsyslog service
sudo systemctl restart rsyslog

5. 次に、central-rsyslog に戻ります。 client02 からのログを検証するためのサーバー 機械。

以下のコマンドを実行して (ls -lah)、/var/log/remotelogs/ ディレクトリにある利用可能なログ ファイルを一覧表示します。

# navigate to /var/log/remotelogs/
cd /var/log/remotelogs/
# verify log directory for client02
ls -lah

以下に示すように、client02 からのログ メッセージを保存する client02 という名前の新しいディレクトリがあります。

6. 以下のコマンドを実行して、client02 に移動します。 ディレクトリに移動し、そのディレクトリで利用可能なログ ファイルを確認します。

cd client02/
ls -lah

プログラム名 sshd のログ ファイル sshd.log が表示されます。また、cat コマンドを実行して、ログ ファイル sshd.log の内容を表示します。

以下では、/etc/rsyslog.d/50-sshd.conf 構成を使用したため、使用可能なログ ファイルは sshd.log ファイルのみです。

7. 最後に、cat を実行します。 sshd.log を表示および分析するには、以下のコマンドを使用します。 ファイル。

cat sshd.log

syslog メッセージに変換されたログを Rsyslog サーバーに送信する

ここまでで、ログを Rsyslog サーバーに送信する方法を見てきました。これで十分です。しかし、読みやすく分析しやすいように、ログを Syslog メッセージ形式にした方がよい場合もあります。その場合、Rsys imfile を使用して 入力モジュールがトリックを行います。

imfile 入力モジュールを使用すると、テキスト メッセージ/ログを Syslog メッセージ形式に変換できます。このデモでは、client01 から Apache2 ウェブサーバーのログを送信します。 Rsyslog サーバー(central-rsyslog ).

Rsyslog 入力モジュールを組み合わせる(imfile ) 出力モジュール(omfwd) )を使用すると、Syslog メッセージに変換されたログを Rsyslog サーバーに送信できます (central-rsyslog ).

1. client01 に戻ります マシン、新しい Rsyslog 構成を作成します /etc/rsyslog.d/50-apache2.conf 、次の構成を入力します。ログのテンプレート名、ルールセット名、および入力ファイルを必ず変更してください。

以下のテンプレートは、imfile モジュールを使用して Apache ログを Syslog メッセージ形式に変換し、それらのログを Rsyslog サーバー (172.16.1.10) に送信します。

# deifne global workDirectory for saving the state file of log messages.
global(workDirectory="/var/spool/rsyslog")

# enable the Rsyslog imfile module processing text files or logs.
module(load="imfile" PollingInterval="10")

# define template for apache2 for processing log messages.
# that will be forwarded to rsyslog server
template(
    name="TestLog"
    type="string"
    string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"
    )

# define ruleset "ApacheLogs" with action object to send logs to rsyslog server
# define the queue
ruleset(name="ApacheLogs") {
    action(
        type="omfwd"
        target="172.16.1.10"
        port="514"
        protocol="udp"
        template="TestLog"

        queue.SpoolDirectory="/var/spool/rsyslog"
        queue.FileName="remote"
        queue.MaxDiskSpace="1g"
        queue.SaveOnShutdown="on"
        queue.Type="LinkedList"
        ResendLastMSGOnReconnect="on"
        )
        stop
}

# define input files Apache2 logs to send to the Rsyslog server
# and apply ruleset "ApacheLogs"
input(type="imfile" ruleset="ApacheLogs" Tag="apache2" File="/var/log/apache2/*.log")

2. 次に、rsyslogd を実行します 以下のコマンドで /etc/rsyslog.d/50-apache2.conf を確認します 構成。

# verify rsyslog configuration
rsyslogd -N1 -f /etc/rsyslog.d/50-apache2.conf

3. systemctl を実行します 以下のコマンドを restartrsyslog サービスを提供し、新しい構成を適用します。この時点で、client01 上のすべての Apache2 ログ マシンは Rsyslog サーバーに転送されます (central-rsyslog )。

# restart rsyslog service
sudo systemctl restart rsyslog

4. curl を実行します 以下のコマンドを実行して Apache2 ログを生成します。このコマンドは、ファイル /var/log/apache2/access.log に新しい Apache2 ログ メッセージを生成します。 .

# generate a new log for Apache
# by accessing via curl command
curl localhost
curl localhost/testnotfound

5. Rsyslog サーバーに戻ります (central-rsyslog )、以下のコマンドを実行して /var/log/remotelogs/client01 に移動します ディレクトリ リストの利用可能なログ ファイル。

# navigate to the directory /var/log/remotelogs/client01/
cd /var/log/remotelogs/client01/
# check available log files
ls -a

Rsyslog サーバー (central-rsyslog ) client01 から apache.log ファイルを受け取りました

6. 最後に、cat を実行します ログファイルの内容を表示するコマンド apache2.log .

# showing the content of apache2.log file
cat apache2.log

/etc/rsyslog.d/50-apache2.conf 動作すると、ログ ファイルの内容が以下のような Syslog メッセージ形式で表示されます。

結論

このチュートリアルでは、Rsyslog 構成を使用して集中ログをセットアップする方法を学習しました。また、さまざまなタイプの Rsyslog 入出力プラグインを使用して、サーバー ログを集中型 Rsyslog サーバーにリモートで送信しました。これで、Rsyslog サーバー以外の場所でログを探し回る必要がなくなりました。

他にどのように Rsyslog を使用する予定ですか?おそらく、他の Rsyslog 入出力モジュールの調査を開始しますか?または、Rsyslog を Fluentd や Logstash などの別のログ システムに統合しますか?


Linux
  1. MySQL/MariaDBクエリログを有効にする方法

  2. rsyslogを使用してLinuxログ集約サーバーを作成する方法

  3. Gitタグを作成する方法

  1. 一元化されたログ管理のためにrsyslogをセットアップする方法

  2. サブドメインを作成する方法

  3. Linux (Central Log Server) で Rsyslog リモート ロギングをセットアップする方法

  1. Debian9にRsyslogを使用して集中ログサーバーをインストールする

  2. Rsyslogを使用して集中ログサーバーをセットアップする方法

  3. rsyslogを使用してリモートログサーバーを構成するにはどうすればよいですか?