AlmaLinux9 logrotateの設定

記事広告

■logrotateの設定について

AlamLinuxをMinimalでインストールしたからなのか、理由がよくわからないのですが、logrotate自体はインストールされているものの/var/log配下のcronやmessageなどのファイルが肥大化しつづけていました。これは追加でrsyslog-logrotateをインストールする必要がありました。

# dnf install rsyslog-logrotate

これにより/etc/logrotate.confが生成され、デフォルトは週ローテイトで4世代まで保存されます。

週単位でローテイトする場合、ログによっては肥大化が大きく、細かくわけたい場合もあります。そういった場合は毎日ローテイトするということももちろん可能です。以下は毎日30世代分保存する例です。

# vi /etc/logrotate.conf

<省略>
# rotate log files weekly
#weekly
daily

# keep 4 weeks worth of backlogs
#rotate 4
rotate 30
<省略>

事前テストをする際にはlogrotateに-dvオプションをつけてエラーがないか確認します。

# logrotate -dv /etc/logrotate.conf

<省略>

今すぐ実行するには-fオプションをつけます。

# logrotate -f /etc/logrotate.conf

<省略>

このlogrotateについて動作のトリガーになっているのは軽く調べたらほとんどのサイトでcronまたはanacronということが書かれているのですが、本サーバで調べてもcronからキックされている様子がなく、不思議に思って調査するとsystemd-timerから起動されていることがわかりました。

systemdとはCentOS7から標準導入されるようになったシステム運用の仕組みで、この元で動くタイマーがsystemd-timerです。できることはcronと同じなのですがsystemdを使って管理するところが大きく異なります。まず、logrotateのtimerサービスを確認してみます。

# systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES >
Thu 2024-04-11 14:30:00 JST 43s left Thu 2024-04-11 14:20:00 JST 9min ago sysstat-collect.timer sysstat-co>
Thu 2024-04-11 15:28:34 JST 59min left Thu 2024-04-11 13:46:37 JST 42min ago dnf-makecache.timer dnf-makeca>
Thu 2024-04-11 19:02:30 JST 4h 33min left Wed 2024-04-10 19:02:30 JST 19h ago systemd-tmpfiles-clean.timer systemd-tm>
Fri 2024-04-12 00:00:00 JST 9h left Thu 2024-04-11 00:00:00 JST 14h ago logrotate.timer logrotate.>
Fri 2024-04-12 00:00:00 JST 9h left Thu 2024-04-11 00:00:00 JST 14h ago mlocate-updatedb.timer mlocate-up>
Fri 2024-04-12 00:00:00 JST 9h left Thu 2024-04-11 00:00:00 JST 14h ago unbound-anchor.timer unbound-an>
Fri 2024-04-12 00:07:00 JST 9h left Thu 2024-04-11 00:07:19 JST 14h ago sysstat-summary.timer sysstat-su>

7 timers listed.

<以下、参考>
# systemctl disable lorotate.timer
# systemctl enable lorotate.timer
# systemctl stop lorotate.timer
# systemctl start lorotate.timer
# systemctl status logrotate.timer
● logrotate.timer - Daily rotation of log files
Loaded: loaded (/usr/lib/systemd/system/logrotate.timer; enabled; preset: enabled)
Active: active (waiting) since Thu 2024-02-29 18:36:24 JST; 1 month 11 days ago
Until: Thu 2024-02-29 18:36:24 JST; 1 month 11 days ago
Trigger: Fri 2024-04-12 00:00:00 JST; 9h left
Triggers: ● logrotate.service
Docs: man:logrotate(8)
man:logrotate.conf(5)

Notice: journal has been rotated since unit was started, output may be incomplete.

logrotateが深夜0時にタイマーされていることがおわかり頂けます。

logrotateに関して大きく関係するファイルは以下の2つです。

・/usr/lib/systemd/system/logrotate.service
・/usr/lib/systemd/system/logrotate.timer

timerの方では時間指定を行っております。dailyとなっているので日時で起動します。また、同時に他のプロセスも起動した場合に備えてAccuracySecの分、ランダムに時間を変更できるよう指定しています。

# more /usr/lib/systemd/system/logrotate.timer
[Unit]
Description=Daily rotation of log files
Documentation=man:logrotate(8) man:logrotate.conf(5)

[Timer]
OnCalendar=daily
AccuracySec=1h
Persistent=true

[Install]
WantedBy=timers.target

logrotate.serviceが実際の実行ファイルです。上で編集したlogrotate.confを指定して実行していることがわかります。

# more /usr/lib/systemd/system/logrotate.service
[Unit]
Description=Rotate log files
Documentation=man:logrotate(8) man:logrotate.conf(5)
RequiresMountsFor=/var/log
ConditionACPower=true

[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/logrotate.conf

# performance options
Nice=19
IOSchedulingClass=best-effort
IOSchedulingPriority=7

# hardening options
# details: https://www.freedesktop.org/software/systemd/man/systemd.exec.html
# no ProtectHome for userdir logs
# no PrivateNetwork for mail deliviery
# no NoNewPrivileges for third party rotate scripts
# no RestrictSUIDSGID for creating setgid directories
LockPersonality=true
MemoryDenyWriteExecute=true
PrivateDevices=true
PrivateTmp=true
ProtectClock=true
ProtectControlGroups=true
ProtectHostname=true
ProtectKernelLogs=true
ProtectKernelModules=true
ProtectKernelTunables=true
ProtectSystem=full
RestrictNamespaces=true
RestrictRealtime=true

基本的に中身を変えることはないと思うのですが、1時間おきとかに変更したい場合は以下のコマンドで設定を反映させる必要があります。

# systemctl daemon-reload

シェアする

  • このエントリーをはてなブックマークに追加

フォローする