ログファイルって勝手に膨れる。
/varとか別パーティションにしてるとき、dfで占有量のパーセンテージの数字の大きさに気づいて「デカなったなぁ」ってなることもある。
ある程度のサイズになったりとか、日付単位でログ残しときたいとか考えることもある。
sambaとかapacheとかapt/dnfしたときに設定が勝手に入ってくれるけど、バックアップのログとか自分用のログがあるときは自分でコントロールする必要がある。
OSを切り替えるときに設定はいつも継ぎ足しているので、1回作ったらもうほとんど触らない。
そもそもlogrotateとは
説明してくれてる方がおられる。
作者さんありがとう。
最近だと、qiitaでも読みやすく書いてある。
ログの維持結果
自分用の処理で維持するログは/gvis/log
に出力してる。
ここが膨れないようコントロールするとこうなる。
$ cd /gvis/log
$ ll
合計 87M
drwxrwxr-x 2 nari nari 4.0K 2022-08-30 05:30:10 ./
drwxr-xr-x 8 nari nari 4.0K 2022-06-15 06:47:50 ../
-rw-r--r-- 1 nari nari 571 2022-08-30 04:23:10 000_serviceStart.log
-rw-rw-r-- 1 nari nari 15M 2022-08-29 08:42:55 001_sysBackup.log
-rw-rw-r-- 1 nari nari 4.7M 2022-08-26 08:44:12 001_sysBackup.log.1.gz
-rw-rw-r-- 1 nari nari 4.7M 2022-08-19 08:43:35 001_sysBackup.log.2.gz
-rw-rw-r-- 1 nari nari 4.7M 2022-08-12 08:39:21 001_sysBackup.log.3.gz
-rw-rw-r-- 1 nari nari 4.6M 2022-08-05 08:37:06 001_sysBackup.log.4.gz
-rw-rw-r-- 1 nari nari 4.6M 2022-07-29 08:37:26 001_sysBackup.log.5.gz
-rw-rw-r-- 1 nari nari 2.8M 2022-07-22 08:36:46 001_sysBackup.log.6.gz
-rw-rw-r-- 1 nari nari 4.6M 2022-07-15 08:36:34 001_sysBackup.log.7.gz
-rw-rw-r-- 1 nari nari 4.6M 2022-07-08 08:38:03 001_sysBackup.log.8.gz
-rw-rw-r-- 1 nari nari 2.8M 2022-07-01 08:38:26 001_sysBackup.log.9.gz
-rw-rw-r-- 1 nari nari 0 2022-08-30 04:23:07 002_GVISbackup.log
-rw-rw-r-- 1 nari nari 4.3M 2022-08-29 08:22:41 002_GVISbackup.log.1.gz
-rw-rw-r-- 1 nari nari 4.2M 2022-08-24 08:23:57 002_GVISbackup.log.2.gz
-rw-rw-r-- 1 nari nari 3.9M 2022-08-19 08:24:02 002_GVISbackup.log.3.gz
-rw-rw-r-- 1 nari nari 3.9M 2022-08-16 08:21:03 002_GVISbackup.log.4.gz
-rw-rw-r-- 1 nari nari 3.6M 2022-08-10 08:18:41 002_GVISbackup.log.5.gz
-rw-rw-r-- 1 nari nari 3.6M 2022-08-04 08:19:03 002_GVISbackup.log.6.gz
-rw-rw-r-- 1 nari nari 3.5M 2022-07-29 08:18:40 002_GVISbackup.log.7.gz
-rw-rw-r-- 1 nari nari 3.7M 2022-07-25 08:18:13 002_GVISbackup.log.8.gz
-rw-rw-r-- 1 nari nari 3.6M 2022-07-15 08:17:12 002_GVISbackup.log.9.gz
-rw-rw-r-- 1 nari nari 1.2K 2022-08-29 08:02:04 003_gcpLog.log
-rw-rw-r-- 1 nari nari 320 2022-08-26 08:02:10 003_gcpLog.log.1.gz
-rw-rw-r-- 1 nari nari 404 2022-08-19 08:02:08 003_gcpLog.log.2.gz
-rw-rw-r-- 1 nari nari 468 2022-08-12 08:02:25 003_gcpLog.log.3.gz
-rw-rw-r-- 1 nari nari 450 2022-08-05 08:02:07 003_gcpLog.log.4.gz
-rw-rw-r-- 1 nari nari 415 2022-07-29 08:02:05 003_gcpLog.log.5.gz
-rw-rw-r-- 1 nari nari 346 2022-07-22 08:02:04 003_gcpLog.log.6.gz
-rw-rw-r-- 1 nari nari 389 2022-07-15 08:02:02 003_gcpLog.log.7.gz
-rw-rw-r-- 1 nari nari 397 2022-07-08 08:02:02 003_gcpLog.log.8.gz
-rw-rw-r-- 1 nari nari 378 2022-07-01 08:01:58 003_gcpLog.log.9.gz
-rw-rw-r-- 1 nari nari 174 2022-08-29 09:45:56 004_gdr.log
-rw-rw-r-- 1 nari nari 209 2022-08-26 09:45:58 004_gdr.log.1.gz
-rw-rw-r-- 1 nari nari 213 2022-08-19 09:45:46 004_gdr.log.2.gz
-rw-rw-r-- 1 nari nari 246 2022-08-12 09:46:36 004_gdr.log.3.gz
-rw-rw-r-- 1 nari nari 215 2022-08-05 09:47:05 004_gdr.log.4.gz
-rw-rw-r-- 1 nari nari 245 2022-07-29 09:49:42 004_gdr.log.5.gz
-rw-rw-r-- 1 nari nari 174 2022-07-22 09:46:53 004_gdr.log.6.gz
-rw-rw-r-- 1 nari nari 216 2022-07-15 09:46:39 004_gdr.log.7.gz
-rw-rw-r-- 1 nari nari 220 2022-07-08 09:45:31 004_gdr.log.8.gz
-rw-rw-r-- 1 nari nari 192 2022-07-01 09:45:08 004_gdr.log.9.gz
-rw-r--r-- 1 nari nari 9.0K 2022-08-30 04:23:11 100_samba.log
-rw-r--r-- 1 nari nari 4.8K 2022-08-30 04:23:11 200_http.log
-rw-r--r-- 1 nari nari 31K 2022-08-30 04:23:14 300_docker.log
$
000_serviceStart.log
とかは、OS起動した後でデータディスクマウントしてからsamba/apache2/dockerの順番に起動してくときのログが出るようになってて、常に上書きしてるから膨れない。
最後のほうにある100/200/300で始まるログは1日で2行ずつしか出ないからローテートさせてない。
001/002/003/004で始まるログはいくらか膨れるから9個まで維持してる。
それぞれ、こんな内容。
ログ | 内容 |
---|---|
001_sysBackup.log | 自前バックアップでrsyncとかの結果 |
002_GVISbackup.log | 自前バックアップのtar/gzip結果 |
003_gcpLog.log | google cloudのホスト起動・停止履歴 |
004_gdr.log | 自前バックアップのgoogle driveへのrclone結果 |
基本設定
/etc/logrotate.confに基本的なことを書いておいて、/etc/logrotate.dのフォルダにログファイル単位の個別設定入れてる。
自分の場合はredhat/ubuntuで扱う。
以下、普段使いのubuntuにある基本設定。
su root adm
って箇所はubuntuにのみあってredhatのときには書いてない。
というか、OSインストールしたときにlogrotateも一緒に入って動き出すから、基本設定の内容はあんまり変えてない。
週に1回処理することにして、1年はだいたい52週間あるから、そこに1足して53世代とかしてもええけど、そんないっぱいいらん。
個人的にはcompress併用しながら9世代残してちょって感じ。
必要なシステムレポートはメールで受け取ることにしているから、そんなにたくさん残す必要はない。
# see "man logrotate" for details
# global options do not affect preceding include directives
# rotate log files weekly
weekly
# use the adm group by default, since this is the owning group
# of /var/log/syslog.
su root adm
# keep 4 weeks worth of backlogs
rotate 9
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
#dateext
# uncomment this if you want your log files compressed
compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# system-specific logs may also be configured here.
一般設定
次にログの種類ごとの設定。
アプリケーションをインストールすると、勝手に設定入るフォルダがある。
/etc/logrotateのフォルダにある内容をインクルードしてくれたはず。
apacheとかsambaとかある。
たぶん、よしなに設定入ってるやろし、1つずつは中見たことないなぁ。
その中で、★印の「gvislog」の箇所は自分で維持してる。
ファイルサーバとしてのバックアップにrsyncとか使ってるので、その実行ログを維持させてる。
$ cd /etc/logrotate.d
$ ll
合計 88K
drwxr-xr-x 2 root root 4.0K 2022-08-14 08:06:20 ./
drwxr-xr-x 140 root root 12K 2022-08-29 05:57:59 ../
-rw-r--r-- 1 root root 120 2021-09-12 03:35:03 alternatives
-rw-r--r-- 1 root root 433 2022-03-23 11:00:46 apache2
-rw-r--r-- 1 root root 126 2021-10-27 02:58:44 apport
-rw-r--r-- 1 root root 173 2022-04-08 19:22:23 apt
-rw-r--r-- 1 root root 91 2022-03-18 19:45:18 bootlog
-rw-r--r-- 1 root root 130 2019-10-14 21:10:31 btmp
-rw-r--r-- 1 root root 181 2022-02-22 12:50:01 cups-daemon
-rw-r--r-- 1 root root 112 2021-09-12 03:35:03 dpkg
-rw-r--r-- 1 root root 458 2020-07-13 07:03:43 gvislog ★
-rw-r--r-- 1 root root 94 2022-02-24 00:12:14 ppp
-rw-r--r-- 1 root root 374 2021-12-24 08:34:59 rsyslog
-rw-r--r-- 1 root root 875 2021-01-14 22:41:54 samba
-rw-r--r-- 1 root root 132 2020-09-11 02:11:29 sane-utils
-rw-r--r-- 1 root root 677 2021-09-15 07:03:36 speech-dispatcher
-rw-r--r-- 1 root root 270 2022-03-08 03:14:57 ubuntu-advantage-tools
-rw-r--r-- 1 root root 209 2021-09-19 14:46:12 ufw
-rw-r--r-- 1 root root 235 2021-02-19 21:11:42 unattended-upgrades
-rw-r--r-- 1 root root 145 2019-10-14 21:10:31 wtmp
自分用設定
★印の「gvislog」の中身。4種類のログをコントロール。
$ cat gvislog
/gvis/log/001_sysBackup.log
{
missingok
create 0664 nari nari
su nari nari
}
/gvis/log/002_GVISbackup.log
{
size 50000000
missingok
create 0664 nari nari
su nari nari
}
/gvis/log/003_gcpLog.log
{
missingok
create 0664 nari nari
su nari nari
}
/gvis/log/004_gdr.log
{
missingok
create 0664 nari nari
su nari nari
}
$
オプションを解説してくれてる方がおられる。
作者さんありがとう。
それぞれの設定は/etc/logrotate.confを踏まえた上で3つ指示してる。
missingok
は「ログファイルがなくてエラーになっても無視してね」create
の箇所は「rootじゃなくて一般ユーザのnariで664のパーミッションつけて維持してね」su
の箇所は「ユーザnari、グループnariでローテートしたログを維持してね」
OSのログはroot所有にするのが普通やけど、ミドルウェアとかアプリケーションはそのオーナーユーザにすることにしてる。
rootでないとログ見れへんとかしたら、自前アプリ扱いにくくなるしねぇ。
002_GVISbackup.log
はログが大量に出ることがあるので、サイズでの指示もつけてる。
size
の箇所は「50000000バイトより大きくなったら処理してね」
やってへんけど、バイト指定はMとかKつけてメガバイトとかキロバイト指定できるんやなぁ。
いつ動くのか
crontabには何も書いてないけど、ローテートはされるのはなぜか。
anacrontabによって起動されるからなんやって。
crontabでの起動に変えてる人もいた。
自分のはcrontabに他のこと書いてるから、やっぱりanacrontab使ってるまま。
$ cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
HOME=/root
LOGNAME=root
# These replace cron's entries
1 5 cron.daily run-parts --report /etc/cron.daily
7 10 cron.weekly run-parts --report /etc/cron.weekly
@monthly 15 cron.monthly run-parts --report /etc/cron.monthly
$
イマイチanacrontabわからんけど、意味を書いておられる方がおられた。
作者さんありがとう。
なるほど、さっきの「1 5 cron.daily」のあたりは「1日おきにコンピュータ起動後は5分待ってから「/etc/cron.daily」の中身を実行」らしい。
crontabとの違いは、具体的な日時指定はできずシステム停止しててもよしなに動かしてくれるってことで、自分の場合は必要なときにOS動かしてることのほうが多いからanacrontabのほうがいい。
昔はcrontabの定義にcron.dailyとかあったな。
ログローテートの最近のデフォルトはcrontabじゃなくなってanacrontabになったらしい。
業務で扱う常時起動サーバやったら、明確に日時指定するcrontabのほうがええかも。
テストの方法
最初作ったときは真面目にローテートのテストとかやったけど、centos5の頃に作ったからやり方とかログとか残ってない。
忘れても、同じ設定をOS切り替えの都度引き継いで、そのまま元気に動いてくれるので、1回テストしたらもうそのまま使い続けてる。
centosからubuntuに引っ越すときもそのまま。
強制ローテートとかやってる方おられるから、どうしてもっていうときは探すかな。