RTX1210のログをlogrotateで管理する

目次
きっかけ
前に書いた記事ですが、数日前に再発しました。
今回はzabbixでの通知のおかげで発生直後に障害を自分が認識し、電源のオフオンで復旧しました。
最終的には復旧まで自動でやりたいんだよなぁ・・・
何かエラーが発生した時に、その原因を究明する時に役立つのが各種ログですが安いルーターだと大したログ出さなかったり短時間のログしか出さなかったりなど。今までのwebやメール鯖の各種エラーや、ネットワーク構築の時の通信エラーもログを見て原因を探って解決してきました。今回ログを確認するのは我が家の基幹ルーターであるRTX1210
実現したいこと
RTX1210のログをlogrotateで管理するため・・・・
①ログを自宅内の鯖に送信
②鯖にて1日1つのログファイルを生成
③容量削減のために1日前のファイルは圧縮
④10日間分の記録を保持
⑤メインで使っているWin10PCからもログが確認できるようにする
準備
イントラネットネット内にある鯖はUbuntu 22.04.1 LTSで構築していますが、まずログの保管場所を決めます。
通常のログは基本的に/var/log/内に保管されています。我が家では宅内鯖のラズパイにSSDを接続していて、NASとしても利用しているのでこちらに保存することとしました。
SSDなどの外部デバイスは/mnt/配下としていて、我が家の場合は/mnt/File_Server/NAS/syslog_RTX1210としてここにRTX1210のログファイルを保存することとしました。同じように構築される場合は適宜パスは変更してくださいな。
サーバー側の用意
まずはRTX1210から送られてくるログを鯖側で受け付ける準備として/etc/rsyslog.confの最後尾を編集
#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
これによって、/etc/rsyslog.d/内にある.confファイルが有効化されるためRTX1210の設定を作成します。
今回はrtx1210.confとして以下のように設定
cd /etc/rsyslog.d
sudo nano rtx1210.conf
local0.* /mnt/File_Server/NAS/syslog_RTX1210/rtx1210.log
Ctrl + Oでファイル名rtx1210.confとして保存
ルーター側の設定
RTX1210のconfigに以下を追記します
syslog host 192.168.2.210
syslog facility local0
syslog notice on
192.168.2.210は自宅鯖に設定しているIPアドレスとなります。
2行目のlocal0ですが、local1でもlocal2でも問題ありません。local0以外を指定する場合はrsyslog.d内のrtx1210.confのlocal〇を編集する必要があります。
サーバー側の設定
ここからログローテーションの設定を進めていきます。
まずは元となる空のログファイルを作成
cd /mnt/File_Server/NAS/syslog_RTX1210
sudo nano rtx1210.log
Ctrl + Oでファイル名rtx1210.logとして保存
ログローテーションの核となる設定は以下のように設定
sudo nano /etc/logrotate.d/rtx1210log
以下のように記述します
/mnt/File_Server/NAS/syslog_RTX1210/rtx1210.log {
daily
rotate 10
ifempty
dateext
create 755 root adm
sharedscripts
postrotate
kill -HUP `cat /var/run/rsyslogd.pid`
/bin/mv /mnt/File_Server/NAS/syslog_RTX1210/rtx1210.log-`date '+%Y%m%d'` /mnt/File_Server/NAS/syslog_RTX1210/rtx1210.log-`date '+%Y%m%d' -d '1days ago'`
/bin/gzip /mnt/File_Server/NAS/syslog_RTX1210/rtx1210.log-`date '+%Y%m%d' -d '1days ago'`
endscript
}
Ctrl + Oでファイル名rtx1210logとして保存します。
記述しているスクリプトの1つkill -HUP cat /var/run/rsyslogd.pid
ですが、ubuntuのデフォルトではrsyslogd.pid
が存在しません。このためrsyslogの設定を変更します。
sudo nano /lib/systemd/system/rsyslog.service
デフォルトの状態から1つの文字列を削除します
[Service]
Type=notify
ExecStart=/usr/sbin/rsyslogd -n -iNONE ※ここの-iNONEを削除する
StandardOutput=null
Restart=on-failure
StartLimitBurst=0
# Increase the default a bit in order to allow many simultaneous
# files to be monitored, we might need a lot of fds.
LimitNOFILE=16384
Ctrl + Oで上書き保存。
これで設定は完了ですが、最後にsyslogのシステムを再起動します。
sudo systemctl restart rsyslog
動作確認
以下のコマンドでドライランさせます。
sudo logrotate -d /etc/logrotate.d/rtx1210log
出力結果↓
WARNING: logrotate in debug mode does nothing except printing debug messages! Consider using verbose mode (-v) instead if this is not what you want.
reading config file /etc/logrotate.d/rtx1210log
Reading state from file: /var/lib/logrotate/status
Allocating hash table for state file, size 64 entries
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Handling 1 logs
rotating pattern: /mnt/File_Server/NAS/syslog_RTX1210/rtx1210.log after 1 days (10 rotations)
empty log files are rotated, old logs are removed
considering log /mnt/File_Server/NAS/syslog_RTX1210/rtx1210.log
Now: 2022-10-11 20:08
Last rotated at 2022-10-11 00:00
log does not need rotating (log has been rotated at 2022-10-11 00:00, which is less than a day ago)
not running postrotate script, since no logs were rotated
log does not need rotatingとなっていますが、-fを付けることで強制的にログローテートを実施可能
sudo /usr/sbin/logrotate -f /etc/logrotate.d/rtx1210log
数日経ったら以下のコマンドでリストを確認
ls -laht /mnt/File_Server/NAS/syslog_RTX1210
無事にローテトされて、過去の分は圧縮されています。
-rwxr-xr-x 1 root adm 13M Oct 10 19:42 rtx1210.log
-rwxr-xr-x 1 root adm 1.6M Oct 10 00:00 rtx1210.log-20221009.gz
-rwxr-xr-x 1 root adm 1.2M Oct 9 00:00 rtx1210.log-20221008.gz
-rwxr-xr-x 1 root adm 304K Oct 8 00:00 rtx1210.log-20221007.gz
やったね!!!!!

自分のデスクトップPCからsyslog_RTX1210のフォルダにアクセスしても確認できので、じっくりとログの解析が可能です。
参考になったサイト
基本設定のままだとログファイルの日付が1日ズレるのでこれの改善のために参考になったサイト↓
https://qiita.com/piggydev/items/b7adb2a68289285f06b6
rsyslogd.pid
を出現させる方法↓
https://askubuntu.com/questions/1231395/rsyslog-stopped-creating-pid-file-after-upgrade-from-18-04-to-20-04