logrotateの設定

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

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

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

そもそもlogrotateとは

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

【logrotate】の仕組みと書き方, オプション一覧, 設定反映と再起動について
Logrotate の正体はコマンドと cron ログローテートとは、ログファイルのサイズが大きくならないように、1 日、または 1 週、または 1 か月といった期間でファイル名を変更し、設定次第では古いファイルを gzip で圧縮したり、

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

logrotate入門 - Qiita
この記事は株式会社ネクスト(Lifull) Advent Calendar 2016の3日目の記事です。遅くなってしまいましたが、なんとか当日に間に合わせましたいました。本記事はLinuxのlo…

ログの維持結果

自分用の処理で維持するログは/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.loggoogle 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
}
$

オプションを解説してくれてる方がおられる。
作者さんありがとう。

【日本語man】logrotateの全オプション解説
logrotateの日本語マニュアルがどこを探してもなかったので、作ってみました。 CentOS7 にインストールされているmanを日本語訳して、少し補足説明を加えました。 manは体系的にlogrotateの使い方を学びたい場合には向きま...

それぞれの設定は/etc/logrotate.confを踏まえた上で3つ指示してる。

  • missingokは「ログファイルがなくてエラーになっても無視してね」
  • createの箇所は「rootじゃなくて一般ユーザのnariで664のパーミッションつけて維持してね」
  • suの箇所は「ユーザnari、グループnariでローテートしたログを維持してね」

OSのログはroot所有にするのが普通やけど、ミドルウェアとかアプリケーションはそのオーナーユーザにすることにしてる。

rootでないとログ見れへんとかしたら、自前アプリ扱いにくくなるしねぇ。

002_GVISbackup.logはログが大量に出ることがあるので、サイズでの指示もつけてる。

  • sizeの箇所は「50000000バイトより大きくなったら処理してね」

やってへんけど、バイト指定はMとかKつけてメガバイトとかキロバイト指定できるんやなぁ。

いつ動くのか

crontabには何も書いてないけど、ローテートはされるのはなぜか。

anacrontabによって起動されるからなんやって。

【logrotateの実行タイミング】/etc/crontabに無い時の確認方法 - Qiita
#logrotate(daily, weekly,monthly)の実行タイミング##/etc/crontabに無い時は/etc/anacrontabを確認する# /etc/anacrontab…

crontabでの起動に変えてる人もいた。

logrotateの実行時間、実行間隔をコントロール
RHEL系(CentOS)--- logrotateを1日1回(23時59分)の実行ローテーションに変更 ログを管理するうえで重要なことは、いつのログを見たいか?とログの見やすさがポイントになると思います。現行のlogrotateの設定では

自分のは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わからんけど、意味を書いておられる方がおられた。
作者さんありがとう。

Linux、「/etc/anacrontab」とはなんぞや?|マコトのおもちゃ箱 ~ぼへぼへ自営業者の技術メモ~
「Linux、「/etc/anacrontab」とはなんぞや?」についてです。主にシステム開発中に調べたことをメモしています。

なるほど、さっきの「1 5 cron.daily」のあたりは「1日おきにコンピュータ起動後は5分待ってから「/etc/cron.daily」の中身を実行」らしい。

crontabとの違いは、具体的な日時指定はできずシステム停止しててもよしなに動かしてくれるってことで、自分の場合は必要なときにOS動かしてることのほうが多いからanacrontabのほうがいい。

昔はcrontabの定義にcron.dailyとかあったな。
ログローテートの最近のデフォルトはcrontabじゃなくなってanacrontabになったらしい。

業務で扱う常時起動サーバやったら、明確に日時指定するcrontabのほうがええかも。

テストの方法

最初作ったときは真面目にローテートのテストとかやったけど、centos5の頃に作ったからやり方とかログとか残ってない。

忘れても、同じ設定をOS切り替えの都度引き継いで、そのまま元気に動いてくれるので、1回テストしたらもうそのまま使い続けてる。

centosからubuntuに引っ越すときもそのまま。

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

タイトルとURLをコピーしました