LoginSignup
2
2

More than 1 year has passed since last update.

IP毎にログ保管し指定期間を超えたらログ削除するsyslogサーバを作る

Last updated at Posted at 2022-03-18

はじめに

CentOS7上に、rsyslogを使ってsyslogサーバを構築した際の設定メモです。

実現したいこと

  1. サーバや無線アクセスポイントなど機器ごとにIP名でディレクトリを自動的に作ってログを保管。
  2. ログは各ディレクトリに1日1ファイルで残す。
  3. 一定期間が経過したログファイルを自動削除。

設定

rsyslogが入ってなければ、事前にyumでインストールする。

ログ受信に必要なポートを開ける

firewall-cmdでログ受信に必要なポートを開ける。

$ sudo firewall-cmd --add-port=514/udp --permanent
$ sudo firewall-cmd --add-port=514/tcp --permanent
$ sudo firewall-cmd --reload

rsyslog設定ファイルの変更

rsyslogの設定ファイルを変えて、実現したいことの1と2ができるようにする。

$ vi /etc/rsyslog.conf

次を変更する。

14-20行目あたりを次のようにコメントアウトして、syslogを受信できるようにする。

/etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

51行目以降に次を記載して、IP単位でディレクトリを作り、日付単位でログファイルを作成する。(/var/log/rsyslogのディレクトリにログを保管するとする場合)
さらに、指定のグループ(仮にhogeとする)にもログやディレクトリに権限を与える(何もしないと作成ファイルはrootのみしか権限付与されない)。

/etc/rsyslog.conf
$umask 0000
$DirCreateMode 0770
$DirGroup hoge
$FileCreateMode 0660
$FileGroup hoge
$template hostFile,"/var/log/rsyslog/%fromhost-ip%/%$year%-%$month%-%$day%.log"

一定期間後の自動ログ削除対応

実現したいことの3については、簡単なスクリプトを作りcronに登録することで対応する。

ログ保管フォルダに存在するファイルで、最終更新が100日以上のものをfindで見つけ、それを削除するスクリプトを次のように書く。

rm-rsyslogfile.sh
#!/bin/bash
find /var/log/rsyslog/ -mtime +100 | xargs --no-run-if-empty rm

なお、xargsの--no-run-if-emptyをつけないと、対象ファイルが無い時に"rm: missing operand"のエラーが出るので、つけた方が良い。

chmodで実行可能にし、cronに登録する。(hogeユーザのホームに上記のスクリプトがあるとする。)

$ crontab -e

00 00 * * * /home/hoge/rm-rsyslogfile.sh

確認方法

別PCからログの送信(logger)をしたり、あえて古い更新時間のファイルを作ったり(touch --date)などして、動作確認する。参考文献の後ろ2つ参照。

環境

  • CentOS Linux release 7.9.2009
  • rsyslog 8.24.057.le7_9.1

参考文献

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2