ログファイルって勝手に膨れる。 /varとか別パーティションにしてるとき、dfで占有量のパーセンテージの数字の大きさに気づいて「デカなったなぁ」ってなることもある。

ある程度のサイズになったりとか、日付単位でログ残しときたいとか考えることもある。

sambaとかapacheとかapt/dnfしたときに設定が勝手に入ってくれるけど、バックアップのログとか自分用のログがあるときは自分でコントロールする必要がある。 OSを切り替えるときに設定はいつも継ぎ足しているので、1回作ったらもうほとんど触らない。

そもそもlogrotateとは

説明してくれてる方がおられる。 作者さんありがとう。

最近だと、qiitaでも読みやすく書いてある。

ログの維持結果

自分用の処理で維持するログは/gvis/logに出力してる。 ここが膨れないようコントロールするとこうなる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
$ 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世代残してちょって感じ。 必要なシステムレポートはメールで受け取ることにしているから、そんなにたくさん残す必要はない。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 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とか使ってるので、その実行ログを維持させてる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ 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種類のログをコントロール。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ 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使ってるまま。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ 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に引っ越すときもそのまま。

強制ローテートとかやってる方おられるから、どうしてもっていうときは探すかな。