はじめに
CentOS7上に、rsyslogを使ってsyslogサーバを構築した際の設定メモです。
実現したいこと
- サーバや無線アクセスポイントなど機器ごとにIP名でディレクトリを自動的に作ってログを保管。
- ログは各ディレクトリに1日1ファイルで残す。
- 一定期間が経過したログファイルを自動削除。
設定
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を受信できるようにする。
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
51行目以降に次を記載して、IP単位でディレクトリを作り、日付単位でログファイルを作成する。(/var/log/rsyslogのディレクトリにログを保管するとする場合)
さらに、指定のグループ(仮にhogeとする)にもログやディレクトリに権限を与える(何もしないと作成ファイルはrootのみしか権限付与されない)。
$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で見つけ、それを削除するスクリプトを次のように書く。
#!/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
参考文献
- rsyslog.readthedocs.io
- ネットワーク・ログ監視の技術情報 – ナレッジステア:rsyslogをホスト名、IPアドレスごとにフォルダー分けする方法
- Linuxねた帳:rsyslog DirCreateMode・FileCreateModeが意図したとりに動作しない
- 技術メモメモ:自宅PCにESXiを入れて検証を行うインフラエンジニアの技術メモ。
- [Linux] 最終更新日や最終アクセス日を指定して、ファイルを検索/削除する
- @m_doi xargsで標準入力が空だったら何もしない
- rsyslogでリモートからのログ出力を受け付ける設定とloggerコマンドでの確認
- 【 touch 】コマンド――タイムスタンプを変更する/新規ファイルを作成する