ログファイルは、エラーの調査とトラブルシューティングに不可欠です。これらは、システム管理者がエラーの考えられる原因を絞り込むために精査する最初のファイルであり、そうすることで、問題を解決するための解決策を考え出します。数十または数百のサーバーやその他のデバイスを備えたインフラストラクチャでは、ログファイルの管理が困難になる可能性があります。そして、これがrsyslogの出番です。
Rsyslogは、IPネットワーク内の集中ログサーバーへのログファイルの転送を容易にするオープンソースのログプログラムです。一元化されたログにより、管理者は複数のシステムのログファイルを一元的に簡単に監視できます。この投稿では、Debian11でのRsyslogサーバーのインストールと構成について説明します。
ラボのセットアップ
Rsyslogを使用してクライアントシステムからRsyslogサーバーにログファイルを送信する方法を示すために、次のような簡単なラボセットアップを行います
。- Rsyslogサーバー:Debian 11 IP:192.168.1.151
- Rsyslogクライアント:Ubuntu 20.04 IP:10.20.0.170
ステップ1)サーバーでRsyslogを構成する
前述のように、Rsyslogはクライアントサーバーモデルで動作し、Debian11サーバーでRsyslogを構成することから始めます。 Debian 11では、Rsyslogがデフォルトでインストールされています。何らかの理由でRsyslogが存在しない場合は、次のコマンドを使用してインストールできます。
$ sudo apt install -y rsyslog
インストール時に、次のように実行ステータスを確認できます。
$ sudo systemctl status rsyslog
次に、サーバーモードで実行するようにrsyslogを構成します。構成ファイルは/etc/rsyslog.confファイルです。そのため、お好みのテキストエディタを使用して編集してください。
$ sudo vi /etc/rsyslog.conf
リモートクライアントからのUDPおよびTCPsyslog受信を可能にする次の行に進み、コメントを解除します。
# provides UDP syslog reception module(load="imudp") input(type="imudp" port="514") # provides TCP syslog reception module(load="imtcp") input(type="imtcp" port="514")
その後、次の行を貼り付けて、Rsyslogデーモンがクライアントシステムからの受信ログを保存するために使用するテンプレートを定義します。
$template remote-incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?remote-incoming-logs
ログファイルは次の命名規則を使用します:
- /%HOSTNAME%/ –これはクライアントシステムのホスト名です。
- /%PROGRAMNAME%/ –これはログファイルを作成したクライアントプログラムを識別します。
変更を適用するには、rsyslogデーモンを再起動します。
$ sudo systemctl restart rsyslog
デフォルトでは、rsyslogはポート514をリッスンします。これがssコマンドを実行することにより、rsyslogデーモンがリッスンしているポートであることを確認できます。
$ sudo ss -tunlp | grep 514
ステップ2)rsyslogのファイアウォールルールを構成する
Rsyslogデーモンがサーバー上で期待どおりに実行されています。 UFWファイアウォールを実行している場合は、着信ログメッセージを許可するために、必ずポート514を許可してください。
$ sudo ufw allow 514/tcp $ sudo ufw allow 514/udp
次に、ファイアウォールをリロードして、次のようにファイアウォールルールを適用します。
$ sudo ufw reload
次のステップは、ログファイルをrsyslogサーバーに送信するようにクライアントUbuntuシステムを構成することです。
ステップ3)rsyslogクライアントシステムを構成します
最後のステップは、ログファイルをrsyslogサーバーに送信するようにクライアントシステムを構成することです。クライアントにログインし、もう一度、rsyslogデーモンがインストールされて実行されていることを確認します。
次に、rsyslog構成ファイルを編集します。
$ sudo vi /etc/rsyslog.conf
ファイルの最後に移動して、これらの行を追加します。
#Enable sending system logs over UDP to rsyslog server *.* @rsyslog-ip-address:514 #Enable sending system logs over TCP to rsyslog server *.* @@rsyslog-ip-address:514
これらの行は、UDPプロトコルとTCPプロトコルの両方を介してログファイルをrsyslogサーバーに送信するようにクライアントに指示します。最初の行にはUDPを示す単一の@記号があり、2番目の行にはTCPプロトコルを示す2つの@@記号があることに注意してください。
リモートサーバーでダウンタイムが発生し、ログを保持したい場合は、表示されている行を追加してディスクキューバッファを設定できます。
## rsyslogサーバーがダウンするときにディスクキューを設定します:
$ActionQueueFileName queue $ActionQueueMaxDiskSpace 1g $ActionQueueSaveOnShutdown on $ActionQueueType LinkedList $ActionResumeRetryCount -1
以下は、クライアント構成に対するすべての変更の要約です。
ファイルを保存して終了します。次に、rsyslogサービスを再起動して、変更を有効にします。
$ sudo systemctl restart rsyslog
この時点で、クライアントシステムはログファイルをrsyslogサーバーに送信しているはずです。サーバーに戻って調べてみましょう。
ステップ4)クライアントのログファイルを表示する
すべてのログファイル(サーバーを含む)は/ var /log/ディレクトリに保存されます。クライアントのログを表示するには、次のコマンドを実行します。
$ ls /var/log/
クライアントのログファイルは、以下に示すように、クライアントシステムのホスト名に対応するディレクトリに保存されます。
メインログディレクトリに含まれるログファイルをさらに表示できます。
$ sudo ls -l /var/log/ubuntu-20-04/
ログをリアルタイムで表示するには、図のようにtailコマンドを使用します。ここでは、sudoユーザーのログを表示しています。
$ sudo tail -f /var/log/ubuntu-20-04/sudo.log
rsyslogが正常にインストールされ、クライアントシステムからrsyslogサーバーにログファイルを送信できるように構成されました。一元化されたログ管理構造を実現するために、rsyslogサーバーにログを送信するのに必要な数のクライアントシステムを構成できるようになりました。
これですべてです。参考になると思います。以下のコメントセクションで質問やフィードバックを共有してください。
また読む :Logrotateを使用してLinuxでログファイルを回転および圧縮する方法