大半のLinuxディストリビューションに導入されているrsyslogはリモートサーバーへログを送信したり、受信したりする機能がある。この機能を活用すると、1台のサーバーにてログの集約管理が実現できる。
本記事では、rsyslogでリモートサーバーのログを集約管理する手順を記載する。
環境
今回の環境の構成概要図を以下に記載する。赤枠個所が本記事の設定個所となる。
設定手順はAlmaLinux 9にて確認しているが、他のディストリビューションのrsyslogでも、同じ設定で対応が可能と思われる。
受信側設定
1. ログ保管用ディレクトリの作成
リモートサーバーのログを保管するディレクトリとして、/remotelog
を作成する。また、ローテーションしたファイルを保管するディレクトリとして、配下に_old
ディレクトリを作成する。
# mkdir /remotelog
# mkdir /remotelog/_old
2. rsyslogの設定
/etc/rsyslog.conf
の以下個所をアンコメントし、TCP及びUDPにてsyslog受信をできるよう設定する。
/etc/rsyslog.conf
module(load="imudp") # needs to be done just once
input(type="imudp" port="514")
module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")
次に、受信したsyslogに記載されているホスト名の情報をもとに、個別のファイルを作成する設定をrsyslogに対して行う。
template
にて動的にファイル名を設定するルールを作成し、それをaction
のDynaFile
(動的ファイル名)にて指定することで、リモートサーバーからsyslogを受信すると、自動的に/remotelog/[ホスト名].log
というファイルを作成しログが保存される。
なお、ログ集約サーバー自身のログは、通常通り/var/log
配下に出力させるため、if文で127.0.0.1
のIPアドレスを除外するように設定した。
/etc/rsyslog.d/41-recieve-log.conf
# Template
template(name="TmplRemoteLogFile" type="string"
string="/remotelog/%HOSTNAME%.log"
)
# Other remote servers
if $fromhost-ip != '127.0.0.1' then {
action(type="omfile" DynaFile="TmplRemoteLogFile")
stop
}
3. 設定反映
rsyslogの設定内容に問題がないことを以下コマンドで確認する。-N
オプションはコンフィグチェックのオプションとなる。
# rsyslogd -N 1
rsyslogd: version 8.2310.0-4.el9, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: End of config validation run. Bye.
問題なければrsyslogのサービス再起動を行い、設定を反映させる。
# systemctl restart rsyslog
設定反映後、TCP/514、UDP/514のポートでLISTENされていることを確認しておこう。
# ss -nl | grep 514
udp UNCONN 0 0 0.0.0.0:514 0.0.0.0:*
udp UNCONN 0 0 [::]:514 [::]:*
tcp LISTEN 0 25 0.0.0.0:514 0.0.0.0:*
tcp LISTEN 0 25 [::]:514 [::]:*
4. logrotateの設定
ファイルを日次でログローテートするよう、以下の通りlogrotateの設定を行う。olddir
にてローテーション先のディレクトリを同一ディレクトリから変更している。
/etc/logrotate.d/remotelog
/remotelog/*.log
{
daily
rotate 7
dateext
compress
delaycompress
create 644 root root
missingok
olddir=/remotelog/_old
sharedscripts
postrotate
/usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true
endscript
}
送信側設定
1. rsyslogの設定
先ほど設定したrsyslogサーバーにログを送信するため、以下ファイルを作成する。TCP送信とUDP送信で、微妙に記載方法が異なる。syslogというとUDPによる送信というイメージが強いが、ログの欠落が発生しづらい点からTCPによる送信が個人的にはお勧めの設定となる。
/etc/rsyslog.d/40-send-log.conf
TCPで送信する場合
*.* @@[rsyslogサーバーのIPアドレス]:514
UDPで送信する場合。
*.* @[rsyslogサーバーのIPアドレス]:514
2. 設定反映
rsyslogの設定内容に問題がないことを以下コマンドで確認する。-N
オプションはコンフィグチェックのオプションとなる。
# rsyslogd -N 1
rsyslogd: version 8.2310.0-4.el9, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: End of config validation run. Bye.
問題なければrsyslogのサービス再起動を行い、設定を反映させる。
# systemctl restart rsyslog
動作確認
送信元サーバーにてlogger
コマンドを実行し、想定通りログが送信させることを確認する。
# logger "test syslog message"
rsyslogサーバーにてログが表示されれば成功となる。
# tail /remotelog/test-server.log
Aug 31 07:29:06 test-server root[605149]: test syslog message
以上で、rsyslogでリモートサーバーのログを集約管理する手順は完了となる。
0 件のコメント:
コメントを投稿