ログ圧縮

やりたいこと~logrotateによるログ圧縮~

logrotateの機能を使ってログを圧縮しようと思います。

ログを圧縮するために現場ではスクリプトを使っていました。
〇〇.yyyymmddやら〇〇-yyyymmddという名前を検索し、前日の日付のもの(例えば今日が6/17であれば20200616と付いているファイル)を圧縮する、というものでした。※それをcronで毎日一回動かす

実力をつけるため、自分で考えて問題を解決しようと思います。
同じようなスクリプトを自分で作ってみるか、と思ったのですがググっていたらどうやらlogrotateで圧縮できるようです。

作業記録

予想外に簡単でした。

vi /etc/logrotate.conf
-----
:
# uncomment this if you want your log fils compressed
compress
:
-----

# compressをコメントインするだけ。
そうするとインクルードされている/etc/logrotate.d/以下のyum、syslogで定義されている/var/log/yum.logやら/var/log/maillogやらも圧縮されます。
/etc/logrotate.d/以下のコンフィグで設定を上書きしない限り、共通コンフィグである/etc/logrotate.confの設定が適用されます。

そうするとインクルードされている/etc/logrotate.d/以下のyum、syslogで定義されている/var/log/yum.logやら/var/log/maillogやらも圧縮されます。
/etc/logrotate.d/以下のコンフィグで設定を上書きしない限り、共通コンフィグである/etc/logrotate.confの設定が適用されます。

どうでもよいサーバ上で手動logrotateを試しました

logrotate -f /etc/logrotate.conf

ls -al /var/log/
-----
total 556
drwxr-xr-x 7 root root 4096 Jun 17 00:15 .
drwxr-xr-x 19 root root 269 Jun 9 22:02 ..
drwxr-xr-x 3 root root 17 Jun 9 22:02 amazon
drwx------ 2 root root 23 Jun 9 22:02 audit
-rw------- 1 root root 0 Jun 17 00:14 boot.log
-rw------- 1 root root 4602 Jun 17 00:12 boot.log-20200617.gz
-rw------- 1 root utmp 0 Jun 17 00:15 btmp
-rw------- 1 root utmp 99 Jun 16 02:34 btmp-20200617.gz
drwxr-xr-x 2 chrony chrony 6 Feb 21 2019 chrony
-rw-r--r-- 1 root root 273559 Jun 17 00:12 cloud-init.log
-rw-r--r-- 1 root root 11249 Jun 17 00:12 cloud-init-output.log
-rw------- 1 root root 0 Jun 17 00:15 cron
-rw------- 1 root root 1654 Jun 17 00:12 cron-20200617.gz
-rw-r--r-- 1 root root 24535 Jun 17 00:12 dmesg
-rw-r--r-- 1 root root 24509 Jun 16 02:33 dmesg.old
-rw-r--r-- 1 root root 193 May 27 00:46 grubby_prune_debug
drwxr-sr-x+ 3 root systemd-journal 46 Jun 9 22:02 journal
-rw-r--r-- 1 root root 292292 Jun 17 00:13 lastlog
-rw------- 1 root root 0 Jun 17 00:15 maillog
-rw------- 1 root root 263 Jun 17 00:12 maillog-20200617.gz
-rw------- 1 root root 165 Jun 17 00:15 messages
-rw------- 1 root root 50597 Jun 17 00:14 messages-20200617.gz
drwxr-xr-x 2 root root 42 Jun 17 00:12 sa
-rw------- 1 root root 0 Jun 17 00:15 secure
-rw------- 1 root root 747 Jun 17 00:13 secure-20200617.gz
-rw------- 1 root root 0 Jun 17 00:15 spooler
-rw------- 1 root root 20 May 27 00:47 spooler-20200617.gz
-rw------- 1 root root 0 May 27 00:46 tallylog
-rw-rw-r-- 1 root utmp 0 Jun 17 00:15 wtmp
-rw-rw-r-- 1 root utmp 576 Jun 17 00:13 wtmp-20200617.gz
-rw------- 1 root root 0 Jun 17 00:15 yum.log
-rw------- 1 root root 123 Jun 16 02:35 yum.log-20200617.gz
-----

お恥ずかしながらログローテートの仕組みがよく分かっていない為、logrotate -f /etc/logrotate.confを実行すると次回ローテートはいつになるのかやら、ログが消えたりしないかなどの影響範囲が分かっていません。
なので本番サーバでこのコマンドを実施してよいのか分からないのでテストサーバ上でやっています。
まぁ本番サーバっていってもわたしのサーバなのでログ消えても大きな問題はないのですが・・・。
現場でこのコマンド使ってよいか判断できるレベルになりたいですね。


次の記事

任意ログのローテート